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.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 }