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 type navigation message type
68       * @param subType navigation message subtype
69       */
70      public EarthOrientationParameterMessage(final SatelliteSystem system, final int prn,
71                                              final String type, final String subType) {
72          super(system, prn, type, subType);
73      }
74  
75      /** {@inheritDoc} */
76      @Override
77      public AbsoluteDate getDate() {
78          return referenceEpoch;
79      }
80  
81      /** Get the reference epoch.
82       * @return the reference epoch
83       */
84      public AbsoluteDate getReferenceEpoch() {
85          return referenceEpoch;
86      }
87  
88      /** Set the reference epoch.
89       * @param referenceEpoch the reference epoch to set
90       */
91      public void setReferenceEpoch(final AbsoluteDate referenceEpoch) {
92          this.referenceEpoch = referenceEpoch;
93      }
94  
95      /** Get the X component of the pole.
96       * @return the X component of the pole (rad)
97       */
98      public double getXp() {
99          return xp;
100     }
101 
102     /** Set the X component of the pole.
103      * @param xp X component of the pole (rad)
104      */
105     public void setXp(final double xp) {
106         this.xp = xp;
107     }
108 
109     /** Get the X component of the pole first derivative.
110      * @return the X component of the pole first derivative (rad/s)
111      */
112     public double getXpDot() {
113         return xpDot;
114     }
115 
116     /** Set the X component of the pole first derivative.
117      * @param xpDot X component of the pole first derivative (rad/s)
118      */
119     public void setXpDot(final double xpDot) {
120         this.xpDot = xpDot;
121     }
122 
123     /** Get the X component of the pole second derivative.
124      * @return the X component of the pole second derivative (rad/s²)
125      */
126     public double getXpDotDot() {
127         return xpDotDot;
128     }
129 
130     /** Set the X component of the pole second derivative.
131      * @param xpDotDot X component of the pole second derivative (rad/s²)
132      */
133     public void setXpDotDot(final double xpDotDot) {
134         this.xpDotDot = xpDotDot;
135     }
136 
137     /** Get the Y component of the pole.
138      * @return the Y component of the pole (rad)
139      */
140     public double getYp() {
141         return yp;
142     }
143 
144     /** Set the Y component of the pole.
145      * @param yp Y component of the pole (rad)
146      */
147     public void setYp(final double yp) {
148         this.yp = yp;
149     }
150 
151     /** Get the Y component of the pole first derivative.
152      * @return the Y component of the pole first derivative (rad/s)
153      */
154     public double getYpDot() {
155         return ypDot;
156     }
157 
158     /** Set the Y component of the pole first derivative.
159      * @param ypDot Y component of the pole first derivative (rad/s)
160      */
161     public void setYpDot(final double ypDot) {
162         this.ypDot = ypDot;
163     }
164 
165     /** Get the Y component of the pole second derivative.
166      * @return the Y component of the pole second derivative (rad/s²)
167      */
168     public double getYpDotDot() {
169         return ypDotDot;
170     }
171 
172     /** Set the Y component of the pole second derivative.
173      * @param ypDotDot Y component of the pole second derivative (rad/s²)
174      */
175     public void setYpDotDot(final double ypDotDot) {
176         this.ypDotDot = ypDotDot;
177     }
178 
179     /** Get the ΔUT₁.
180      * @return the ΔUT₁ (s)
181      */
182     public double getDut1() {
183         return dUt1;
184     }
185 
186     /** Set the ΔUT₁.
187      * @param dUT1 ΔUT₁ (s)
188      */
189     public void setDut1(final double dUT1) {
190         this.dUt1 = dUT1;
191     }
192 
193     /** Get the ΔUT₁ first derivative.
194      * @return the ΔUT₁ first derivative (s/s)
195      */
196     public double getDut1Dot() {
197         return dUt1Dot;
198     }
199 
200     /** Set the ΔUT₁ first derivative.
201      * @param dUT1Dot ΔUT₁ first derivative (s/s)
202      */
203     public void setDut1Dot(final double dUT1Dot) {
204         this.dUt1Dot = dUT1Dot;
205     }
206 
207     /** Get the ΔUT₁ second derivative.
208      * @return the ΔUT₁ second derivative (s/s²)
209      */
210     public double getDut1DotDot() {
211         return dUt1DotDot;
212     }
213 
214     /** Set the ΔUT₁ second derivative.
215      * @param dUT1DotDot ΔUT₁ second derivative (s/s²)
216      */
217     public void setDut1DotDot(final double dUT1DotDot) {
218         this.dUt1DotDot = dUT1DotDot;
219     }
220 
221     /** Get the message transmission time.
222      * @return message transmission time
223      */
224     public double getTransmissionTime() {
225         return transmissionTime;
226     }
227 
228     /** Set the message transmission time.
229      * @param transmissionTime the message transmission time
230      */
231     public void setTransmissionTime(final double transmissionTime) {
232         this.transmissionTime = transmissionTime;
233     }
234 
235 }