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.Range;
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 RangeBuilder extends AbstractMeasurementBuilder<Range> {
34
35
36 private final GroundStation station;
37
38
39 private final boolean twoway;
40
41
42
43
44
45
46
47
48
49 public RangeBuilder(final CorrelatedRandomVectorGenerator noiseSource,
50 final GroundStation station, final boolean twoWay,
51 final double sigma, final double baseWeight,
52 final ObservableSatellite satellite) {
53 super(noiseSource, sigma, baseWeight, satellite);
54 this.station = station;
55 this.twoway = twoWay;
56 }
57
58
59 @Override
60 public Range 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 Range dummy = new Range(station, twoway, relevant[0].getDate(), Double.NaN, sigma, baseWeight, satellite);
69 for (final EstimationModifier<Range> modifier : getModifiers()) {
70 dummy.addModifier(modifier);
71 }
72
73
74 for (final ParameterDriver driver : dummy.getParametersDrivers()) {
75 if (driver.getReferenceDate() == null) {
76 final AbsoluteDate start = getStart();
77 final AbsoluteDate end = getEnd();
78 driver.setReferenceDate(start.durationFrom(end) <= 0 ? start : end);
79 }
80 }
81
82
83 double range = dummy.estimate(0, 0, relevant).getEstimatedValue()[0];
84
85
86 final double[] noise = getNoise();
87 if (noise != null) {
88 range += noise[0];
89 }
90
91
92 final Range measurement = new Range(station, twoway, relevant[0].getDate(), range, sigma, baseWeight, satellite);
93 for (final EstimationModifier<Range> modifier : getModifiers()) {
94 measurement.addModifier(modifier);
95 }
96 return measurement;
97
98 }
99
100 }