OrbitCovarianceHistoryMetadata.java

/* Copyright 2002-2024 CS GROUP
 * Licensed to CS GROUP (CS) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * CS licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.orekit.files.ccsds.ndm.odm.ocm;

import java.util.List;

import org.orekit.files.ccsds.definitions.FrameFacade;
import org.orekit.files.ccsds.definitions.OrbitRelativeFrame;
import org.orekit.files.ccsds.section.CommentsContainer;
import org.orekit.time.AbsoluteDate;
import org.orekit.utils.units.Unit;

/** Metadata for covariance history.
 * @author Luc Maisonobe
 * @since 11.0
 */
public class OrbitCovarianceHistoryMetadata extends CommentsContainer {

    /** Covariance identification number. */
    private String covID;

    /** Identification number of previous covariance. */
    private String covPrevID;

    /** Identification number of next covariance. */
    private String covNextID;

    /** Basis of this covariance time history data. */
    private String covBasis;

    /** Identification number of the covariance determination or simulation upon which this covariance is based. */
    private String covBasisID;

    /** Reference frame of the covariance. */
    private FrameFacade covReferenceFrame;

    /** Epoch of the covariance reference frame. */
    private AbsoluteDate covFrameEpoch;

    /** Minimum scale factor to apply to achieve realism. */
    private double covScaleMin;

    /** Maximum scale factor to apply to achieve realism. */
    private double covScaleMax;

    /** Measure of confidence in covariance error matching reality. */
    private double covConfidence;

    /** Covariance element set type. */
    private OrbitElementsType covType;

    /** Covariance ordering. */
    private Ordering covOrdering;

    /** Units of covariance element set. */
    private List<Unit> covUnits;

    /** Simple constructor.
     * @param epochT0 T0 epoch from file metadata
     */
    public OrbitCovarianceHistoryMetadata(final AbsoluteDate epochT0) {
        // we don't call the setXxx() methods in order to avoid
        // calling refuseFurtherComments as a side effect
        covBasis          = null;
        covReferenceFrame = new FrameFacade(null, null,
                                            OrbitRelativeFrame.TNW_INERTIAL, null,
                                            OrbitRelativeFrame.TNW_INERTIAL.name());
        covFrameEpoch     = epochT0;
        covScaleMin       = Double.NaN;
        covScaleMax       = Double.NaN;
        covConfidence     = Double.NaN;
        covType           = OrbitElementsType.CARTPV;
        covOrdering       = Ordering.LTM;
    }

    /** {@inheritDoc} */
    @Override
    public void validate(final double version) {
        super.validate(version);
        if (covUnits != null) {
            Unit.ensureCompatible(covType.toString(), covType.getUnits(), false, covUnits);
        }
    }

    /** Get covariance identification number.
     * @return covariance identification number
     */
    public String getCovID() {
        return covID;
    }

    /** Set covariance identification number.
     * @param covID covariance identification number
     */
    public void setCovID(final String covID) {
        refuseFurtherComments();
        this.covID = covID;
    }

    /** Get identification number of previous covariance.
     * @return identification number of previous covariance
     */
    public String getCovPrevID() {
        return covPrevID;
    }

    /** Set identification number of previous covariance.
     * @param covPrevID identification number of previous covariance
     */
    public void setCovPrevID(final String covPrevID) {
        refuseFurtherComments();
        this.covPrevID = covPrevID;
    }

    /** Get identification number of next covariance.
     * @return identification number of next covariance
     */
    public String getCovNextID() {
        return covNextID;
    }

    /** Set identification number of next covariance.
     * @param covNextID identification number of next covariance
     */
    public void setCovNextID(final String covNextID) {
        refuseFurtherComments();
        this.covNextID = covNextID;
    }

    /** Get basis of this covariance time history data.
     * @return basis of this covariance time history data
     */
    public String getCovBasis() {
        return covBasis;
    }

    /** Set basis of this covariance time history data.
     * @param covBasis basis of this covariance time history data
     */
    public void setCovBasis(final String covBasis) {
        refuseFurtherComments();
        this.covBasis = covBasis;
    }

