1 /* Copyright 2002-2019 CS Systèmes d'Information
2 * Licensed to CS Systèmes d'Information (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;
19
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.TreeMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.orekit.errors.OrekitException;
27 import org.orekit.errors.OrekitMessages;
28 import org.orekit.frames.Frame;
29 import org.orekit.time.AbsoluteDate;
30
31 /** This class stocks all the information of the CCSDS Tracking Data Message file parsed by TDMParser or TDMXMLParser. <p>
32 * It contains the header and a list of Observations Blocks each containing
33 * TDM metadata and a list of observation data lines. <p>
34 * At this level the observations are not Orekit objects but custom object containing a keyword (type of observation),
35 * a timetag (date of the observation) and a measurement (value of the observation). <p>
36 * It is up to the user to convert these observations to Orekit tracking object (Range, Angular, TurnAroundRange etc...).<p>
37 * References:<p>
38 * <a href="https://public.ccsds.org/Pubs/503x0b1c1.pdf">CCSDS 503.0-B-1 recommended standard</a> ("Tracking Data Message", Blue Book, Version 1.0, November 2007).
39 * @author Maxime Journot
40 * @since 9.0
41 */
42 public class TDMFile {
43
44 /** CCSDS Format version. */
45 private double formatVersion;
46
47 /** Header comments. The list contains a string for each line of comment. */
48 private List<String> headerComment;
49
50 /** File creation date and time in UTC. */
51 private AbsoluteDate creationDate;
52
53 /** Creating agency or operator. */
54 private String originator;
55
56 /** List of observation blocks. */
57 private List<ObservationsBlock> observationsBlocks;
58
59 /** OEMFile constructor. */
60 public TDMFile() {
61 observationsBlocks = new ArrayList<>();
62 }
63
64 /** Get the CCSDS TDM format version.
65 * @return format version
66 */
67 public double getFormatVersion() {
68 return formatVersion;
69 }
70
71 /** Set the CCSDS ODM (OPM, OMM or OEM) format version.
72 * @param formatVersion the format version to be set
73 */
74 public void setFormatVersion(final double formatVersion) {
75 this.formatVersion = formatVersion;
76 }
77
78 /** Get the header comment.
79 * @return header comment
80 */
81 public List<String> getHeaderComment() {
82 return headerComment;
83 }
84
85 /** Set the header comment.
86 * @param headerComment header comment
87 */
88 public void setHeaderComment(final List<String> headerComment) {
89 this.headerComment = new ArrayList<>(headerComment);
90 }
91
92 /** Get the file creation date and time in UTC.
93 * @return the file creation date and time in UTC.
94 */
95 public AbsoluteDate getCreationDate() {
96 return creationDate;
97 }
98
99 /** Set the file creation date and time in UTC.
100 * @param creationDate the creation date to be set
101 */
102 public void setCreationDate(final AbsoluteDate creationDate) {
103 this.creationDate = creationDate;
104 }
105
106 /** Get the file originator.
107 * @return originator the file originator.
108 */
109 public String getOriginator() {
110 return originator;
111 }
112
113 /** Set the file originator.
114 * @param originator the originator to be set
115 */
116 public void setOriginator(final String originator) {
117 this.originator = originator;
118 }
119
120 /** Add a block to the list of observations blocks. */
121 public void addObservationsBlock() {
122 observationsBlocks.add(new ObservationsBlock());
123 }
124
125 /** Get the list of observations blocks as an unmodifiable list.
126 * @return the list of observations blocks
127 */
128 public List<ObservationsBlock> getObservationsBlocks() {
129 return Collections.unmodifiableList(observationsBlocks);
130 }
131
132 /** Set the list of Observations Blocks.
133 * @param observationsBlocks the list of Observations Blocks to set
134 */
135 public void setObservationsBlocks(final List<ObservationsBlock> observationsBlocks) {
136 this.observationsBlocks = new ArrayList<>(observationsBlocks);
137 }
138
139 /** Check that, according to the CCSDS standard, every ObservationsBlock has the same time system.
140 */
141 public void checkTimeSystems() {
142 final CcsdsTimeScale timeSystem = getObservationsBlocks().get(0).getMetaData().getTimeSystem();
143 for (final ObservationsBlock block : observationsBlocks) {
144 if (!timeSystem.equals(block.getMetaData().getTimeSystem())) {
145 throw new OrekitException(OrekitMessages.CCSDS_TDM_INCONSISTENT_TIME_SYSTEMS,
146 timeSystem, block.getMetaData().getTimeSystem());
147 }
148 }
149 }
150
151 /** The Observations Block class contain metadata and the list of observation data lines.<p>
152 * The reason for which the observations have been separated into blocks is that the different
153 * data blocks in a TDM file usually refers to different types of observations.<p>
154 * An observation block contains a TDM metadata object and a list of observations.<p>
155 * At this level, an observation is not an Orekit object, it is a custom object containing:<p>
156 * - a keyword, the type of the observation;<p>
157 * - a timetag, the date of the observation;<p>
158 * - a measurement, the value of the observation.
159 * @author Maxime Journot
160 */
161 public static class ObservationsBlock {
162
163 /** Meta-data for the block. */
164 private TDMMetaData metaData;
165
166 /** List of observations data lines. */
167 private List<Observation> observations;
168
169 /** Observations Data Lines comments. The list contains a string for each line of comment. */
170 private List<String> observationsComment;
171
172 /** ObservationsBlock constructor. */
173 public ObservationsBlock() {
174 metaData = new TDMMetaData();
175 observations = new ArrayList<>();
176 observationsComment = new ArrayList<>();
177 }
178
179 /** Get the list of Observations data lines.
180 * @return a reference to the internal list of Observations data lines
181 */
182 public List<Observation> getObservations() {
183 return this.observations;
184 }
185
186 /** Set the list of Observations Data Lines.
187 * @param observations the list of Observations Data Lines to set
188 */
189 public void setObservations(final List<Observation> observations) {
190 this.observations = new ArrayList<>(observations);
191 }
192
193 /** Adds an observation data line.
194 * @param observation the observation to add to the list
195 */
196 public void addObservation(final Observation observation) {
197 this.observations.add(observation);
198 }
199
200 /** Adds an observation data line.
201 * @param keyword the keyword
202 * @param epoch the timetag
203 * @param measurement the measurement
204 */
205 public void addObservation(final String keyword,
206 final AbsoluteDate epoch,
207 final double measurement) {
208 this.addObservation(new Observation(keyword, epoch, measurement));
209 }
210
211 /** Get the meta-data for the block.
212 * @return meta-data for the block
213 */
214 public TDMMetaData getMetaData() {
215 return metaData;
216 }
217
218 /** Set the meta-data for the block.
219 * @param metaData the meta-data to set
220 */
221 public void setMetaData(final TDMMetaData metaData) {
222 this.metaData = metaData;
223 }
224
225 /** Get the observations data lines comment.
226 * @return the comment
227 */
228 public List<String> getObservationsComment() {
229 return observationsComment;
230 }
231
232 /** Set the observations data lines comment.
233 * @param observationsComment the comment to be set
234 */
235 public void setObservationsComment(final List<String> observationsComment) {
236 this.observationsComment = new ArrayList<>(observationsComment);
237 }
238
239 /** Add an observation data line comment.
240 * @param observationComment the comment line to add
241 */
242 public void addObservationComment(final String observationComment) {
243 this.observationsComment.add(observationComment);
244 }
245
246 }
247
248 /** The Observation class contains the data from an observation line.<p>
249 * It is not an Orekit object yet.<p>
250 * It is a simple container holding:<p>
251 * - a keyword, the type of the observation;<p>
252 * - a timetag, the epoch of the observation;<p>
253 * - a measurement, the value of the observation.<p>
254 * @see Keyword
255 * @author mjournot
256 */
257 public static class Observation {
258
259 /** CCSDS Keyword: the type of the observation. */
260 private String keyword;
261
262 /** Epoch: the timetag of the observation. */
263 private AbsoluteDate epoch;
264
265 /** Measurement: the value of the observation. */
266 private double measurement;
267
268 /** Simple constructor.
269 * @param keyword the keyword
270 * @param epoch the timetag
271 * @param measurement the measurement
272 */
273 Observation(final String keyword, final AbsoluteDate epoch, final double measurement) {
274 this.keyword = keyword;
275 this.epoch = epoch;
276 this.measurement = measurement;
277 }
278
279 /** Getter for the keyword.
280 * @return the keyword
281 */
282 public String getKeyword() {
283 return keyword;
284 }
285
286 /** Setter for the keyword.
287 * @param keyword the keyword to set
288 */
289 public void setKeyword(final String keyword) {
290 this.keyword = keyword;
291 }
292
293 /** Getter for the epoch.
294 * @return the epoch
295 */
296 public AbsoluteDate getEpoch() {
297 return epoch;
298 }
299
300 /** Setter for the epoch.
301 * @param epoch the epoch to set
302 */
303 public void setEpoch(final AbsoluteDate epoch) {
304 this.epoch = epoch;
305 }
306
307 /** Getter for the measurement.
308 * @return the measurement
309 */
310 public double getMeasurement() {
311 return measurement;
312 }
313
314 /** Setter for the measurement.
315 * @param measurement the measurement to set
316 */
317 public void setMeasurement(final double measurement) {
318 this.measurement = measurement;
319 }
320 }
321
322 /** The TDMMetadata class gathers the meta-data present in the Tracking Data Message (TDM).<p>
323 * References:<p>
324 * <a href="https://public.ccsds.org/Pubs/503x0b1c1.pdf">CCSDS 503.0-B-1 recommended standard</a>. §3.3 ("Tracking Data Message", Blue Book, Version 1.0, November 2007).
325 *
326 * @author Maxime Journot
327 * @since 9.0
328 */
329 public static class TDMMetaData {
330
331 /** Time System used in the tracking data session. */
332 private CcsdsTimeScale timeSystem;
333
334 /** Start epoch of total time span covered by observations block. */
335 private AbsoluteDate startTime;
336
337 /** Start time as read in the file. */
338 private String startTimeString;
339 /** End epoch of total time span covered by observations block. */
340 private AbsoluteDate stopTime;
341
342 /** Stop time as read in the file. */
343 private String stopTimeString;
344
345 /** Map of participants in the tracking data session (minimum 1 and up to 5).<p>
346 * Participants may include ground stations, spacecraft, and/or quasars.<p>
347 * Participants represent the classical transmitting parties, transponding parties, and receiving parties.
348 */
349 private Map<Integer, String> participants;
350
351 /** Tracking mode associated with the Data Section of the segment.<p>
352 * - SEQUENTIAL : Sequential signal path between participants (range, Doppler, angles and line of sight ionosphere calibration);<p>
353 * - SINGLE_DIFF: Differenced data.
354 */
355 private String mode;
356
357 /** The path shall reflect the signal path by listing the index of each participant
358 * in order, separated by commas, with no inserted white space.<p>
359 * The integers 1, 2, 3, 4, 5 used to specify the signal path correlate
360 * with the indices of the PARTICIPANT keywords.<p>
361 * The first entry in the PATH shall be the transmit participant.<p>
362 * The non-indexed ‘PATH’ keyword shall be used if the MODE is ‘SEQUENTIAL’.<p>
363 * The indexed ‘PATH_1’ and ‘PATH_2’ keywords shall be used where the MODE is ‘SINGLE_DIFF’.
364 */
365 private String path;
366
367 /** Path 1 (see above). */
368 private String path1;
369
370 /** Path 2 (see above). */
371 private String path2;
372
373 /** Frequency band for transmitted frequencies. */
374 private String transmitBand;
375
376 /** Frequency band for received frequencies. */
377 private String receiveBand;
378
379 /** Turn-around ratio numerator.<p>
380 * Numerator of the turn-around ratio that is necessary to calculate the coherent downlink from the uplink frequency.
381 */
382 private int turnaroundNumerator;
383
384 /** Turn-around ratio denominator .*/
385 private int turnaroundDenominator;
386
387 /** Timetag reference.<p>
388 * Provides a reference for time tags in the tracking data.<p>
389 * It indicates whether the timetag associated with the data is the transmit time or the receive time.
390 */
391 private String timetagRef;
392
393 /** Integration interval. <p>
394 * Provides the Doppler count time in seconds for Doppler data or for the creation
395 * of normal points.
396 */
397 private double integrationInterval;
398
399 /** Integration reference.<p>
400 * Used in conjunction with timetag reference and integration interval.<p>
401 * Indicates whether the timetag represents the start, middle or end of the integration interval.
402 */
403 private String integrationRef;
404
405 /** Frequency offset.<p>
406 * A frequency in Hz that must be added to every RECEIVE_FREQ to reconstruct it.
407 */
408 private double freqOffset;
409
410 /** Range mode.<p>
411 * COHERENT, CONSTANT or ONE_WAY.
412 */
413 private String rangeMode;
414
415 /** Range modulus.<p>
416 * Modulus of the range observable in the units as specified by the RANGE_UNITS keyword.
417 */
418 private double rangeModulus;
419
420 /** Range units.<p>
421 * The units for the range observable: 'km', 's' or 'RU' (for 'range units').
422 */
423 private String rangeUnits;
424
425 /** Angle type.<p>
426 * Type of the antenna geometry represented in the angle data ANGLE_1 and ANGLE_2.<p>
427 * – AZEL for azimuth, elevation (local horizontal);<p>
428 * – RADEC for right ascension, declination or hour angle, declination (needs to be referenced to an inertial frame);<p>
429 * – XEYN for x-east, y-north;<p>
430 * – XSYE for x-south, y-east.<p>
431 * Note: Angle units are always degrees
432 */
433 private String angleType;
434
435 /** The reference frame specifier, as it appeared in the file. */
436 private String referenceFrameString;
437
438 /** Reference frame in which data are given: used in combination with ANGLE_TYPE=RADEC. */
439 private Frame referenceFrame;
440
441 /** Transmit delays map.<p>
442 * Specifies a fixed interval of time, in seconds, for the signal to travel from the transmitting
443 * electronics to the transmit point. Each item in the list corresponds to the each participants.
444 */
445 private Map<Integer, Double> transmitDelays;
446
447 /** Receive delays list.<p>
448 * Specifies a fixed interval of time, in seconds, for the signal to travel from the tracking
449 * point to the receiving electronics. Each item in the list corresponds to the each participants.
450 */
451 private Map<Integer, Double> receiveDelays;
452
453 /** Data quality.<p>
454 * Estimate of the quality of the data: RAW, DEGRADED or VALIDATED.
455 */
456 private String dataQuality;
457
458 /** Correction angle 1.<p>
459 * Angle correction that has been added or should be added to the ANGLE_1 data.
460 */
461 private double correctionAngle1;
462
463 /** Correction angle 2.<p>
464 * Angle correction that has been added or should be added to the ANGLE_2 data.
465 */
466 private double correctionAngle2;
467
468 /** Correction Doppler.<p>
469 * Doppler correction that has been added or should be added to the DOPPLER data.
470 */
471 private double correctionDoppler;
472
473 /** Correction Range.<p>
474 * Range correction that has been added or should be added to the RANGE data.
475 */
476 private double correctionRange;
477
478 /** Correction receive.<p>
479 * Receive correction that has been added or should be added to the RECEIVE data.
480 */
481 private double correctionReceive;
482
483 /** Correction transmit.<p>
484 * Transmit correction that has been added or should be added to the TRANSMIT data.
485 */
486 private double correctionTransmit;
487
488 /** Correction applied ? YES/NO<p>
489 * Indicate whethers or not the values associated with the CORRECTION_* keywords have been
490 * applied to the tracking data.
491 */
492 private String correctionsApplied;
493
494 /** Meta-data comments. The list contains a string for each line of comment. */
495 private List<String> comment;
496
497 /** Create a new TDM meta-data.
498 */
499 public TDMMetaData() {
500 participants = new TreeMap<>();
501 transmitDelays = new TreeMap<>();
502 receiveDelays = new TreeMap<>();
503 comment = new ArrayList<>();
504 }
505
506
507 /** Get the Time System that: for OPM, is used for metadata, state vector,
508 * maneuver and covariance data, for OMM, is used for metadata, orbit state
509 * and covariance data, for OEM, is used for metadata, ephemeris and
510 * covariance data.
511 * @return the time system
512 */
513 public CcsdsTimeScale getTimeSystem() {
514 return timeSystem;
515 }
516
517 /** Set the Time System that: for OPM, is used for metadata, state vector,
518 * maneuver and covariance data, for OMM, is used for metadata, orbit state
519 * and covariance data, for OEM, is used for metadata, ephemeris and
520 * covariance data.
521 * @param timeSystem the time system to be set
522 */
523 public void setTimeSystem(final CcsdsTimeScale timeSystem) {
524 this.timeSystem = timeSystem;
525 }
526
527 /** Getter for the startTime.
528 * @return the startTime
529 */
530 public AbsoluteDate getStartTime() {
531 return startTime;
532 }
533
534 /** Setter for the startTime.
535 * @param startTime the startTime to set
536 */
537 public void setStartTime(final AbsoluteDate startTime) {
538 this.startTime = startTime;
539 }
540
541 /** Getter for the startTime String.
542 * @return the startTime String
543 */
544 public String getStartTimeString() {
545 return startTimeString;
546 }
547
548 /** Setter for the startTime String.
549 * @param startTimeString the startTime String to set
550 */
551 public void setStartTimeString(final String startTimeString) {
552 this.startTimeString = startTimeString;
553 }
554
555 /** Getter for the stopTime.
556 * @return the stopTime
557 */
558 public AbsoluteDate getStopTime() {
559 return stopTime;
560 }
561
562 /** Setter for the stopTime.
563 * @param stopTime the stopTime to set
564 */
565 public void setStopTime(final AbsoluteDate stopTime) {
566 this.stopTime = stopTime;
567 }
568
569 /** Getter for the stopTime String.
570 * @return the stopTime String
571 */
572 public String getStopTimeString() {
573 return stopTimeString;
574 }
575
576 /** Setter for the stopTime String.
577 * @param stopTimeString the stopTime String to set
578 */
579 public void setStopTimeString(final String stopTimeString) {
580 this.stopTimeString = stopTimeString;
581 }
582
583 /** Getter for the participants.
584 * @return the participants
585 */
586 public Map<Integer, String> getParticipants() {
587 return participants;
588 }
589
590 /** Setter for the participants.
591 * @param participants the participants to set
592 */
593 public void setParticipants(final Map<Integer, String> participants) {
594 this.participants = new TreeMap<Integer, String>();
595 this.participants.putAll(participants);
596 }
597
598 /** Adds a participant to the list.
599 * @param participantNumber the number of the participant to add
600 * @param participant the name of the participant to add
601 */
602 public void addParticipant(final int participantNumber, final String participant) {
603 this.participants.put(participantNumber, participant);
604 }
605
606 /** Getter for the mode.
607 * @return the mode
608 */
609 public String getMode() {
610 return mode;
611 }
612
613 /** Setter for the mode.
614 * @param mode the mode to set
615 */
616 public void setMode(final String mode) {
617 this.mode = mode;
618 }
619
620 /** Getter for the path.
621 * @return the path
622 */
623 public String getPath() {
624 return path;
625 }
626
627 /** Setter for the path.
628 * @param path the path to set
629 */
630 public void setPath(final String path) {
631 this.path = path;
632 }
633
634 /** Getter for the path1.
635 * @return the path1
636 */
637 public String getPath1() {
638 return path1;
639 }
640
641 /** Setter for the path1.
642 * @param path1 the path1 to set
643 */
644 public void setPath1(final String path1) {
645 this.path1 = path1;
646 }
647
648 /** Getter for the path2.
649 * @return the path2
650 */
651 public String getPath2() {
652 return path2;
653 }
654
655 /** Setter for the path2.
656 * @param path2 the path2 to set
657 */
658 public void setPath2(final String path2) {
659 this.path2 = path2;
660 }
661
662 /** Getter for the transmitBand.
663 * @return the transmitBand
664 */
665 public String getTransmitBand() {
666 return transmitBand;
667 }
668
669 /** Setter for the transmitBand.
670 * @param transmitBand the transmitBand to set
671 */
672 public void setTransmitBand(final String transmitBand) {
673 this.transmitBand = transmitBand;
674 }
675
676 /** Getter for the receiveBand.
677 * @return the receiveBand
678 */
679 public String getReceiveBand() {
680 return receiveBand;
681 }
682
683 /** Setter for the receiveBand.
684 * @param receiveBand the receiveBand to set
685 */
686 public void setReceiveBand(final String receiveBand) {
687 this.receiveBand = receiveBand;
688 }
689
690 /** Getter for the turnaroundNumerator.
691 * @return the turnaroundNumerator
692 */
693 public int getTurnaroundNumerator() {
694 return turnaroundNumerator;
695 }
696
697 /** Setter for the turnaroundNumerator.
698 * @param turnaroundNumerator the turnaroundNumerator to set
699 */
700 public void setTurnaroundNumerator(final int turnaroundNumerator) {
701 this.turnaroundNumerator = turnaroundNumerator;
702 }
703
704 /** Getter for the turnaroundDenominator.
705 * @return the turnaroundDenominator
706 */
707 public int getTurnaroundDenominator() {
708 return turnaroundDenominator;
709 }
710
711 /** Setter for the turnaroundDenominator.
712 * @param turnaroundDenominator the turnaroundDenominator to set
713 */
714 public void setTurnaroundDenominator(final int turnaroundDenominator) {
715 this.turnaroundDenominator = turnaroundDenominator;
716 }
717
718 /** Getter for the timetagRef.
719 * @return the timetagRef
720 */
721 public String getTimetagRef() {
722 return timetagRef;
723 }
724
725 /** Setter for the timetagRef.
726 * @param timetagRef the timetagRef to set
727 */
728 public void setTimetagRef(final String timetagRef) {
729 this.timetagRef = timetagRef;
730 }
731
732 /** Getter for the integrationInterval.
733 * @return the integrationInterval
734 */
735 public double getIntegrationInterval() {
736 return integrationInterval;
737 }
738
739 /** Setter for the integrationInterval.
740 * @param integrationInterval the integrationInterval to set
741 */
742 public void setIntegrationInterval(final double integrationInterval) {
743 this.integrationInterval = integrationInterval;
744 }
745
746 /** Getter for the integrationRef.
747 * @return the integrationRef
748 */
749 public String getIntegrationRef() {
750 return integrationRef;
751 }
752
753 /** Setter for the integrationRef.
754 * @param integrationRef the integrationRef to set
755 */
756 public void setIntegrationRef(final String integrationRef) {
757 this.integrationRef = integrationRef;
758 }
759
760 /** Getter for the freqOffset.
761 * @return the freqOffset
762 */
763 public double getFreqOffset() {
764 return freqOffset;
765 }
766
767 /** Setter for the freqOffset.
768 * @param freqOffset the freqOffset to set
769 */
770 public void setFreqOffset(final double freqOffset) {
771 this.freqOffset = freqOffset;
772 }
773
774 /** Getter for the rangeMode.
775 * @return the rangeMode
776 */
777 public String getRangeMode() {
778 return rangeMode;
779 }
780
781 /** Setter for the rangeMode.
782 * @param rangeMode the rangeMode to set
783 */
784 public void setRangeMode(final String rangeMode) {
785 this.rangeMode = rangeMode;
786 }
787
788 /** Getter for the rangeModulus.
789 * @return the rangeModulus
790 */
791 public double getRangeModulus() {
792 return rangeModulus;
793 }
794
795 /** Setter for the rangeModulus.
796 * @param rangeModulus the rangeModulus to set
797 */
798 public void setRangeModulus(final double rangeModulus) {
799 this.rangeModulus = rangeModulus;
800 }
801
802 /** Getter for the rangeUnits.
803 * @return the rangeUnits
804 */
805 public String getRangeUnits() {
806 return rangeUnits;
807 }
808
809 /** Setter for the rangeUnits.
810 * @param rangeUnits the rangeUnits to set
811 */
812 public void setRangeUnits(final String rangeUnits) {
813 this.rangeUnits = rangeUnits;
814 }
815
816 /** Getter for angleType.
817 * @return the angleType
818 */
819 public String getAngleType() {
820 return angleType;
821 }
822
823 /** Setter for the angleType.
824 * @param angleType the angleType to set
825 */
826 public void setAngleType(final String angleType) {
827 this.angleType = angleType;
828 }
829
830 /** Get the the value of {@code REFERENCE_FRAME} as an Orekit {@link Frame}.
831 * @return The reference frame specified by the {@code REFERENCE_FRAME} keyword.
832 */
833 public Frame getReferenceFrame() {
834 return referenceFrame;
835 }
836
837 /** Set the reference frame in which data are given: used for RADEC tracking data.
838 * @param refFrame the reference frame to be set
839 */
840 public void setReferenceFrame(final Frame refFrame) {
841 this.referenceFrame = refFrame;
842 }
843
844 /** Get the reference frame specifier as it appeared in the file.
845 * @return the frame name as it appeared in the file.
846 */
847 public String getReferenceFrameString() {
848 return this.referenceFrameString;
849 }
850
851 /** Set the reference frame name.
852 * @param frame specifier as it appeared in the file.
853 */
854 public void setReferenceFrameString(final String frame) {
855 this.referenceFrameString = frame;
856 }
857
858 /** Getter for the transmitDelays.
859 * @return the transmitDelays
860 */
861 public Map<Integer, Double> getTransmitDelays() {
862 return transmitDelays;
863 }
864
865 /** Setter for the transmitDelays.
866 * @param transmitDelays the transmitDelays to set
867 */
868 public void setTransmitDelays(final Map<Integer, Double> transmitDelays) {
869 this.transmitDelays = new TreeMap<Integer, Double>();
870 this.transmitDelays.putAll(transmitDelays);
871 }
872
873 /** Adds a transmit delay to the list.
874 * @param participantNumber the number of the participants for which the transmit delay is given
875 * @param transmitDelay the transmit delay value to add
876 */
877 public void addTransmitDelay(final int participantNumber, final double transmitDelay) {
878 this.transmitDelays.put(participantNumber, transmitDelay);
879 }
880
881 /** Getter for receiveDelays.
882 * @return the receiveDelays
883 */
884 public Map<Integer, Double> getReceiveDelays() {
885 return receiveDelays;
886 }
887
888 /** Setter for the receiveDelays.
889 * @param receiveDelays the receiveDelays to set
890 */
891 public void setReceiveDelays(final Map<Integer, Double> receiveDelays) {
892 this.receiveDelays = new TreeMap<Integer, Double>();
893 this.receiveDelays.putAll(receiveDelays);
894 }
895
896 /** Adds a receive delay to the list.
897 * @param participantNumber the number of the participants for which the receive delay is given
898 * @param receiveDelay the receive delay value to add
899 */
900 public void addReceiveDelay(final int participantNumber, final double receiveDelay) {
901 this.receiveDelays.put(participantNumber, receiveDelay);
902 }
903 /** Getter for the dataQuality.
904 * @return the dataQuality
905 */
906 public String getDataQuality() {
907 return dataQuality;
908 }
909
910 /** Setter for the dataQuality.
911 * @param dataQuality the dataQuality to set
912 */
913 public void setDataQuality(final String dataQuality) {
914 this.dataQuality = dataQuality;
915 }
916
917 /** Getter for the correctionAngle1.
918 * @return the correctionAngle1
919 */
920 public double getCorrectionAngle1() {
921 return correctionAngle1;
922 }
923
924 /** Setter for the correctionAngle1.
925 * @param correctionAngle1 the correctionAngle1 to set
926 */
927 public void setCorrectionAngle1(final double correctionAngle1) {
928 this.correctionAngle1 = correctionAngle1;
929 }
930
931 /** Getter for the correctionAngle2.
932 * @return the correctionAngle2
933 */
934 public double getCorrectionAngle2() {
935 return correctionAngle2;
936 }
937
938 /** Setter for the correctionAngle2.
939 * @param correctionAngle2 the correctionAngle2 to set
940 */
941 public void setCorrectionAngle2(final double correctionAngle2) {
942 this.correctionAngle2 = correctionAngle2;
943 }
944
945 /** Getter for the correctionDoppler.
946 * @return the correctionDoppler
947 */
948 public double getCorrectionDoppler() {
949 return correctionDoppler;
950 }
951
952 /** Setter for the correctionDoppler.
953 * @param correctionDoppler the correctionDoppler to set
954 */
955 public void setCorrectionDoppler(final double correctionDoppler) {
956 this.correctionDoppler = correctionDoppler;
957 }
958
959 /** Getter for the correctionRange.
960 * @return the correctionRange
961 */
962 public double getCorrectionRange() {
963 return correctionRange;
964 }
965
966 /** Setter for the correctionRange.
967 * @param correctionRange the correctionRange to set
968 */
969 public void setCorrectionRange(final double correctionRange) {
970 this.correctionRange = correctionRange;
971 }
972
973 /** Getter for the correctionReceive.
974 * @return the correctionReceive
975 */
976 public double getCorrectionReceive() {
977 return correctionReceive;
978 }
979
980 /** Setter for the correctionReceive.
981 * @param correctionReceive the correctionReceive to set
982 */
983 public void setCorrectionReceive(final double correctionReceive) {
984 this.correctionReceive = correctionReceive;
985 }
986
987 /** Getter for the correctionTransmit.
988 * @return the correctionTransmit
989 */
990 public double getCorrectionTransmit() {
991 return correctionTransmit;
992 }
993
994 /** Setter for the correctionTransmit.
995 * @param correctionTransmit the correctionTransmit to set
996 */
997 public void setCorrectionTransmit(final double correctionTransmit) {
998 this.correctionTransmit = correctionTransmit;
999 }
1000
1001 /** Getter for the correctionApplied.
1002 * @return the correctionApplied
1003 */
1004 public String getCorrectionsApplied() {
1005 return correctionsApplied;
1006 }
1007
1008 /** Setter for the correctionApplied.
1009 * @param correctionsApplied the correctionApplied to set
1010 */
1011 public void setCorrectionsApplied(final String correctionsApplied) {
1012 this.correctionsApplied = correctionsApplied;
1013 }
1014
1015 /** Get the meta-data comment.
1016 * @return meta-data comment
1017 */
1018 public List<String> getComment() {
1019 return Collections.unmodifiableList(comment);
1020 }
1021
1022 /** Set the meta-data comment.
1023 * @param comment comment to set
1024 */
1025 public void setComment(final List<String> comment) {
1026 this.comment = new ArrayList<>(comment);
1027 }
1028 }
1029 }