1   /* Copyright 2002-2025 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.ilrs;
18  
19  import org.orekit.frames.Frame;
20  
21  /**
22   * Container for Consolidated laser ranging Prediction File (CPF) header.
23   * <p>
24   * Note: Only the required fields are present.
25   * </p>
26   * @author Bryan Cazabonne
27   * @since 10.3
28   */
29  public class CPFHeader extends ILRSHeader {
30  
31      /** Ephemeris source. */
32      private String source;
33  
34      /** Sub-daily Ephemeris Sequence number. */
35      private int subDailySequenceNumber;
36  
37      /** Time between table entries (UTC). */
38      private int step;
39  
40      /** Compatibility with TIVs. */
41      private boolean isCompatibleWithTIVs;
42  
43      /** Reference frame. */
44      private Frame refFrame;
45  
46      /** Reference frame identifier. */
47      private int refFrameId;
48  
49      /** Rotational angle type. */
50      private int rotationalAngleType;
51  
52      /** Center of mass correction. */
53      private boolean isCenterOfMassCorrectionApplied;
54  
55      /** Pulse Repetition Frequency (PRF) [Hz]. */
56      private double prf;
57  
58      /** Transponder transmit delay [s]. */
59      private double transpTransmitDelay;
60  
61      /** Transponder UTC offset [s]. */
62      private double transpUtcOffset;
63  
64      /** Transponder Oscillator Drift in parts. */
65      private double transpOscDrift;
66  
67      /** Transponder Clock Reference Time . */
68      private double transpClkRef;
69  
70      /** Approximate center of mass to reflector offset [m]. */
71      private double centerOfMassOffset;
72  
73      /** Empty constructor.
74       * <p>
75       * This constructor is not strictly necessary, but it prevents spurious
76       * javadoc warnings with JDK 18 and later.
77       * </p>
78       * @since 12.0
79       */
80      public CPFHeader() {
81          // nothing to do
82      }
83  
84      /**
85       * Get the ephemeris source.
86       * @return the ephemeris source
87       */
88      public String getSource() {
89          return source;
90      }
91  
92      /**
93       * Set the ephemeris source.
94       * @param source the ephemeris source to set
95       */
96      public void setSource(final String source) {
97          this.source = source;
98      }
99  
100     /**
101      * Get the sub-daily ephemeris sequence number.
102      * @return the sub-daily ephemeris sequence number
103      */
104     public int getSubDailySequenceNumber() {
105         return subDailySequenceNumber;
106     }
107 
108     /**
109      * Set the sub-daily ephemeris sequence number.
110      * @param subDailySequenceNumber the sub-daily ephemeris sequence number to set
111      */
112     public void setSubDailySequenceNumber(final int subDailySequenceNumber) {
113         this.subDailySequenceNumber = subDailySequenceNumber;
114     }
115 
116     /**
117      * Get the time between table entries.
118      * @return the time between table entries in seconds
119      */
120     public int getStep() {
121         return step;
122     }
123 
124     /**
125      * Set the time between table entries.
126      * @param step the time to set in seconds
127      */
128     public void setStep(final int step) {
129         this.step = step;
130     }
131 
132     /**
133      * Get the flag for compatibility with TIVs.
134      * @return true if compatible with TIVs
135      */
136     public boolean isCompatibleWithTIVs() {
137         return isCompatibleWithTIVs;
138     }
139 
140     /**
141      * Set the flag for compatibility with TIVs.
142      * @param isCompatibleWithTIVs true if compatible with TIVs
143      */
144     public void setIsCompatibleWithTIVs(final boolean isCompatibleWithTIVs) {
145         this.isCompatibleWithTIVs = isCompatibleWithTIVs;
146     }
147 
148     /**
149      * Get the reference frame.
150      * @return the reference frame
151      */
152     public Frame getRefFrame() {
153         return refFrame;
154     }
155 
156     /**
157      * Set the reference frame.
158      * @param refFrame the reference frame to set
159      */
160     public void setRefFrame(final Frame refFrame) {
161         this.refFrame = refFrame;
162     }
163 
164     /**
165      * Get the reference frame identifier.
166      * @return the reference frame
167      */
168     public int getRefFrameId() {
169         return refFrameId;
170     }
171 
172     /**
173      * Set the reference frame identifier.
174      * @param refFrameId the reference frame identifier to set
175      */
176     public void setRefFrameId(final int refFrameId) {
177         this.refFrameId = refFrameId;
178     }
179 
180     /**
181      * Get the rotation angle type.
182      * @return the rotation angle type
183      */
184     public int getRotationalAngleType() {
185         return rotationalAngleType;
186     }
187 
188     /**
189      * Set the rotation angle type.
190      * @param rotationalAngleType the rotation angle type to set
191      */
192     public void setRotationalAngleType(final int rotationalAngleType) {
193         this.rotationalAngleType = rotationalAngleType;
194     }
195 
196     /**
197      * Get the flag telling if the center of mass correction is applied.
198      * @return true if center of mass correction is applied
199      */
200     public boolean isCenterOfMassCorrectionApplied() {
201         return isCenterOfMassCorrectionApplied;
202     }
203 
204     /**
205      * Set the flag telling if the center of mass correction is applied.
206      * @param isCenterOfMassCorrectionApplied true if center of mass correction is applied
207      */
208     public void setIsCenterOfMassCorrectionApplied(final boolean isCenterOfMassCorrectionApplied) {
209         this.isCenterOfMassCorrectionApplied = isCenterOfMassCorrectionApplied;
210     }
211 
212     /**
213      * Get the Pulse Repetition Frequency (PRF).
214      * @return the Pulse Repetition Frequency (PRF) in Hz
215      */
216     public double getPrf() {
217         return prf;
218     }
219 
220     /**
221      * Set the Pulse Repetition Frequency (PRF).
222      * @param prf the ulse Repetition Frequency (PRF) to set in Hz
223      */
224     public void setPrf(final double prf) {
225         this.prf = prf;
226     }
227 
228     /**
229      * Get the transponder transmit delay.
230      * @return the transponder transmit delay in seconds
231      */
232     public double getTranspTransmitDelay() {
233         return transpTransmitDelay;
234     }
235 
236     /**
237      * Set the transponder transmit delay.
238      * @param transpTransmitDelay the transponder transmit delay to set in seconds
239      */
240     public void setTranspTransmitDelay(final double transpTransmitDelay) {
241         this.transpTransmitDelay = transpTransmitDelay;
242     }
243 
244     /**
245      * Get the transponder UTC offset.
246      * @return the transponder UTC offset in seconds
247      */
248     public double getTranspUtcOffset() {
249         return transpUtcOffset;
250     }
251 
252     /**
253      * Set the transponder UTC offset.
254      * @param transpUtcOffset the UTC offset to set in seconds
255      */
256     public void setTranspUtcOffset(final double transpUtcOffset) {
257         this.transpUtcOffset = transpUtcOffset;
258     }
259 
260     /**
261      * Get the transponder Oscillator Drift in parts in 10^15.
262      * @return the transponder Oscillator Drift in parts.
263      */
264     public double getTranspOscDrift() {
265         return transpOscDrift;
266     }
267 
268     /**
269      * Set the transponder Oscillator Drift in parts.
270      * @param transpOscDrift the transponder Oscillator Drift in parts in 10^15 to set
271      */
272     public void setTranspOscDrift(final double transpOscDrift) {
273         this.transpOscDrift = transpOscDrift;
274     }
275 
276     /**
277      * Get the transponder Clock Reference Time.
278      * @return the transponder Clock Reference Time
279      */
280     public double getTranspClkRef() {
281         return transpClkRef;
282     }
283 
284     /**
285      * Set the transponder Clock Reference Time.
286      * @param transpClkRef the transponder Clock Reference Time to set
287      */
288     public void setTranspClkRef(final double transpClkRef) {
289         this.transpClkRef = transpClkRef;
290     }
291 
292     /**
293      * Get the approximate center of mass to reflector offset.
294      * @return the approximate center of mass to reflector offset in meters
295      */
296     public double getCenterOfMassOffset() {
297         return centerOfMassOffset;
298     }
299 
300     /**
301      * Set the approximate center of mass to reflector offset.
302      * @param centerOfMassOffset the offset to set in meters
303      */
304     public void setCenterOfMassOffset(final double centerOfMassOffset) {
305         this.centerOfMassOffset = centerOfMassOffset;
306     }
307 
308 }