1 /* Copyright 2002-2024 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 epochEigenInt;
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 /** Specific Energy Dissipation Rate.
106 * @since 12.0
107 */
108 private double sedr;
109
110 /** Number of sensors used. */
111 private int sensorsN;
112
113 /** Description of sensors used. */
114 private List<String> sensors;
115
116 /** Weighted RMS residual ratio. */
117 private double weightedRms;
118
119 /** Observation data types used. */
120 private List<String> dataTypes;
121
122 /** Simple constructor.
123 */
124 public OrbitDetermination() {
125 sedr = Double.NaN;
126 solveStates = Collections.emptyList();
127 considerParameters = Collections.emptyList();
128 sensors = Collections.emptyList();
129 dataTypes = Collections.emptyList();
130 }
131
132 /** {@inheritDoc} */
133 @Override
134 public void validate(final double version) {
135 super.validate(version);
136 checkNotNull(id, OrbitDeterminationKey.OD_ID.name());
137 checkNotNull(method, OrbitDeterminationKey.OD_METHOD.name());
138 checkNotNull(epoch, OrbitDeterminationKey.OD_EPOCH.name());
139 }
140
141 /** Get identification number.
142 * @return identification number
143 */
144 public String getId() {
145 return id;
146 }
147
148 /** Set identification number.
149 * @param id identification number
150 */
151 public void setId(final String id) {
152 this.id = id;
153 }
154
155 /** Get identification of previous orbit determination.
156 * @return identification of previous orbit determination
157 */
158 public String getPrevId() {
159 return prevId;
160 }
161
162 /** Set identification of previous orbit determination.
163 * @param prevId identification of previous orbit determination
164 */
165 public void setPrevId(final String prevId) {
166 this.prevId = prevId;
167 }
168
169 /** Get orbit determination method.
170 * @return orbit determination method
171 */
172 public OdMethodFacade getMethod() {
173 return method;
174 }
175
176 /** Set orbit determination method.
177 * @param method orbit determination method
178 */
179 public void setMethod(final OdMethodFacade method) {
180 this.method = method;
181 }
182
183 /** Get time tag for orbit determination solved-for state.
184 * @return time tag for orbit determination solved-for state
185 */
186 public AbsoluteDate getEpoch() {
187 return epoch;
188 }
189
190 /** Set time tag for orbit determination solved-for state.
191 * @param epoch time tag for orbit determination solved-for state
192 */
193 public void setEpoch(final AbsoluteDate epoch) {
194 this.epoch = epoch;
195 }
196
197 /** Get time elapsed between first accepted observation on epoch.
198 * @return time elapsed between first accepted observation on epoch
199 */
200 public double getTimeSinceFirstObservation() {
201 return timeSinceFirstObservation;
202 }
203
204 /** Set time elapsed between first accepted observation on epoch.
205 * @param timeSinceFirstObservation time elapsed between first accepted observation on epoch
206 */
207 public void setTimeSinceFirstObservation(final double timeSinceFirstObservation) {
208 this.timeSinceFirstObservation = timeSinceFirstObservation;
209 }
210
211 /** Get time elapsed between last accepted observation on epoch.
212 * @return time elapsed between last accepted observation on epoch
213 */
214 public double getTimeSinceLastObservation() {
215 return timeSinceLastObservation;
216 }
217
218 /** Set time elapsed between last accepted observation on epoch.
219 * @param timeSinceLastObservation time elapsed between last accepted observation on epoch
220 */
221 public void setTimeSinceLastObservation(final double timeSinceLastObservation) {
222 this.timeSinceLastObservation = timeSinceLastObservation;
223 }
224
225 /** Get time span of observation recommended for the OD of the object.
226 * @return time span of observation recommended for the OD of the object
227 */
228 public double getRecommendedOdSpan() {
229 return recommendedOdSpan;
230 }
231
232 /** Set time span of observation recommended for the OD of the object.
233 * @param recommendedOdSpan time span of observation recommended for the OD of the object
234 */
235 public void setRecommendedOdSpan(final double recommendedOdSpan) {
236 this.recommendedOdSpan = recommendedOdSpan;
237 }
238
239 /** Get actual time span used for the OD of the object.
240 * @return actual time span used for the OD of the object
241 */
242 public double getActualOdSpan() {
243 return actualOdSpan;
244 }
245
246 /** Set actual time span used for the OD of the object.
247 * @param actualOdSpan actual time span used for the OD of the object
248 */
249 public void setActualOdSpan(final double actualOdSpan) {
250 this.actualOdSpan = actualOdSpan;
251 }
252
253 /** Get number of observations available within the actual OD span.
254 * @return number of observations available within the actual OD span
255 */
256 public int getObsAvailable() {
257 return obsAvailable;
258 }
259
260 /** Set number of observations available within the actual OD span.
261 * @param obsAvailable number of observations available within the actual OD span
262 */
263 public void setObsAvailable(final int obsAvailable) {
264 this.obsAvailable = obsAvailable;
265 }
266
267 /** Get number of observations accepted within the actual OD span.
268 * @return number of observations accepted within the actual OD span
269 */
270 public int getObsUsed() {
271 return obsUsed;
272 }
273
274 /** Set number of observations accepted within the actual OD span.
275 * @param obsUsed number of observations accepted within the actual OD span
276 */
277 public void setObsUsed(final int obsUsed) {
278 this.obsUsed = obsUsed;
279 }
280
281 /** Get number of sensors tracks available for the OD within the actual OD span.
282 * @return number of sensors tracks available for the OD within the actual OD span
283 */
284 public int getTracksAvailable() {
285 return tracksAvailable;
286 }
287
288 /** Set number of sensors tracks available for the OD within the actual OD span.
289 * @param tracksAvailable number of sensors tracks available for the OD within the actual OD span
290 */
291 public void setTracksAvailable(final int tracksAvailable) {
292 this.tracksAvailable = tracksAvailable;
293 }
294
295 /** Get number of sensors tracks accepted for the OD within the actual OD span.
296 * @return number of sensors tracks accepted for the OD within the actual OD span
297 */
298 public int getTracksUsed() {
299 return tracksUsed;
300 }
301
302 /** Set number of sensors tracks accepted for the OD within the actual OD span.
303 * @param tracksUsed number of sensors tracks accepted for the OD within the actual OD span
304 */
305 public void setTracksUsed(final int tracksUsed) {
306 this.tracksUsed = tracksUsed;
307 }
308
309 /** Get maximum time between observations in the OD of the object.
310 * @return maximum time between observations in the OD of the object
311 */
312 public double getMaximumObsGap() {
313 return maximumObsGap;
314 }
315
316 /** Set maximum time between observations in the OD of the object.
317 * @param maximumObsGap maximum time between observations in the OD of the object
318 */
319 public void setMaximumObsGap(final double maximumObsGap) {
320 this.maximumObsGap = maximumObsGap;
321 }
322
323 /** Get positional error ellipsoid 1σ major eigenvalue at the epoch of OD.
324 * @return positional error ellipsoid 1σ major eigenvalue at the epoch of OD
325 */
326 public double getEpochEigenMaj() {
327 return epochEigenMaj;
328 }
329
330 /** Set positional error ellipsoid 1σ major eigenvalue at the epoch of OD.
331 * @param epochEigenMaj positional error ellipsoid 1σ major eigenvalue at the epoch of OD
332 */
333 public void setEpochEigenMaj(final double epochEigenMaj) {
334 this.epochEigenMaj = epochEigenMaj;
335 }
336
337 /** Get positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD.
338 * @return positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD
339 */
340 public double getEpochEigenInt() {
341 return epochEigenInt;
342 }
343
344 /** Set positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD.
345 * @param epochEigenInt positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD
346 */
347 public void setEpochEigenInt(final double epochEigenInt) {
348 this.epochEigenInt = epochEigenInt;
349 }
350
351 /** Get positional error ellipsoid 1σ minor eigenvalue at the epoch of OD.
352 * @return positional error ellipsoid 1σ minor eigenvalue at the epoch of OD
353 */
354 public double getEpochEigenMin() {
355 return epochEigenMin;
356 }
357
358 /** Set positional error ellipsoid 1σ minor eigenvalue at the epoch of OD.
359 * @param epochEigenMin positional error ellipsoid 1σ minor eigenvalue at the epoch of OD
360 */
361 public void setEpochEigenMin(final double epochEigenMin) {
362 this.epochEigenMin = epochEigenMin;
363 }
364
365 /** Get maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
366 * @return maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
367 */
368 public double getMaxPredictedEigenMaj() {
369 return maxPredictedEigenMaj;
370 }
371
372 /** Set maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
373 * @param maxPredictedEigenMaj maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
374 */
375 public void setMaxPredictedEigenMaj(final double maxPredictedEigenMaj) {
376 this.maxPredictedEigenMaj = maxPredictedEigenMaj;
377 }
378
379 /** Get minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
380 * @return minimum predicted v eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
381 */
382 public double getMinPredictedEigenMin() {
383 return minPredictedEigenMin;
384 }
385
386 /** Set minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
387 * @param minPredictedEigenMin minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
388 */
389 public void setMinPredictedEigenMin(final double minPredictedEigenMin) {
390 this.minPredictedEigenMin = minPredictedEigenMin;
391 }
392
393 /** Get confidence metric.
394 * @return confidence metric
395 */
396 public double getConfidence() {
397 return confidence;
398 }
399
400 /** Set confidence metric.
401 * @param confidence confidence metric
402 */
403 public void setConfidence(final double confidence) {
404 this.confidence = confidence;
405 }
406
407 /** Get generalize Dilution Of Precision.
408 * @return generalize Dilution Of Precision
409 */
410 public double getGdop() {
411 return gdop;
412 }
413
414 /** Set generalize Dilution Of Precision.
415 * @param gdop generalize Dilution Of Precision
416 */
417 public void setGdop(final double gdop) {
418 this.gdop = gdop;
419 }
420
421 /** Get number of solved-for states.
422 * @return number of solved-for states
423 */
424 public int getSolveN() {
425 return solveN;
426 }
427
428 /** Set number of solved-for states.
429 * @param solveN number of solved-for states
430 */
431 public void setSolveN(final int solveN) {
432 this.solveN = solveN;
433 }
434
435 /** Get description of state elements solved-for.
436 * @return description of state elements solved-for
437 */
438 public List<String> getSolveStates() {
439 return solveStates;
440 }
441
442 /** Set description of state elements solved-for.
443 * @param solveStates description of state elements solved-for
444 */
445 public void setSolveStates(final List<String> solveStates) {
446 this.solveStates = solveStates;
447 }
448
449 /** Get number of consider parameters.
450 * @return number of consider parameters
451 */
452 public int getConsiderN() {
453 return considerN;
454 }
455
456 /** Set number of consider parameters.
457 * @param considerN number of consider parameters
458 */
459 public void setConsiderN(final int considerN) {
460 this.considerN = considerN;
461 }
462
463 /** Get description of consider parameters.
464 * @return description of consider parameters
465 */
466 public List<String> getConsiderParameters() {
467 return considerParameters;
468 }
469
470 /** Set description of consider parameters.
471 * @param considerParameters description of consider parameters
472 */
473 public void setConsiderParameters(final List<String> considerParameters) {
474 this.considerParameters = considerParameters;
475 }
476
477 /** Get Specific Energy Dissipation Rate.
478 * @return Specific Energy Dissipation Rate
479 * @since 12.0
480 */
481 public double getSedr() {
482 return sedr;
483 }
484
485 /** Set Specific Energy Dissipation Rate.
486 * @param sedr Specific Energy Dissipation Rate (W/kg)
487 * @since 12.0
488 */
489 public void setSedr(final double sedr) {
490 this.sedr = sedr;
491 }
492
493 /** Get number of sensors used.
494 * @return number of sensors used
495 */
496 public int getSensorsN() {
497 return sensorsN;
498 }
499
500 /** Set number of sensors used.
501 * @param sensorsN number of sensors used
502 */
503 public void setSensorsN(final int sensorsN) {
504 this.sensorsN = sensorsN;
505 }
506
507 /** Get description of sensors used.
508 * @return description of sensors used
509 */
510 public List<String> getSensors() {
511 return sensors;
512 }
513
514 /** Set description of sensors used.
515 * @param sensors description of sensors used
516 */
517 public void setSensors(final List<String> sensors) {
518 this.sensors = sensors;
519 }
520
521 /** Get weighted RMS residual ratio.
522 * @return weighted RMS residual ratio
523 */
524 public double getWeightedRms() {
525 return weightedRms;
526 }
527
528 /** Set weighted RMS residual ratio.
529 * @param weightedRms weighted RMS residual ratio
530 */
531 public void setWeightedRms(final double weightedRms) {
532 this.weightedRms = weightedRms;
533 }
534
535 /** Get observation data types used.
536 * @return observation data types used
537 */
538 public List<String> getDataTypes() {
539 return dataTypes;
540 }
541
542 /** Set observation data types used.
543 * @param dataTypes observation data types used
544 */
545 public void setDataTypes(final List<String> dataTypes) {
546 this.dataTypes = dataTypes;
547 }
548
549 }