1 /* Copyright 2002-2021 CS GROUP
2 * Licensed to CS GROUP (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.orekit.files.ccsds.ndm.odm.ocm;
19
20 import java.util.Collections;
21 import java.util.List;
22
23 import org.orekit.files.ccsds.definitions.OdMethodFacade;
24 import org.orekit.files.ccsds.section.CommentsContainer;
25 import org.orekit.time.AbsoluteDate;
26
27 /** Orbit determination data.
28 * @author Luc Maisonobe
29 * @since 11.0
30 */
31 public class OrbitDetermination extends CommentsContainer {
32
33 /** Identification number. */
34 private String id;
35
36 /** Identification of previous orbit determination. */
37 private String prevId;
38
39 /** Orbit determination method. */
40 private OdMethodFacade method;
41
42 /** Time tag for orbit determination solved-for state. */
43 private AbsoluteDate epoch;
44
45 /** Time elapsed between first accepted observation on epoch. */
46 private double timeSinceFirstObservation;
47
48 /** Time elapsed between last accepted observation on epoch. */
49 private double timeSinceLastObservation;
50
51 /** Sime span of observation recommended for the OD of the object. */
52 private double recommendedOdSpan;
53
54 /** Actual time span used for the OD of the object. */
55 private double actualOdSpan;
56
57 /** Number of observations available within the actual OD span. */
58 private int obsAvailable;
59
60 /** Number of observations accepted within the actual OD span. */
61 private int obsUsed;
62
63 /** Number of sensors tracks available for the OD within the actual OD span. */
64 private int tracksAvailable;
65
66 /** Number of sensors tracks accepted for the OD within the actual OD span. */
67 private int tracksUsed;
68
69 /** Maximum time between observations in the OD of the object. */
70 private double maximumObsGap;
71
72 /** Positional error ellipsoid 1σ major eigenvalue at the epoch of OD. */
73 private double epochEigenMaj;
74
75 /** Positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD. */
76 private double epochEigenMed;
77
78 /** Positional error ellipsoid 1σ minor eigenvalue at the epoch of OD. */
79 private double epochEigenMin;
80
81 /** Maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM. */
82 private double maxPredictedEigenMaj;
83
84 /** Minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM. */
85 private double minPredictedEigenMin;
86
87 /** Confidence metric. */
88 private double confidence;
89
90 /** Generalize Dilution Of Precision. */
91 private double gdop;
92
93 /** Number of solved-for states. */
94 private int solveN;
95
96 /** Description of state elements solved-for. */
97 private List<String> solveStates;
98
99 /** Number of consider parameters. */
100 private int considerN;
101
102 /** Description of consider parameters. */
103 private List<String> considerParameters;
104
105 /** Number of sensors used. */
106 private int sensorsN;
107
108 /** Description of sensors used. */
109 private List<String> sensors;
110
111 /** Weighted RMS residual ratio. */
112 private double weightedRms;
113
114 /** Observation data types used. */
115 private List<String> dataTypes;
116
117 /** Simple constructor.
118 */
119 OrbitDetermination() {
120 solveStates = Collections.emptyList();
121 considerParameters = Collections.emptyList();
122 sensors = Collections.emptyList();
123 dataTypes = Collections.emptyList();
124 }
125
126 /** {@inheritDoc} */
127 @Override
128 public void validate(final double version) {
129 super.validate(version);
130 checkNotNull(id, OrbitDeterminationKey.OD_ID);
131 checkNotNull(method, OrbitDeterminationKey.OD_METHOD);
132 checkNotNull(epoch, OrbitDeterminationKey.OD_EPOCH);
133 }
134
135 /** Get identification number.
136 * @return identification number
137 */
138 public String getId() {
139 return id;
140 }
141
142 /** Set identification number.
143 * @param id identification number
144 */
145 public void setId(final String id) {
146 this.id = id;
147 }
148
149 /** Get identification of previous orbit determination.
150 * @return identification of previous orbit determination
151 */
152 public String getPrevId() {
153 return prevId;
154 }
155
156 /** Set identification of previous orbit determination.
157 * @param prevId identification of previous orbit determination
158 */
159 public void setPrevId(final String prevId) {
160 this.prevId = prevId;
161 }
162
163 /** Get orbit determination method.
164 * @return orbit determination method
165 */
166 public OdMethodFacade getMethod() {
167 return method;
168 }
169
170 /** Set orbit determination method.
171 * @param method orbit determination method
172 */
173 public void setMethod(final OdMethodFacade method) {
174 this.method = method;
175 }
176
177 /** Get time tag for orbit determination solved-for state.
178 * @return time tag for orbit determination solved-for state
179 */
180 public AbsoluteDate getEpoch() {
181 return epoch;
182 }
183
184 /** Set time tag for orbit determination solved-for state.
185 * @param epoch time tag for orbit determination solved-for state
186 */
187 public void setEpoch(final AbsoluteDate epoch) {
188 this.epoch = epoch;
189 }
190
191 /** Get time elapsed between first accepted observation on epoch.
192 * @return time elapsed between first accepted observation on epoch
193 */
194 public double getTimeSinceFirstObservation() {
195 return timeSinceFirstObservation;
196 }
197
198 /** Set time elapsed between first accepted observation on epoch.
199 * @param timeSinceFirstObservation time elapsed between first accepted observation on epoch
200 */
201 public void setTimeSinceFirstObservation(final double timeSinceFirstObservation) {
202 this.timeSinceFirstObservation = timeSinceFirstObservation;
203 }
204
205 /** Get time elapsed between last accepted observation on epoch.
206 * @return time elapsed between last accepted observation on epoch
207 */
208 public double getTimeSinceLastObservation() {
209 return timeSinceLastObservation;
210 }
211
212 /** Set time elapsed between last accepted observation on epoch.
213 * @param timeSinceLastObservation time elapsed between last accepted observation on epoch
214 */
215 public void setTimeSinceLastObservation(final double timeSinceLastObservation) {
216 this.timeSinceLastObservation = timeSinceLastObservation;
217 }
218
219 /** Get sime span of observation recommended for the OD of the object.
220 * @return sime span of observation recommended for the OD of the object
221 */
222 public double getRecommendedOdSpan() {
223 return recommendedOdSpan;
224 }
225
226 /** Set sime span of observation recommended for the OD of the object.
227 * @param recommendedOdSpan sime span of observation recommended for the OD of the object
228 */
229 public void setRecommendedOdSpan(final double recommendedOdSpan) {
230 this.recommendedOdSpan = recommendedOdSpan;
231 }
232
233 /** Get actual time span used for the OD of the object.
234 * @return actual time span used for the OD of the object
235 */
236 public double getActualOdSpan() {
237 return actualOdSpan;
238 }
239
240 /** Set actual time span used for the OD of the object.
241 * @param actualOdSpan actual time span used for the OD of the object
242 */
243 public void setActualOdSpan(final double actualOdSpan) {
244 this.actualOdSpan = actualOdSpan;
245 }
246
247 /** Get number of observations available within the actual OD span.
248 * @return number of observations available within the actual OD span
249 */
250 public int getObsAvailable() {
251 return obsAvailable;
252 }
253
254 /** Set number of observations available within the actual OD span.
255 * @param obsAvailable number of observations available within the actual OD span
256 */
257 public void setObsAvailable(final int obsAvailable) {
258 this.obsAvailable = obsAvailable;
259 }
260
261 /** Get number of observations accepted within the actual OD span.
262 * @return number of observations accepted within the actual OD span
263 */
264 public int getObsUsed() {
265 return obsUsed;
266 }
267
268 /** Set number of observations accepted within the actual OD span.
269 * @param obsUsed number of observations accepted within the actual OD span
270 */
271 public void setObsUsed(final int obsUsed) {
272 this.obsUsed = obsUsed;
273 }
274
275 /** Get number of sensors tracks available for the OD within the actual OD span.
276 * @return number of sensors tracks available for the OD within the actual OD span
277 */
278 public int getTracksAvailable() {
279 return tracksAvailable;
280 }
281
282 /** Set number of sensors tracks available for the OD within the actual OD span.
283 * @param tracksAvailable number of sensors tracks available for the OD within the actual OD span
284 */
285 public void setTracksAvailable(final int tracksAvailable) {
286 this.tracksAvailable = tracksAvailable;
287 }
288
289 /** Get number of sensors tracks accepted for the OD within the actual OD span.
290 * @return number of sensors tracks accepted for the OD within the actual OD span
291 */
292 public int getTracksUsed() {
293 return tracksUsed;
294 }
295
296 /** Set number of sensors tracks accepted for the OD within the actual OD span.
297 * @param tracksUsed number of sensors tracks accepted for the OD within the actual OD span
298 */
299 public void setTracksUsed(final int tracksUsed) {
300 this.tracksUsed = tracksUsed;
301 }
302
303 /** Get maximum time between observations in the OD of the object.
304 * @return maximum time between observations in the OD of the object
305 */
306 public double getMaximumObsGap() {
307 return maximumObsGap;
308 }
309
310 /** Set maximum time between observations in the OD of the object.
311 * @param maximumObsGap maximum time between observations in the OD of the object
312 */
313 public void setMaximumObsGap(final double maximumObsGap) {
314 this.maximumObsGap = maximumObsGap;
315 }
316
317 /** Get positional error ellipsoid 1σ major eigenvalue at the epoch of OD.
318 * @return positional error ellipsoid 1σ major eigenvalue at the epoch of OD
319 */
320 public double getEpochEigenMaj() {
321 return epochEigenMaj;
322 }
323
324 /** Set positional error ellipsoid 1σ major eigenvalue at the epoch of OD.
325 * @param epochEigenMaj positional error ellipsoid 1σ major eigenvalue at the epoch of OD
326 */
327 public void setEpochEigenMaj(final double epochEigenMaj) {
328 this.epochEigenMaj = epochEigenMaj;
329 }
330
331 /** Get positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD.
332 * @return positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD
333 */
334 public double getEpochEigenMed() {
335 return epochEigenMed;
336 }
337
338 /** Set positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD.
339 * @param epochEigenMed positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD
340 */
341 public void setEpochEigenMed(final double epochEigenMed) {
342 this.epochEigenMed = epochEigenMed;
343 }
344
345 /** Get positional error ellipsoid 1σ minor eigenvalue at the epoch of OD.
346 * @return positional error ellipsoid 1σ minor eigenvalue at the epoch of OD
347 */
348 public double getEpochEigenMin() {
349 return epochEigenMin;
350 }
351
352 /** Set positional error ellipsoid 1σ minor eigenvalue at the epoch of OD.
353 * @param epochEigenMin positional error ellipsoid 1σ minor eigenvalue at the epoch of OD
354 */
355 public void setEpochEigenMin(final double epochEigenMin) {
356 this.epochEigenMin = epochEigenMin;
357 }
358
359 /** Get maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
360 * @return maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
361 */
362 public double getMaxPredictedEigenMaj() {
363 return maxPredictedEigenMaj;
364 }
365
366 /** Set maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
367 * @param maxPredictedEigenMaj maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
368 */
369 public void setMaxPredictedEigenMaj(final double maxPredictedEigenMaj) {
370 this.maxPredictedEigenMaj = maxPredictedEigenMaj;
371 }
372
373 /** Get minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
374 * @return minimum predicted v eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
375 */
376 public double getMinPredictedEigenMin() {
377 return minPredictedEigenMin;
378 }
379
380 /** Set minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
381 * @param minPredictedEigenMin minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
382 */
383 public void setMinPredictedEigenMin(final double minPredictedEigenMin) {
384 this.minPredictedEigenMin = minPredictedEigenMin;
385 }
386
387 /** Get confidence metric.
388 * @return confidence metric
389 */
390 public double getConfidence() {
391 return confidence;
392 }
393
394 /** Set confidence metric.
395 * @param confidence confidence metric
396 */
397 public void setConfidence(final double confidence) {
398 this.confidence = confidence;
399 }
400
401 /** Get generalize Dilution Of Precision.
402 * @return generalize Dilution Of Precision
403 */
404 public double getGdop() {
405 return gdop;
406 }
407
408 /** Set generalize Dilution Of Precision.
409 * @param gdop generalize Dilution Of Precision
410 */
411 public void setGdop(final double gdop) {
412 this.gdop = gdop;
413 }
414
415 /** Get number of solved-for states.
416 * @return number of solved-for states
417 */
418 public int getSolveN() {
419 return solveN;
420 }
421
422 /** Set number of solved-for states.
423 * @param solveN number of solved-for states
424 */
425 public void setSolveN(final int solveN) {
426 this.solveN = solveN;
427 }
428
429 /** Get description of state elements solved-for.
430 * @return description of state elements solved-for
431 */
432 public List<String> getSolveStates() {
433 return solveStates;
434 }
435
436 /** Set description of state elements solved-for.
437 * @param solveStates description of state elements solved-for
438 */
439 public void setSolveStates(final List<String> solveStates) {
440 this.solveStates = solveStates;
441 }
442
443 /** Get number of consider parameters.
444 * @return number of consider parameters
445 */
446 public int getConsiderN() {
447 return considerN;
448 }
449
450 /** Set number of consider parameters.
451 * @param considerN number of consider parameters
452 */
453 public void setConsiderN(final int considerN) {
454 this.considerN = considerN;
455 }
456
457 /** Get description of consider parameters.
458 * @return description of consider parameters
459 */
460 public List<String> getConsiderParameters() {
461 return considerParameters;
462 }
463
464 /** Set description of consider parameters.
465 * @param considerParameters description of consider parameters
466 */
467 public void setConsiderParameters(final List<String> considerParameters) {
468 this.considerParameters = considerParameters;
469 }
470
471 /** Get number of sensors used.
472 * @return number of sensors used
473 */
474 public int getSensorsN() {
475 return sensorsN;
476 }
477
478 /** Set number of sensors used.
479 * @param sensorsN number of sensors used
480 */
481 public void setSensorsN(final int sensorsN) {
482 this.sensorsN = sensorsN;
483 }
484
485 /** Get description of sensors used.
486 * @return description of sensors used
487 */
488 public List<String> getSensors() {
489 return sensors;
490 }
491
492 /** Set description of sensors used.
493 * @param sensors description of sensors used
494 */
495 public void setSensors(final List<String> sensors) {
496 this.sensors = sensors;
497 }
498
499 /** Get weighted RMS residual ratio.
500 * @return weighted RMS residual ratio
501 */
502 public double getWeightedRms() {
503 return weightedRms;
504 }
505
506 /** Set weighted RMS residual ratio.
507 * @param weightedRms weighted RMS residual ratio
508 */
509 public void setWeightedRms(final double weightedRms) {
510 this.weightedRms = weightedRms;
511 }
512
513 /** Get observation data types used.
514 * @return observation data types used
515 */
516 public List<String> getDataTypes() {
517 return dataTypes;
518 }
519
520 /** Set observation data types used.
521 * @param dataTypes observation data types used
522 */
523 public void setDataTypes(final List<String> dataTypes) {
524 this.dataTypes = dataTypes;
525 }
526
527 }