1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.leastsquares;
18
19 import java.util.List;
20
21 import org.orekit.estimation.measurements.ObservedMeasurement;
22 import org.orekit.orbits.Orbit;
23 import org.orekit.propagation.MatricesHarvester;
24 import org.orekit.propagation.PropagationType;
25 import org.orekit.propagation.Propagator;
26 import org.orekit.propagation.SpacecraftState;
27 import org.orekit.propagation.conversion.OrbitDeterminationPropagatorBuilder;
28 import org.orekit.propagation.semianalytical.dsst.DSSTHarvester;
29 import org.orekit.propagation.semianalytical.dsst.DSSTJacobiansMapper;
30 import org.orekit.propagation.semianalytical.dsst.DSSTPropagator;
31 import org.orekit.utils.ParameterDriversList;
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class DSSTBatchLSModel extends AbstractBatchLSModel {
46
47
48 private static final String STM_NAME = DSSTBatchLSModel.class.getName() + "-derivatives";
49
50
51 private PropagationType propagationType;
52
53
54 private PropagationType stateType;
55
56
57
58
59
60
61
62
63
64 public DSSTBatchLSModel(final OrbitDeterminationPropagatorBuilder[] propagatorBuilders,
65 final List<ObservedMeasurement<?>> measurements,
66 final ParameterDriversList estimatedMeasurementsParameters,
67 final ModelObserver observer,
68 final PropagationType propagationType,
69 final PropagationType stateType) {
70
71 super(propagatorBuilders, measurements, estimatedMeasurementsParameters, observer);
72 this.propagationType = propagationType;
73 this.stateType = stateType;
74 }
75
76
77 @Override
78 protected MatricesHarvester configureHarvester(final Propagator propagator) {
79 return propagator.setupMatricesComputation(STM_NAME, null, null);
80 }
81
82
83 @Override
84 @Deprecated
85 protected DSSTJacobiansMapper configureDerivatives(final Propagator propagator) {
86
87 final org.orekit.propagation.semianalytical.dsst.DSSTPartialDerivativesEquations partials =
88 new org.orekit.propagation.semianalytical.dsst.DSSTPartialDerivativesEquations(STM_NAME, (DSSTPropagator) propagator, propagationType);
89
90
91 final SpacecraftState rawState = propagator.getInitialState();
92 final SpacecraftState stateWithDerivatives = partials.setInitialJacobians(rawState);
93 ((DSSTPropagator) propagator).setInitialState(stateWithDerivatives, stateType);
94
95 return partials.getMapper();
96
97 }
98
99
100 @Override
101 protected Orbit configureOrbits(final MatricesHarvester harvester, final Propagator propagator) {
102
103 final DSSTPropagator dsstPropagator = (DSSTPropagator) propagator;
104 final DSSTHarvester dsstHarvester = (DSSTHarvester) harvester;
105
106 final SpacecraftState initial = dsstPropagator.initialIsOsculating() ?
107 DSSTPropagator.computeMeanState(dsstPropagator.getInitialState(), dsstPropagator.getAttitudeProvider(), dsstPropagator.getAllForceModels()) :
108 dsstPropagator.getInitialState();
109 dsstHarvester.initializeFieldShortPeriodTerms(initial);
110
111 if (propagationType == PropagationType.OSCULATING) {
112 dsstHarvester.updateFieldShortPeriodTerms(initial);
113 dsstHarvester.setReferenceState(initial);
114 }
115
116 harvester.setReferenceState(initial);
117 return initial.getOrbit();
118 }
119
120 }