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.frames;
18  
19  import java.io.Serializable;
20  
21  import org.orekit.time.AbsoluteDate;
22  import org.orekit.time.TimeStamped;
23  
24  /** This class holds an Earth Orientation Parameters entry.
25   * @author Luc Maisonobe
26   */
27  public class EOPEntry implements TimeStamped, Serializable {
28  
29      /** Serializable UID. */
30      private static final long serialVersionUID = 20231017L;
31  
32      /** Entry date (modified julian day, 00h00 UTC scale). */
33      private final int mjd;
34  
35      /** Entry date (absolute date). */
36      private final AbsoluteDate date;
37  
38      /** UT1-UTC. */
39      private final double dt;
40  
41      /** Length of day. */
42      private final double lod;
43  
44      /** X component of pole motion. */
45      private final double x;
46  
47      /** Y component of pole motion. */
48      private final double y;
49  
50      /** X component of pole motion rate.
51       * @since 12.0
52       */
53      private final double xRate;
54  
55      /** Y component of pole motion rate.
56       * @since 12.0
57       */
58      private final double yRate;
59  
60      /** Correction for nutation in longitude. */
61      private final double ddPsi;
62  
63      /** Correction for nutation in obliquity. */
64      private final double ddEps;
65  
66      /** Correction for nutation in Celestial Intermediate Pole (CIP) coordinates. */
67      private final double dx;
68  
69      /** Correction for nutation in Celestial Intermediate Pole (CIP) coordinates. */
70      private final double dy;
71  
72      /** ITRF version this entry defines. */
73      private final ITRFVersion itrfType;
74  
75      /** Simple constructor.
76       * @param mjd entry date (modified Julian day, 00h00 UTC scale)
77       * @param dt UT1-UTC in seconds
78       * @param lod length of day
79       * @param x X component of pole motion
80       * @param y Y component of pole motion
81       * @param xRate X component of pole motion rate (NaN if absent)
82       * @param yRate Y component of pole motion rate (NaN if absent)
83       * @param ddPsi correction for nutation in longitude δΔΨ
84       * @param ddEps correction for nutation in obliquity δΔε
85       * @param dx correction for Celestial Intermediate Pole (CIP) coordinates
86       * @param dy correction for Celestial Intermediate Pole (CIP) coordinates
87       * @param itrfType ITRF version this entry defines
88       * @param date corresponding to {@code mjd}.
89       * @since 12.0
90       */
91      public EOPEntry(final int mjd, final double dt, final double lod,
92                      final double x, final double y, final double xRate, final double yRate,
93                      final double ddPsi, final double ddEps,
94                      final double dx, final double dy,
95                      final ITRFVersion itrfType, final AbsoluteDate date) {
96  
97          this.mjd      = mjd;
98          this.date     = date;
99          this.dt       = dt;
100         this.lod      = lod;
101         this.x        = x;
102         this.y        = y;
103         this.xRate    = xRate;
104         this.yRate    = yRate;
105         this.ddPsi    = ddPsi;
106         this.ddEps    = ddEps;
107         this.dx       = dx;
108         this.dy       = dy;
109         this.itrfType = itrfType;
110 
111     }
112 
113     /** Get the entry date (modified julian day, 00h00 UTC scale).
114      * @return entry date
115      * @see #getDate()
116      */
117     public int getMjd() {
118         return mjd;
119     }
120 
121     /** {@inheritDoc} */
122     public AbsoluteDate getDate() {
123         return date;
124     }
125 
126     /** Get the UT1-UTC value.
127      * @return UT1-UTC in seconds
128      */
129     public double getUT1MinusUTC() {
130         return dt;
131     }
132 
133     /** Get the LoD (Length of Day) value.
134      * @return LoD in seconds
135      */
136     public double getLOD() {
137         return lod;
138     }
139 
140     /** Get the X component of the pole motion.
141      * @return X component of pole motion
142      */
143     public double getX() {
144         return x;
145     }
146 
147     /** Get the Y component of the pole motion.
148      * @return Y component of pole motion
149      */
150     public double getY() {
151         return y;
152     }
153 
154     /** Get the X component of the pole motion rate.
155      * @return X component of pole motion rate
156      * @since 12.0
157      */
158     public double getXRate() {
159         return xRate;
160     }
161 
162     /** Get the Y component of the pole motion rate.
163      * @return Y component of pole motion rate
164      * @since 12.0
165      */
166     public double getYRate() {
167         return yRate;
168     }
169 
170     /** Get the correction for nutation in longitude δΔΨ.
171      * @return correction for nutation in longitude  δΔΨ
172      */
173     public double getDdPsi() {
174         return ddPsi;
175     }
176 
177     /** Get the correction for nutation in obliquity δΔε.
178      * @return correction for nutation in obliquity δΔε
179      */
180     public double getDdEps() {
181         return ddEps;
182     }
183 
184     /** Get the correction for Celestial Intermediate Pole (CIP) coordinates.
185      * @return correction for Celestial Intermediate Pole (CIP) coordinates
186      */
187     public double getDx() {
188         return dx;
189     }
190 
191     /** Get the correction for Celestial Intermediate Pole (CIP) coordinates.
192      * @return correction for Celestial Intermediate Pole (CIP) coordinates
193      */
194     public double getDy() {
195         return dy;
196     }
197 
198     /** Get the ITRF version this entry defines.
199      * @return ITRF version this entry defines
200      * @since 9.2
201      */
202     public ITRFVersion getITRFType() {
203         return itrfType;
204     }
205 
206 }