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.opm;
19
20 import java.util.List;
21
22 import org.orekit.data.DataContext;
23 import org.orekit.files.ccsds.ndm.NdmConstituent;
24 import org.orekit.files.ccsds.ndm.odm.OdmCommonMetadata;
25 import org.orekit.files.ccsds.ndm.odm.KeplerianElements;
26 import org.orekit.files.ccsds.ndm.odm.OdmHeader;
27 import org.orekit.files.ccsds.section.Segment;
28 import org.orekit.orbits.CartesianOrbit;
29 import org.orekit.orbits.KeplerianOrbit;
30 import org.orekit.propagation.SpacecraftState;
31 import org.orekit.time.AbsoluteDate;
32 import org.orekit.time.TimeStamped;
33 import org.orekit.utils.IERSConventions;
34 import org.orekit.utils.TimeStampedPVCoordinates;
35
36
37
38
39
40 public class Opm extends NdmConstituent<OdmHeader, Segment<OdmCommonMetadata, OpmData>> implements TimeStamped {
41
42
43 public static final String ROOT = "opm";
44
45
46 public static final String FORMAT_VERSION_KEY = "CCSDS_OPM_VERS";
47
48
49 private final double mu;
50
51
52
53
54
55
56
57
58 public Opm(final OdmHeader header, final List<Segment<OdmCommonMetadata, OpmData>> segments,
59 final IERSConventions conventions, final DataContext dataContext,
60 final double mu) {
61 super(header, segments, conventions, dataContext);
62 this.mu = mu;
63 }
64
65
66
67
68 public OdmCommonMetadata getMetadata() {
69 return getSegments().get(0).getMetadata();
70 }
71
72
73
74
75 public OpmData getData() {
76 return getSegments().get(0).getData();
77 }
78
79
80 @Override
81 public AbsoluteDate getDate() {
82 return getData().getStateVectorBlock().getEpoch();
83 }
84
85
86
87
88 public int getNbManeuvers() {
89 return getData().getNbManeuvers();
90 }
91
92
93
94
95 public List<Maneuver> getManeuvers() {
96 return getData().getManeuvers();
97 }
98
99
100
101
102
103 public Maneuver getManeuver(final int index) {
104 return getData().getManeuver(index);
105 }
106
107
108
109
110 public boolean hasManeuvers() {
111 return getData().hasManeuvers();
112 }
113
114
115
116
117 public TimeStampedPVCoordinates getPVCoordinates() {
118 return getData().getStateVectorBlock().toTimeStampedPVCoordinates();
119 }
120
121
122
123
124 public CartesianOrbit generateCartesianOrbit() {
125 return new CartesianOrbit(getPVCoordinates(), getMetadata().getFrame(),
126 getData().getStateVectorBlock().getEpoch(),
127 mu);
128 }
129
130
131
132
133 public KeplerianOrbit generateKeplerianOrbit() {
134 final OdmCommonMetadata metadata = getMetadata();
135 final OpmData data = getData();
136 final KeplerianElements keplerianElements = data.getKeplerianElementsBlock();
137 if (keplerianElements != null) {
138 return keplerianElements.generateKeplerianOrbit(metadata.getFrame());
139 } else {
140 return new KeplerianOrbit(getPVCoordinates(), metadata.getFrame(),
141 data.getStateVectorBlock().getEpoch(),
142 mu);
143 }
144 }
145
146
147
148
149 public SpacecraftState generateSpacecraftState() {
150 return new SpacecraftState(generateCartesianOrbit()).withMass(getData().getMass());
151 }
152
153 }
154