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