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