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 org.hipparchus.random.CorrelatedRandomVectorGenerator;
20 import org.orekit.estimation.measurements.EstimationModifier;
21 import org.orekit.estimation.measurements.GroundStation;
22 import org.orekit.estimation.measurements.ObservableSatellite;
23 import org.orekit.estimation.measurements.TurnAroundRange;
24 import org.orekit.propagation.SpacecraftState;
25 import org.orekit.time.AbsoluteDate;
26 import org.orekit.utils.ParameterDriver;
27
28
29
30
31
32
33 public class TurnAroundRangeBuilder extends AbstractMeasurementBuilder<TurnAroundRange> {
34
35
36 private final GroundStation primaryStation;
37
38
39 private final GroundStation secondaryStation;
40
41
42
43
44
45
46
47
48
49 public TurnAroundRangeBuilder(final CorrelatedRandomVectorGenerator noiseSource,
50 final GroundStation primaryStation, final GroundStation secondaryStation,
51 final double sigma, final double baseWeight,
52 final ObservableSatellite satellite) {
53 super(noiseSource, sigma, baseWeight, satellite);
54 this.primaryStation = primaryStation;
55 this.secondaryStation = secondaryStation;
56 }
57
58
59 @Override
60 public TurnAroundRange build(final SpacecraftState[] states) {
61
62 final ObservableSatellite satellite = getSatellites()[0];
63 final double sigma = getTheoreticalStandardDeviation()[0];
64 final double baseWeight = getBaseWeight()[0];
65 final SpacecraftState[] relevant = new SpacecraftState[] { states[satellite.getPropagatorIndex()] };
66
67
68 final TurnAroundRange dummy = new TurnAroundRange(primaryStation, secondaryStation, relevant[0].getDate(),
69 Double.NaN, sigma, baseWeight, satellite);
70 for (final EstimationModifier<TurnAroundRange> modifier : getModifiers()) {
71 dummy.addModifier(modifier);
72 }
73
74
75 for (final ParameterDriver driver : dummy.getParametersDrivers()) {
76 if (driver.getReferenceDate() == null) {
77 final AbsoluteDate start = getStart();
78 final AbsoluteDate end = getEnd();
79 driver.setReferenceDate(start.durationFrom(end) <= 0 ? start : end);
80 }
81 }
82
83
84 double range = dummy.estimate(0, 0, relevant).getEstimatedValue()[0];
85
86
87 final double[] noise = getNoise();
88 if (noise != null) {
89 range += noise[0];
90 }
91
92
93 final TurnAroundRange measurement = new TurnAroundRange(primaryStation, secondaryStation, relevant[0].getDate(),
94 range, sigma, baseWeight, satellite);
95 for (final EstimationModifier<TurnAroundRange> modifier : getModifiers()) {
96 measurement.addModifier(modifier);
97 }
98 return measurement;
99
100 }
101
102 }