1   /* Copyright 2002-2025 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  package org.orekit.files.ccsds.ndm.cdm;
18  
19  import org.orekit.files.ccsds.section.CommentsContainer;
20  
21  /**
22   * Container for the additional covariance metadata (optional).
23   * <p>
24   * Beware that the Orekit getters and setters all rely on SI units. The parsers
25   * and writers take care of converting these SI units into CCSDS mandatory units.
26   * The {@link org.orekit.utils.units.Unit Unit} class provides useful
27   * {@link org.orekit.utils.units.Unit#fromSI(double) fromSi} and
28   * {@link org.orekit.utils.units.Unit#toSI(double) toSI} methods in case the callers
29   * already use CCSDS units instead of the API SI units. The general-purpose
30   * {@link org.orekit.utils.units.Unit Unit} class (without an 's') and the
31   * CCSDS-specific {@link org.orekit.files.ccsds.definitions.Units Units} class
32   * (with an 's') also provide some predefined units. These predefined units and the
33   * {@link org.orekit.utils.units.Unit#fromSI(double) fromSi} and
34   * {@link org.orekit.utils.units.Unit#toSI(double) toSI} conversion methods are indeed
35   * what the parsers and writers use for the conversions.
36   * </p>
37   */
38  public class AdditionalCovarianceMetadata extends CommentsContainer {
39  
40      /** The atmospheric density forecast error. */
41      private double densityForecastUncertainty;
42  
43      /** The minimum suggested covariance scale factor. */
44      private double cScaleFactorMin;
45  
46      /** The (median) suggested covariance scale factor. */
47      private double cScaleFactor;
48  
49      /** The maximum suggested covariance scale factor. */
50      private double cScaleFactorMax;
51  
52      /** The source (or origin) of the specific orbital data for this object. */
53      private String screeningDataSource;
54  
55      /** The drag consider parameter (DCP) sensitivity vectors map forward expected error in the drag acceleration to actual
56       * componentized position errors at TCA. */
57      private double[] dcpSensitivityVectorPosition;
58  
59      /** The drag consider parameter (DCP) sensitivity vectors map forward expected error in the drag acceleration to actual
60       * componentized velocity errors at TCA. */
61      private double[] dcpSensitivityVectorVelocity;
62  
63  
64      /** Simple constructor. */
65      public AdditionalCovarianceMetadata() {
66          densityForecastUncertainty = Double.NaN;
67      }
68  
69      /** {@inheritDoc} */
70      @Override
71      public void validate(final double version) {
72          super.validate(version);
73      }
74  
75  
76      /**
77       * Get the atmospheric density forecast error.
78       * @return densityForecastUncertainty
79       */
80      public double getDensityForecastUncertainty() {
81          return densityForecastUncertainty;
82      }
83  
84      /**
85       * Set the atmospheric density forecast error.
86       * @param densityForecastUncertainty the cScaleFactorMax to set
87       */
88      public void setDensityForecastUncertainty(final double densityForecastUncertainty) {
89          refuseFurtherComments();
90          this.densityForecastUncertainty = densityForecastUncertainty;
91      }
92  
93      /** Get the minimum suggested covariance scale factor.
94       * @return the cScaleFactorMin
95       */
96      public double getcScaleFactorMin() {
97          return cScaleFactorMin;
98      }
99  
100     /** Set the minimum suggested covariance scale factor.
101      * @param cScaleFactorMin the cScaleFactorMin to set
102      */
103     public void setcScaleFactorMin(final double cScaleFactorMin) {
104         this.cScaleFactorMin = cScaleFactorMin;
105     }
106 
107     /** Get the (median) suggested covariance scale factor.
108      * @return the cScaleFactor
109      */
110     public double getcScaleFactor() {
111         return cScaleFactor;
112     }
113 
114     /** Set the (median) suggested covariance scale factor.
115      * @param cScaleFactor the cScaleFactor to set
116      */
117     public void setcScaleFactor(final double cScaleFactor) {
118         this.cScaleFactor = cScaleFactor;
119     }
120 
121     /** Get the maximum suggested covariance scale factor.
122      * @return the cScaleFactorMax
123      */
124     public double getcScaleFactorMax() {
125         return cScaleFactorMax;
126     }
127 
128     /** set the maximum suggested covariance scale factor.
129      * @param cScaleFactorMax the cScaleFactorMax to set
130      */
131     public void setcScaleFactorMax(final double cScaleFactorMax) {
132         this.cScaleFactorMax = cScaleFactorMax;
133     }
134 
135     /** Get the source (or origin) of the specific orbital data for this object.
136      * @return the screeningDataSource
137      */
138     public String getScreeningDataSource() {
139         return screeningDataSource;
140     }
141 
142     /** Set the source (or origin) of the specific orbital data for this object.
143      * @param screeningDataSource the screeningDataSource to set
144      */
145     public void setScreeningDataSource(final String screeningDataSource) {
146         this.screeningDataSource = screeningDataSource;
147     }
148 
149     /** Get the DCP sensitivity vector (position errors at TCA).
150      * @return the dcpSensitivityVectorPosition
151      */
152     public double[] getDcpSensitivityVectorPosition() {
153         return dcpSensitivityVectorPosition == null ? null : dcpSensitivityVectorPosition.clone();
154     }
155 
156     /** Set the DCP sensitivity vector (position errors at TCA).
157      * @param dcpSensitivityVectorPosition the dcpSensitivityVectorPosition to set
158      */
159     public void setDcpSensitivityVectorPosition(final double[] dcpSensitivityVectorPosition) {
160         this.dcpSensitivityVectorPosition = dcpSensitivityVectorPosition == null ? null : dcpSensitivityVectorPosition.clone();
161     }
162 
163     /** Get the DCP sensitivity vector (velocity errors at TCA).
164      * @return the dcpSensitivityVectorVelocity
165      */
166     public double[] getDcpSensitivityVectorVelocity() {
167         return dcpSensitivityVectorVelocity == null ? null : dcpSensitivityVectorVelocity.clone();
168     }
169 
170     /** Set the DCP sensitivity vector (velocity errors at TCA).
171      * @param dcpSensitivityVectorVelocity the dcpSensitivityVectorVelocity to set
172      */
173     public void setDcpSensitivityVectorVelocity(final double[] dcpSensitivityVectorVelocity) {
174         this.dcpSensitivityVectorVelocity = dcpSensitivityVectorVelocity == null ? null : dcpSensitivityVectorVelocity.clone();
175     }
176 
177 }