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