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