1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.sequential;
18
19 import java.util.List;
20
21 import org.hipparchus.filtering.kalman.KalmanFilter;
22 import org.hipparchus.linear.MatrixDecomposer;
23 import org.hipparchus.linear.RealMatrix;
24 import org.hipparchus.linear.RealVector;
25 import org.orekit.propagation.conversion.PropagatorBuilder;
26 import org.orekit.time.AbsoluteDate;
27 import org.orekit.utils.ParameterDriver;
28 import org.orekit.utils.ParameterDriversList;
29 import org.orekit.utils.ParameterDriversList.DelegatingDriver;
30
31
32
33
34
35
36
37
38 public abstract class AbstractKalmanEstimator {
39
40
41 private final List<? extends PropagatorBuilder> builders;
42
43
44 private final AbsoluteDate referenceDate;
45
46
47 private KalmanObserver observer;
48
49
50 private final MatrixDecomposer decomposer;
51
52
53
54
55
56
57 protected AbstractKalmanEstimator(final MatrixDecomposer decomposer,
58 final List<? extends PropagatorBuilder> builders) {
59 this.builders = builders;
60 this.referenceDate = builders.get(0).getInitialOrbitDate();
61 this.decomposer = decomposer;
62 this.observer = null;
63 }
64
65
66
67
68
69
70
71
72
73
74
75
76
77 public ParameterDriversList getOrbitalParametersDrivers(final boolean estimatedOnly) {
78
79 final ParameterDriversList estimated = new ParameterDriversList();
80 for (int i = 0; i < builders.size(); ++i) {
81 final String suffix = builders.size() > 1 ? "[" + i + "]" : null;
82 for (final ParameterDriver driver : builders.get(i).getOrbitalParametersDrivers().getDrivers()) {
83 if (driver.isSelected() || !estimatedOnly) {
84 if (suffix != null && !driver.getName().endsWith(suffix)) {
85
86
87 driver.setName(driver.getName() + suffix);
88 }
89 estimated.add(driver);
90 }
91 }
92 }
93 return estimated;
94 }
95
96
97
98
99
100 public ParameterDriversList getPropagationParametersDrivers(final boolean estimatedOnly) {
101
102 final ParameterDriversList estimated = new ParameterDriversList();
103 for (PropagatorBuilder builder : builders) {
104 for (final DelegatingDriver delegating : builder.getPropagationParametersDrivers().getDrivers()) {
105 if (delegating.isSelected() || !estimatedOnly) {
106 for (final ParameterDriver driver : delegating.getRawDrivers()) {
107 estimated.add(driver);
108 }
109 }
110 }
111 }
112 return estimated;
113 }
114
115
116
117
118
119 public int getCurrentMeasurementNumber() {
120 return getKalmanEstimation().getCurrentMeasurementNumber();
121 }
122
123
124
125
126 public AbsoluteDate getCurrentDate() {
127 return getKalmanEstimation().getCurrentDate();
128 }
129
130
131
132
133 public void setObserver(final KalmanObserver observer) {
134 this.observer = observer;
135 observer.init(getKalmanEstimation());
136 }
137
138
139
140
141 public KalmanObserver getObserver() {
142 return observer;
143 }
144
145
146
147
148
149
150
151
152
153 public RealVector getPhysicalEstimatedState() {
154 return getKalmanEstimation().getPhysicalEstimatedState();
155 }
156
157
158
159
160 public RealMatrix getPhysicalEstimatedCovarianceMatrix() {
161 return getKalmanEstimation().getPhysicalEstimatedCovarianceMatrix();
162 }
163
164
165
166
167 public ParameterDriversList getEstimatedMeasurementsParameters() {
168 return getKalmanEstimation().getEstimatedMeasurementsParameters();
169 }
170
171 protected List<? extends PropagatorBuilder> getBuilders() {
172 return builders;
173 }
174
175
176
177
178 protected abstract KalmanEstimation getKalmanEstimation();
179
180
181
182
183 protected MatrixDecomposer getMatrixDecomposer() {
184 return decomposer;
185 }
186
187
188
189
190 protected AbsoluteDate getReferenceDate() {
191 return referenceDate;
192 }
193
194
195
196
197 protected abstract KalmanFilter<MeasurementDecorator> getKalmanFilter();
198
199
200
201
202 protected abstract double[] getScale();
203
204 }