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 }