1   /* Copyright 2002-2021 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  
18  package org.orekit.files.ccsds.ndm.odm.ocm;
19  
20  import java.util.List;
21  
22  import org.orekit.data.DataContext;
23  import org.orekit.files.ccsds.definitions.TimeSystem;
24  import org.orekit.files.ccsds.ndm.odm.OdmMetadata;
25  import org.orekit.time.AbsoluteDate;
26  
27  /** Meta-data for {@link OcmMetadata Orbit Comprehensive Message}.
28   * @since 11.0
29   */
30  public class OcmMetadata extends OdmMetadata {
31  
32      /** Default interpolation method for EOP and Space Weather data. */
33      private static final String DEFAULT_INTERPOLATION_METHOD = "LINEAR";
34  
35      /** Classification for this message. */
36      private String classification;
37  
38      /** International designator for the object as assigned by the UN Committee
39       * on Space Research (COSPAR) and the US National Space Science Data Center (NSSDC). */
40      private String internationalDesignator;
41  
42      /** Specification of satellite catalog source. */
43      private String catalogName;
44  
45      /** Unique satellite identification designator for the object. */
46      private String objectDesignator;
47  
48      /** Alternate names for this space object. */
49      private List<String> alternateNames;
50  
51      /** Programmatic Point Of Contact at originator. */
52      private String originatorPOC;
53  
54      /** Position of Programmatic Point Of Contact at originator. */
55      private String originatorPosition;
56  
57      /** Phone number of Programmatic Point Of Contact at originator. */
58      private String originatorPhone;
59  
60      /** Address of Programmatic Point Of Contact at originator. */
61      private String originatorAddress;
62  
63      /** Creating agency or operator. */
64      private String techOrg;
65  
66      /** Technical Point Of Contact at originator. */
67      private String techPOC;
68  
69      /** Position of Technical Point Of Contact at originator. */
70      private String techPosition;
71  
72      /** Phone number of Technical Point Of Contact at originator. */
73      private String techPhone;
74  
75      /** Address of Technical Point Of Contact at originator. */
76      private String techAddress;
77  
78      /** Unique ID identifying previous message from a given originator. */
79      private String previousMessageID;
80  
81      /** Unique ID identifying next message from a given originator. */
82      private String nextMessageID;
83  
84      /** Unique identifier of Attitude Data Message linkrd to this Orbit Data Message. */
85      private String admMessageLink;
86  
87      /** Unique identifier of Conjunction Data Message linkrd to this Orbit Data Message. */
88      private String cdmMessageLink;
89  
90      /** Unique identifier of Pointing Request Message linkrd to this Orbit Data Message. */
91      private String prmMessageLink;
92  
93      /** Unique identifier of Reentry Data Messages linked to this Orbit Data Message. */
94      private String rdmMessageLink;
95  
96      /** Unique identifier of Tracking Data Messages linked to this Orbit Data Message. */
97      private String tdmMessageLink;
98  
99      /** Operator of the space object. */
100     private String operator;
101 
102     /** Owner of the space object. */
103     private String owner;
104 
105     /** Name of the country where the space object owner is based. */
106     private String country;
107 
108     /** Name of the constellation this space object belongs to. */
109     private String constellation;
110 
111     /** Type of object. */
112     private ObjectType objectType;
113 
114     /** Epoch to which <em>all</em> relative times are referenced in data blocks;
115      * unless overridden by block-specific {@code EPOCH_TZERO} values. */
116     private AbsoluteDate epochT0;
117 
118     /** Operational status. */
119     private OpsStatus opsStatus;
120 
121     /** Orbit catgory. */
122     private OrbitCategory orbitCategory;
123 
124     /** List of elements of information data blocks included in this message. */
125     private List<String> ocmDataElements;
126 
127     /** Spacecraft clock count at {@link #getEpochT0()}. */
128     private double sclkOffsetAtEpoch;
129 
130     /** Number of spacecraft clock seconds occurring during one SI second. */
131     private double sclkSecPerSISec;
132 
133     /** Creation date of previous message from a given originator. */
134     private AbsoluteDate previousMessageEpoch;
135 
136     /** Creation date of next message from a given originator. */
137     private AbsoluteDate nextMessageEpoch;
138 
139     /** Time of the earliest data contained in the OCM. */
140     private AbsoluteDate startTime;
141 
142     /** Time of the latest data contained in the OCM. */
143     private AbsoluteDate stopTime;
144 
145     /** Span of time that the OCM covers. */
146     private double timeSpan;
147 
148     /** Difference (TAI – UTC) in seconds at epoch {@link #epochT0}. */
149     private double taimutcT0;
150 
151     /** Difference (UT1 – UTC) in seconds at epoch {@link #epochT0}. */
152     private double ut1mutcT0;
153 
154     /** Source and version of Earth Orientation Parameters. */
155     private String eopSource;
156 
157     /** Interpolation method for Earth Orientation Parameters. */
158     private String interpMethodEOP;
159 
160     /** Source and version of celestial body (e.g. Sun/Earth/Planetary). */
161     private String celestialSource;
162 
163     /** Create a new meta-data.
164      * @param dataContext data context
165      */
166     OcmMetadata(final DataContext dataContext) {
167 
168         // set up the few fields that have default values as per CCSDS standard
169         super(TimeSystem.UTC);
170         catalogName       = "CSPOC";
171         sclkOffsetAtEpoch = 0.0;
172         sclkSecPerSISec   = 1.0;
173         interpMethodEOP   = DEFAULT_INTERPOLATION_METHOD;
174 
175     }
176 
177     /** {@inheritDoc} */
178     @Override
179     public void validate(final double version) {
180         // we don't call super.checkMandatoryEntries() because
181         // all of the parameters considered mandatory at ODM level
182         // for OPM, OMM and OEM are in fact optional in OCM
183         // only EPOCH_TZERO, which is specific to OCM, is mandatory
184         checkNotNull(epochT0, OcmMetadataKey.EPOCH_TZERO);
185     }
186 
187     /** Get the message classification.
188      * @return message classification.
189      */
190     public String getClassification() {
191         return classification;
192     }
193 
194     /** Set the message classification.
195      * @param classification message classification
196      */
197     public void setClassification(final String classification) {
198         refuseFurtherComments();
199         this.classification = classification;
200     }
201 
202     /** Get the international designator for the object.
203      * @return international designator for the object
204      */
205     public String getInternationalDesignator() {
206         return internationalDesignator;
207     }
208 
209     /** Set the international designator for the object.
210      * @param internationalDesignator international designator for the object
211      */
212     public void setInternationalDesignator(final String internationalDesignator) {
213         refuseFurtherComments();
214         this.internationalDesignator = internationalDesignator;
215     }
216 
217     /** Get the specification of satellite catalog source.
218      * @return specification of satellite catalog source
219      */
220     public String getCatalogName() {
221         return catalogName;
222     }
223 
224     /** Set the specification of satellite catalog source.
225      * @param catalogName specification of satellite catalog source
226      */
227     public void setCatalogName(final String catalogName) {
228         refuseFurtherComments();
229         this.catalogName = catalogName;
230     }
231 
232     /** Get the unique satellite identification designator for the object.
233      * @return unique satellite identification designator for the object.
234      */
235     public String getObjectDesignator() {
236         return objectDesignator;
237     }
238 
239     /** Set the unique satellite identification designator for the object.
240      * @param objectDesignator unique satellite identification designator for the object
241      */
242     public void setObjectDesignator(final String objectDesignator) {
243         refuseFurtherComments();
244         this.objectDesignator = objectDesignator;
245     }
246 
247     /** Get the alternate names for this space object.
248      * @return alternate names
249      */
250     public List<String> getAlternateNames() {
251         return alternateNames;
252     }
253 
254     /** Set the alternate names for this space object.
255      * @param alternateNames alternate names
256      */
257     public void setAlternateNames(final List<String> alternateNames) {
258         refuseFurtherComments();
259         this.alternateNames = alternateNames;
260     }
261 
262     /** Get the programmatic Point Of Contact at originator.
263      * @return programmatic Point Of Contact at originator
264      */
265     public String getOriginatorPOC() {
266         return originatorPOC;
267     }
268 
269     /** Set the programmatic Point Of Contact at originator.
270      * @param originatorPOC programmatic Point Of Contact at originator
271      */
272     public void setOriginatorPOC(final String originatorPOC) {
273         refuseFurtherComments();
274         this.originatorPOC = originatorPOC;
275     }
276 
277     /** Get the position of Programmatic Point Of Contact at originator.
278      * @return position of Programmatic Point Of Contact at originator
279      */
280     public String getOriginatorPosition() {
281         return originatorPosition;
282     }
283 
284     /** Set the position of Programmatic Point Of Contact at originator.
285      * @param originatorPosition position of Programmatic Point Of Contact at originator
286      */
287     public void setOriginatorPosition(final String originatorPosition) {
288         refuseFurtherComments();
289         this.originatorPosition = originatorPosition;
290     }
291 
292     /** Get the phone number of Programmatic Point Of Contact at originator.
293      * @return phone number of Programmatic Point Of Contact at originator
294      */
295     public String getOriginatorPhone() {
296         return originatorPhone;
297     }
298 
299     /** GSet the phone number of Programmatic Point Of Contact at originator.
300      * @param originatorPhone phone number of Programmatic Point Of Contact at originator
301      */
302     public void setOriginatorPhone(final String originatorPhone) {
303         refuseFurtherComments();
304         this.originatorPhone = originatorPhone;
305     }
306 
307     /** Get the address of Programmatic Point Of Contact at originator.
308      * @return address of Programmatic Point Of Contact at originator
309      */
310     public String getOriginatorAddress() {
311         return originatorAddress;
312     }
313 
314     /** Set the address of Programmatic Point Of Contact at originator.
315      * @param originatorAddress address of Programmatic Point Of Contact at originator
316      */
317     public void setOriginatorAddress(final String originatorAddress) {
318         refuseFurtherComments();
319         this.originatorAddress = originatorAddress;
320     }
321 
322     /** Get the creating agency or operator.
323      * @return creating agency or operator
324      */
325     public String getTechOrg() {
326         return techOrg;
327     }
328 
329     /** Set the creating agency or operator.
330      * @param techOrg creating agency or operator
331      */
332     public void setTechOrg(final String techOrg) {
333         refuseFurtherComments();
334         this.techOrg = techOrg;
335     }
336 
337     /** Get the Technical Point Of Contact at originator.
338      * @return Technical Point Of Contact at originator
339      */
340     public String getTechPOC() {
341         return techPOC;
342     }
343 
344     /** Set the Technical Point Of Contact at originator.
345      * @param techPOC Technical Point Of Contact at originator
346      */
347     public void setTechPOC(final String techPOC) {
348         refuseFurtherComments();
349         this.techPOC = techPOC;
350     }
351 
352     /** Get the position of Technical Point Of Contact at originator.
353      * @return position of Technical Point Of Contact at originator
354      */
355     public String getTechPosition() {
356         return techPosition;
357     }
358 
359     /** Set the position of Technical Point Of Contact at originator.
360      * @param techPosition position of Technical Point Of Contact at originator
361      */
362     public void setTechPosition(final String techPosition) {
363         refuseFurtherComments();
364         this.techPosition = techPosition;
365     }
366 
367     /** Get the phone number of Technical Point Of Contact at originator.
368      * @return phone number of Technical Point Of Contact at originator
369      */
370     public String getTechPhone() {
371         return techPhone;
372     }
373 
374     /** Set the phone number of Technical Point Of Contact at originator.
375      * @param techPhone phone number of Technical Point Of Contact at originator
376      */
377     public void setTechPhone(final String techPhone) {
378         refuseFurtherComments();
379         this.techPhone = techPhone;
380     }
381 
382     /** Get the address of Technical Point Of Contact at originator.
383      * @return address of Technical Point Of Contact at originator
384      */
385     public String getTechAddress() {
386         return techAddress;
387     }
388 
389     /** Set the address of Technical Point Of Contact at originator.
390      * @param techAddress address of Technical Point Of Contact at originator
391      */
392     public void setTechAddress(final String techAddress) {
393         refuseFurtherComments();
394         this.techAddress = techAddress;
395     }
396 
397     /** Get the unique ID identifying previous message from a given originator.
398      * @return unique ID identifying previous message from a given originator
399      */
400     public String getPreviousMessageID() {
401         return previousMessageID;
402     }
403 
404     /** Set the unique ID identifying previous message from a given originator.
405      * @param previousMessageID unique ID identifying previous message from a given originator
406      */
407     public void setPreviousMessageID(final String previousMessageID) {
408         refuseFurtherComments();
409         this.previousMessageID = previousMessageID;
410     }
411 
412     /** Get the unique ID identifying next message from a given originator.
413      * @return unique ID identifying next message from a given originator
414      */
415     public String getNextMessageID() {
416         return nextMessageID;
417     }
418 
419     /** Set the unique ID identifying next message from a given originator.
420      * @param nextMessageID unique ID identifying next message from a given originator
421      */
422     public void setNextMessageID(final String nextMessageID) {
423         refuseFurtherComments();
424         this.nextMessageID = nextMessageID;
425     }
426 
427     /** Get the Unique identifier of Attitude Data Message linked to this Orbit Data Message.
428      * @return Unique identifier of Attitude Data Message linked to this Orbit Data Message
429      */
430     public String getAdmMessageLink() {
431         return admMessageLink;
432     }
433 
434     /** Set the Unique identifier of Attitude Data Message linked to this Orbit Data Message.
435      * @param admMessageLink Unique identifier of Attitude Data Message linked to this Orbit Data Message
436      */
437     public void setAdmMessageLink(final String admMessageLink) {
438         refuseFurtherComments();
439         this.admMessageLink = admMessageLink;
440     }
441 
442     /** Get the Unique identifier of Conjunction Data Message linked to this Orbit Data Message.
443      * @return Unique identifier of Conjunction Data Message linked to this Orbit Data Message
444      */
445     public String getCdmMessageLink() {
446         return cdmMessageLink;
447     }
448 
449     /** Set the Unique identifier of Conjunction Data Message linked to this Orbit Data Message.
450      * @param cdmMessageLink Unique identifier of Conjunction Data Message linked to this Orbit Data Message
451      */
452     public void setCdmMessageLink(final String cdmMessageLink) {
453         refuseFurtherComments();
454         this.cdmMessageLink = cdmMessageLink;
455     }
456 
457     /** Get the Unique identifier of Pointing Request Message linked to this Orbit Data Message.
458      * @return Unique identifier of Pointing Request Message linked to this Orbit Data Message
459      */
460     public String getPrmMessageLink() {
461         return prmMessageLink;
462     }
463 
464     /** Set the Unique identifier of Pointing Request Message linked to this Orbit Data Message.
465      * @param prmMessageLink Unique identifier of Pointing Request Message linked to this Orbit Data Message
466      */
467     public void setPrmMessageLink(final String prmMessageLink) {
468         refuseFurtherComments();
469         this.prmMessageLink = prmMessageLink;
470     }
471 
472     /** Get the Unique identifier of Reentry Data Message linked to this Orbit Data Message.
473      * @return Unique identifier of Reentry Data Message linked to this Orbit Data Message
474      */
475     public String getRdmMessageLink() {
476         return rdmMessageLink;
477     }
478 
479     /** Set the Unique identifier of Reentry Data Message linked to this Orbit Data Message.
480      * @param rdmMessageLink Unique identifier of Reentry Data Message linked to this Orbit Data Message
481      */
482     public void setRdmMessageLink(final String rdmMessageLink) {
483         refuseFurtherComments();
484         this.rdmMessageLink = rdmMessageLink;
485     }
486 
487     /** Get the Unique identifier of Tracking Data Message linked to this Orbit Data Message.
488      * @return Unique identifier of Tracking Data Message linked to this Orbit Data Message
489      */
490     public String getTdmMessageLink() {
491         return tdmMessageLink;
492     }
493 
494     /** Set the Unique identifier of Tracking Data Message linked to this Orbit Data Message.
495      * @param tdmMessageLink Unique identifier of Tracking Data Message linked to this Orbit Data Message
496      */
497     public void setTdmMessageLink(final String tdmMessageLink) {
498         refuseFurtherComments();
499         this.tdmMessageLink = tdmMessageLink;
500     }
501 
502     /** Get the operator of the space object.
503      * @return operator of the space object
504      */
505     public String getOperator() {
506         return operator;
507     }
508 
509     /** Set the operator of the space object.
510      * @param operator operator of the space object
511      */
512     public void setOperator(final String operator) {
513         refuseFurtherComments();
514         this.operator = operator;
515     }
516 
517     /** Get the owner of the space object.
518      * @return owner of the space object
519      */
520     public String getOwner() {
521         return owner;
522     }
523 
524     /** Set the owner of the space object.
525      * @param owner owner of the space object
526      */
527     public void setOwner(final String owner) {
528         refuseFurtherComments();
529         this.owner = owner;
530     }
531 
532     /** Get the name of the country where the space object owner is based.
533      * @return name of the country where the space object owner is based
534      */
535     public String getCountry() {
536         return country;
537     }
538 
539     /** Set the name of the country where the space object owner is based.
540      * @param country name of the country where the space object owner is based
541      */
542     public void setCountry(final String country) {
543         refuseFurtherComments();
544         this.country = country;
545     }
546 
547     /** Get the name of the constellation this space object belongs to.
548      * @return name of the constellation this space object belongs to
549      */
550     public String getConstellation() {
551         return constellation;
552     }
553 
554     /** Set the name of the constellation this space object belongs to.
555      * @param constellation name of the constellation this space object belongs to
556      */
557     public void setConstellation(final String constellation) {
558         refuseFurtherComments();
559         this.constellation = constellation;
560     }
561 
562     /** Get the type of object.
563      * @return type of object
564      */
565     public ObjectType getObjectType() {
566         return objectType;
567     }
568 
569     /** Set the type of object.
570      * @param objectType type of object
571      */
572     public void setObjectType(final ObjectType objectType) {
573         refuseFurtherComments();
574         this.objectType = objectType;
575     }
576 
577     /** Get the epoch to which <em>all</em> relative times are referenced in data blocks.
578      * @return epoch to which <em>all</em> relative times are referenced in data blocks
579      */
580     public AbsoluteDate getEpochT0() {
581         return epochT0;
582     }
583 
584     /** Set the epoch to which <em>all</em> relative times are referenced in data blocks.
585      * @param epochT0 epoch to which <em>all</em> relative times are referenced in data blocks
586      */
587     public void setEpochT0(final AbsoluteDate epochT0) {
588         refuseFurtherComments();
589         this.epochT0 = epochT0;
590     }
591 
592     /** Get the operational status.
593      * @return operational status
594      */
595     public OpsStatus getOpsStatus() {
596         return opsStatus;
597     }
598 
599     /** Set the operational status.
600      * @param opsStatus operational status
601      */
602     public void setOpsStatus(final OpsStatus opsStatus) {
603         refuseFurtherComments();
604         this.opsStatus = opsStatus;
605     }
606 
607     /** Get the orbit category.
608      * @return orbit category
609      */
610     public OrbitCategory getOrbitCategory() {
611         return orbitCategory;
612     }
613 
614     /** Set the orbit category.
615      * @param orbitCategory orbit category
616      */
617     public void setOrbitCategory(final OrbitCategory orbitCategory) {
618         refuseFurtherComments();
619         this.orbitCategory = orbitCategory;
620     }
621 
622     /** Get the list of elements of information data blocks included in this message.
623      * @return list of elements of information data blocks included in this message
624      */
625     public List<String> getOcmDataElements() {
626         return ocmDataElements;
627     }
628 
629     /** Set the list of elements of information data blocks included in this message.
630      * @param ocmDataElements list of elements of information data blocks included in this message
631      */
632     public void setOcmDataElements(final List<String> ocmDataElements) {
633         refuseFurtherComments();
634         this.ocmDataElements = ocmDataElements;
635     }
636 
637     /** Get the spacecraft clock count at {@link #getEpochT0()}.
638      * @return spacecraft clock count at {@link #getEpochT0()}
639      */
640     public double getSclkOffsetAtEpoch() {
641         return sclkOffsetAtEpoch;
642     }
643 
644     /** Set the spacecraft clock count at {@link #getEpochT0()}.
645      * @param sclkOffsetAtEpoch spacecraft clock count at {@link #getEpochT0()}
646      */
647     public void setSclkOffsetAtEpoch(final double sclkOffsetAtEpoch) {
648         refuseFurtherComments();
649         this.sclkOffsetAtEpoch = sclkOffsetAtEpoch;
650     }
651 
652     /** Get the number of spacecraft clock seconds occurring during one SI second.
653      * @return number of spacecraft clock seconds occurring during one SI second
654      */
655     public double getSclkSecPerSISec() {
656         return sclkSecPerSISec;
657     }
658 
659     /** Set the number of spacecraft clock seconds occurring during one SI second.
660      * @param secClockPerSISec number of spacecraft clock seconds occurring during one SI second
661      */
662     public void setSclkSecPerSISec(final double secClockPerSISec) {
663         refuseFurtherComments();
664         this.sclkSecPerSISec = secClockPerSISec;
665     }
666 
667     /** Get the creation date of previous message from a given originator.
668      * @return creation date of previous message from a given originator
669      */
670     public AbsoluteDate getPreviousMessageEpoch() {
671         return previousMessageEpoch;
672     }
673 
674     /** Set the creation date of previous message from a given originator.
675      * @param previousMessageEpoch creation date of previous message from a given originator
676      */
677     public void setPreviousMessageEpoch(final AbsoluteDate previousMessageEpoch) {
678         refuseFurtherComments();
679         this.previousMessageEpoch = previousMessageEpoch;
680     }
681 
682     /** Get the creation date of next message from a given originator.
683      * @return creation date of next message from a given originator
684      */
685     public AbsoluteDate getNextMessageEpoch() {
686         return nextMessageEpoch;
687     }
688 
689     /** Set the creation date of next message from a given originator.
690      * @param nextMessageEpoch creation date of next message from a given originator
691      */
692     public void setNextMessageEpoch(final AbsoluteDate nextMessageEpoch) {
693         refuseFurtherComments();
694         this.nextMessageEpoch = nextMessageEpoch;
695     }
696 
697     /** Get the time of the earliest data contained in the OCM.
698      * @return time of the earliest data contained in the OCM
699      */
700     public AbsoluteDate getStartTime() {
701         return startTime;
702     }
703 
704     /** Set the time of the earliest data contained in the OCM.
705      * @param startTime time of the earliest data contained in the OCM
706      */
707     public void setStartTime(final AbsoluteDate startTime) {
708         refuseFurtherComments();
709         this.startTime = startTime;
710     }
711 
712     /** Get the time of the latest data contained in the OCM.
713      * @return time of the latest data contained in the OCM
714      */
715     public AbsoluteDate getStopTime() {
716         return stopTime;
717     }
718 
719     /** Set the time of the latest data contained in the OCM.
720      * @param stopTime time of the latest data contained in the OCM
721      */
722     public void setStopTime(final AbsoluteDate stopTime) {
723         refuseFurtherComments();
724         this.stopTime = stopTime;
725     }
726 
727     /** Get the span of time in seconds that the OCM covers.
728      * @return span of time in seconds that the OCM covers
729      */
730     public double getTimeSpan() {
731         return timeSpan;
732     }
733 
734     /** Set the span of time in seconds that the OCM covers.
735      * @param timeSpan span of time in seconds that the OCM covers
736      */
737     public void setTimeSpan(final double timeSpan) {
738         refuseFurtherComments();
739         this.timeSpan = timeSpan;
740     }
741 
742     /** Get the difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}.
743      * @return difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}
744      */
745     public double getTaimutcT0() {
746         return taimutcT0;
747     }
748 
749     /** Set the difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}.
750      * @param taimutcT0 difference (TAI – UTC) in seconds at epoch {@link #getEpochT0()}
751      */
752     public void setTaimutcT0(final double taimutcT0) {
753         refuseFurtherComments();
754         this.taimutcT0 = taimutcT0;
755     }
756 
757     /** Get the difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}.
758      * @return difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}
759      */
760     public double getUt1mutcT0() {
761         return ut1mutcT0;
762     }
763 
764     /** Set the difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}.
765      * @param ut1mutcT0 difference (UT1 – UTC) in seconds at epoch {@link #getEpochT0()}
766      */
767     public void setUt1mutcT0(final double ut1mutcT0) {
768         refuseFurtherComments();
769         this.ut1mutcT0 = ut1mutcT0;
770     }
771 
772     /** Get the source and version of Earth Orientation Parameters.
773      * @return source and version of Earth Orientation Parameters
774      */
775     public String getEopSource() {
776         return eopSource;
777     }
778 
779     /** Set the source and version of Earth Orientation Parameters.
780      * @param eopSource source and version of Earth Orientation Parameters
781      */
782     public void setEopSource(final String eopSource) {
783         refuseFurtherComments();
784         this.eopSource = eopSource;
785     }
786 
787     /** Get the interpolation method for Earth Orientation Parameters.
788      * @return interpolation method for Earth Orientation Parameters
789      */
790     public String getInterpMethodEOP() {
791         return interpMethodEOP;
792     }
793 
794     /** Set the interpolation method for Earth Orientation Parameters.
795      * @param interpMethodEOP interpolation method for Earth Orientation Parameters
796      */
797     public void setInterpMethodEOP(final String interpMethodEOP) {
798         refuseFurtherComments();
799         this.interpMethodEOP = interpMethodEOP;
800     }
801 
802     /** Get the source and version of celestial body (e.g. Sun/Earth/Planetary).
803      * @return source and version of celestial body (e.g. Sun/Earth/Planetary)
804      */
805     public String getCelestialSource() {
806         return celestialSource;
807     }
808 
809     /** Set the source and version of celestial body (e.g. Sun/Earth/Planetary).
810      * @param celestialSource source and version of celestial body (e.g. Sun/Earth/Planetary)
811      */
812     public void setCelestialSource(final String celestialSource) {
813         refuseFurtherComments();
814         this.celestialSource = celestialSource;
815     }
816 
817 }