    /** Get identification number of the orbit determination or simulation upon which this covariance is based.
     * @return identification number of the orbit determination or simulation upon which this covariance is based
     */
    public String getCovBasisID() {
        return covBasisID;
    }

    /** Set identification number of the orbit determination or simulation upon which this covariance is based.
     * @param covBasisID identification number of the orbit determination or simulation upon which this covariance is based
     */
    public void setCovBasisID(final String covBasisID) {
        refuseFurtherComments();
        this.covBasisID = covBasisID;
    }

    /** Get reference frame of the covariance.
     * @return reference frame of the covariance
     */
    public FrameFacade getCovReferenceFrame() {
        return covReferenceFrame;
    }

    /** Set reference frame of the covariance.
     * @param covReferenceFrame the reference frame to be set
     */
    public void setCovReferenceFrame(final FrameFacade covReferenceFrame) {
        refuseFurtherComments();
        this.covReferenceFrame = covReferenceFrame;
    }

    /** Get epoch of the {@link #getCovReferenceFrame() covariance reference frame}.
     * @return epoch of the {@link #getCovReferenceFrame() covariance reference frame}
     */
    public AbsoluteDate getCovFrameEpoch() {
        return covFrameEpoch;
    }

    /** Set epoch of the {@link #getCovReferenceFrame() covariance reference frame}.
     * @param covFrameEpoch epoch of the {@link #getCovReferenceFrame() covariance reference frame}
     */
    public void setCovFrameEpoch(final AbsoluteDate covFrameEpoch) {
        refuseFurtherComments();
        this.covFrameEpoch = covFrameEpoch;
    }

    /** Set the minimum scale factor to apply to achieve realism.
     * @param covScaleMin minimum scale factor to apply to achieve realism
     */
    public void setCovScaleMin(final double covScaleMin) {
        this.covScaleMin = covScaleMin;
    }

    /** Get the minimum scale factor to apply to achieve realism.
     * @return minimum scale factor to apply to achieve realism
     */
    public double getCovScaleMin() {
        return covScaleMin;
    }

    /** Set the maximum scale factor to apply to achieve realism.
     * @param covScaleMax maximum scale factor to apply to achieve realism
     */
    public void setCovScaleMax(final double covScaleMax) {
        this.covScaleMax = covScaleMax;
    }

    /** Get the maximum scale factor to apply to achieve realism.
     * @return maximum scale factor to apply to achieve realism
     */
    public double getCovScaleMax() {
        return covScaleMax;
    }

    /** Set the measure of confidence in covariance error matching reality.
     * @param covConfidence measure of confidence in covariance error matching reality
     */
    public void setCovConfidence(final double covConfidence) {
        this.covConfidence = covConfidence;
    }

    /** Get the measure of confidence in covariance error matching reality.
     * @return measure of confidence in covariance error matching reality
     */
    public double getCovConfidence() {
        return covConfidence;
    }

    /** Get covariance element set type.
     * @return covariance element set type
     */
    public OrbitElementsType getCovType() {
        return covType;
    }

    /** Set covariance element set type.
     * @param covType covariance element set type
     */
    public void setCovType(final OrbitElementsType covType) {
        refuseFurtherComments();
        this.covType = covType;
    }

    /** Get covariance ordering.
     * @return covariance ordering
     */
    public Ordering getCovOrdering() {
        return covOrdering;
    }

    /** Set covariance ordering.
     * @param covOrdering covariance ordering
     */
    public void setCovOrdering(final Ordering covOrdering) {
        refuseFurtherComments();
        this.covOrdering = covOrdering;
    }

    /** Get covariance element set units.
     * @return covariance element set units
     */
    public List<Unit> getCovUnits() {
        return covUnits;
    }

    /** Set covariance element set units.
     * @param covUnits covariance element set units
     */
    public void setCovUnits(final List<Unit> covUnits) {
        refuseFurtherComments();
        this.covUnits = covUnits;
    }

}