OrbitDetermination.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.odm.ocm;

  18. import java.util.Collections;
  19. import java.util.List;

  20. import org.orekit.files.ccsds.definitions.OdMethodFacade;
  21. import org.orekit.files.ccsds.section.CommentsContainer;
  22. import org.orekit.time.AbsoluteDate;

  23. /** Orbit determination data.
  24.  * @author Luc Maisonobe
  25.  * @since 11.0
  26.  */
  27. public class OrbitDetermination extends CommentsContainer {

  28.     /** Identification number. */
  29.     private String id;

  30.     /** Identification of previous orbit determination. */
  31.     private String prevId;

  32.     /** Orbit determination method. */
  33.     private OdMethodFacade method;

  34.     /** Time tag for orbit determination solved-for state. */
  35.     private AbsoluteDate epoch;

  36.     /** Time elapsed between first accepted observation on epoch. */
  37.     private double timeSinceFirstObservation;

  38.     /** Time elapsed between last accepted observation on epoch. */
  39.     private double timeSinceLastObservation;

  40.     /** Sime span of observation recommended for the OD of the object. */
  41.     private double recommendedOdSpan;

  42.     /** Actual time span used for the OD of the object. */
  43.     private double actualOdSpan;

  44.     /** Number of observations available within the actual OD span. */
  45.     private int obsAvailable;

  46.     /** Number of observations accepted within the actual OD span. */
  47.     private int obsUsed;

  48.     /** Number of sensors tracks available for the OD within the actual OD span. */
  49.     private int tracksAvailable;

  50.     /** Number of sensors tracks accepted for the OD within the actual OD span. */
  51.     private int tracksUsed;

  52.     /** Maximum time between observations in the OD of the object. */
  53.     private double maximumObsGap;

  54.     /** Positional error ellipsoid 1σ major eigenvalue at the epoch of OD. */
  55.     private double epochEigenMaj;

  56.     /** Positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD. */
  57.     private double epochEigenInt;

  58.     /** Positional error ellipsoid 1σ minor eigenvalue at the epoch of OD. */
  59.     private double epochEigenMin;

  60.     /** Maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM. */
  61.     private double maxPredictedEigenMaj;

  62.     /** Minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM. */
  63.     private double minPredictedEigenMin;

  64.     /** Confidence metric. */
  65.     private double confidence;

  66.     /** Generalize Dilution Of Precision. */
  67.     private double gdop;

  68.     /** Number of solved-for states. */
  69.     private int solveN;

  70.     /** Description of state elements solved-for. */
  71.     private List<String> solveStates;

  72.     /** Number of consider parameters. */
  73.     private int considerN;

  74.     /** Description of consider parameters. */
  75.     private List<String> considerParameters;

  76.     /** Specific Energy Dissipation Rate.
  77.      * @since 12.0
  78.      */
  79.     private double sedr;

  80.     /** Number of sensors used. */
  81.     private int sensorsN;

  82.     /** Description of sensors used. */
  83.     private List<String> sensors;

  84.     /** Weighted RMS residual ratio. */
  85.     private double weightedRms;

  86.     /** Observation data types used. */
  87.     private List<String> dataTypes;

  88.     /** Simple constructor.
  89.      */
  90.     public OrbitDetermination() {
  91.         sedr               = Double.NaN;
  92.         solveStates        = Collections.emptyList();
  93.         considerParameters = Collections.emptyList();
  94.         sensors            = Collections.emptyList();
  95.         dataTypes          = Collections.emptyList();
  96.     }

  97.     /** {@inheritDoc} */
  98.     @Override
  99.     public void validate(final double version) {
  100.         super.validate(version);
  101.         checkNotNull(id,     OrbitDeterminationKey.OD_ID.name());
  102.         checkNotNull(method, OrbitDeterminationKey.OD_METHOD.name());
  103.         checkNotNull(epoch,  OrbitDeterminationKey.OD_EPOCH.name());
  104.     }

  105.     /** Get identification number.
  106.      * @return identification number
  107.      */
  108.     public String getId() {
  109.         return id;
  110.     }

  111.     /** Set identification number.
  112.      * @param id identification number
  113.      */
  114.     public void setId(final String id) {
  115.         this.id = id;
  116.     }

  117.     /** Get identification of previous orbit determination.
  118.      * @return identification of previous orbit determination
  119.      */
  120.     public String getPrevId() {
  121.         return prevId;
  122.     }

  123.     /** Set identification of previous orbit determination.
  124.      * @param prevId identification of previous orbit determination
  125.      */
  126.     public void setPrevId(final String prevId) {
  127.         this.prevId = prevId;
  128.     }

  129.     /** Get orbit determination method.
  130.      * @return orbit determination method
  131.      */
  132.     public OdMethodFacade getMethod() {
  133.         return method;
  134.     }

  135.     /** Set orbit determination method.
  136.      * @param method orbit determination method
  137.      */
  138.     public void setMethod(final OdMethodFacade method) {
  139.         this.method = method;
  140.     }

  141.     /** Get time tag for orbit determination solved-for state.
  142.      * @return time tag for orbit determination solved-for state
  143.      */
  144.     public AbsoluteDate getEpoch() {
  145.         return epoch;
  146.     }

  147.     /** Set time tag for orbit determination solved-for state.
  148.      * @param epoch time tag for orbit determination solved-for state
  149.      */
  150.     public void setEpoch(final AbsoluteDate epoch) {
  151.         this.epoch = epoch;
  152.     }

  153.     /** Get time elapsed between first accepted observation on epoch.
  154.      * @return time elapsed between first accepted observation on epoch
  155.      */
  156.     public double getTimeSinceFirstObservation() {
  157.         return timeSinceFirstObservation;
  158.     }

  159.     /** Set time elapsed between first accepted observation on epoch.
  160.      * @param timeSinceFirstObservation time elapsed between first accepted observation on epoch
  161.      */
  162.     public void setTimeSinceFirstObservation(final double timeSinceFirstObservation) {
  163.         this.timeSinceFirstObservation = timeSinceFirstObservation;
  164.     }

  165.     /** Get time elapsed between last accepted observation on epoch.
  166.      * @return time elapsed between last accepted observation on epoch
  167.      */
  168.     public double getTimeSinceLastObservation() {
  169.         return timeSinceLastObservation;
  170.     }

  171.     /** Set time elapsed between last accepted observation on epoch.
  172.      * @param timeSinceLastObservation time elapsed between last accepted observation on epoch
  173.      */
  174.     public void setTimeSinceLastObservation(final double timeSinceLastObservation) {
  175.         this.timeSinceLastObservation = timeSinceLastObservation;
  176.     }

  177.     /** Get time span of observation recommended for the OD of the object.
  178.      * @return time span of observation recommended for the OD of the object
  179.      */
  180.     public double getRecommendedOdSpan() {
  181.         return recommendedOdSpan;
  182.     }

  183.     /** Set time span of observation recommended for the OD of the object.
  184.      * @param recommendedOdSpan time span of observation recommended for the OD of the object
  185.      */
  186.     public void setRecommendedOdSpan(final double recommendedOdSpan) {
  187.         this.recommendedOdSpan = recommendedOdSpan;
  188.     }

  189.     /** Get actual time span used for the OD of the object.
  190.      * @return actual time span used for the OD of the object
  191.      */
  192.     public double getActualOdSpan() {
  193.         return actualOdSpan;
  194.     }

  195.     /** Set actual time span used for the OD of the object.
  196.      * @param actualOdSpan actual time span used for the OD of the object
  197.      */
  198.     public void setActualOdSpan(final double actualOdSpan) {
  199.         this.actualOdSpan = actualOdSpan;
  200.     }

  201.     /** Get number of observations available within the actual OD span.
  202.      * @return number of observations available within the actual OD span
  203.      */
  204.     public int getObsAvailable() {
  205.         return obsAvailable;
  206.     }

  207.     /** Set number of observations available within the actual OD span.
  208.      * @param obsAvailable number of observations available within the actual OD span
  209.      */
  210.     public void setObsAvailable(final int obsAvailable) {
  211.         this.obsAvailable = obsAvailable;
  212.     }

  213.     /** Get number of observations accepted within the actual OD span.
  214.      * @return number of observations accepted within the actual OD span
  215.      */
  216.     public int getObsUsed() {
  217.         return obsUsed;
  218.     }

  219.     /** Set number of observations accepted within the actual OD span.
  220.      * @param obsUsed number of observations accepted within the actual OD span
  221.      */
  222.     public void setObsUsed(final int obsUsed) {
  223.         this.obsUsed = obsUsed;
  224.     }

  225.     /** Get number of sensors tracks available for the OD within the actual OD span.
  226.      * @return number of sensors tracks available for the OD within the actual OD span
  227.      */
  228.     public int getTracksAvailable() {
  229.         return tracksAvailable;
  230.     }

  231.     /** Set number of sensors tracks available for the OD within the actual OD span.
  232.      * @param tracksAvailable number of sensors tracks available for the OD within the actual OD span
  233.      */
  234.     public void setTracksAvailable(final int tracksAvailable) {
  235.         this.tracksAvailable = tracksAvailable;
  236.     }

  237.     /** Get number of sensors tracks accepted for the OD within the actual OD span.
  238.      * @return number of sensors tracks accepted for the OD within the actual OD span
  239.      */
  240.     public int getTracksUsed() {
  241.         return tracksUsed;
  242.     }

  243.     /** Set number of sensors tracks accepted for the OD within the actual OD span.
  244.      * @param tracksUsed number of sensors tracks accepted for the OD within the actual OD span
  245.      */
  246.     public void setTracksUsed(final int tracksUsed) {
  247.         this.tracksUsed = tracksUsed;
  248.     }

  249.     /** Get maximum time between observations in the OD of the object.
  250.      * @return maximum time between observations in the OD of the object
  251.      */
  252.     public double getMaximumObsGap() {
  253.         return maximumObsGap;
  254.     }

  255.     /** Set maximum time between observations in the OD of the object.
  256.      * @param maximumObsGap maximum time between observations in the OD of the object
  257.      */
  258.     public void setMaximumObsGap(final double maximumObsGap) {
  259.         this.maximumObsGap = maximumObsGap;
  260.     }

  261.     /** Get positional error ellipsoid 1σ major eigenvalue at the epoch of OD.
  262.      * @return positional error ellipsoid 1σ major eigenvalue at the epoch of OD
  263.      */
  264.     public double getEpochEigenMaj() {
  265.         return epochEigenMaj;
  266.     }

  267.     /** Set positional error ellipsoid 1σ major eigenvalue at the epoch of OD.
  268.      * @param epochEigenMaj positional error ellipsoid 1σ major eigenvalue at the epoch of OD
  269.      */
  270.     public void setEpochEigenMaj(final double epochEigenMaj) {
  271.         this.epochEigenMaj = epochEigenMaj;
  272.     }

  273.     /** Get positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD.
  274.      * @return positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD
  275.      */
  276.     public double getEpochEigenInt() {
  277.         return epochEigenInt;
  278.     }

  279.     /** Set positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD.
  280.      * @param epochEigenInt positional error ellipsoid 1σ intermediate eigenvalue at the epoch of OD
  281.      */
  282.     public void setEpochEigenInt(final double epochEigenInt) {
  283.         this.epochEigenInt = epochEigenInt;
  284.     }

  285.     /** Get positional error ellipsoid 1σ minor eigenvalue at the epoch of OD.
  286.      * @return positional error ellipsoid 1σ minor eigenvalue at the epoch of OD
  287.      */
  288.     public double getEpochEigenMin() {
  289.         return epochEigenMin;
  290.     }

  291.     /** Set positional error ellipsoid 1σ minor eigenvalue at the epoch of OD.
  292.      * @param epochEigenMin positional error ellipsoid 1σ minor eigenvalue at the epoch of OD
  293.      */
  294.     public void setEpochEigenMin(final double epochEigenMin) {
  295.         this.epochEigenMin = epochEigenMin;
  296.     }

  297.     /** Get maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
  298.      * @return maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
  299.      */
  300.     public double getMaxPredictedEigenMaj() {
  301.         return maxPredictedEigenMaj;
  302.     }

  303.     /** Set maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
  304.      * @param maxPredictedEigenMaj maximum predicted major eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
  305.      */
  306.     public void setMaxPredictedEigenMaj(final double maxPredictedEigenMaj) {
  307.         this.maxPredictedEigenMaj = maxPredictedEigenMaj;
  308.     }

  309.     /** Get minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
  310.      * @return minimum predicted v eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
  311.      */
  312.     public double getMinPredictedEigenMin() {
  313.         return minPredictedEigenMin;
  314.     }

  315.     /** Set minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM.
  316.      * @param minPredictedEigenMin minimum predicted minor eigenvalue of 1σ positional error ellipsoid over entire time span of the OCM
  317.      */
  318.     public void setMinPredictedEigenMin(final double minPredictedEigenMin) {
  319.         this.minPredictedEigenMin = minPredictedEigenMin;
  320.     }

  321.     /** Get confidence metric.
  322.      * @return confidence metric
  323.      */
  324.     public double getConfidence() {
  325.         return confidence;
  326.     }

  327.     /** Set confidence metric.
  328.      * @param confidence confidence metric
  329.      */
  330.     public void setConfidence(final double confidence) {
  331.         this.confidence = confidence;
  332.     }

  333.     /** Get generalize Dilution Of Precision.
  334.      * @return generalize Dilution Of Precision
  335.      */
  336.     public double getGdop() {
  337.         return gdop;
  338.     }

  339.     /** Set generalize Dilution Of Precision.
  340.      * @param gdop generalize Dilution Of Precision
  341.      */
  342.     public void setGdop(final double gdop) {
  343.         this.gdop = gdop;
  344.     }

  345.     /** Get number of solved-for states.
  346.      * @return number of solved-for states
  347.      */
  348.     public int getSolveN() {
  349.         return solveN;
  350.     }

  351.     /** Set number of solved-for states.
  352.      * @param solveN number of solved-for states
  353.      */
  354.     public void setSolveN(final int solveN) {
  355.         this.solveN = solveN;
  356.     }

  357.     /** Get description of state elements solved-for.
  358.      * @return description of state elements solved-for
  359.      */
  360.     public List<String> getSolveStates() {
  361.         return solveStates;
  362.     }

  363.     /** Set description of state elements solved-for.
  364.      * @param solveStates description of state elements solved-for
  365.      */
  366.     public void setSolveStates(final List<String> solveStates) {
  367.         this.solveStates = solveStates;
  368.     }

  369.     /** Get number of consider parameters.
  370.      * @return number of consider parameters
  371.      */
  372.     public int getConsiderN() {
  373.         return considerN;
  374.     }

  375.     /** Set number of consider parameters.
  376.      * @param considerN number of consider parameters
  377.      */
  378.     public void setConsiderN(final int considerN) {
  379.         this.considerN = considerN;
  380.     }

  381.     /** Get description of consider parameters.
  382.      * @return description of consider parameters
  383.      */
  384.     public List<String> getConsiderParameters() {
  385.         return considerParameters;
  386.     }

  387.     /** Set description of consider parameters.
  388.      * @param considerParameters description of consider parameters
  389.      */
  390.     public void setConsiderParameters(final List<String> considerParameters) {
  391.         this.considerParameters = considerParameters;
  392.     }

  393.     /** Get Specific Energy Dissipation Rate.
  394.      * @return Specific Energy Dissipation Rate
  395.      * @since 12.0
  396.      */
  397.     public double getSedr() {
  398.         return sedr;
  399.     }

  400.     /** Set Specific Energy Dissipation Rate.
  401.      * @param sedr Specific Energy Dissipation Rate (W/kg)
  402.      * @since 12.0
  403.      */
  404.     public void setSedr(final double sedr) {
  405.         this.sedr = sedr;
  406.     }

  407.     /** Get number of sensors used.
  408.      * @return number of sensors used
  409.      */
  410.     public int getSensorsN() {
  411.         return sensorsN;
  412.     }

  413.     /** Set number of sensors used.
  414.      * @param sensorsN number of sensors used
  415.      */
  416.     public void setSensorsN(final int sensorsN) {
  417.         this.sensorsN = sensorsN;
  418.     }

  419.     /** Get description of sensors used.
  420.      * @return description of sensors used
  421.      */
  422.     public List<String> getSensors() {
  423.         return sensors;
  424.     }

  425.     /** Set description of sensors used.
  426.      * @param sensors description of sensors used
  427.      */
  428.     public void setSensors(final List<String> sensors) {
  429.         this.sensors = sensors;
  430.     }

  431.     /** Get weighted RMS residual ratio.
  432.      * @return weighted RMS residual ratio
  433.      */
  434.     public double getWeightedRms() {
  435.         return weightedRms;
  436.     }

  437.     /** Set weighted RMS residual ratio.
  438.      * @param weightedRms weighted RMS residual ratio
  439.      */
  440.     public void setWeightedRms(final double weightedRms) {
  441.         this.weightedRms = weightedRms;
  442.     }

  443.     /** Get observation data types used.
  444.      * @return observation data types used
  445.      */
  446.     public List<String> getDataTypes() {
  447.         return dataTypes;
  448.     }

  449.     /** Set observation data types used.
  450.      * @param dataTypes observation data types used
  451.      */
  452.     public void setDataTypes(final List<String> dataTypes) {
  453.         this.dataTypes = dataTypes;
  454.     }

  455. }