1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.conversion;
18
19 import org.orekit.attitudes.AttitudeProvider;
20 import org.orekit.attitudes.FrameAlignedProvider;
21 import org.orekit.estimation.leastsquares.AbstractBatchLSModel;
22 import org.orekit.estimation.leastsquares.BatchLSModel;
23 import org.orekit.estimation.leastsquares.ModelObserver;
24 import org.orekit.estimation.measurements.ObservedMeasurement;
25 import org.orekit.orbits.Orbit;
26 import org.orekit.orbits.PositionAngleType;
27 import org.orekit.propagation.SpacecraftState;
28 import org.orekit.propagation.SpacecraftStateInterpolator;
29 import org.orekit.propagation.StateCovariance;
30 import org.orekit.propagation.analytical.Ephemeris;
31 import org.orekit.time.TimeInterpolator;
32 import org.orekit.time.TimeStampedPair;
33 import org.orekit.utils.ParameterDriversList;
34
35 import java.util.ArrayList;
36 import java.util.List;
37
38
39
40
41
42
43
44
45 public class EphemerisPropagatorBuilder extends AbstractPropagatorBuilder<Ephemeris> {
46
47
48 private static final double DEFAULT_SCALE = 10.0;
49
50
51 private final List<SpacecraftState> states;
52
53
54 private final List<StateCovariance> covariances;
55
56
57 private final TimeInterpolator<SpacecraftState> stateInterpolator;
58
59
60 private final TimeInterpolator<TimeStampedPair<Orbit, StateCovariance>> covarianceInterpolator;
61
62
63 private final AttitudeProvider provider;
64
65
66
67
68
69
70
71
72
73
74 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
75 final TimeInterpolator<SpacecraftState> stateInterpolator) {
76 this(states, stateInterpolator, states.isEmpty() ? null : new FrameAlignedProvider(states.get(0).getFrame()));
77 }
78
79
80
81
82
83
84
85
86 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
87 final TimeInterpolator<SpacecraftState> stateInterpolator,
88 final AttitudeProvider attitudeProvider) {
89 this(states, stateInterpolator, new ArrayList<>(), null, attitudeProvider);
90 }
91
92
93
94
95
96
97
98
99
100 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
101 final int interpolationPoints,
102 final double extrapolationThreshold,
103 final AttitudeProvider attitudeProvider) {
104 this(states,
105 new SpacecraftStateInterpolator(interpolationPoints, extrapolationThreshold,
106 states.get(0).getFrame(), states.get(0).getFrame()),
107 attitudeProvider);
108 }
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
125 final TimeInterpolator<SpacecraftState> stateInterpolator,
126 final List<StateCovariance> covariances,
127 final TimeInterpolator<TimeStampedPair<Orbit, StateCovariance>> covarianceInterpolator) {
128 this(states, stateInterpolator, covariances, covarianceInterpolator,
129 states.isEmpty() ? null : new FrameAlignedProvider(states.get(0).getFrame()));
130 }
131
132
133
134
135
136
137
138
139
140
141 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
142 final TimeInterpolator<SpacecraftState> stateInterpolator,
143 final List<StateCovariance> covariances,
144 final TimeInterpolator<TimeStampedPair<Orbit, StateCovariance>> covarianceInterpolator,
145 final AttitudeProvider attitudeProvider) {
146 super(states.get(0).getOrbit(), PositionAngleType.TRUE, DEFAULT_SCALE, false, attitudeProvider);
147 deselectDynamicParameters();
148
149
150 Ephemeris.checkInputConsistency(states, stateInterpolator, covariances, covarianceInterpolator);
151
152 this.states = states;
153 this.stateInterpolator = stateInterpolator;
154 this.covariances = covariances == null ? new ArrayList<>() : covariances;
155 this.covarianceInterpolator = covarianceInterpolator;
156 this.provider = attitudeProvider;
157 }
158
159
160
161
162 private EphemerisPropagatorBuilder(final EphemerisPropagatorBuilder builder) {
163 this(builder.states, builder.stateInterpolator, builder.covariances,
164 builder.covarianceInterpolator, builder.getAttitudeProvider());
165 }
166
167
168 @Override
169 public EphemerisPropagatorBuilder clone() {
170
171 final EphemerisPropagatorBuilder clonedBuilder = (EphemerisPropagatorBuilder) super.clone();
172
173
174 final EphemerisPropagatorBuilder builder = new EphemerisPropagatorBuilder(clonedBuilder);
175
176
177 builder.setMass(getMass());
178
179
180 return builder;
181 }
182
183
184 @Override
185 public Ephemeris buildPropagator(final double[] normalizedParameters) {
186 if (!covariances.isEmpty() && covarianceInterpolator != null) {
187 return new Ephemeris(states, stateInterpolator, covariances, covarianceInterpolator, provider);
188 }
189 return new Ephemeris(states, stateInterpolator, provider);
190
191 }
192
193
194 @Override
195 public AbstractBatchLSModel buildLeastSquaresModel(final PropagatorBuilder[] builders,
196 final List<ObservedMeasurement<?>> measurements,
197 final ParameterDriversList estimatedMeasurementsParameters,
198 final ModelObserver observer) {
199 return new BatchLSModel(builders, measurements, estimatedMeasurementsParameters, observer);
200 }
201
202 }