1   /* Copyright 2022-2025 Luc Maisonobe
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.rinex.navigation;
18  
19  import org.orekit.gnss.SatelliteSystem;
20  import org.orekit.time.AbsoluteDate;
21  
22  /** Container for data contained in a Earth Orientation Parameter navigation message.
23   * @author Luc Maisonobe
24   * @since 12.0
25   */
26  public class EarthOrientationParameterMessage extends TypeSvMessage {
27  
28      /** Reference epoch. */
29      private AbsoluteDate referenceEpoch;
30  
31      /** X component of the pole (rad). */
32      private double xp;
33  
34      /** X component of the pole first derivative (rad/s). */
35      private double xpDot;
36  
37      /** X component of the pole second derivative (rad/s²). */
38      private double xpDotDot;
39  
40      /** Y component of the pole (rad). */
41      private double yp;
42  
43      /** Y component of the pole first derivative (rad/s). */
44      private double ypDot;
45  
46      /** Y component of the pole second derivative (rad/s²). */
47      private double ypDotDot;
48  
49      /** ΔUT₁ (s).
50       * According to Rinex 4.00 table A31, this may be either UT₁-UTC or UT₁-GPST
51       * depending on constellation and applicable Interface Control Document).
52       */
53      private double dUt1;
54  
55      /** ΔUT₁ first derivative (s/s). */
56      private double dUt1Dot;
57  
58      /** ΔUT₁ second derivative (s/s²). */
59      private double dUt1DotDot;
60  
61      /** Transmission time. */
62      private double transmissionTime;
63  
64      /** Simple constructor.
65       * @param system satellite system
66       * @param prn satellite number
67       * @param navigationMessageType navigation message type
68       */
69      public EarthOrientationParameterMessage(final SatelliteSystem system, final int prn, final String navigationMessageType) {
70          super(system, prn, navigationMessageType);
71      }
72  
73      /** Get the reference epoch.
74       * @return the reference epoch
75       */
76      public AbsoluteDate getReferenceEpoch() {
77          return referenceEpoch;
78      }
79  
80      /** Set the reference epoch.
81       * @param referenceEpoch the reference epoch to set
82       */
83      public void setReferenceEpoch(final AbsoluteDate referenceEpoch) {
84          this.referenceEpoch = referenceEpoch;
85      }
86  
87      /** Get the X component of the pole.
88       * @return the X component of the pole (rad)
89       */
90      public double getXp() {
91          return xp;
92      }
93  
94      /** Set the X component of the pole.
95       * @param xp X component of the pole (rad)
96       */
97      public void setXp(final double xp) {
98          this.xp = xp;
99      }
100 
101     /** Get the X component of the pole first derivative.
102      * @return the X component of the pole first derivative (rad/s)
103      */
104     public double getXpDot() {
105         return xpDot;
106     }
107 
108     /** Set the X component of the pole first derivative.
109      * @param xpDot X component of the pole first derivative (rad/s)
110      */
111     public void setXpDot(final double xpDot) {
112         this.xpDot = xpDot;
113     }
114 
115     /** Get the X component of the pole second derivative.
116      * @return the X component of the pole second derivative (rad/s²)
117      */
118     public double getXpDotDot() {
119         return xpDotDot;
120     }
121 
122     /** Set the X component of the pole second derivative.
123      * @param xpDotDot X component of the pole second derivative (rad/s²)
124      */
125     public void setXpDotDot(final double xpDotDot) {
126         this.xpDotDot = xpDotDot;
127     }
128 
129     /** Get the Y component of the pole.
130      * @return the Y component of the pole (rad)
131      */
132     public double getYp() {
133         return yp;
134     }
135 
136     /** Set the Y component of the pole.
137      * @param yp Y component of the pole (rad)
138      */
139     public void setYp(final double yp) {
140         this.yp = yp;
141     }
142 
143     /** Get the Y component of the pole first derivative.
144      * @return the Y component of the pole first derivative (rad/s)
145      */
146     public double getYpDot() {
147         return ypDot;
148     }
149 
150     /** Set the Y component of the pole first derivative.
151      * @param ypDot Y component of the pole first derivative (rad/s)
152      */
153     public void setYpDot(final double ypDot) {
154         this.ypDot = ypDot;
155     }
156 
157     /** Get the Y component of the pole second derivative.
158      * @return the Y component of the pole second derivative (rad/s²)
159      */
160     public double getYpDotDot() {
161         return ypDotDot;
162     }
163 
164     /** Set the Y component of the pole second derivative.
165      * @param ypDotDot Y component of the pole second derivative (rad/s²)
166      */
167     public void setYpDotDot(final double ypDotDot) {
168         this.ypDotDot = ypDotDot;
169     }
170 
171     /** Get the ΔUT₁.
172      * @return the ΔUT₁ (s)
173      */
174     public double getDut1() {
175         return dUt1;
176     }
177 
178     /** Set the ΔUT₁.
179      * @param dUT1 ΔUT₁ (s)
180      */
181     public void setDut1(final double dUT1) {
182         this.dUt1 = dUT1;
183     }
184 
185     /** Get the ΔUT₁ first derivative.
186      * @return the ΔUT₁ first derivative (s/s)
187      */
188     public double getDut1Dot() {
189         return dUt1Dot;
190     }
191 
192     /** Set the ΔUT₁ first derivative.
193      * @param dUT1Dot ΔUT₁ first derivative (s/s)
194      */
195     public void setDut1Dot(final double dUT1Dot) {
196         this.dUt1Dot = dUT1Dot;
197     }
198 
199     /** Get the ΔUT₁ second derivative.
200      * @return the ΔUT₁ second derivative (s/s²)
201      */
202     public double getDut1DotDot() {
203         return dUt1DotDot;
204     }
205 
206     /** Set the ΔUT₁ second derivative.
207      * @param dUT1DotDot ΔUT₁ second derivative (s/s²)
208      */
209     public void setDut1DotDot(final double dUT1DotDot) {
210         this.dUt1DotDot = dUT1DotDot;
211     }
212 
213     /** Get the message transmission time.
214      * @return message transmission time
215      */
216     public double getTransmissionTime() {
217         return transmissionTime;
218     }
219 
220     /** Set the message transmission time.
221      * @param transmissionTime the message transmission time
222      */
223     public void setTransmissionTime(final double transmissionTime) {
224         this.transmissionTime = transmissionTime;
225     }
226 
227 }