OrbitRelativeFrame.java

  1. /* Copyright 2002-2025 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.definitions;

  18. import org.orekit.frames.LOFType;

  19. /** Frames used in CCSDS Orbit Data Messages.
  20.  * @author Luc Maisonobe
  21.  * @since 11.0
  22.  */
  23. public enum OrbitRelativeFrame {

  24.     /** Equinoctial coordinate system (X towards ascending node, Z towards momentum). */
  25.     EQW_INERTIAL(LOFType.EQW, true),

  26.     /** Local vertical, Local Horizontal (Z towards nadir, Y opposite to momentum). */
  27.     LVLH_ROTATING(LOFType.LVLH_CCSDS, false),

  28.     /** Local vertical, Local Horizontal (Z towards nadir, Y opposite to momentum). */
  29.     LVLH_INERTIAL(LOFType.LVLH_CCSDS_INERTIAL, true),

  30.     /** Local vertical, Local Horizontal (Z towards nadir, Y opposite to momentum). */
  31.     LVLH(LOFType.LVLH_CCSDS, false),

  32.     /** Nadir, Sun, Normal (X towards nadir, Y as close to Sun as possible). */
  33.     NSW_ROTATING(null, false),

  34.     /** Nadir, Sun, Normal (X towards nadir, Y as close to Sun as possible). */
  35.     NSW_INERTIAL(null, true),

  36.     /** Transverse Velocity Normal coordinate system (Y towards velocity, Z towards momentum). */
  37.     NTW_ROTATING(LOFType.NTW, false),

  38.     /** Transverse Velocity Normal coordinate system (Y towards velocity, Z towards momentum). */
  39.     NTW_INERTIAL(LOFType.NTW_INERTIAL, true),

  40.     /** Perifocal coordinate system (X towards periapsis, Z towards momentum). */
  41.     PQW_INERTIAL(null, true),

  42.     /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */
  43.     RSW_ROTATING(LOFType.QSW, false),

  44.     /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */
  45.     RSW_INERTIAL(LOFType.QSW_INERTIAL, true),

  46.     /** Another name for Radial, Transverse (along-track) and Normal. */
  47.     RSW(LOFType.QSW, false),

  48.     /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */
  49.     RIC(LOFType.QSW, false),

  50.     /** Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */
  51.     RTN(LOFType.QSW, false),

  52.     /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */
  53.     QSW(LOFType.QSW, false),

  54.     /** Tangential, Normal, Cross-track coordinate system (X towards velocity, Z towards momentum). */
  55.     TNW_ROTATING(LOFType.TNW, false),

  56.     /** Tangential, Normal, Cross-track coordinate system (X towards velocity, Z towards momentum). */
  57.     TNW_INERTIAL(LOFType.TNW_INERTIAL, true),

  58.     /** TNW : x-axis along the velocity vector, W along the orbital angular momentum vector and
  59.     N completes the right-handed system. */
  60.     TNW(LOFType.TNW, false),

  61.     /** South, East, Zenith coordinate system. */
  62.     SEZ_ROTATING(null, false),

  63.     /** South, East, Zenith coordinate system. */
  64.     SEZ_INERTIAL(null, true),

  65.     /** Velocity, Normal, Co-normal coordinate system (X towards velocity, Y towards momentum). */
  66.     VNC_ROTATING(LOFType.VNC, false),

  67.     /** Velocity, Normal, Co-normal coordinate system (X towards velocity, Y towards momentum). */
  68.     VNC_INERTIAL(LOFType.VNC_INERTIAL, true);

  69.     /** Type of Local Orbital Frame (may-be null). */
  70.     private final LOFType lofType;

  71.     /** Flag for inertial orientation. */
  72.     private final boolean quasiInertial;

  73.     /** Simple constructor.
  74.      * @param lofType type of Local Orbital Frame (null if frame is not a Local Orbital Frame)
  75.      * @param quasiInertial if true, frame should be treated as an inertial coordinate system
  76.      */
  77.     OrbitRelativeFrame(final LOFType lofType, final boolean quasiInertial) {
  78.         this.lofType       = lofType;
  79.         this.quasiInertial = quasiInertial;
  80.     }

  81.     /** Get the type of Local Orbital frame.
  82.      * @return type of Local Orbital Frame, or null if the frame is not a local orbital frame
  83.      */
  84.     public LOFType getLofType() {
  85.         return lofType;
  86.     }

  87.     /** Check if frame should be treated as inertial.
  88.      * <p>
  89.      * A frame treated as an inertial coordinate system if it
  90.      * is considered to be redefined at each time of interest
  91.      * </p>
  92.      * @return true if frame should be treated as inertial
  93.      */
  94.     public boolean isQuasiInertial() {
  95.         return quasiInertial;
  96.     }

  97. }