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.Propagator;
28 import org.orekit.propagation.SpacecraftState;
29 import org.orekit.propagation.SpacecraftStateInterpolator;
30 import org.orekit.propagation.StateCovariance;
31 import org.orekit.propagation.analytical.Ephemeris;
32 import org.orekit.time.TimeInterpolator;
33 import org.orekit.time.TimeStampedPair;
34 import org.orekit.utils.ParameterDriversList;
35
36 import java.util.ArrayList;
37 import java.util.List;
38
39
40
41
42
43
44
45
46 public class EphemerisPropagatorBuilder extends AbstractPropagatorBuilder {
47
48
49 private static final double DEFAULT_SCALE = 10.0;
50
51
52 private final List<SpacecraftState> states;
53
54
55 private final List<StateCovariance> covariances;
56
57
58 private final TimeInterpolator<SpacecraftState> stateInterpolator;
59
60
61 private final TimeInterpolator<TimeStampedPair<Orbit, StateCovariance>> covarianceInterpolator;
62
63
64 private final AttitudeProvider provider;
65
66
67
68
69
70
71
72
73
74
75 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
76 final TimeInterpolator<SpacecraftState> stateInterpolator) {
77 this(states, stateInterpolator, states.isEmpty() ? null : new FrameAlignedProvider(states.get(0).getFrame()));
78 }
79
80
81
82
83
84
85
86
87 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
88 final TimeInterpolator<SpacecraftState> stateInterpolator,
89 final AttitudeProvider attitudeProvider) {
90 this(states, stateInterpolator, new ArrayList<>(), null, attitudeProvider);
91 }
92
93
94
95
96
97
98
99
100
101 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
102 final int interpolationPoints,
103 final double extrapolationThreshold,
104 final AttitudeProvider attitudeProvider) {
105 this(states,
106 new SpacecraftStateInterpolator(interpolationPoints, extrapolationThreshold,
107 states.get(0).getFrame(), states.get(0).getFrame()),
108 attitudeProvider);
109 }
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
126 final TimeInterpolator<SpacecraftState> stateInterpolator,
127 final List<StateCovariance> covariances,
128 final TimeInterpolator<TimeStampedPair<Orbit, StateCovariance>> covarianceInterpolator) {
129 this(states, stateInterpolator, covariances, covarianceInterpolator,
130 states.isEmpty() ? null : new FrameAlignedProvider(states.get(0).getFrame()));
131 }
132
133
134
135
136
137
138
139
140
141
142 public EphemerisPropagatorBuilder(final List<SpacecraftState> states,
143 final TimeInterpolator<SpacecraftState> stateInterpolator,
144 final List<StateCovariance> covariances,
145 final TimeInterpolator<TimeStampedPair<Orbit, StateCovariance>> covarianceInterpolator,
146 final AttitudeProvider attitudeProvider) {
147 super(states.get(0).getOrbit(), PositionAngleType.TRUE, DEFAULT_SCALE, false, attitudeProvider);
148 deselectDynamicParameters();
149
150
151 Ephemeris.checkInputConsistency(states, stateInterpolator, covariances, covarianceInterpolator);
152
153 this.states = states;
154 this.stateInterpolator = stateInterpolator;
155 this.covariances = covariances == null ? new ArrayList<>() : covariances;
156 this.covarianceInterpolator = covarianceInterpolator;
157 this.provider = attitudeProvider;
158 }
159
160
161 @Override
162 public EphemerisPropagatorBuilder copy() {
163 return new EphemerisPropagatorBuilder(states, stateInterpolator, covariances, covarianceInterpolator, provider);
164 }
165
166
167 @Override
168 public Propagator buildPropagator(final double[] normalizedParameters) {
169 if (!covariances.isEmpty() && covarianceInterpolator != null) {
170 return new Ephemeris(states, stateInterpolator, covariances, covarianceInterpolator, provider);
171 }
172 return new Ephemeris(states, stateInterpolator, provider);
173
174 }
175
176
177 @Override
178 public AbstractBatchLSModel buildLeastSquaresModel(final PropagatorBuilder[] builders,
179 final List<ObservedMeasurement<?>> measurements,
180 final ParameterDriversList estimatedMeasurementsParameters,
181 final ModelObserver observer) {
182 return new BatchLSModel(builders, measurements, estimatedMeasurementsParameters, observer);
183 }
184
185 }