TrajectoryStateHistoryMetadata.java

  1. /* Copyright 2002-2022 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.odm.ocm;

  18. import java.util.List;

  19. import org.orekit.data.DataContext;
  20. import org.orekit.errors.OrekitException;
  21. import org.orekit.errors.OrekitMessages;
  22. import org.orekit.files.ccsds.definitions.BodyFacade;
  23. import org.orekit.files.ccsds.definitions.CelestialBodyFrame;
  24. import org.orekit.files.ccsds.definitions.ElementsType;
  25. import org.orekit.files.ccsds.definitions.FrameFacade;
  26. import org.orekit.files.ccsds.ndm.odm.oem.InterpolationMethod;
  27. import org.orekit.files.ccsds.section.CommentsContainer;
  28. import org.orekit.time.AbsoluteDate;
  29. import org.orekit.utils.units.Unit;

  30. /** Metadata for trajectory state history.
  31.  * @author Luc Maisonobe
  32.  * @since 11.0
  33.  */
  34. public class TrajectoryStateHistoryMetadata extends CommentsContainer {

  35.     /** Trajectory identification number. */
  36.     private String trajID;

  37.     /** Identification number of previous trajectory. */
  38.     private String trajPrevID;

  39.     /** Identification number of next trajectory. */
  40.     private String trajNextID;

  41.     /** Basis of this trajectory state time history data. */
  42.     private String trajBasis;

  43.     /** Identification number of the orbit determination or simulation upon which this trajectory is based. */
  44.     private String trajBasisID;

  45.     /** Interpolation method. */
  46.     private InterpolationMethod interpolationMethod;

  47.     /** Interpolation degree. */
  48.     private int interpolationDegree;

  49.     /** Orbit propagator used to generate this trajectory.
  50.      * @since 11.2
  51.      */
  52.     private String propagator;

  53.     /** Origin of reference frame. */
  54.     private BodyFacade center;

  55.     /** Reference frame of the trajectory. */
  56.     private FrameFacade trajReferenceFrame;

  57.     /** Epoch of the trajectory reference frame. */
  58.     private AbsoluteDate trajFrameEpoch;

  59.     /** Start of useable time span covered by ephemerides data, it may be
  60.      * necessary to allow for proper interpolation. */
  61.     private AbsoluteDate useableStartTime;

  62.     /** End of useable time span covered by ephemerides data, it may be
  63.      * necessary to allow for proper interpolation. */
  64.     private AbsoluteDate useableStopTime;

  65.     /** Integer orbit revolution number. */
  66.     private int orbRevNum;

  67.     /** Basis for orbit revolution counter (i.e is first launch/deployment on orbit 0 or 1). */
  68.     private int orbRevNumBasis;

  69.     /** Trajectory element set type. */
  70.     private ElementsType trajType;

  71.     /** Type of averaging (Osculating, mean Brouwer, other...). */
  72.     private String orbAveraging;

  73.     /** Units of trajectory element set. */
  74.     private List<Unit> trajUnits;

  75.     /** Simple constructor.
  76.      * @param epochT0 T0 epoch from file metadata
  77.      * @param dataContext data context
  78.      */
  79.     TrajectoryStateHistoryMetadata(final AbsoluteDate epochT0, final DataContext dataContext) {
  80.         // we don't call the setXxx() methods in order to avoid
  81.         // calling refuseFurtherComments as a side effect
  82.         trajBasis           = "PREDICTED";
  83.         interpolationMethod = InterpolationMethod.HERMITE;
  84.         interpolationDegree = 3;
  85.         orbAveraging        = "OSCULATING";
  86.         center              = new BodyFacade("EARTH",
  87.                                              dataContext.getCelestialBodies().getEarth());
  88.         trajReferenceFrame  = new FrameFacade(dataContext.getFrames().getICRF(),
  89.                                               CelestialBodyFrame.ICRF, null, null,
  90.                                               CelestialBodyFrame.ICRF.name());
  91.         trajFrameEpoch      = epochT0;
  92.         trajType            = ElementsType.CARTPV;
  93.         orbRevNum           = -1;
  94.         orbRevNumBasis      = -1;
  95.     }

  96.     /** {@inheritDoc} */
  97.     @Override
  98.     public void validate(final double version) {
  99.         super.validate(version);
  100.         if (trajType != ElementsType.CARTP   &&
  101.             trajType != ElementsType.CARTPV  &&
  102.             trajType != ElementsType.CARTPVA) {
  103.             checkNotNull(orbAveraging, TrajectoryStateHistoryMetadataKey.ORB_AVERAGING);
  104.         }
  105.         if (trajUnits != null) {
  106.             trajType.checkUnits(trajUnits);
  107.         }
  108.         if (orbRevNum >= 0 && orbRevNumBasis < 0) {
  109.             throw new OrekitException(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY,
  110.                                       TrajectoryStateHistoryMetadataKey.ORB_REVNUM_BASIS.name());
  111.         }
  112.     }

  113.     /** Get trajectory identification number.
  114.      * @return trajectory identification number
  115.      */
  116.     public String getTrajID() {
  117.         return trajID;
  118.     }

  119.     /** Set trajectory identification number.
  120.      * @param trajID trajectory identification number
  121.      */
  122.     public void setTrajID(final String trajID) {
  123.         refuseFurtherComments();
  124.         this.trajID = trajID;
  125.     }

  126.     /** Get identification number of previous trajectory.
  127.      * @return identification number of previous trajectory
  128.      */
  129.     public String getTrajPrevID() {
  130.         return trajPrevID;
  131.     }

  132.     /** Set identification number of previous trajectory.
  133.      * @param trajPrevID identification number of previous trajectory
  134.      */
  135.     public void setTrajPrevID(final String trajPrevID) {
  136.         refuseFurtherComments();
  137.         this.trajPrevID = trajPrevID;
  138.     }

  139.     /** Get identification number of next trajectory.
  140.      * @return identification number of next trajectory
  141.      */
  142.     public String getTrajNextID() {
  143.         return trajNextID;
  144.     }

  145.     /** Set identification number of next trajectory.
  146.      * @param trajNextID identification number of next trajectory
  147.      */
  148.     public void setTrajNextID(final String trajNextID) {
  149.         refuseFurtherComments();
  150.         this.trajNextID = trajNextID;
  151.     }

  152.     /** Get basis of this trajectory state time history data.
  153.      * @return basis of this trajectory state time history data
  154.      */
  155.     public String getTrajBasis() {
  156.         return trajBasis;
  157.     }

  158.     /** Set basis of this trajectory state time history data.
  159.      * @param trajBasis basis of this trajectory state time history data
  160.      */
  161.     public void setTrajBasis(final String trajBasis) {
  162.         refuseFurtherComments();
  163.         this.trajBasis = trajBasis;
  164.     }

  165.     /** Get identification number of the orbit determination or simulation upon which this trajectory is based.
  166.      * @return identification number of the orbit determination or simulation upon which this trajectory is based
  167.      */
  168.     public String getTrajBasisID() {
  169.         return trajBasisID;
  170.     }

  171.     /** Set identification number of the orbit determination or simulation upon which this trajectory is based.
  172.      * @param trajBasisID identification number of the orbit determination or simulation upon which this trajectory is based
  173.      */
  174.     public void setTrajBasisID(final String trajBasisID) {
  175.         refuseFurtherComments();
  176.         this.trajBasisID = trajBasisID;
  177.     }

  178.     /** Get the interpolation method to be used.
  179.      * @return the interpolation method
  180.      */
  181.     public InterpolationMethod getInterpolationMethod() {
  182.         return interpolationMethod;
  183.     }

  184.     /** Set the interpolation method to be used.
  185.      * @param interpolationMethod the interpolation method to be set
  186.      */
  187.     public void setInterpolationMethod(final InterpolationMethod interpolationMethod) {
  188.         refuseFurtherComments();
  189.         this.interpolationMethod = interpolationMethod;
  190.     }

  191.     /** Get the interpolation degree.
  192.      * @return the interpolation degree
  193.      */
  194.     public int getInterpolationDegree() {
  195.         return interpolationDegree;
  196.     }

  197.     /** Set the interpolation degree.
  198.      * @param interpolationDegree the interpolation degree to be set
  199.      */
  200.     public void setInterpolationDegree(final int interpolationDegree) {
  201.         refuseFurtherComments();
  202.         this.interpolationDegree = interpolationDegree;
  203.     }

  204.     /** Get the orbit propagator used to generate this trajectory.
  205.      * @return orbit propagator used to generate this trajectory
  206.      * @since 11.2
  207.      */
  208.     public String getPropagator() {
  209.         return propagator;
  210.     }

  211.     /** Set the orbit propagator used to generate this trajectory.
  212.      * @param propagator orbit propagator used to generate this trajectory
  213.      * @since 11.2
  214.      */
  215.     public void setPropagator(final String propagator) {
  216.         refuseFurtherComments();
  217.         this.propagator = propagator;
  218.     }

  219.     /** Get the origin of reference frame.
  220.      * @return the origin of reference frame.
  221.      */
  222.     public BodyFacade getCenter() {
  223.         return center;
  224.     }

  225.     /** Set the origin of reference frame.
  226.      * @param center origin of reference frame to be set
  227.      */
  228.     public void setCenter(final BodyFacade center) {
  229.         refuseFurtherComments();
  230.         this.center = center;
  231.     }

  232.     /** Get reference frame of the trajectory.
  233.      * @return reference frame of the trajectory
  234.      */
  235.     public FrameFacade getTrajReferenceFrame() {
  236.         return trajReferenceFrame;
  237.     }

  238.     /** Set reference frame of the trajectory.
  239.      * @param trajReferenceFrame the reference frame to be set
  240.      */
  241.     public void setTrajReferenceFrame(final FrameFacade trajReferenceFrame) {
  242.         refuseFurtherComments();
  243.         this.trajReferenceFrame = trajReferenceFrame;
  244.     }

  245.     /** Get epoch of the {@link #getTrajReferenceFrame() trajectory reference frame}.
  246.      * @return epoch of the {@link #getTrajReferenceFrame() trajectory reference frame}
  247.      */
  248.     public AbsoluteDate getTrajFrameEpoch() {
  249.         return trajFrameEpoch;
  250.     }

  251.     /** Set epoch of the {@link #getTrajReferenceFrame() trajectory reference frame}.
  252.      * @param trajFrameEpoch epoch of the {@link #getTrajReferenceFrame() trajectory reference frame}
  253.      */
  254.     public void setTrajFrameEpoch(final AbsoluteDate trajFrameEpoch) {
  255.         refuseFurtherComments();
  256.         this.trajFrameEpoch = trajFrameEpoch;
  257.     }

  258.     /** Get start of useable time span covered by ephemerides data, it may be
  259.      * necessary to allow for proper interpolation.
  260.      * @return the useable start time
  261.      */
  262.     public AbsoluteDate getUseableStartTime() {
  263.         return useableStartTime;
  264.     }

  265.     /** Set start of useable time span covered by ephemerides data, it may be
  266.      * necessary to allow for proper interpolation.
  267.      * @param useableStartTime the time to be set
  268.      */
  269.     public void setUseableStartTime(final AbsoluteDate useableStartTime) {
  270.         refuseFurtherComments();
  271.         this.useableStartTime = useableStartTime;
  272.     }

  273.     /** Get end of useable time span covered by ephemerides data, it may be
  274.      * necessary to allow for proper interpolation.
  275.      * @return the useable stop time
  276.      */
  277.     public AbsoluteDate getUseableStopTime() {
  278.         return useableStopTime;
  279.     }

  280.     /** Set end of useable time span covered by ephemerides data, it may be
  281.      * necessary to allow for proper interpolation.
  282.      * @param useableStopTime the time to be set
  283.      */
  284.     public void setUseableStopTime(final AbsoluteDate useableStopTime) {
  285.         refuseFurtherComments();
  286.         this.useableStopTime = useableStopTime;
  287.     }

  288.     /** Get the integer orbit revolution number.
  289.      * @return integer orbit revolution number (-1 if not set)
  290.      */
  291.     public int getOrbRevNum() {
  292.         return orbRevNum;
  293.     }

  294.     /** Set the integer orbit revolution number.
  295.      * @param orbRevNum integer orbit revolution number
  296.      */
  297.     public void setOrbRevNum(final int orbRevNum) {
  298.         this.orbRevNum = orbRevNum;
  299.     }

  300.     /** Get the basis for orbit revolution number.
  301.      * <p>
  302.      * This specifies if first launch/deployment is on orbit 0 or 1.
  303.      * </p>
  304.      * @return basis for orbit revolution number (-1 if not set)
  305.      */
  306.     public int getOrbRevNumBasis() {
  307.         return orbRevNumBasis;
  308.     }

  309.     /** Set the basis for orbit revolution number.
  310.      * <p>
  311.      * This specifies if first launch/deployment is on orbit 0 or 1.
  312.      * </p>
  313.      * @param orbRevNumBasis basis for orbit revolution number
  314.      */
  315.     public void setOrbRevNumBasis(final int orbRevNumBasis) {
  316.         this.orbRevNumBasis = orbRevNumBasis;
  317.     }

  318.     /** Get trajectory element set type.
  319.      * @return trajectory element set type
  320.      */
  321.     public ElementsType getTrajType() {
  322.         return trajType;
  323.     }

  324.     /** Set trajectory element set type.
  325.      * @param trajType trajectory element set type
  326.      */
  327.     public void setTrajType(final ElementsType trajType) {
  328.         refuseFurtherComments();
  329.         this.trajType = trajType;
  330.     }

  331.     /** Get type of averaging (Osculating, mean Brouwer, other.
  332.      * @return type of averaging (Osculating, mean Brouwer, other
  333.      .). */
  334.     public String getOrbAveraging() {
  335.         return orbAveraging;
  336.     }

  337.     /** Set type of averaging (Osculating, mean Brouwer, other.
  338.      * @param orbAveraging type of averaging (Osculating, mean Brouwer, other
  339.      .). */
  340.     public void setOrbAveraging(final String orbAveraging) {
  341.         refuseFurtherComments();
  342.         this.orbAveraging = orbAveraging;
  343.     }

  344.     /** Get trajectory element set units.
  345.      * @return trajectory element set units
  346.      */
  347.     public List<Unit> getTrajUnits() {
  348.         return trajUnits;
  349.     }

  350.     /** Set trajectory element set units.
  351.      * @param trajUnits trajectory element set units
  352.      */
  353.     public void setTrajUnits(final List<Unit> trajUnits) {
  354.         refuseFurtherComments();
  355.         this.trajUnits = trajUnits;
  356.     }

  357. }