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.EstimatedMeasurement;
22 import org.orekit.estimation.measurements.ObservableSatellite;
23 import org.orekit.estimation.measurements.ObservedMeasurement;
24 import org.orekit.propagation.SpacecraftState;
25 import org.orekit.propagation.sampling.MultiSatStepHandler;
26 import org.orekit.propagation.sampling.OrekitStepInterpolator;
27 import org.orekit.time.AbsoluteDate;
28
29
30
31
32
33
34 class MeasurementHandler implements MultiSatStepHandler {
35
36
37 private final AbstractBatchLSModel model;
38
39
40 private final List<PreCompensation> precompensated;
41
42
43 private int number;
44
45
46 private int index;
47
48
49
50
51
52 MeasurementHandler(final AbstractBatchLSModel model, final List<PreCompensation> precompensated) {
53 this.model = model;
54 this.precompensated = precompensated;
55 }
56
57
58 @Override
59 public void init(final List<SpacecraftState> initialStates, final AbsoluteDate target) {
60 number = 0;
61 index = 0;
62 }
63
64
65 @Override
66 public void handleStep(final List<OrekitStepInterpolator> interpolators) {
67
68 while (number < precompensated.size()) {
69
70
71 final PreCompensation next = precompensated.get(number);
72
73
74 final AbsoluteDate currentDate = interpolators.get(0).getCurrentState().getDate();
75 if (model.isForwardPropagation() && next.getDate().compareTo(currentDate) > 0 ||
76 !model.isForwardPropagation() && next.getDate().compareTo(currentDate) < 0) {
77 return;
78 }
79
80
81 final ObservedMeasurement<?> observed = next.getMeasurement();
82
83
84 final SpacecraftState[] states = new SpacecraftState[observed.getSatellites().size()];
85 for (int i = 0; i < states.length; ++i) {
86 final ObservableSatellite satellite = observed.getSatellites().get(i);
87 states[i] = interpolators.get(satellite.getPropagatorIndex()).getInterpolatedState(next.getDate());
88 }
89 final EstimatedMeasurement<?> estimated = observed.estimate(model.getIterationsCount(),
90 model.getEvaluationsCount(),
91 states);
92
93
94 model.fetchEvaluatedMeasurement(index, estimated);
95
96
97 ++number;
98 index += observed.getDimension();
99
100 }
101
102 }
103
104 }