1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.forces.maneuvers.trigger;
18
19 import java.util.Arrays;
20 import java.util.Collections;
21 import java.util.List;
22
23 import org.hipparchus.CalculusFieldElement;
24 import org.hipparchus.Field;
25 import org.hipparchus.util.FastMath;
26 import org.orekit.propagation.events.FieldAbstractDetector;
27 import org.orekit.propagation.events.FieldParameterDrivenDateIntervalDetector;
28 import org.orekit.propagation.events.ParameterDrivenDateIntervalDetector;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.utils.ParameterDriver;
31
32
33
34
35
36 public class DateBasedManeuverTriggers extends IntervalEventTrigger<ParameterDrivenDateIntervalDetector> {
37
38
39 public static final String DEFAULT_NAME = "";
40
41
42
43
44 private static final double MIN_MAX_CHECK = 1.0e-3;
45
46
47 private final String name;
48
49
50
51
52
53
54 public DateBasedManeuverTriggers(final AbsoluteDate date, final double duration) {
55 this(DEFAULT_NAME, date, duration);
56 }
57
58
59
60
61
62
63
64
65 public DateBasedManeuverTriggers(final String name, final AbsoluteDate date, final double duration) {
66 super(createDetector(name, date, duration));
67 this.name = name;
68 }
69
70
71
72
73
74
75
76
77
78 private static ParameterDrivenDateIntervalDetector createDetector(final String prefix, final AbsoluteDate date, final double duration) {
79 if (duration >= 0) {
80 return new ParameterDrivenDateIntervalDetector(prefix, date, date.shiftedBy(duration)).
81 withMaxCheck(FastMath.max(MIN_MAX_CHECK, duration));
82 } else {
83 return new ParameterDrivenDateIntervalDetector(prefix, date.shiftedBy(duration), date).
84 withMaxCheck(FastMath.max(MIN_MAX_CHECK, -duration));
85 }
86 }
87
88
89 @Override
90 public String getName() {
91 return name;
92 }
93
94
95
96
97 public AbsoluteDate getStartDate() {
98 return getFiringIntervalDetector().getStartDriver().getDate();
99 }
100
101
102
103
104 public AbsoluteDate getEndDate() {
105 return getFiringIntervalDetector().getStopDriver().getDate();
106 }
107
108
109
110
111
112 public double getDuration() {
113 return getEndDate().durationFrom(getStartDate());
114 }
115
116
117 @Override
118 protected <D extends FieldAbstractDetector<D, S>, S extends CalculusFieldElement<S>> FieldAbstractDetector<D, S> convertIntervalDetector(final Field<S> field,
119 final ParameterDrivenDateIntervalDetector detector) {
120
121 final FieldParameterDrivenDateIntervalDetector<S> fd =
122 new FieldParameterDrivenDateIntervalDetector<S>(field, "",
123 detector.getStartDriver().getBaseDate(),
124 detector.getStopDriver().getBaseDate());
125 fd.getStartDriver().setName(detector.getStartDriver().getName());
126 fd.getStopDriver().setName(detector.getStopDriver().getName());
127 fd.getMedianDriver().setName(detector.getMedianDriver().getName());
128 fd.getDurationDriver().setName(detector.getDurationDriver().getName());
129
130 @SuppressWarnings("unchecked")
131 final FieldAbstractDetector<D, S> converted = (FieldAbstractDetector<D, S>) fd;
132 return converted;
133
134 }
135
136
137 @Override
138 public List<ParameterDriver> getParametersDrivers() {
139 return Collections.unmodifiableList(Arrays.asList(getFiringIntervalDetector().getStartDriver(),
140 getFiringIntervalDetector().getStopDriver(),
141 getFiringIntervalDetector().getMedianDriver(),
142 getFiringIntervalDetector().getDurationDriver()));
143 }
144 }