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 19 import org.orekit.frames.LOFType; 20 21 /** Frames used in CCSDS Orbit Data Messages. 22 * @author Luc Maisonobe 23 * @since 11.0 24 */ 25 public enum OrbitRelativeFrame { 26 27 /** Equinoctial coordinate system (X towards ascending node, Z towards momentum). */ 28 EQW_INERTIAL(LOFType.EQW, true), 29 30 /** Local vertical, Local Horizontal (Z towards nadir, Y opposite to momentum). */ 31 LVLH_ROTATING(LOFType.LVLH_CCSDS, false), 32 33 /** Local vertical, Local Horizontal (Z towards nadir, Y opposite to momentum). */ 34 LVLH_INERTIAL(LOFType.LVLH_CCSDS_INERTIAL, true), 35 36 /** Local vertical, Local Horizontal (Z towards nadir, Y opposite to momentum). */ 37 LVLH(LOFType.LVLH_CCSDS, false), 38 39 /** Nadir, Sun, Normal (X towards nadir, Y as close to Sun as possible). */ 40 NSW_ROTATING(null, false), 41 42 /** Nadir, Sun, Normal (X towards nadir, Y as close to Sun as possible). */ 43 NSW_INERTIAL(null, true), 44 45 /** Transverse Velocity Normal coordinate system (Y towards velocity, Z towards momentum). */ 46 NTW_ROTATING(LOFType.NTW, false), 47 48 /** Transverse Velocity Normal coordinate system (Y towards velocity, Z towards momentum). */ 49 NTW_INERTIAL(LOFType.NTW_INERTIAL, true), 50 51 /** Perifocal coordinate system (X towards periapsis, Z towards momentum). */ 52 PQW_INERTIAL(null, true), 53 54 /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */ 55 RSW_ROTATING(LOFType.QSW, false), 56 57 /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */ 58 RSW_INERTIAL(LOFType.QSW_INERTIAL, true), 59 60 /** Another name for Radial, Transverse (along-track) and Normal. */ 61 RSW(LOFType.QSW, false), 62 63 /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */ 64 RIC(LOFType.QSW, false), 65 66 /** Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */ 67 RTN(LOFType.QSW, false), 68 69 /** Another name for Radial, Transverse (along-track) and Normal (X towards zenith, Z towards momentum). */ 70 QSW(LOFType.QSW, false), 71 72 /** Tangential, Normal, Cross-track coordinate system (X towards velocity, Z towards momentum). */ 73 TNW_ROTATING(LOFType.TNW, false), 74 75 /** Tangential, Normal, Cross-track coordinate system (X towards velocity, Z towards momentum). */ 76 TNW_INERTIAL(LOFType.TNW_INERTIAL, true), 77 78 /** TNW : x-axis along the velocity vector, W along the orbital angular momentum vector and 79 N completes the right-handed system. */ 80 TNW(LOFType.TNW, false), 81 82 /** South, East, Zenith coordinate system. */ 83 SEZ_ROTATING(null, false), 84 85 /** South, East, Zenith coordinate system. */ 86 SEZ_INERTIAL(null, true), 87 88 /** Velocity, Normal, Co-normal coordinate system (X towards velocity, Y towards momentum). */ 89 VNC_ROTATING(LOFType.VNC, false), 90 91 /** Velocity, Normal, Co-normal coordinate system (X towards velocity, Y towards momentum). */ 92 VNC_INERTIAL(LOFType.VNC_INERTIAL, true); 93 94 /** Type of Local Orbital Frame (may-be null). */ 95 private final LOFType lofType; 96 97 /** Flag for inertial orientation. */ 98 private final boolean quasiInertial; 99 100 /** Simple constructor. 101 * @param lofType type of Local Orbital Frame (null if frame is not a Local Orbital Frame) 102 * @param quasiInertial if true, frame should be treated as an inertial coordinate system 103 */ 104 OrbitRelativeFrame(final LOFType lofType, final boolean quasiInertial) { 105 this.lofType = lofType; 106 this.quasiInertial = quasiInertial; 107 } 108 109 /** Get the type of Local Orbital frame. 110 * @return type of Local Orbital Frame, or null if the frame is not a local orbital frame 111 */ 112 public LOFType getLofType() { 113 return lofType; 114 } 115 116 /** Check if frame should be treated as inertial. 117 * <p> 118 * A frame treated as an inertial coordinate system if it 119 * is considered to be redefined at each time of interest 120 * </p> 121 * @return true if frame should be treated as inertial 122 */ 123 public boolean isQuasiInertial() { 124 return quasiInertial; 125 } 126 127 }