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