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 }