CommonPhysicalProperties.java

  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. package org.orekit.files.ccsds.ndm;

  18. import org.hipparchus.complex.Quaternion;
  19. import org.orekit.files.ccsds.definitions.FrameFacade;
  20. import org.orekit.files.ccsds.definitions.OrbitRelativeFrame;
  21. import org.orekit.files.ccsds.ndm.cdm.AdditionalParameters;
  22. import org.orekit.files.ccsds.ndm.odm.ocm.OrbitPhysicalProperties;
  23. import org.orekit.files.ccsds.section.CommentsContainer;
  24. import org.orekit.time.AbsoluteDate;

  25. /** Container for common physical properties for both {@link OrbitPhysicalProperties} and {@link AdditionalParameters}.
  26.  *
  27.  * @author Maxime Journot
  28.  * @since 11.3
  29.  */
  30. public class CommonPhysicalProperties extends CommentsContainer {

  31.     /** Optimally Enclosing Box parent reference frame. */
  32.     private FrameFacade oebParentFrame;

  33.     /** Optimally Enclosing Box parent reference frame epoch. */
  34.     private AbsoluteDate oebParentFrameEpoch;

  35.     /** Quaternion defining Optimally Enclosing Box. */
  36.     private final double[] oebQ;

  37.     /** Maximum physical dimension of Optimally Enclosing Box. */
  38.     private double oebMax;

  39.     /** Intermediate physical dimension of Optimally Enclosing Box. */
  40.     private double oebIntermediate;

  41.     /** Minimum physical dimension of Optimally Enclosing Box. */
  42.     private double oebMin;

  43.     /** Cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction. */
  44.     private double oebAreaAlongMax;

  45.     /** Cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction. */
  46.     private double oebAreaAlongIntermediate;

  47.     /** Cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction. */
  48.     private double oebAreaAlongMin;

  49.         /** Typical (50th percentile) radar cross-section. */
  50.     private double rcs;

  51.     /** Minimum radar cross-section. */
  52.     private double minRcs;

  53.     /** Maximum radar cross-section. */
  54.     private double maxRcs;

  55.     /** Typical (50th percentile) visual magnitude. */
  56.     private double vmAbsolute;

  57.     /** Minimum apparent visual magnitude. */
  58.     private double vmApparentMin;

  59.     /** Typical (50th percentile) apparent visual magnitude. */
  60.     private double vmApparent;

  61.     /** Maximum apparent visual magnitude. */
  62.     private double vmApparentMax;

  63.     /** Typical (50th percentile) coefficient of reflectivity. */
  64.     private double reflectance;

  65.     /** Simple constructor.
  66.      */
  67.     public CommonPhysicalProperties() {

  68.         oebParentFrame           = new FrameFacade(null, null, OrbitRelativeFrame.RIC, null,
  69.                                                    OrbitRelativeFrame.RIC.name());
  70.         oebParentFrameEpoch      = AbsoluteDate.ARBITRARY_EPOCH;
  71.         oebQ                     = new double[4];
  72.         oebMax                   = Double.NaN;
  73.         oebIntermediate          = Double.NaN;
  74.         oebMin                   = Double.NaN;
  75.         oebAreaAlongMax          = Double.NaN;
  76.         oebAreaAlongIntermediate = Double.NaN;
  77.         oebAreaAlongMin          = Double.NaN;
  78.         rcs                      = Double.NaN;
  79.         minRcs                   = Double.NaN;
  80.         maxRcs                   = Double.NaN;
  81.         vmAbsolute               = Double.NaN;
  82.         vmApparentMin            = Double.NaN;
  83.         vmApparent               = Double.NaN;
  84.         vmApparentMax            = Double.NaN;
  85.         reflectance              = Double.NaN;
  86.     }

  87.     /** {@inheritDoc} */
  88.     @Override
  89.     public void validate(final double version) {
  90.         super.validate(version);
  91.     }

  92.     /** Get the Optimally Enclosing Box parent reference frame.
  93.      * @return Optimally Enclosing Box parent reference frame
  94.      */
  95.     public FrameFacade getOebParentFrame() {
  96.         return oebParentFrame;
  97.     }

  98.     /** Set the Optimally Enclosing Box parent reference frame.
  99.      * @param oebParentFrame Optimally Enclosing Box parent reference frame
  100.      */
  101.     public void setOebParentFrame(final FrameFacade oebParentFrame) {
  102.         refuseFurtherComments();
  103.         this.oebParentFrame = oebParentFrame;
  104.     }

  105.     /** Get the Optimally Enclosing Box parent reference frame epoch.
  106.      * @return Optimally Enclosing Box parent reference frame epoch
  107.      */
  108.     public AbsoluteDate getOebParentFrameEpoch() {
  109.         return oebParentFrameEpoch;
  110.     }

  111.     /** Set the Optimally Enclosing Box parent reference frame epoch.
  112.      * @param oebParentFrameEpoch Optimally Enclosing Box parent reference frame epoch
  113.      */
  114.     public void setOebParentFrameEpoch(final AbsoluteDate oebParentFrameEpoch) {
  115.         refuseFurtherComments();
  116.         this.oebParentFrameEpoch = oebParentFrameEpoch;
  117.     }

  118.     /** Get the quaternion defining Optimally Enclosing Box.
  119.      * @return quaternion defining Optimally Enclosing Box
  120.      */
  121.     public Quaternion getOebQ() {
  122.         return new Quaternion(oebQ[0], oebQ[1], oebQ[2], oebQ[3]);
  123.     }

  124.     /** set the component of quaternion defining Optimally Enclosing Box.
  125.      * @param i index of the component
  126.      * @param qI component of quaternion defining Optimally Enclosing Box
  127.      */
  128.     public void setOebQ(final int i, final double qI) {
  129.         refuseFurtherComments();
  130.         oebQ[i] = qI;
  131.     }

  132.     /** Get the maximum physical dimension of the OEB.
  133.      * @return maximum physical dimension of the OEB.
  134.      */
  135.     public double getOebMax() {
  136.         return oebMax;
  137.     }

  138.     /** Set the maximum physical dimension of the OEB.
  139.      * @param oebMax maximum physical dimension of the OEB.
  140.      */
  141.     public void setOebMax(final double oebMax) {
  142.         refuseFurtherComments();
  143.         this.oebMax = oebMax;
  144.     }

  145.     /** Get the intermediate physical dimension of the OEB.
  146.      * @return intermediate physical dimension of the OEB.
  147.      */
  148.     public double getOebIntermediate() {
  149.         return oebIntermediate;
  150.     }

  151.     /** Set the intermediate physical dimension of the OEB.
  152.      * @param oebIntermediate intermediate physical dimension of the OEB.
  153.      */
  154.     public void setOebIntermediate(final double oebIntermediate) {
  155.         refuseFurtherComments();
  156.         this.oebIntermediate = oebIntermediate;
  157.     }

  158.     /** Get the minimum physical dimension of the OEB.
  159.      * @return dimensions the minimum physical dimension of the OEB.
  160.      */
  161.     public double getOebMin() {
  162.         return oebMin;
  163.     }

  164.     /** Set the minimum physical dimension of the OEB.
  165.      * @param oebMin the minimum physical dimension of the OEB.
  166.      */
  167.     public void setOebMin(final double oebMin) {
  168.         refuseFurtherComments();
  169.         this.oebMin = oebMin;
  170.     }

  171.     /** Get the cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction.
  172.      * @return cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction.
  173.      */
  174.     public double getOebAreaAlongMax() {
  175.         return oebAreaAlongMax;
  176.     }

  177.     /** Set the cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction.
  178.      * @param oebAreaAlongMax cross-sectional area of Optimally Enclosing Box when viewed along the maximum OEB direction.
  179.      */
  180.     public void setOebAreaAlongMax(final double oebAreaAlongMax) {
  181.         refuseFurtherComments();
  182.         this.oebAreaAlongMax = oebAreaAlongMax;
  183.     }

  184.     /** Get the cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction.
  185.      * @return cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction.
  186.      */
  187.     public double getOebAreaAlongIntermediate() {
  188.         return oebAreaAlongIntermediate;
  189.     }

  190.     /** Set the cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction.
  191.      * @param oebAreaAlongIntermediate cross-sectional area of Optimally Enclosing Box when viewed along the intermediate OEB direction.
  192.      */
  193.     public void setOebAreaAlongIntermediate(final double oebAreaAlongIntermediate) {
  194.         refuseFurtherComments();
  195.         this.oebAreaAlongIntermediate = oebAreaAlongIntermediate;
  196.     }

  197.     /** Get the cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction.
  198.      * @return cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction.
  199.      */
  200.     public double getOebAreaAlongMin() {
  201.         return oebAreaAlongMin;
  202.     }

  203.     /** Set the cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction.
  204.      * @param oebAreaAlongMin cross-sectional area of Optimally Enclosing Box when viewed along the minimum OEB direction.
  205.      */
  206.     public void setOebAreaAlongMin(final double oebAreaAlongMin) {
  207.         refuseFurtherComments();
  208.         this.oebAreaAlongMin = oebAreaAlongMin;
  209.     }


  210.     /** Get the typical (50th percentile) radar cross-section.
  211.      * @return typical (50th percentile) radar cross-section
  212.      */
  213.     public double getRcs() {
  214.         return rcs;
  215.     }

  216.     /** Set the typical (50th percentile) radar cross-section.
  217.      * @param rcs typical (50th percentile) radar cross-section
  218.      */
  219.     public void setRcs(final double rcs) {
  220.         refuseFurtherComments();
  221.         this.rcs = rcs;
  222.     }

  223.     /** Get the minimum radar cross-section.
  224.      * @return minimum radar cross-section
  225.      */
  226.     public double getMinRcs() {
  227.         return minRcs;
  228.     }

  229.     /** Set the minimum radar cross-section.
  230.      * @param minRcs minimum radar cross-section
  231.      */
  232.     public void setMinRcs(final double minRcs) {
  233.         refuseFurtherComments();
  234.         this.minRcs = minRcs;
  235.     }

  236.     /** Get the maximum radar cross-section.
  237.      * @return maximum radar cross-section
  238.      */
  239.     public double getMaxRcs() {
  240.         return maxRcs;
  241.     }

  242.     /** Set the maximum radar cross-section.
  243.      * @param maxRcs maximum radar cross-section
  244.      */
  245.     public void setMaxRcs(final double maxRcs) {
  246.         refuseFurtherComments();
  247.         this.maxRcs = maxRcs;
  248.     }

  249.     /** Get the typical (50th percentile) visual magnitude.
  250.      * @return typical (50th percentile) visual magnitude
  251.      */
  252.     public double getVmAbsolute() {
  253.         return vmAbsolute;
  254.     }

  255.     /** Set the typical (50th percentile) visual magnitude.
  256.      * @param vmAbsolute typical (50th percentile) visual magnitude
  257.      */
  258.     public void setVmAbsolute(final double vmAbsolute) {
  259.         refuseFurtherComments();
  260.         this.vmAbsolute = vmAbsolute;
  261.     }

  262.     /** Get the minimum apparent visual magnitude.
  263.      * @return minimum apparent visual magnitude
  264.      */
  265.     public double getVmApparentMin() {
  266.         return vmApparentMin;
  267.     }

  268.     /** Set the minimum apparent visual magnitude.
  269.      * @param vmApparentMin minimum apparent visual magnitude
  270.      */
  271.     public void setVmApparentMin(final double vmApparentMin) {
  272.         refuseFurtherComments();
  273.         this.vmApparentMin = vmApparentMin;
  274.     }

  275.     /** Get the typical (50th percentile) apparent visual magnitude.
  276.      * @return typical (50th percentile) apparent visual magnitude
  277.      */
  278.     public double getVmApparent() {
  279.         return vmApparent;
  280.     }

  281.     /** Set the typical (50th percentile) apparent visual magnitude.
  282.      * @param vmApparent typical (50th percentile) apparent visual magnitude
  283.      */
  284.     public void setVmApparent(final double vmApparent) {
  285.         refuseFurtherComments();
  286.         this.vmApparent = vmApparent;
  287.     }

  288.     /** Get the maximum apparent visual magnitude.
  289.      * @return maximum apparent visual magnitude
  290.      */
  291.     public double getVmApparentMax() {
  292.         return vmApparentMax;
  293.     }

  294.     /** Set the maximum apparent visual magnitude.
  295.      * @param vmApparentMax maximum apparent visual magnitude
  296.      */
  297.     public void setVmApparentMax(final double vmApparentMax) {
  298.         refuseFurtherComments();
  299.         this.vmApparentMax = vmApparentMax;
  300.     }

  301.     /** Get the typical (50th percentile) coefficient of reflectance.
  302.      * @return typical (50th percentile) coefficient of reflectance
  303.      */
  304.     public double getReflectance() {
  305.         return reflectance;
  306.     }

  307.     /** Set the typical (50th percentile) coefficient of reflectance.
  308.      * @param reflectance typical (50th percentile) coefficient of reflectance
  309.      */
  310.     public void setReflectance(final double reflectance) {
  311.         refuseFurtherComments();
  312.         this.reflectance = reflectance;
  313.     }
  314. }