1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.files.ccsds.ndm.odm.oem;
19
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.orekit.data.DataContext;
26 import org.orekit.errors.OrekitException;
27 import org.orekit.errors.OrekitMessages;
28 import org.orekit.files.ccsds.definitions.TimeSystem;
29 import org.orekit.files.ccsds.ndm.NdmConstituent;
30 import org.orekit.files.ccsds.ndm.odm.OdmHeader;
31 import org.orekit.files.general.EphemerisFile;
32 import org.orekit.utils.IERSConventions;
33 import org.orekit.utils.TimeStampedPVCoordinates;
34
35
36
37
38
39
40
41
42
43
44
45 public class Oem extends NdmConstituent<OdmHeader, OemSegment>
46 implements EphemerisFile<TimeStampedPVCoordinates, OemSegment> {
47
48
49 public static final String ROOT = "oem";
50
51
52 public static final String FORMAT_VERSION_KEY = "CCSDS_OEM_VERS";
53
54
55 private final double mu;
56
57
58
59
60
61
62
63
64 public Oem(final OdmHeader header, final List<OemSegment> segments,
65 final IERSConventions conventions, final DataContext dataContext,
66 final double mu) {
67 super(header, segments, conventions, dataContext);
68 this.mu = mu;
69 }
70
71
72 @Override
73 public Map<String, OemSatelliteEphemeris> getSatellites() {
74 final Map<String, List<OemSegment>> byId = new HashMap<>();
75 for (final OemSegment segment : getSegments()) {
76 final String id = segment.getMetadata().getObjectID();
77 byId.putIfAbsent(id, new ArrayList<>());
78 byId.get(id).add(segment);
79 }
80 final Map<String, OemSatelliteEphemeris> ret = new HashMap<>();
81 for (final Map.Entry<String, List<OemSegment>> entry : byId.entrySet()) {
82 ret.put(entry.getKey(), new OemSatelliteEphemeris(entry.getKey(), mu, entry.getValue()));
83 }
84 return ret;
85 }
86
87
88
89 public void checkTimeSystems() {
90 TimeSystem referenceTimeSystem = null;
91 for (final OemSegment segment : getSegments()) {
92 final TimeSystem timeSystem = segment.getMetadata().getTimeSystem();
93 if (referenceTimeSystem == null) {
94 referenceTimeSystem = timeSystem;
95 } else if (!referenceTimeSystem.equals(timeSystem)) {
96 throw new OrekitException(OrekitMessages.CCSDS_INCONSISTENT_TIME_SYSTEMS,
97 referenceTimeSystem.name(), timeSystem.name());
98 }
99 }
100 }
101
102 }