1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.propagation.events;
19
20 import org.hipparchus.CalculusFieldElement;
21 import org.hipparchus.Field;
22 import org.orekit.propagation.FieldSpacecraftState;
23 import org.orekit.propagation.events.handlers.FieldContinueOnEvent;
24 import org.orekit.propagation.events.handlers.FieldEventHandler;
25 import org.orekit.propagation.events.intervals.DateDetectionAdaptableIntervalFactory;
26 import org.orekit.propagation.events.intervals.FieldAdaptableInterval;
27 import org.orekit.time.FieldAbsoluteDate;
28 import org.orekit.time.TimeInterval;
29
30
31
32
33
34
35
36
37
38
39 public class FieldTimeIntervalDetector<T extends CalculusFieldElement<T>>
40 extends FieldAbstractDetector<FieldTimeIntervalDetector<T>, T> {
41
42
43 private final TimeInterval timeInterval;
44
45
46
47
48
49
50 public FieldTimeIntervalDetector(final Field<T> field, final TimeInterval timeInterval) {
51 this(getDefaultDetectionSettings(field, timeInterval), new FieldContinueOnEvent<>(), timeInterval);
52 }
53
54
55
56
57
58
59
60 public FieldTimeIntervalDetector(final FieldEventDetectionSettings<T> detectionSettings,
61 final FieldEventHandler<T> handler,
62 final TimeInterval timeInterval) {
63 super(detectionSettings, handler);
64 this.timeInterval = timeInterval;
65 }
66
67
68
69
70
71
72
73
74 private static <W extends CalculusFieldElement<W>> FieldEventDetectionSettings<W> getDefaultDetectionSettings(final Field<W> field,
75 final TimeInterval timeInterval) {
76 final FieldAbsoluteDate<W> fieldStartDate = new FieldAbsoluteDate<>(field, timeInterval.getStartDate());
77 final FieldAbsoluteDate<W> fieldEndDate = new FieldAbsoluteDate<>(field, timeInterval.getEndDate());
78 final FieldAdaptableInterval<W> adaptableInterval = DateDetectionAdaptableIntervalFactory
79 .getDatesDetectionFieldInterval(fieldStartDate, fieldEndDate);
80 final W fieldThreshold = field.getZero().newInstance(DateDetector.DEFAULT_THRESHOLD);
81 return new FieldEventDetectionSettings<>(adaptableInterval, fieldThreshold, DEFAULT_MAX_ITER);
82 }
83
84
85
86
87
88 public TimeInterval getTimeInterval() {
89 return timeInterval;
90 }
91
92 @Override
93 protected FieldTimeIntervalDetector<T> create(final FieldEventDetectionSettings<T> detectionSettings,
94 final FieldEventHandler<T> newHandler) {
95 return new FieldTimeIntervalDetector<>(detectionSettings, newHandler, timeInterval);
96 }
97
98
99 @Override
100 public boolean dependsOnTimeOnly() {
101 return true;
102 }
103
104 @Override
105 public T g(final FieldSpacecraftState<T> s) {
106 final FieldAbsoluteDate<T> date = s.getDate();
107 return (date.durationFrom(timeInterval.getStartDate())).multiply(date.durationFrom(timeInterval.getEndDate())).negate();
108 }
109 }