Observation.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.tdm;

import org.orekit.time.AbsoluteDate;


/** The Observation class contains the data from an observation line.
 * <p>
 * It is not an Orekit object yet. It is a simple container holding:
 * </p>
 * <ul>
 *  <li>a keyword, the type of the observation;</li>
 *  <li>a timetag, the epoch of the observation;</li>
 *  <li>a measurement, the value of the observation.</li>
 * </ul>
 * <p>
 * WARNING. The same class handles many different measurements
 * types (range, Doppler, clocks, pressure, power to noise ratio…).
 * Since Orekit 11.0, it uses only SI units, so angular measurements
 * have already been converted in radians, range has been converted
 * in meters (according to the {@link TdmMetadata#getRangeUnits()
 * range units}, Doppler has been converted to meters per second.
 * Up to Orekit 10.x, the measurements were raw measurements as read
 * in the TDM.
 * </p>
 * @author Maxime Journot
 */
public class Observation {

    /** Type of the observation. */
    private final ObservationType type;

    /** Epoch: the timetag of the observation. */
    private final AbsoluteDate epoch;

    /** Measurement: the value of the observation. */
    private final double measurement;

    /** Simple constructor.
     * @param type type of the observation
     * @param epoch the timetag
     * @param measurement the measurement (in SI units, converted from TDM)
     */
    public Observation(final ObservationType type, final AbsoluteDate epoch, final double measurement) {
        this.type        = type;
        this.epoch       = epoch;
        this.measurement = measurement;
    }

    /** Get the type of observation.
     * @return type of observation
     */
    public ObservationType getType() {
        return type;
    }

    /** Getter for the epoch.
     * @return the epoch
     */
    public AbsoluteDate getEpoch() {
        return epoch;
    }

    /** Getter for the measurement.
     * @return the measurement (in SI units, converted from TDM)
     */
    public double getMeasurement() {
        return measurement;
    }

}