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 }