1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.generation;
18
19 import java.util.Map;
20
21 import org.hipparchus.random.CorrelatedRandomVectorGenerator;
22 import org.orekit.estimation.measurements.EstimationModifier;
23 import org.orekit.estimation.measurements.GroundStation;
24 import org.orekit.estimation.measurements.ObservableSatellite;
25 import org.orekit.estimation.measurements.TDOA;
26 import org.orekit.propagation.SpacecraftState;
27 import org.orekit.propagation.sampling.OrekitStepInterpolator;
28 import org.orekit.time.AbsoluteDate;
29 import org.orekit.utils.ParameterDriver;
30
31
32
33
34
35
36 public class TDOABuilder extends AbstractMeasurementBuilder<TDOA> {
37
38
39 private final GroundStation primeStation;
40
41
42 private final GroundStation secondStation;
43
44
45
46
47 private final ObservableSatellite satellite;
48
49
50
51
52
53
54
55
56
57 public TDOABuilder(final CorrelatedRandomVectorGenerator noiseSource,
58 final GroundStation primeStation,
59 final GroundStation secondStation,
60 final double sigma, final double baseWeight,
61 final ObservableSatellite satellite) {
62 super(noiseSource, sigma, baseWeight, satellite);
63 this.primeStation = primeStation;
64 this.secondStation = secondStation;
65 this.satellite = satellite;
66 }
67
68
69 @Override
70 public TDOA build(final AbsoluteDate date, final Map<ObservableSatellite, OrekitStepInterpolator> interpolators) {
71
72 final double sigma = getTheoreticalStandardDeviation()[0];
73 final double baseWeight = getBaseWeight()[0];
74 final SpacecraftState[] relevant = new SpacecraftState[] { interpolators.get(satellite).getInterpolatedState(date) };
75
76
77 final TDOA dummy = new TDOA(primeStation, secondStation, relevant[0].getDate(),
78 Double.NaN, sigma, baseWeight, satellite);
79 for (final EstimationModifier<TDOA> modifier : getModifiers()) {
80 dummy.addModifier(modifier);
81 }
82
83
84 for (final ParameterDriver driver : dummy.getParametersDrivers()) {
85 if (driver.getReferenceDate() == null) {
86 final AbsoluteDate start = getStart();
87 final AbsoluteDate end = getEnd();
88 driver.setReferenceDate(start.durationFrom(end) <= 0 ? start : end);
89 }
90 }
91
92
93 double tdoa = dummy.estimateWithoutDerivatives(relevant).getEstimatedValue()[0];
94
95
96 final double[] noise = getNoise();
97 if (noise != null) {
98 tdoa += noise[0];
99 }
100
101
102 final TDOA measurement = new TDOA(primeStation, secondStation, relevant[0].getDate(),
103 tdoa, sigma, baseWeight, satellite);
104 for (final EstimationModifier<TDOA> modifier : getModifiers()) {
105 measurement.addModifier(modifier);
106 }
107 return measurement;
108
109 }
110
111 }