1 /* Copyright 2002-2023 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; 18 19 import org.hipparchus.complex.Quaternion; 20 import org.orekit.files.ccsds.definitions.FrameFacade; 21 import org.orekit.files.ccsds.definitions.OrbitRelativeFrame; 22 import org.orekit.files.ccsds.ndm.cdm.AdditionalParameters; 23 import org.orekit.files.ccsds.ndm.odm.ocm.OrbitPhysicalProperties; 24 import org.orekit.files.ccsds.section.CommentsContainer; 25 import org.orekit.time.AbsoluteDate; 26 27 /** Container for common physical properties for both {@link OrbitPhysicalProperties} and {@link AdditionalParameters}. 28 * 29 * @author Maxime Journot 30 * @since 11.3 31 */ 32 public class CommonPhysicalProperties extends CommentsContainer { 33 34 /** Optimally Enclosing Box parent reference frame. */ 35 private FrameFacade oebParentFrame; 36 37 /** Optimally Enclosing Box parent reference frame epoch. */ 38 private AbsoluteDate oebParentFrameEpoch; 39 40 /** Quaternion defining Optimally Enclosing Box. */ 41 private final double[] oebQ; 42 43 /** Maximum physical dimension of Optimally Enclosing Box. */ 44 private double oebMax; 45 46 /** Intermediate physical dimension of Optimally Enclosing Box. */ 47 private double oebIntermediate; 48 49 /** Minimum physical dimension of Optimally Enclosing Box. */ 50 private double oebMin; 51 52 /** Cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction. */ 53 private double oebAreaAlongMax; 54 55 /** Cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction. */ 56 private double oebAreaAlongIntermediate; 57 58 /** Cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction. */ 59 private double oebAreaAlongMin; 60 61 /** Typical (50th percentile) radar cross-section. */ 62 private double rcs; 63 64 /** Minimum radar cross-section. */ 65 private double minRcs; 66 67 /** Maximum radar cross-section. */ 68 private double maxRcs; 69 70 /** Typical (50th percentile) visual magnitude. */ 71 private double vmAbsolute; 72 73 /** Minimum apparent visual magnitude. */ 74 private double vmApparentMin; 75 76 /** Typical (50th percentile) apparent visual magnitude. */ 77 private double vmApparent; 78 79 /** Maximum apparent visual magnitude. */ 80 private double vmApparentMax; 81 82 /** Typical (50th percentile) coefficient of reflectivity. */ 83 private double reflectance; 84 85 /** Simple constructor. 86 */ 87 public CommonPhysicalProperties() { 88 89 oebParentFrame = new FrameFacade(null, null, OrbitRelativeFrame.RIC, null, 90 OrbitRelativeFrame.RIC.name()); 91 oebParentFrameEpoch = AbsoluteDate.ARBITRARY_EPOCH; 92 oebQ = new double[4]; 93 oebMax = Double.NaN; 94 oebIntermediate = Double.NaN; 95 oebMin = Double.NaN; 96 oebAreaAlongMax = Double.NaN; 97 oebAreaAlongIntermediate = Double.NaN; 98 oebAreaAlongMin = Double.NaN; 99 rcs = Double.NaN; 100 minRcs = Double.NaN; 101 maxRcs = Double.NaN; 102 vmAbsolute = Double.NaN; 103 vmApparentMin = Double.NaN; 104 vmApparent = Double.NaN; 105 vmApparentMax = Double.NaN; 106 reflectance = Double.NaN; 107 } 108 109 /** {@inheritDoc} */ 110 @Override 111 public void validate(final double version) { 112 super.validate(version); 113 } 114 115 /** Get the Optimally Enclosing Box parent reference frame. 116 * @return Optimally Enclosing Box parent reference frame 117 */ 118 public FrameFacade getOebParentFrame() { 119 return oebParentFrame; 120 } 121 122 /** Set the Optimally Enclosing Box parent reference frame. 123 * @param oebParentFrame Optimally Enclosing Box parent reference frame 124 */ 125 public void setOebParentFrame(final FrameFacade oebParentFrame) { 126 refuseFurtherComments(); 127 this.oebParentFrame = oebParentFrame; 128 } 129 130 /** Get the Optimally Enclosing Box parent reference frame epoch. 131 * @return Optimally Enclosing Box parent reference frame epoch 132 */ 133 public AbsoluteDate getOebParentFrameEpoch() { 134 return oebParentFrameEpoch; 135 } 136 137 /** Set the Optimally Enclosing Box parent reference frame epoch. 138 * @param oebParentFrameEpoch Optimally Enclosing Box parent reference frame epoch 139 */ 140 public void setOebParentFrameEpoch(final AbsoluteDate oebParentFrameEpoch) { 141 refuseFurtherComments(); 142 this.oebParentFrameEpoch = oebParentFrameEpoch; 143 } 144 145 /** Get the quaternion defining Optimally Enclosing Box. 146 * @return quaternion defining Optimally Enclosing Box 147 */ 148 public Quaternion getOebQ() { 149 return new Quaternion(oebQ[0], oebQ[1], oebQ[2], oebQ[3]); 150 } 151 152 /** set the component of quaternion defining Optimally Enclosing Box. 153 * @param i index of the component 154 * @param qI component of quaternion defining Optimally Enclosing Box 155 */ 156 public void setOebQ(final int i, final double qI) { 157 refuseFurtherComments(); 158 oebQ[i] = qI; 159 } 160 161 /** Get the maximum physical dimension of the OEB. 162 * @return maximum physical dimension of the OEB. 163 */ 164 public double getOebMax() { 165 return oebMax; 166 } 167 168 /** Set the maximum physical dimension of the OEB. 169 * @param oebMax maximum physical dimension of the OEB. 170 */ 171 public void setOebMax(final double oebMax) { 172 refuseFurtherComments(); 173 this.oebMax = oebMax; 174 } 175 176 /** Get the intermediate physical dimension of the OEB. 177 * @return intermediate physical dimension of the OEB. 178 */ 179 public double getOebIntermediate() { 180 return oebIntermediate; 181 } 182 183 /** Set the intermediate physical dimension of the OEB. 184 * @param oebIntermediate intermediate physical dimension of the OEB. 185 */ 186 public void setOebIntermediate(final double oebIntermediate) { 187 refuseFurtherComments(); 188 this.oebIntermediate = oebIntermediate; 189 } 190 191 /** Get the minimum physical dimension of the OEB. 192 * @return dimensions the minimum physical dimension of the OEB. 193 */ 194 public double getOebMin() { 195 return oebMin; 196 } 197 198 /** Set the minimum physical dimension of the OEB. 199 * @param oebMin the minimum physical dimension of the OEB. 200 */ 201 public void setOebMin(final double oebMin) { 202 refuseFurtherComments(); 203 this.oebMin = oebMin; 204 } 205 206 /** Get the cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction. 207 * @return cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction. 208 */ 209 public double getOebAreaAlongMax() { 210 return oebAreaAlongMax; 211 } 212 213 /** Set the cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction. 214 * @param oebAreaAlongMax cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction. 215 */ 216 public void setOebAreaAlongMax(final double oebAreaAlongMax) { 217 refuseFurtherComments(); 218 this.oebAreaAlongMax = oebAreaAlongMax; 219 } 220 221 /** Get the cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction. 222 * @return cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction. 223 */ 224 public double getOebAreaAlongIntermediate() { 225 return oebAreaAlongIntermediate; 226 } 227 228 /** Set the cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction. 229 * @param oebAreaAlongIntermediate cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction. 230 */ 231 public void setOebAreaAlongIntermediate(final double oebAreaAlongIntermediate) { 232 refuseFurtherComments(); 233 this.oebAreaAlongIntermediate = oebAreaAlongIntermediate; 234 } 235 236 /** Get the cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction. 237 * @return cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction. 238 */ 239 public double getOebAreaAlongMin() { 240 return oebAreaAlongMin; 241 } 242 243 /** Set the cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction. 244 * @param oebAreaAlongMin cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction. 245 */ 246 public void setOebAreaAlongMin(final double oebAreaAlongMin) { 247 refuseFurtherComments(); 248 this.oebAreaAlongMin = oebAreaAlongMin; 249 } 250 251 252 /** Get the typical (50th percentile) radar cross-section. 253 * @return typical (50th percentile) radar cross-section 254 */ 255 public double getRcs() { 256 return rcs; 257 } 258 259 /** Set the typical (50th percentile) radar cross-section. 260 * @param rcs typical (50th percentile) radar cross-section 261 */ 262 public void setRcs(final double rcs) { 263 refuseFurtherComments(); 264 this.rcs = rcs; 265 } 266 267 /** Get the minimum radar cross-section. 268 * @return minimum radar cross-section 269 */ 270 public double getMinRcs() { 271 return minRcs; 272 } 273 274 /** Set the minimum radar cross-section. 275 * @param minRcs minimum radar cross-section 276 */ 277 public void setMinRcs(final double minRcs) { 278 refuseFurtherComments(); 279 this.minRcs = minRcs; 280 } 281 282 /** Get the maximum radar cross-section. 283 * @return maximum radar cross-section 284 */ 285 public double getMaxRcs() { 286 return maxRcs; 287 } 288 289 /** Set the maximum radar cross-section. 290 * @param maxRcs maximum radar cross-section 291 */ 292 public void setMaxRcs(final double maxRcs) { 293 refuseFurtherComments(); 294 this.maxRcs = maxRcs; 295 } 296 297 /** Get the typical (50th percentile) visual magnitude. 298 * @return typical (50th percentile) visual magnitude 299 */ 300 public double getVmAbsolute() { 301 return vmAbsolute; 302 } 303 304 /** Set the typical (50th percentile) visual magnitude. 305 * @param vmAbsolute typical (50th percentile) visual magnitude 306 */ 307 public void setVmAbsolute(final double vmAbsolute) { 308 refuseFurtherComments(); 309 this.vmAbsolute = vmAbsolute; 310 } 311 312 /** Get the minimum apparent visual magnitude. 313 * @return minimum apparent visual magnitude 314 */ 315 public double getVmApparentMin() { 316 return vmApparentMin; 317 } 318 319 /** Set the minimum apparent visual magnitude. 320 * @param vmApparentMin minimum apparent visual magnitude 321 */ 322 public void setVmApparentMin(final double vmApparentMin) { 323 refuseFurtherComments(); 324 this.vmApparentMin = vmApparentMin; 325 } 326 327 /** Get the typical (50th percentile) apparent visual magnitude. 328 * @return typical (50th percentile) apparent visual magnitude 329 */ 330 public double getVmApparent() { 331 return vmApparent; 332 } 333 334 /** Set the typical (50th percentile) apparent visual magnitude. 335 * @param vmApparent typical (50th percentile) apparent visual magnitude 336 */ 337 public void setVmApparent(final double vmApparent) { 338 refuseFurtherComments(); 339 this.vmApparent = vmApparent; 340 } 341 342 /** Get the maximum apparent visual magnitude. 343 * @return maximum apparent visual magnitude 344 */ 345 public double getVmApparentMax() { 346 return vmApparentMax; 347 } 348 349 /** Set the maximum apparent visual magnitude. 350 * @param vmApparentMax maximum apparent visual magnitude 351 */ 352 public void setVmApparentMax(final double vmApparentMax) { 353 refuseFurtherComments(); 354 this.vmApparentMax = vmApparentMax; 355 } 356 357 /** Get the typical (50th percentile) coefficient of reflectance. 358 * @return typical (50th percentile) coefficient of reflectance 359 */ 360 public double getReflectance() { 361 return reflectance; 362 } 363 364 /** Set the typical (50th percentile) coefficient of reflectance. 365 * @param reflectance typical (50th percentile) coefficient of reflectance 366 */ 367 public void setReflectance(final double reflectance) { 368 refuseFurtherComments(); 369 this.reflectance = reflectance; 370 } 371 }