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.errors.OrekitException;
20 import org.orekit.errors.OrekitMessages;
21 import org.orekit.files.ccsds.ndm.CommonPhysicalProperties;
22
23 /**
24 * Container for additional parameters data block.
25 * @author Melina Vanel
26 * @since 11.2
27 */
28 public class AdditionalParameters extends CommonPhysicalProperties {
29
30 /** The actual area of the object. */
31 private double areaPC;
32
33 /** The minimum area of the object to be used to compute the collision probability. */
34 private double areaPCMin;
35
36 /** The maximum area of the object to be used to compute the collision probability. */
37 private double areaPCMax;
38
39 /** The effective area of the object exposed to atmospheric drag. */
40 private double areaDRG;
41
42 /** The effective area of the object exposed to solar radiation pressure. */
43 private double areaSRP;
44
45 /** The object hard body radius. */
46 private double hbr;
47
48 /** The mass of the object. */
49 private double mass;
50
51 /** The object’s Cd x A/m used to propagate the state vector and covariance to TCA. */
52 private double cdAreaOverMass;
53
54 /** The object’s Cr x A/m used to propagate the state vector and covariance to TCA. */
55 private double crAreaOverMass;
56
57 /** The object’s acceleration due to in-track thrust used to propagate the state vector and covariance to TCA. */
58 private double thrustAcceleration;
59
60 /** The amount of energy being removed from the object’s orbit by atmospheric drag. This value is an average calculated during the OD. */
61 private double sedr;
62
63 /** The distance of the furthest point in the objects orbit above the equatorial radius of the central body. */
64 private double apoapsisAltitude;
65
66 /** The distance of the closest point in the objects orbit above the equatorial radius of the central body . */
67 private double periapsisAltitude;
68
69 /** The angle between the objects orbit plane and the orbit centers equatorial plane. */
70 private double inclination;
71
72 /** A measure of the confidence in the covariance errors matching reality. */
73 private double covConfidence;
74
75 /** The method used for the calculation of COV_CONFIDENCE. */
76 private String covConfidenceMethod;
77
78 /** Simple constructor.
79 */
80 public AdditionalParameters() {
81
82 // Call to CommonPhysicalProperties constructor
83 super();
84
85 // we don't call the setXxx() methods in order to avoid
86 // calling refuseFurtherComments as a side effect
87 areaPC = Double.NaN;
88 areaDRG = Double.NaN;
89 areaSRP = Double.NaN;
90 mass = Double.NaN;
91 cdAreaOverMass = Double.NaN;
92 crAreaOverMass = Double.NaN;
93 thrustAcceleration = Double.NaN;
94 sedr = Double.NaN;
95 hbr = Double.NaN;
96 apoapsisAltitude = Double.NaN;
97 periapsisAltitude = Double.NaN;
98 inclination = Double.NaN;
99 covConfidence = Double.NaN;
100 }
101
102 /** {@inheritDoc} */
103 @Override
104 public void validate(final double version) {
105 super.validate(version);
106 }
107
108 /**
109 * Get the actual area of the object.
110 * @return the object area (in m²)
111 */
112 public double getAreaPC() {
113 return areaPC;
114 }
115
116 /**
117 * Set the actual area of the object.
118 * @param areaPC area (in m²) value to be set
119 */
120 public void setAreaPC(final double areaPC) {
121 refuseFurtherComments();
122 this.areaPC = areaPC;
123 }
124
125 /**
126 * Get the effective area of the object exposed to atmospheric drag.
127 * @return the object area (in m²) exposed to atmospheric drag
128 */
129 public double getAreaDRG() {
130 return areaDRG;
131 }
132
133 /**
134 * Set the effective area of the object exposed to atmospheric drag.
135 * @param areaDRG area (in m²) value to be set
136 */
137 public void setAreaDRG(final double areaDRG) {
138 refuseFurtherComments();
139 this.areaDRG = areaDRG;
140 }
141
142 /**
143 * Get the effective area of the object exposed to solar radiation pressure.
144 * @return the object area (in m²) exposed to solar radiation pressure
145 */
146 public double getAreaSRP() {
147 return areaSRP;
148 }
149
150 /**
151 * Set the effective area of the object exposed to solar radiation pressure.
152 * @param areaSRP area (in m²) to be set
153 */
154 public void setAreaSRP(final double areaSRP) {
155 refuseFurtherComments();
156 this.areaSRP = areaSRP;
157 }
158
159 /**
160 * Get the mass of the object.
161 * @return the mass (in kg) of the object
162 */
163 public double getMass() {
164 return mass;
165 }
166
167 /**
168 * Set the mass of the object.
169 * @param mass mass (in kg) of the object to be set
170 */
171 public void setMass(final double mass) {
172 refuseFurtherComments();
173 this.mass = mass;
174 }
175
176 /**
177 * Get the object’s Cd x A/m used to propagate the state vector and covariance to TCA.
178 * @return the object’s Cd x A/m (in m²/kg)
179 */
180 public double getCDAreaOverMass() {
181 return cdAreaOverMass;
182 }
183
184 /**
185 * Set the object’s Cd x A/m used to propagate the state vector and covariance to TCA.
186 * @param CDAreaOverMass object’s Cd x A/m (in m²/kg) value to be set
187 */
188 public void setCDAreaOverMass(final double CDAreaOverMass) {
189 refuseFurtherComments();
190 this.cdAreaOverMass = CDAreaOverMass;
191 }
192
193 /**
194 * Get the object’s Cr x A/m used to propagate the state vector and covariance to TCA.
195 * @return the object’s Cr x A/m (in m²/kg)
196 */
197 public double getCRAreaOverMass() {
198 return crAreaOverMass;
199 }
200
201 /**
202 * Set the object’s Cr x A/m used to propagate the state vector and covariance to TCA.
203 * @param CRAreaOverMass object’s Cr x A/m (in m²/kg) value to be set
204 */
205 public void setCRAreaOverMass(final double CRAreaOverMass) {
206 refuseFurtherComments();
207 this.crAreaOverMass = CRAreaOverMass;
208 }
209
210 /**
211 * Get the object’s acceleration due to in-track thrust used to propagate the state vector and covariance to TCA.
212 * @return the object’s acceleration (in m/s²) due to in-track thrust
213 */
214 public double getThrustAcceleration() {
215 return thrustAcceleration;
216 }
217
218 /**
219 * Set the object’s acceleration due to in-track thrust used to propagate the state vector and covariance to TCA.
220 * @param thrustAcceleration object’s acceleration (in m/s²) due to in-track thrust
221 */
222 public void setThrustAcceleration(final double thrustAcceleration) {
223 refuseFurtherComments();
224 this.thrustAcceleration = thrustAcceleration;
225 }
226
227 /**
228 * Get the amount of energy being removed from the object’s orbit by atmospheric drag. This value is an average
229 * calculated during the OD. SEDR = Specific Energy Dissipation Rate.
230 * @return the amount of energy (in W/kg) being removed from the object’s orbit by atmospheric drag
231 */
232 public double getSedr() {
233 return sedr;
234 }
235
236 /**
237 * Set the amount of energy being removed from the object’s orbit by atmospheric drag. This value is an average
238 * calculated during the OD. SEDR = Specific Energy Dissipation Rate.
239 * @param SEDR amount of energy (in W/kg) being removed from the object’s orbit by atmospheric drag
240 */
241 public void setSedr(final double SEDR) {
242 refuseFurtherComments();
243 this.sedr = SEDR;
244 }
245
246 /** Set the minimum area of the object to be used to compute the collision probability.
247 * @return the areaPCMin
248 */
249 public double getAreaPCMin() {
250 return areaPCMin;
251 }
252
253 /** Get the minimum area of the object to be used to compute the collision probability.
254 * @param areaPCMin the areaPCMin to set
255 */
256 public void setAreaPCMin(final double areaPCMin) {
257 this.areaPCMin = areaPCMin;
258 }
259
260 /** Get the maximum area of the object to be used to compute the collision probability.
261 * @return the areaPCMax
262 */
263 public double getAreaPCMax() {
264 return areaPCMax;
265 }
266
267 /** Set the maximum area for the object to be used to compute the collision probability.
268 * @param areaPCMax the areaPCMax to set
269 */
270 public void setAreaPCMax(final double areaPCMax) {
271 this.areaPCMax = areaPCMax;
272 }
273
274 /** Get the object hard body radius.
275 * @return the object hard body radius.
276 */
277 public double getHbr() {
278 return hbr;
279 }
280
281 /** Set the object hard body radius.
282 * @param hbr the object hard body radius.
283 */
284 public void setHbr(final double hbr) {
285 refuseFurtherComments();
286 this.hbr = hbr;
287 }
288
289 /** Get the distance of the furthest point in the objects orbit above the equatorial radius of the central body.
290 * @return the apoapsisAltitude
291 */
292 public double getApoapsisAltitude() {
293 return apoapsisAltitude;
294 }
295
296 /** Set the distance of the furthest point in the objects orbit above the equatorial radius of the central body.
297 * @param apoapsisAltitude the apoapsisHeight to set
298 */
299 public void setApoapsisAltitude(final double apoapsisAltitude) {
300 refuseFurtherComments();
301 this.apoapsisAltitude = apoapsisAltitude;
302 }
303
304 /** Get the distance of the closest point in the objects orbit above the equatorial radius of the central body.
305 * @return the periapsissAltitude
306 */
307 public double getPeriapsisAltitude() {
308 return periapsisAltitude;
309 }
310
311 /** Set the distance of the closest point in the objects orbit above the equatorial radius of the central body.
312 * @param periapsisAltitude the periapsissHeight to set
313 */
314 public void setPeriapsisAltitude(final double periapsisAltitude) {
315 refuseFurtherComments();
316 this.periapsisAltitude = periapsisAltitude;
317 }
318
319 /** Get the angle between the objects orbit plane and the orbit centers equatorial plane.
320 * @return the inclination
321 */
322 public double getInclination() {
323 return inclination;
324 }
325
326 /** Set the angle between the objects orbit plane and the orbit centers equatorial plane.
327 * @param inclination the inclination to set
328 */
329 public void setInclination(final double inclination) {
330 refuseFurtherComments();
331 this.inclination = inclination;
332 }
333
334 /** Get the measure of the confidence in the covariance errors matching reality.
335 * @return the covConfidence
336 */
337 public double getCovConfidence() {
338 return covConfidence;
339 }
340
341 /** Set the measure of the confidence in the covariance errors matching reality.
342 * @param covConfidence the covConfidence to set
343 */
344 public void setCovConfidence(final double covConfidence) {
345 refuseFurtherComments();
346 this.covConfidence = covConfidence;
347 }
348
349 /** Get the method used for the calculation of COV_CONFIDENCE.
350 * @return the covConfidenceMethod
351 */
352 public String getCovConfidenceMethod() {
353 return covConfidenceMethod;
354 }
355
356 /** Set the method used for the calculation of COV_CONFIDENCE.
357 * @param covConfidenceMethod the covConfidenceMethod to set
358 */
359 public void setCovConfidenceMethod(final String covConfidenceMethod) {
360 refuseFurtherComments();
361
362 // Check key condition
363 if (Double.isNaN(getCovConfidence())) {
364 throw new OrekitException(OrekitMessages.CCSDS_MISSING_KEYWORD, AdditionalParametersKey.COV_CONFIDENCE);
365 }
366
367 this.covConfidenceMethod = covConfidenceMethod;
368 }
369 }