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 @Override
161 public Ephemeris buildPropagator(final double[] normalizedParameters) {
162 if (!covariances.isEmpty() && covarianceInterpolator != null) {
163 return new Ephemeris(states, stateInterpolator, covariances, covarianceInterpolator, provider);
164 }
165 return new Ephemeris(states, stateInterpolator, provider);
166
167 }
168
169
170 @Override
171 public AbstractBatchLSModel buildLeastSquaresModel(final PropagatorBuilder[] builders,
172 final List<ObservedMeasurement<?>> measurements,
173 final ParameterDriversList estimatedMeasurementsParameters,
174 final ModelObserver observer) {
175 return new BatchLSModel(builders, measurements, estimatedMeasurementsParameters, observer);
176 }
177
178 }