1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ccsds.ndm.odm.ocm;
18
19 import java.io.ByteArrayInputStream;
20 import java.io.CharArrayWriter;
21 import java.io.IOException;
22 import java.io.InputStreamReader;
23 import java.net.URISyntaxException;
24 import java.nio.charset.StandardCharsets;
25 import java.util.List;
26 import java.util.Locale;
27
28 import org.hipparchus.geometry.euclidean.threed.Vector3D;
29 import org.hipparchus.util.FastMath;
30 import org.junit.Assert;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.orekit.Utils;
34 import org.orekit.data.DataContext;
35 import org.orekit.data.DataSource;
36 import org.orekit.errors.OrekitException;
37 import org.orekit.errors.OrekitMessages;
38 import org.orekit.files.ccsds.definitions.CelestialBodyFrame;
39 import org.orekit.files.ccsds.definitions.CenterName;
40 import org.orekit.files.ccsds.definitions.DutyCycleType;
41 import org.orekit.files.ccsds.definitions.ElementsType;
42 import org.orekit.files.ccsds.definitions.OdMethodType;
43 import org.orekit.files.ccsds.definitions.OnOff;
44 import org.orekit.files.ccsds.definitions.OrbitRelativeFrame;
45 import org.orekit.files.ccsds.definitions.SpacecraftBodyFrame;
46 import org.orekit.files.ccsds.definitions.TimeSystem;
47 import org.orekit.files.ccsds.definitions.Units;
48 import org.orekit.files.ccsds.ndm.ParserBuilder;
49 import org.orekit.files.ccsds.ndm.WriterBuilder;
50 import org.orekit.files.ccsds.ndm.odm.UserDefined;
51 import org.orekit.files.ccsds.ndm.odm.oem.InterpolationMethod;
52 import org.orekit.files.ccsds.utils.generation.Generator;
53 import org.orekit.files.ccsds.utils.generation.KvnGenerator;
54 import org.orekit.files.ccsds.utils.lexical.KvnLexicalAnalyzer;
55 import org.orekit.files.ccsds.utils.lexical.XmlLexicalAnalyzer;
56 import org.orekit.time.AbsoluteDate;
57 import org.orekit.time.TimeScale;
58 import org.orekit.time.TimeScalesFactory;
59 import org.orekit.utils.Constants;
60 import org.orekit.utils.IERSConventions;
61 import org.orekit.utils.TimeStampedPVCoordinates;
62 import org.orekit.utils.units.Unit;
63
64 public class OcmParserTest {
65
66 @Before
67 public void setUp() {
68 Utils.setDataRoot("regular-data");
69 }
70
71 @Test
72 public void testNonExistentKvnFile() throws URISyntaxException {
73 final String realName = "/ccsds/odm/ocm/OCMExample1.txt";
74 final String wrongName = realName + "xxxxx";
75 final DataSource source = new DataSource(wrongName, () -> getClass().getResourceAsStream(wrongName));
76 try {
77 new KvnLexicalAnalyzer(source).accept(new ParserBuilder().buildOcmParser());
78 Assert.fail("an exception should have been thrown");
79 } catch (OrekitException oe) {
80 Assert.assertEquals(OrekitMessages.UNABLE_TO_FIND_FILE, oe.getSpecifier());
81 Assert.assertEquals(wrongName, oe.getParts()[0]);
82 }
83 }
84
85 @Test
86 public void testNonExistentXmlFile() throws URISyntaxException {
87 final String realName = "/ccsds/odm/ocm/OCMExample1.txt";
88 final String wrongName = realName + "xxxxx";
89 final DataSource source = new DataSource(wrongName, () -> getClass().getResourceAsStream(wrongName));
90 try {
91 new XmlLexicalAnalyzer(source).accept(new ParserBuilder().buildOcmParser());
92 Assert.fail("an exception should have been thrown");
93 } catch (OrekitException oe) {
94 Assert.assertEquals(OrekitMessages.UNABLE_TO_FIND_FILE, oe.getSpecifier());
95 Assert.assertEquals(wrongName, oe.getParts()[0]);
96 }
97 }
98
99 @Test
100 public void testMissingT0() throws URISyntaxException {
101 final String name = "/ccsds/odm/ocm/OCM-missing-t0.txt";
102 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
103 try {
104 new ParserBuilder().
105 withMu(Constants.EIGEN5C_EARTH_MU).
106 buildOcmParser().
107 parseMessage(source);
108 Assert.fail("an exception should have been thrown");
109 } catch (OrekitException oe) {
110 Assert.assertEquals(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY, oe.getSpecifier());
111 Assert.assertEquals(OcmMetadataKey.EPOCH_TZERO.name(), oe.getParts()[0]);
112 }
113 }
114
115 @Test
116 public void testMissingManeuverTime() throws URISyntaxException {
117 final String name = "/ccsds/odm/ocm/OCM-missing-maneuver-time.txt";
118 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
119 try {
120 new ParserBuilder().
121 withMu(Constants.EIGEN5C_EARTH_MU).
122 buildOcmParser().
123 parseMessage(source);
124 Assert.fail("an exception should have been thrown");
125 } catch (OrekitException oe) {
126 Assert.assertEquals(OrekitMessages.CCSDS_MANEUVER_MISSING_TIME, oe.getSpecifier());
127 Assert.assertEquals("MAN-45", oe.getParts()[0]);
128 }
129 }
130
131 @Test
132 public void testWrongTimeSpan() throws URISyntaxException {
133 final String name = "/ccsds/odm/ocm/OCM-wrong-time-span.txt";
134 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
135 try {
136 new ParserBuilder().
137 withMu(Constants.EIGEN5C_EARTH_MU).
138 buildOcmParser().
139 parseMessage(source);
140 Assert.fail("an exception should have been thrown");
141 } catch (OrekitException oe) {
142 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_ELEMENT_IN_FILE, oe.getSpecifier());
143 Assert.assertEquals("TIME_SPAN", oe.getParts()[0]);
144 Assert.assertEquals(11, ((Integer) oe.getParts()[1]).intValue());
145 Assert.assertTrue(((String) oe.getParts()[2]).endsWith("OCM-wrong-time-span.txt"));
146 }
147 }
148
149 @Test
150 public void testMissingRevnumBasis() throws URISyntaxException {
151 final String name = "/ccsds/odm/ocm/OCM-missing-revnum-basis.txt";
152 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
153 try {
154 new ParserBuilder().
155 withMu(Constants.EIGEN5C_EARTH_MU).
156 buildOcmParser().
157 parseMessage(source);
158 Assert.fail("an exception should have been thrown");
159 } catch (OrekitException oe) {
160 Assert.assertEquals(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY, oe.getSpecifier());
161 Assert.assertEquals(TrajectoryStateHistoryMetadataKey.ORB_REVNUM_BASIS.name(), oe.getParts()[0]);
162 }
163 }
164
165 @Test
166 public void testSpuriousMetaDataSection() throws URISyntaxException {
167 final String name = "/ccsds/odm/ocm/OCM-spurious-metadata-section.txt";
168 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
169 try {
170 new ParserBuilder().
171 withMu(Constants.EIGEN5C_EARTH_MU).
172 buildOcmParser().
173 parseMessage(source);
174 Assert.fail("an exception should have been thrown");
175 } catch (OrekitException oe) {
176 Assert.assertEquals(OrekitMessages.CCSDS_UNEXPECTED_KEYWORD, oe.getSpecifier());
177 Assert.assertEquals(13, ((Integer) oe.getParts()[0]).intValue());
178 Assert.assertEquals("META", oe.getParts()[2]);
179 }
180 }
181
182 @Test
183 public void testIncompatibleUnitsDimension() throws URISyntaxException {
184 final String name = "/ccsds/odm/ocm/OCM-incompatible-units-dimension.txt";
185 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
186 try {
187 new ParserBuilder().
188 withMu(Constants.EIGEN5C_EARTH_MU).
189 buildOcmParser().
190 parseMessage(source);
191 Assert.fail("an exception should have been thrown");
192 } catch (OrekitException oe) {
193 Assert.assertEquals(OrekitMessages.INCOMPATIBLE_UNITS, oe.getSpecifier());
194 Assert.assertEquals("km²/s", oe.getParts()[0]);
195 Assert.assertEquals("m", oe.getParts()[1]);
196 }
197 }
198
199 @Test
200 public void testIncompatibleUnitsScale() throws URISyntaxException {
201 final String name = "/ccsds/odm/ocm/OCM-incompatible-units-scale.txt";
202 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
203 try {
204 new ParserBuilder().
205 withMu(Constants.EIGEN5C_EARTH_MU).
206 buildOcmParser().
207 parseMessage(source);
208 Assert.fail("an exception should have been thrown");
209 } catch (OrekitException oe) {
210 Assert.assertEquals(OrekitMessages.INCOMPATIBLE_UNITS, oe.getSpecifier());
211 Assert.assertEquals("km", oe.getParts()[0]);
212 Assert.assertEquals("m", oe.getParts()[1]);
213 }
214 }
215
216 @Test
217 public void testWrongNbElements() throws URISyntaxException {
218 final String name = "/ccsds/odm/ocm/OCM-wrong-nb-elements.txt";
219 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
220 try {
221 new ParserBuilder().
222 withMu(Constants.EIGEN5C_EARTH_MU).
223 buildOcmParser().
224 parseMessage(source);
225 Assert.fail("an exception should have been thrown");
226 } catch (OrekitException oe) {
227 Assert.assertEquals(OrekitMessages.CCSDS_ELEMENT_SET_WRONG_NB_COMPONENTS, oe.getSpecifier());
228 Assert.assertEquals(ElementsType.CARTP.name(), oe.getParts()[0]);
229 Assert.assertEquals(ElementsType.CARTP.toString(), oe.getParts()[1]);
230 Assert.assertEquals(3, ((Integer) oe.getParts()[2]).intValue());
231 }
232 }
233
234 @Test
235 public void testUnknownFrame() throws URISyntaxException {
236 final String name = "/ccsds/odm/ocm/OCM-unknown-frame.txt";
237 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
238 final Ocm ocm = new ParserBuilder().
239 withMu(Constants.EIGEN5C_EARTH_MU).
240 buildOcmParser().
241 parseMessage(source);
242 Assert.assertEquals("CS GROUP", ocm.getHeader().getOriginator());
243 Assert.assertEquals("728b0d2a-01fc-4d0e-9f0a-370c6930ea84", ocm.getHeader().getMessageId().toLowerCase(Locale.US));
244 final TrajectoryStateHistory h = ocm.getData().getOTrajectoryBlocks().get(0);
245 Assert.assertEquals("ZZRF", h.getMetadata().getTrajReferenceFrame().getName());
246 List<TimeStampedPVCoordinates> l = h.getCoordinates();
247 Assert.assertEquals( 3.0e6, l.get(0).getPosition().getX(), 1.0e-9);
248 Assert.assertEquals( 4.0e6, l.get(0).getPosition().getY(), 1.0e-9);
249 Assert.assertEquals( 5.0e6, l.get(0).getPosition().getZ(), 1.0e-9);
250 Assert.assertEquals(-1.0e3, l.get(0).getVelocity().getX(), 1.0e-12);
251 Assert.assertEquals(-2.0e3, l.get(0).getVelocity().getY(), 1.0e-12);
252 Assert.assertEquals(-3.0e3, l.get(0).getVelocity().getZ(), 1.0e-1);
253 try {
254 ocm.getData().getOTrajectoryBlocks().get(0).getFrame();
255 Assert.fail("an exception should have been thrown");
256 } catch (OrekitException oe) {
257 Assert.assertEquals(OrekitMessages.CCSDS_INVALID_FRAME, oe.getSpecifier());
258 Assert.assertEquals("ZZRF", oe.getParts()[0]);
259 }
260 }
261
262 @Test
263 public void testUserDefined() throws URISyntaxException {
264 final String name = "/ccsds/odm/ocm/OCM-user-defined.txt";
265 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
266 final Ocm ocm = new ParserBuilder().
267 withMu(Constants.EIGEN5C_EARTH_MU).
268 buildOcmParser().
269 parseMessage(source);
270 Assert.assertEquals("CS GROUP", ocm.getHeader().getOriginator());
271 Assert.assertEquals("b77d785c-f7a8-4a80-a9b1-a540eac19d7a", ocm.getHeader().getMessageId().toLowerCase(Locale.US));
272 Assert.assertNull(ocm.getData().getOTrajectoryBlocks());
273 Assert.assertEquals(1, ocm.getData().getUserDefinedBlock().getComments().size());
274 Assert.assertEquals("some user data", ocm.getData().getUserDefinedBlock().getComments().get(0));
275 Assert.assertEquals(1, ocm.getData().getUserDefinedBlock().getParameters().size());
276 Assert.assertEquals("OREKIT", ocm.getData().getUserDefinedBlock().getParameters().get("GENERATOR"));
277 }
278
279 @Test
280 public void testParseOCM1() {
281 final String name = "/ccsds/odm/ocm/OCMExample1.txt";
282 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
283 final Ocm file = new ParserBuilder().
284 withMu(Constants.EIGEN5C_EARTH_MU).
285 buildOcmParser().
286 parseMessage(source);
287
288
289 Assert.assertEquals("CSPOC", file.getMetadata().getCatalogName());
290 Assert.assertEquals(1.0, file.getMetadata().getSclkSecPerSISec(), 1.0e-15);
291 Assert.assertEquals("LINEAR", file.getMetadata().getInterpMethodEOP());
292
293
294 Assert.assertEquals(3.0, file.getHeader().getFormatVersion(), 1.0e-10);
295 Assert.assertEquals(new AbsoluteDate(1998, 11, 06, 9, 23, 57, TimeScalesFactory.getUTC()),
296 file.getHeader().getCreationDate());
297
298
299 Assert.assertNull(file.getMetadata().getObjectName());
300
301 Assert.assertEquals("JAXA", file.getHeader().getOriginator());
302
303 final AbsoluteDate t0 = new AbsoluteDate(1998, 12, 18, 14, 28, 15.1172, TimeScalesFactory.getUTC());
304 Assert.assertEquals(t0, file.getMetadata().getEpochT0());
305 Assert.assertEquals(TimeSystem.UTC, file.getMetadata().getTimeSystem());
306
307
308 Assert.assertEquals(1, file.getData().getOTrajectoryBlocks().size());
309 TrajectoryStateHistory history = file.getData().getOTrajectoryBlocks().get(0);
310 Assert.assertEquals("intervening data records omitted between DT=20.0 and DT=500.0",
311 history.getMetadata().getComments().get(0));
312 Assert.assertEquals("OSCULATING", history.getMetadata().getOrbAveraging());
313 Assert.assertEquals("EARTH", history.getMetadata().getCenter().getName());
314 Assert.assertEquals(CelestialBodyFrame.ITRF2000, history.getMetadata().getTrajReferenceFrame().asCelestialBodyFrame());
315 Assert.assertEquals(ElementsType.CARTPV, history.getMetadata().getTrajType());
316 Assert.assertEquals(0.0, file.getMetadata().getEpochT0().durationFrom(t0), 1.0e-15);
317 List<TrajectoryState> states = history.getTrajectoryStates();
318 Assert.assertEquals(4, states.size());
319
320 Assert.assertEquals(0.0, states.get(0).getDate().durationFrom(t0), 1.0e-15);
321 Assert.assertEquals(6, states.get(0).getElements().length);
322 Assert.assertEquals( 2789600.0, states.get(0).getElements()[0], 1.0e-15);
323 Assert.assertEquals( -280000.0, states.get(0).getElements()[1], 1.0e-15);
324 Assert.assertEquals(-1746800.0, states.get(0).getElements()[2], 1.0e-15);
325 Assert.assertEquals( 4730.0, states.get(0).getElements()[3], 1.0e-15);
326 Assert.assertEquals( -2500.0, states.get(0).getElements()[4], 1.0e-15);
327 Assert.assertEquals( -1040.0, states.get(0).getElements()[5], 1.0e-15);
328
329 Assert.assertEquals(10.0, states.get(1).getDate().durationFrom(t0), 1.0e-15);
330 Assert.assertEquals(6, states.get(1).getElements().length);
331 Assert.assertEquals( 2783400.0, states.get(1).getElements()[0], 1.0e-15);
332 Assert.assertEquals( -308100.0, states.get(1).getElements()[1], 1.0e-15);
333 Assert.assertEquals(-1877100.0, states.get(1).getElements()[2], 1.0e-15);
334 Assert.assertEquals( 5190.0, states.get(1).getElements()[3], 1.0e-15);
335 Assert.assertEquals( -2420.0, states.get(1).getElements()[4], 1.0e-15);
336 Assert.assertEquals( -2000.0, states.get(1).getElements()[5], 1.0e-15);
337
338 Assert.assertEquals(20.0, states.get(2).getDate().durationFrom(t0), 1.0e-15);
339 Assert.assertEquals(6, states.get(2).getElements().length);
340 Assert.assertEquals( 2776000.0, states.get(2).getElements()[0], 1.0e-15);
341 Assert.assertEquals( -336900.0, states.get(2).getElements()[1], 1.0e-15);
342 Assert.assertEquals(-2008700.0, states.get(2).getElements()[2], 1.0e-15);
343 Assert.assertEquals( 5640.0, states.get(2).getElements()[3], 1.0e-15);
344 Assert.assertEquals( -2340.0, states.get(2).getElements()[4], 1.0e-15);
345 Assert.assertEquals( -1950.0, states.get(2).getElements()[5], 1.0e-15);
346
347 Assert.assertEquals(500.0, states.get(3).getDate().durationFrom(t0), 1.0e-15);
348 Assert.assertEquals(6, states.get(3).getElements().length);
349 Assert.assertEquals( 2164375.0, states.get(3).getElements()[0], 1.0e-15);
350 Assert.assertEquals( 1115811.0, states.get(3).getElements()[1], 1.0e-15);
351 Assert.assertEquals( -688131.0, states.get(3).getElements()[2], 1.0e-15);
352 Assert.assertEquals( -3533.28, states.get(3).getElements()[3], 1.0e-15);
353 Assert.assertEquals( -2884.52, states.get(3).getElements()[4], 1.0e-15);
354 Assert.assertEquals( 885.35, states.get(3).getElements()[5], 1.0e-15);
355
356 Assert.assertEquals(1, file.getSatellites().size());
357 Assert.assertEquals("UNKNOWN", file.getSatellites().entrySet().iterator().next().getKey());
358
359 }
360
361 @Test
362 public void testParseOCM2KVN() {
363 final String name = "/ccsds/odm/ocm/OCMExample2.txt";
364 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
365 final Ocm file = new ParserBuilder().
366 withMu(Constants.EIGEN5C_EARTH_MU).
367 buildOcmParser().
368 parseMessage(source);
369
370
371 Assert.assertEquals(3.0, file.getHeader().getFormatVersion(), 1.0e-10);
372 Assert.assertEquals("This OCM reflects the latest conditions post-maneuver A67Z",
373 file.getHeader().getComments().get(0));
374 Assert.assertEquals("This example shows the specification of multiple comment lines",
375 file.getHeader().getComments().get(1));
376 Assert.assertEquals(new AbsoluteDate(1998, 11, 06, 9, 23, 57, TimeScalesFactory.getUTC()),
377 file.getHeader().getCreationDate());
378 Assert.assertEquals("JAXA", file.getHeader().getOriginator());
379 Assert.assertEquals("OCM 201113719185", file.getHeader().getMessageId());
380
381
382 Assert.assertEquals("OSPREY 5", file.getMetadata().getObjectName());
383 Assert.assertEquals("1998-999A", file.getMetadata().getInternationalDesignator());
384 Assert.assertEquals("R. Rabbit", file.getMetadata().getOriginatorPOC());
385 Assert.assertEquals("Flight Dynamics Mission Design Lead", file.getMetadata().getOriginatorPosition());
386 Assert.assertEquals("(719)555-1234", file.getMetadata().getOriginatorPhone());
387 Assert.assertEquals("Mr. Rodgers", file.getMetadata().getTechPOC());
388 Assert.assertEquals("(719)555-1234", file.getMetadata().getTechPhone());
389 Assert.assertEquals("email@email.XXX", file.getMetadata().getTechAddress());
390 Assert.assertEquals(TimeSystem.UT1, file.getMetadata().getTimeSystem());
391 TimeScale ts = DataContext.getDefault().getTimeScales().getUT1(IERSConventions.IERS_2010, false);
392 Assert.assertEquals(0.0,
393 file.getMetadata().getEpochT0().durationFrom(new AbsoluteDate(1998, 12, 18, ts)),
394 1.0e-10);
395 Assert.assertEquals(36.0, file.getMetadata().getTaimutcT0(), 1.0e-15);
396 Assert.assertEquals(0.357, file.getMetadata().getUt1mutcT0(), 1.0e-15);
397
398
399 Assert.assertEquals(1, file.getData().getOTrajectoryBlocks().size());
400 final TrajectoryStateHistory orb = file.getData().getOTrajectoryBlocks().get(0);
401 Assert.assertEquals(2, orb.getMetadata().getComments().size());
402 Assert.assertEquals("GEOCENTRIC, CARTESIAN, EARTH FIXED", orb.getMetadata().getComments().get(0));
403 Assert.assertEquals("THIS IS MY SECOND COMMENT LINE", orb.getMetadata().getComments().get(1));
404 Assert.assertEquals("PREDICTED", orb.getMetadata().getTrajBasis());
405 Assert.assertEquals("EFG", orb.getMetadata().getTrajReferenceFrame().getName());
406 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asFrame());
407 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asCelestialBodyFrame());
408 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asOrbitRelativeFrame());
409 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asSpacecraftBodyFrame());
410 Assert.assertEquals(ElementsType.CARTPV, orb.getMetadata().getTrajType());
411 Assert.assertEquals(6, orb.getMetadata().getTrajUnits().size());
412 Assert.assertEquals("km", orb.getMetadata().getTrajUnits().get(0).getName());
413 Assert.assertEquals("km", orb.getMetadata().getTrajUnits().get(1).getName());
414 Assert.assertEquals("km", orb.getMetadata().getTrajUnits().get(2).getName());
415 Assert.assertEquals("km/s", orb.getMetadata().getTrajUnits().get(3).getName());
416 Assert.assertEquals("km/s", orb.getMetadata().getTrajUnits().get(4).getName());
417 Assert.assertEquals("km/s", orb.getMetadata().getTrajUnits().get(5).getName());
418 Assert.assertEquals(1, orb.getTrajectoryStates().size());
419 Assert.assertEquals(new AbsoluteDate(1998, 12, 18, 14, 28, 25.1172, ts),
420 orb.getTrajectoryStates().get(0).getDate());
421 Assert.assertEquals( 2854533.0, orb.getTrajectoryStates().get(0).getElements()[0], 1.0e-10);
422 Assert.assertEquals(-2916187.0, orb.getTrajectoryStates().get(0).getElements()[1], 1.0e-10);
423 Assert.assertEquals(-5360774.0, orb.getTrajectoryStates().get(0).getElements()[2], 1.0e-10);
424 Assert.assertEquals( 5688.0, orb.getTrajectoryStates().get(0).getElements()[3], 1.0e-10);
425 Assert.assertEquals( 4652.0, orb.getTrajectoryStates().get(0).getElements()[4], 1.0e-10);
426 Assert.assertEquals( 520.0, orb.getTrajectoryStates().get(0).getElements()[5], 1.0e-10);
427
428
429 PhysicalProperties phys = file.getData().getPhysicBlock();
430 Assert.assertEquals(1, phys.getComments().size());
431 Assert.assertEquals("S/C Physical Characteristics:", phys.getComments().get(0));
432 Assert.assertEquals(100.0, phys.getWetMass(), 1.0e-10);
433 Assert.assertEquals(0.03123, phys.getOebQ().getQ1(), 1.0e-10);
434 Assert.assertEquals(0.78543, phys.getOebQ().getQ2(), 1.0e-10);
435 Assert.assertEquals(0.39158, phys.getOebQ().getQ3(), 1.0e-10);
436 Assert.assertEquals(0.47832, phys.getOebQ().getQ0(), 1.0e-10);
437 Assert.assertEquals(2.0, phys.getOebMax(), 1.0e-10);
438 Assert.assertEquals(1.0, phys.getOebIntermediate(), 1.0e-10);
439 Assert.assertEquals(0.5, phys.getOebMin(), 1.0e-10);
440 Assert.assertEquals(0.15, phys.getOebAreaAlongMax(), 1.0e-10);
441 Assert.assertEquals(0.30, phys.getOebAreaAlongIntermediate(), 1.0e-10);
442 Assert.assertEquals(0.50, phys.getOebAreaAlongMin(), 1.0e-10);
443
444
445 Assert.assertNull(file.getData().getCovarianceBlocks());
446
447
448 Assert.assertNull(file.getData().getManeuverBlocks());
449
450
451 Perturbations perts = file.getData().getPerturbationsBlock();
452 Assert.assertEquals(1, perts.getComments().size());
453 Assert.assertEquals("Perturbations Specification:", perts.getComments().get(0));
454 Assert.assertEquals("NRLMSIS00", perts.getAtmosphericModel());
455 Assert.assertEquals("EGM-96", perts.getGravityModel());
456 Assert.assertEquals(36, perts.getGravityDegree());
457 Assert.assertEquals(36, perts.getGravityOrder());
458 Assert.assertEquals(2, perts.getNBodyPerturbations().size());
459 Assert.assertEquals("MOON", perts.getNBodyPerturbations().get(0).getName());
460 Assert.assertEquals("SUN", perts.getNBodyPerturbations().get(1).getName());
461 Assert.assertEquals( 12.0, Units.NANO_TESLA.fromSI(perts.getFixedGeomagneticKp()), 1.0e-10);
462 Assert.assertEquals(105.0, Unit.SOLAR_FLUX_UNIT.fromSI(perts.getFixedF10P7()), 1.0e-10);
463 Assert.assertEquals(120.0, Unit.SOLAR_FLUX_UNIT.fromSI(perts.getFixedF10P7Mean()), 1.0e-10);
464
465
466 Assert.assertNull(file.getData().getOrbitDeterminationBlock());
467
468
469 UserDefined user = file.getData().getUserDefinedBlock();
470 Assert.assertTrue(user.getComments().isEmpty());
471 Assert.assertEquals(1, user.getParameters().size());
472 Assert.assertEquals("MAXWELL RAFERTY", user.getParameters().get("CONSOLE_POC"));
473
474 Assert.assertEquals(1, file.getSatellites().size());
475 Assert.assertEquals("OSPREY 5", file.getSatellites().entrySet().iterator().next().getKey());
476
477 }
478
479 @Test
480 public void testParseOCM2XMLBinary() {
481 final String name = "/ccsds/odm/ocm/OCMExample2.xml";
482 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
483 validateOCM2XML(new ParserBuilder().
484 withMu(Constants.EIGEN5C_EARTH_MU).
485 buildOcmParser().
486 parseMessage(source));
487 }
488
489 @Test
490 public void testParseOCM2XMLCharacter() {
491 final String name = "/ccsds/odm/ocm/OCMExample2.xml";
492 final DataSource source = new DataSource(name, () -> new InputStreamReader(getClass().getResourceAsStream(name), StandardCharsets.UTF_8));
493 validateOCM2XML(new ParserBuilder().
494 withMu(Constants.EIGEN5C_EARTH_MU).
495 buildOcmParser().
496 parseMessage(source));
497 }
498
499 @Test
500 public void testWriteOCM2() throws URISyntaxException, IOException {
501 final String name = "/ccsds/odm/ocm/OCMExample2.xml";
502 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
503 OcmParser parser = new ParserBuilder(). withMu(Constants.EIGEN5C_EARTH_MU).buildOcmParser();
504 final Ocm original = parser.parseMessage(source);
505
506
507 final CharArrayWriter caw = new CharArrayWriter();
508 final Generator generator = new KvnGenerator(caw, OcmWriter.KVN_PADDING_WIDTH, "dummy", 60);
509 new WriterBuilder().buildOcmWriter().writeMessage(generator, original);
510
511
512 final byte[] bytes = caw.toString().getBytes(StandardCharsets.UTF_8);
513 final DataSource source2 = new DataSource(name, () -> new ByteArrayInputStream(bytes));
514 final Ocm rebuilt = new ParserBuilder().buildOcmParser().parseMessage(source2);
515 validateOCM2XML(rebuilt);
516
517 }
518
519 private void validateOCM2XML(final Ocm file) {
520
521
522 Assert.assertEquals(3.0, file.getHeader().getFormatVersion(), 1.0e-10);
523 Assert.assertEquals("ODM V.3 Example G-2",
524 file.getHeader().getComments().get(0));
525 Assert.assertEquals("OCM example with space object characteristics and perturbations.",
526 file.getHeader().getComments().get(1));
527 Assert.assertEquals("This OCM reflects the latest conditions post-maneuver A67Z",
528 file.getHeader().getComments().get(2));
529 Assert.assertEquals("This example shows the specification of multiple comment lines",
530 file.getHeader().getComments().get(3));
531 Assert.assertEquals(new AbsoluteDate(1998, 11, 06, 9, 23, 57, TimeScalesFactory.getUTC()),
532 file.getHeader().getCreationDate());
533 Assert.assertEquals("JAXA", file.getHeader().getOriginator());
534 Assert.assertEquals("OCM 201113719185", file.getHeader().getMessageId());
535
536
537 Assert.assertNull(file.getMetadata().getObjectName());
538 Assert.assertNull(file.getMetadata().getObjectDesignator());
539 Assert.assertEquals("1998-999A", file.getMetadata().getInternationalDesignator());
540 Assert.assertEquals("R. Rabbit", file.getMetadata().getOriginatorPOC());
541 Assert.assertEquals("Flight Dynamics Mission Design Lead", file.getMetadata().getOriginatorPosition());
542 Assert.assertEquals("(719)555-1234", file.getMetadata().getOriginatorPhone());
543 Assert.assertEquals("Mr. Rodgers", file.getMetadata().getTechPOC());
544 Assert.assertEquals("(719)555-1234", file.getMetadata().getTechPhone());
545 Assert.assertEquals("email@email.XXX", file.getMetadata().getTechAddress());
546 Assert.assertEquals(TimeSystem.UT1, file.getMetadata().getTimeSystem());
547 TimeScale ts = DataContext.getDefault().getTimeScales().getUT1(IERSConventions.IERS_2010, false);
548 Assert.assertEquals(0.0,
549 file.getMetadata().getEpochT0().durationFrom(new AbsoluteDate(1998, 12, 18, ts)),
550 1.0e-10);
551 Assert.assertEquals(36.0, file.getMetadata().getTaimutcT0(), 1.0e-15);
552 Assert.assertEquals(0.357, file.getMetadata().getUt1mutcT0(), 1.0e-15);
553
554
555 Assert.assertEquals(1, file.getData().getOTrajectoryBlocks().size());
556 final TrajectoryStateHistory orb = file.getData().getOTrajectoryBlocks().get(0);
557 Assert.assertEquals(2, orb.getMetadata().getComments().size());
558 Assert.assertEquals("GEOCENTRIC, CARTESIAN, EARTH FIXED", orb.getMetadata().getComments().get(0));
559 Assert.assertEquals("THIS IS MY SECOND COMMENT LINE", orb.getMetadata().getComments().get(1));
560 Assert.assertEquals("PREDICTED", orb.getMetadata().getTrajBasis());
561 Assert.assertEquals("EFG", orb.getMetadata().getTrajReferenceFrame().getName());
562 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asFrame());
563 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asCelestialBodyFrame());
564 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asOrbitRelativeFrame());
565 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asSpacecraftBodyFrame());
566 Assert.assertEquals(ElementsType.CARTPVA, orb.getMetadata().getTrajType());
567 Assert.assertNull(orb.getMetadata().getTrajUnits());
568 Assert.assertEquals(1, orb.getTrajectoryStates().size());
569 Assert.assertEquals(new AbsoluteDate(1998, 12, 18, 0, 0, 0.0, ts),
570 orb.getTrajectoryStates().get(0).getDate());
571 Assert.assertEquals( 2854500.0, orb.getTrajectoryStates().get(0).getElements()[0], 1.0e-10);
572 Assert.assertEquals(-2916200.0, orb.getTrajectoryStates().get(0).getElements()[1], 1.0e-10);
573 Assert.assertEquals(-5360700.0, orb.getTrajectoryStates().get(0).getElements()[2], 1.0e-10);
574 Assert.assertEquals( 5900.0, orb.getTrajectoryStates().get(0).getElements()[3], 1.0e-10);
575 Assert.assertEquals( 4860.0, orb.getTrajectoryStates().get(0).getElements()[4], 1.0e-10);
576 Assert.assertEquals( 520.0, orb.getTrajectoryStates().get(0).getElements()[5], 1.0e-10);
577 Assert.assertEquals( 3.7, orb.getTrajectoryStates().get(0).getElements()[6], 1.0e-10);
578 Assert.assertEquals( -3.8, orb.getTrajectoryStates().get(0).getElements()[7], 1.0e-10);
579 Assert.assertEquals( -7.0, orb.getTrajectoryStates().get(0).getElements()[8], 1.0e-10);
580
581
582 PhysicalProperties phys = file.getData().getPhysicBlock();
583 Assert.assertEquals(1, phys.getComments().size());
584 Assert.assertEquals("Spacecraft Physical Characteristics", phys.getComments().get(0));
585 Assert.assertEquals(100.0, phys.getWetMass(), 1.0e-10);
586 Assert.assertEquals(0.03123, phys.getOebQ().getQ1(), 1.0e-10);
587 Assert.assertEquals(0.78543, phys.getOebQ().getQ2(), 1.0e-10);
588 Assert.assertEquals(0.39158, phys.getOebQ().getQ3(), 1.0e-10);
589 Assert.assertEquals(0.47832, phys.getOebQ().getQ0(), 1.0e-10);
590 Assert.assertEquals(2.0, phys.getOebMax(), 1.0e-10);
591 Assert.assertEquals(1.0, phys.getOebIntermediate(), 1.0e-10);
592 Assert.assertEquals(0.5, phys.getOebMin(), 1.0e-10);
593 Assert.assertEquals(0.15, phys.getOebAreaAlongMax(), 1.0e-10);
594 Assert.assertEquals(0.30, phys.getOebAreaAlongIntermediate(), 1.0e-10);
595 Assert.assertEquals(0.50, phys.getOebAreaAlongMin(), 1.0e-10);
596
597
598 Assert.assertNull(file.getData().getCovarianceBlocks());
599
600
601 Assert.assertNull(file.getData().getManeuverBlocks());
602
603
604 Perturbations perts = file.getData().getPerturbationsBlock();
605 Assert.assertEquals(1, perts.getComments().size());
606 Assert.assertEquals("Perturbations Specification", perts.getComments().get(0));
607 Assert.assertEquals("NRLMSIS00", perts.getAtmosphericModel());
608 Assert.assertEquals("EGM-96", perts.getGravityModel());
609 Assert.assertEquals(36, perts.getGravityDegree());
610 Assert.assertEquals(36, perts.getGravityOrder());
611 Assert.assertEquals(36, perts.getGravityOrder());
612 Assert.assertEquals(3.986004415e14, perts.getGm(), 1.0);
613 Assert.assertEquals("MOON", perts.getNBodyPerturbations().get(0).getName());
614 Assert.assertEquals("SUN", perts.getNBodyPerturbations().get(1).getName());
615 Assert.assertEquals( 12.0, Units.NANO_TESLA.fromSI(perts.getFixedGeomagneticKp()), 1.0e-10);
616 Assert.assertEquals(105.0, Unit.SOLAR_FLUX_UNIT.fromSI(perts.getFixedF10P7()), 1.0e-10);
617 Assert.assertEquals(120.0, Unit.SOLAR_FLUX_UNIT.fromSI(perts.getFixedF10P7Mean()), 1.0e-10);
618
619
620 Assert.assertNull(file.getData().getOrbitDeterminationBlock());
621
622
623 UserDefined user = file.getData().getUserDefinedBlock();
624 Assert.assertTrue(user.getComments().isEmpty());
625 Assert.assertEquals(1, user.getParameters().size());
626 Assert.assertEquals("WGS-84", user.getParameters().get("EARTH_MODEL"));
627
628 Assert.assertEquals(1, file.getSatellites().size());
629 Assert.assertEquals("1998-999A", file.getSatellites().entrySet().iterator().next().getKey());
630 }
631
632 @Test
633 public void testParseOCM3() throws IOException {
634 final String name = "/ccsds/odm/ocm/OCMExample3.txt";
635 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
636 final Ocm file = new ParserBuilder().
637 withMu(Constants.EIGEN5C_EARTH_MU).
638 buildOcmParser().
639 parse(source);
640
641
642 TimeScale utc = TimeScalesFactory.getUTC();
643 Assert.assertEquals(3.0, file.getHeader().getFormatVersion(), 1.0e-10);
644 Assert.assertEquals(0, file.getMetadata().getComments().size());
645 Assert.assertEquals(new AbsoluteDate(1998, 11, 06, 9, 23, 57, utc),
646 file.getHeader().getCreationDate());
647
648 final AbsoluteDate t0 = new AbsoluteDate(1998, 12, 18, 14, 28, 15.1172, utc);
649 Assert.assertEquals(t0, file.getMetadata().getEpochT0());
650 Assert.assertEquals("UTC", file.getMetadata().getTimeSystem().name());
651
652
653 Assert.assertEquals(1, file.getData().getOTrajectoryBlocks().size());
654 final TrajectoryStateHistory orb = file.getData().getOTrajectoryBlocks().get(0);
655 Assert.assertEquals(2, orb.getMetadata().getComments().size());
656 Assert.assertEquals("ORBIT EPHEMERIS INCORPORATING DEPLOYMENTS AND MANEUVERS (BELOW)", orb.getMetadata().getComments().get(0));
657 Assert.assertEquals("intervening data records omitted after DT=20.0", orb.getMetadata().getComments().get(1));
658 Assert.assertEquals("PREDICTED", orb.getMetadata().getTrajBasis());
659 Assert.assertEquals("TOD", orb.getMetadata().getTrajReferenceFrame().getName());
660 Assert.assertNotNull(orb.getMetadata().getTrajReferenceFrame().asFrame());
661 Assert.assertEquals(CelestialBodyFrame.TOD, orb.getMetadata().getTrajReferenceFrame().asCelestialBodyFrame());
662 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asOrbitRelativeFrame());
663 Assert.assertNull(orb.getMetadata().getTrajReferenceFrame().asSpacecraftBodyFrame());
664 Assert.assertEquals(t0, orb.getMetadata().getTrajFrameEpoch());
665 Assert.assertEquals(ElementsType.CARTPVA, orb.getMetadata().getTrajType());
666 Assert.assertEquals(9, orb.getMetadata().getTrajUnits().size());
667 Assert.assertEquals("km", orb.getMetadata().getTrajUnits().get(0).getName());
668 Assert.assertEquals("km", orb.getMetadata().getTrajUnits().get(1).getName());
669 Assert.assertEquals("km", orb.getMetadata().getTrajUnits().get(2).getName());
670 Assert.assertEquals("km/s", orb.getMetadata().getTrajUnits().get(3).getName());
671 Assert.assertEquals("km/s", orb.getMetadata().getTrajUnits().get(4).getName());
672 Assert.assertEquals("km/s", orb.getMetadata().getTrajUnits().get(5).getName());
673 Assert.assertEquals("km/s**2", orb.getMetadata().getTrajUnits().get(6).getName());
674 Assert.assertEquals("km/s**2", orb.getMetadata().getTrajUnits().get(7).getName());
675 Assert.assertEquals("km/s**2", orb.getMetadata().getTrajUnits().get(8).getName());
676 Assert.assertEquals(4, orb.getTrajectoryStates().size());
677 Assert.assertEquals( 0.0, orb.getTrajectoryStates().get(0).getDate().durationFrom(t0), 1.0e-10);
678 Assert.assertEquals( 2789600.0, orb.getTrajectoryStates().get(0).getElements()[0], 1.0e-10);
679 Assert.assertEquals( -280000.0, orb.getTrajectoryStates().get(0).getElements()[1], 1.0e-10);
680 Assert.assertEquals(-1746800.0, orb.getTrajectoryStates().get(0).getElements()[2], 1.0e-10);
681 Assert.assertEquals( 4730.0, orb.getTrajectoryStates().get(0).getElements()[3], 1.0e-10);
682 Assert.assertEquals( -2500.0, orb.getTrajectoryStates().get(0).getElements()[4], 1.0e-10);
683 Assert.assertEquals( -1040.0, orb.getTrajectoryStates().get(0).getElements()[5], 1.0e-10);
684 Assert.assertEquals( 8.0, orb.getTrajectoryStates().get(0).getElements()[6], 1.0e-10);
685 Assert.assertEquals( 1.0, orb.getTrajectoryStates().get(0).getElements()[7], 1.0e-10);
686 Assert.assertEquals( -159.0, orb.getTrajectoryStates().get(0).getElements()[8], 1.0e-10);
687 Assert.assertEquals( 10.0, orb.getTrajectoryStates().get(1).getDate().durationFrom(t0), 1.0e-10);
688 Assert.assertEquals( 2783400.0, orb.getTrajectoryStates().get(1).getElements()[0], 1.0e-10);
689 Assert.assertEquals( -308100.0, orb.getTrajectoryStates().get(1).getElements()[1], 1.0e-10);
690 Assert.assertEquals(-1877100.0, orb.getTrajectoryStates().get(1).getElements()[2], 1.0e-10);
691 Assert.assertEquals( 5190.0, orb.getTrajectoryStates().get(1).getElements()[3], 1.0e-10);
692 Assert.assertEquals( -2420.0, orb.getTrajectoryStates().get(1).getElements()[4], 1.0e-10);
693 Assert.assertEquals( -2000.0, orb.getTrajectoryStates().get(1).getElements()[5], 1.0e-10);
694 Assert.assertEquals( 8.0, orb.getTrajectoryStates().get(1).getElements()[6], 1.0e-10);
695 Assert.assertEquals( 1.0, orb.getTrajectoryStates().get(1).getElements()[7], 1.0e-10);
696 Assert.assertEquals( 1.0, orb.getTrajectoryStates().get(1).getElements()[8], 1.0e-10);
697 Assert.assertEquals( 20.0, orb.getTrajectoryStates().get(2).getDate().durationFrom(t0), 1.0e-10);
698 Assert.assertEquals( 2776000.0, orb.getTrajectoryStates().get(2).getElements()[0], 1.0e-10);
699 Assert.assertEquals( -336900.0, orb.getTrajectoryStates().get(2).getElements()[1], 1.0e-10);
700 Assert.assertEquals(-2008700.0, orb.getTrajectoryStates().get(2).getElements()[2], 1.0e-10);
701 Assert.assertEquals( 5640.0, orb.getTrajectoryStates().get(2).getElements()[3], 1.0e-10);
702 Assert.assertEquals( -2340.0, orb.getTrajectoryStates().get(2).getElements()[4], 1.0e-10);
703 Assert.assertEquals( -1950.0, orb.getTrajectoryStates().get(2).getElements()[5], 1.0e-10);
704 Assert.assertEquals( 8.0, orb.getTrajectoryStates().get(2).getElements()[6], 1.0e-10);
705 Assert.assertEquals( 1.0, orb.getTrajectoryStates().get(2).getElements()[7], 1.0e-10);
706 Assert.assertEquals( 159.0, orb.getTrajectoryStates().get(2).getElements()[8], 1.0e-10);
707 Assert.assertEquals( 500.0, orb.getTrajectoryStates().get(3).getDate().durationFrom(t0), 1.0e-10);
708 Assert.assertEquals( 2164375.0, orb.getTrajectoryStates().get(3).getElements()[0], 1.0e-10);
709 Assert.assertEquals( 1115811.0, orb.getTrajectoryStates().get(3).getElements()[1], 1.0e-10);
710 Assert.assertEquals( -688131.0, orb.getTrajectoryStates().get(3).getElements()[2], 1.0e-10);
711 Assert.assertEquals( -3533.28, orb.getTrajectoryStates().get(3).getElements()[3], 1.0e-10);
712 Assert.assertEquals( -2884.52, orb.getTrajectoryStates().get(3).getElements()[4], 1.0e-10);
713 Assert.assertEquals( 885.35, orb.getTrajectoryStates().get(3).getElements()[5], 1.0e-10);
714 Assert.assertEquals( 0.0, orb.getTrajectoryStates().get(3).getElements()[6], 1.0e-10);
715 Assert.assertEquals( 0.0, orb.getTrajectoryStates().get(3).getElements()[7], 1.0e-10);
716 Assert.assertEquals( 0.0, orb.getTrajectoryStates().get(3).getElements()[8], 1.0e-10);
717
718
719 PhysicalProperties phys = file.getData().getPhysicBlock();
720 Assert.assertEquals(1, phys.getComments().size());
721 Assert.assertEquals("S/C Physical Characteristics:", phys.getComments().get(0));
722 Assert.assertEquals(10.0, phys.getDragConstantArea(), 1.0e-10);
723 Assert.assertEquals(2.3, phys.getDragCoefficient(), 1.0e-10);
724 Assert.assertEquals(100.0, phys.getWetMass(), 1.0e-10);
725 Assert.assertEquals(4.0, phys.getSrpConstantArea(), 1.0e-10);
726 Assert.assertEquals(1.3, phys.getSrpCoefficient(), 1.0e-10);
727
728
729 Assert.assertNull(file.getData().getCovarianceBlocks());
730
731
732 List<ManeuverHistory> man = file.getData().getManeuverBlocks();
733 Assert.assertEquals(2, man.size());
734
735 Assert.assertEquals(2, man.get(0).getMetadata().getComments().size());
736 Assert.assertEquals("Ten 1kg objects deployed from 200kg host over 100 s timespan", man.get(0).getMetadata().getComments().get(0));
737 Assert.assertEquals("20 deg off of back-track direction", man.get(0).getMetadata().getComments().get(1));
738 Assert.assertEquals("CUBESAT DEPLOY", man.get(0).getMetadata().getManID());
739 Assert.assertEquals(ManBasis.CANDIDATE, man.get(0).getMetadata().getManBasis());
740 Assert.assertEquals("DEPLOY", man.get(0).getMetadata().getManDeviceID());
741 Assert.assertEquals(1, man.get(0).getMetadata().getManPurpose().size());
742 Assert.assertEquals("DEPLOY", man.get(0).getMetadata().getManPurpose().get(0));
743 Assert.assertEquals("RSW_ROTATING", man.get(0).getMetadata().getManReferenceFrame().getName());
744 Assert.assertNull(man.get(0).getMetadata().getManReferenceFrame().asFrame());
745 Assert.assertNull(man.get(0).getMetadata().getManReferenceFrame().asCelestialBodyFrame());
746 Assert.assertEquals(OrbitRelativeFrame.RSW_ROTATING, man.get(0).getMetadata().getManReferenceFrame().asOrbitRelativeFrame());
747 Assert.assertNull(man.get(0).getMetadata().getManReferenceFrame().asSpacecraftBodyFrame());
748 Assert.assertEquals(9, man.get(0).getMetadata().getManComposition().size());
749 Assert.assertEquals(ManeuverFieldType.TIME_RELATIVE, man.get(0).getMetadata().getManComposition().get(0));
750 Assert.assertEquals(ManeuverFieldType.DEPLOY_ID, man.get(0).getMetadata().getManComposition().get(1));
751 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_X, man.get(0).getMetadata().getManComposition().get(2));
752 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_Y, man.get(0).getMetadata().getManComposition().get(3));
753 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_Z, man.get(0).getMetadata().getManComposition().get(4));
754 Assert.assertEquals(ManeuverFieldType.DEPLOY_MASS, man.get(0).getMetadata().getManComposition().get(5));
755 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_SIGMA, man.get(0).getMetadata().getManComposition().get(6));
756 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_RATIO, man.get(0).getMetadata().getManComposition().get(7));
757 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_CDA, man.get(0).getMetadata().getManComposition().get(8));
758 Assert.assertEquals(8, man.get(0).getMetadata().getManUnits().size());
759 Assert.assertEquals("n/a", man.get(0).getMetadata().getManUnits().get(0).getName());
760 Assert.assertEquals("km/s", man.get(0).getMetadata().getManUnits().get(1).getName());
761 Assert.assertEquals("km/s", man.get(0).getMetadata().getManUnits().get(2).getName());
762 Assert.assertEquals("km/s", man.get(0).getMetadata().getManUnits().get(3).getName());
763 Assert.assertEquals("kg", man.get(0).getMetadata().getManUnits().get(4).getName());
764 Assert.assertEquals("%", man.get(0).getMetadata().getManUnits().get(5).getName());
765 Assert.assertEquals("n/a", man.get(0).getMetadata().getManUnits().get(6).getName());
766 Assert.assertEquals("m**2", man.get(0).getMetadata().getManUnits().get(7).getName());
767 Assert.assertEquals(10, man.get(0).getManeuvers().size());
768 Assert.assertEquals(500.0, man.get(0).getManeuvers().get(0).getDate().durationFrom(t0), 1.0e-10);
769 Assert.assertEquals("CUBESAT_10", man.get(0).getManeuvers().get(0).getDeployId());
770 Assert.assertEquals( 2.8773E-1, man.get(0).getManeuvers().get(0).getDeployDv().getX(), 1.0e-10);
771 Assert.assertEquals(-9.3969E-1, man.get(0).getManeuvers().get(0).getDeployDv().getY(), 1.0e-10);
772 Assert.assertEquals( 1.8491E-1, man.get(0).getManeuvers().get(0).getDeployDv().getZ(), 1.0e-10);
773 Assert.assertEquals(-1.0, man.get(0).getManeuvers().get(0).getDeployMass(), 1.0e-10);
774 Assert.assertEquals( 0.05, man.get(0).getManeuvers().get(0).getDeployDvSigma(), 1.0e-10);
775 Assert.assertEquals(-0.005025, man.get(0).getManeuvers().get(0).getDeployDvRatio(), 1.0e-10);
776 Assert.assertEquals( 0.033, man.get(0).getManeuvers().get(0).getDeployDvCda(), 1.0e-10);
777 Assert.assertEquals(510.0, man.get(0).getManeuvers().get(1).getDate().durationFrom(t0), 1.0e-10);
778 Assert.assertEquals("CUBESAT_11", man.get(0).getManeuvers().get(1).getDeployId());
779 Assert.assertEquals( 1.4208E-1, man.get(0).getManeuvers().get(1).getDeployDv().getX(), 1.0e-10);
780 Assert.assertEquals(-9.3969E-1, man.get(0).getManeuvers().get(1).getDeployDv().getY(), 1.0e-10);
781 Assert.assertEquals( 3.1111E-1, man.get(0).getManeuvers().get(1).getDeployDv().getZ(), 1.0e-10);
782 Assert.assertEquals(-1.0, man.get(0).getManeuvers().get(1).getDeployMass(), 1.0e-10);
783 Assert.assertEquals( 0.05, man.get(0).getManeuvers().get(1).getDeployDvSigma(), 1.0e-10);
784 Assert.assertEquals(-0.005051, man.get(0).getManeuvers().get(1).getDeployDvRatio(), 1.0e-10);
785 Assert.assertEquals( 0.033, man.get(0).getManeuvers().get(1).getDeployDvCda(), 1.0e-10);
786
787 Assert.assertEquals(1, man.get(1).getMetadata().getComments().size());
788 Assert.assertEquals("100 s of 0.5N +in-track thrust w/effic η=0.95, Isp=300s, 5% 1-sigma error", man.get(1).getMetadata().getComments().get(0));
789 Assert.assertEquals("E W 20160305B", man.get(1).getMetadata().getManID());
790 Assert.assertEquals(ManBasis.CANDIDATE, man.get(1).getMetadata().getManBasis());
791 Assert.assertEquals("THR 01", man.get(1).getMetadata().getManDeviceID());
792 Assert.assertEquals(1, man.get(1).getMetadata().getManPurpose().size());
793 Assert.assertEquals("ORBIT", man.get(1).getMetadata().getManPurpose().get(0));
794 Assert.assertEquals("RSW_ROTATING", man.get(1).getMetadata().getManReferenceFrame().getName());
795 Assert.assertNull(man.get(1).getMetadata().getManReferenceFrame().asFrame());
796 Assert.assertNull(man.get(1).getMetadata().getManReferenceFrame().asCelestialBodyFrame());
797 Assert.assertEquals(OrbitRelativeFrame.RSW_ROTATING, man.get(1).getMetadata().getManReferenceFrame().asOrbitRelativeFrame());
798 Assert.assertEquals(11, man.get(1).getMetadata().getManComposition().size());
799 Assert.assertEquals(ManeuverFieldType.TIME_ABSOLUTE, man.get(1).getMetadata().getManComposition().get( 0));
800 Assert.assertEquals(ManeuverFieldType.TIME_RELATIVE, man.get(1).getMetadata().getManComposition().get( 1));
801 Assert.assertEquals(ManeuverFieldType.MAN_DURA, man.get(1).getMetadata().getManComposition().get( 2));
802 Assert.assertEquals(ManeuverFieldType.THR_X, man.get(1).getMetadata().getManComposition().get( 3));
803 Assert.assertEquals(ManeuverFieldType.THR_Y, man.get(1).getMetadata().getManComposition().get( 4));
804 Assert.assertEquals(ManeuverFieldType.THR_Z, man.get(1).getMetadata().getManComposition().get( 5));
805 Assert.assertEquals(ManeuverFieldType.THR_MAG_SIGMA, man.get(1).getMetadata().getManComposition().get( 6));
806 Assert.assertEquals(ManeuverFieldType.THR_DIR_SIGMA, man.get(1).getMetadata().getManComposition().get( 7));
807 Assert.assertEquals(ManeuverFieldType.THR_INTERP, man.get(1).getMetadata().getManComposition().get( 8));
808 Assert.assertEquals(ManeuverFieldType.THR_ISP, man.get(1).getMetadata().getManComposition().get( 9));
809 Assert.assertEquals(ManeuverFieldType.THR_EFFIC, man.get(1).getMetadata().getManComposition().get(10));
810 Assert.assertEquals(9, man.get(1).getMetadata().getManUnits().size());
811 Assert.assertEquals("s", man.get(1).getMetadata().getManUnits().get(0).getName());
812 Assert.assertEquals("N", man.get(1).getMetadata().getManUnits().get(1).getName());
813 Assert.assertEquals("N", man.get(1).getMetadata().getManUnits().get(2).getName());
814 Assert.assertEquals("N", man.get(1).getMetadata().getManUnits().get(3).getName());
815 Assert.assertEquals("%", man.get(1).getMetadata().getManUnits().get(4).getName());
816 Assert.assertEquals("deg", man.get(1).getMetadata().getManUnits().get(5).getName());
817 Assert.assertEquals("n/a", man.get(1).getMetadata().getManUnits().get(6).getName());
818 Assert.assertEquals("s", man.get(1).getMetadata().getManUnits().get(7).getName());
819 Assert.assertEquals("n/a", man.get(1).getMetadata().getManUnits().get(8).getName());
820 Assert.assertEquals(1, man.get(1).getManeuvers().size());
821 Assert.assertEquals(500.0, man.get(1).getManeuvers().get(0).getDate().durationFrom(t0), 1.0e-10);
822 Assert.assertEquals(100, man.get(1).getManeuvers().get(0).getDuration(), 1.0e-10);
823 Assert.assertEquals( 0.0, man.get(1).getManeuvers().get(0).getThrust().getX(), 1.0e-10);
824 Assert.assertEquals( 0.5, man.get(1).getManeuvers().get(0).getThrust().getY(), 1.0e-10);
825 Assert.assertEquals( 0.05, man.get(1).getManeuvers().get(0).getThrustMagnitudeSigma(), 1.0e-10);
826 Assert.assertEquals( 1.0, FastMath.toDegrees(man.get(1).getManeuvers().get(0).getThrustDirectionSigma()), 1.0e-10);
827 Assert.assertEquals(OnOff.ON, man.get(1).getManeuvers().get(0).getThrustInterpolation());
828 Assert.assertTrue(man.get(1).getManeuvers().get(0).getThrustInterpolation().isOn());
829 Assert.assertEquals(300.0, man.get(1).getManeuvers().get(0).getThrustIsp(), 1.0e-10);
830 Assert.assertEquals(0.95, man.get(1).getManeuvers().get(0).getThrustEfficiency(), 1.0e-10);
831
832
833 Perturbations perts = file.getData().getPerturbationsBlock();
834 Assert.assertEquals(1, perts.getComments().size());
835 Assert.assertEquals("Perturbations specification", perts.getComments().get(0));
836 Assert.assertEquals(3.986004415e14, perts.getGm(), 1.0);
837
838
839 OrbitDetermination od = file.getData().getOrbitDeterminationBlock();
840 Assert.assertEquals(1, od.getComments().size());
841 Assert.assertEquals("Orbit Determination information", od.getComments().get(0));
842 Assert.assertEquals("OOD #10059", od.getId());
843 Assert.assertEquals("OOD #10058", od.getPrevId());
844 Assert.assertEquals(OdMethodType.SF, od.getMethod().getType());
845 Assert.assertEquals("ODTK", od.getMethod().getTool());
846 Assert.assertEquals(new AbsoluteDate(2001, 11, 6, 11, 17, 33.0, utc), od.getEpoch());
847 Assert.assertEquals(273, od.getObsUsed());
848 Assert.assertEquals( 91, od.getTracksUsed());
849
850
851 Assert.assertNull(file.getData().getUserDefinedBlock());
852
853 }
854
855 @Test
856 public void testParseOCM4() {
857 final String name = "/ccsds/odm/ocm/OCMExample4.txt";
858 final DataSource source = new DataSource(name, () -> getClass().getResourceAsStream(name));
859 final Ocm file = new ParserBuilder().
860 withMu(Constants.IERS2003_EARTH_MU).
861 buildOcmParser().
862 parseMessage(source);
863
864
865 Assert.assertEquals(3.0, file.getHeader().getFormatVersion(), 1.0e-10);
866 Assert.assertEquals(2, file.getHeader().getComments().size());
867 Assert.assertEquals("This file is a dummy example with inconsistent data", file.getHeader().getComments().get(0));
868 Assert.assertEquals("it is used to exercise all possible keys in Key-Value Notation", file.getHeader().getComments().get(1));
869 Assert.assertEquals("JPL", file.getHeader().getOriginator());
870 Assert.assertEquals("ABC-12 34", file.getHeader().getMessageId());
871
872
873 Assert.assertEquals(new AbsoluteDate(2019, 7, 23, 10, 29, 31.576, TimeScalesFactory.getUTC()),
874 file.getHeader().getCreationDate());
875
876 Assert.assertEquals(1, file.getMetadata().getComments().size());
877 Assert.assertEquals("Metadata comment", file.getMetadata().getComments().get(0));
878 Assert.assertEquals("FOUO", file.getMetadata().getClassification());
879 Assert.assertEquals("POLYSAT", file.getMetadata().getObjectName());
880 Assert.assertEquals(3, file.getMetadata().getAlternateNames().size());
881 Assert.assertEquals("ALTERNATE", file.getMetadata().getAlternateNames().get(0));
882 Assert.assertEquals("OTHER", file.getMetadata().getAlternateNames().get(1));
883 Assert.assertEquals("RELATED", file.getMetadata().getAlternateNames().get(2));
884 Assert.assertEquals("18SPCS 18571", file.getMetadata().getObjectDesignator());
885 Assert.assertEquals("2000-053A", file.getMetadata().getInternationalDesignator());
886 Assert.assertEquals("Mr. Rodgers", file.getMetadata().getOriginatorPOC());
887 Assert.assertEquals("Flight Dynamics Mission Design Lead", file.getMetadata().getOriginatorPosition());
888 Assert.assertEquals("+12345678901", file.getMetadata().getOriginatorPhone());
889 Assert.assertEquals("JOHN.DOE@EXAMPLE.ORG", file.getMetadata().getOriginatorAddress());
890 Assert.assertEquals("NASA", file.getMetadata().getTechOrg());
891 Assert.assertEquals("Maxwell Smart", file.getMetadata().getTechPOC());
892 Assert.assertEquals("+98765432109", file.getMetadata().getTechPhone());
893 Assert.assertEquals("MAX@EXAMPLE.ORG", file.getMetadata().getTechAddress());
894 Assert.assertEquals("ABC-12 33", file.getMetadata().getPreviousMessageID());
895 Assert.assertEquals("ABC-12 35", file.getMetadata().getNextMessageID());
896 Assert.assertEquals("ADM-MSG-35132.TXT", file.getMetadata().getAdmMessageLink());
897 Assert.assertEquals("CDM-MSG-35132.TXT", file.getMetadata().getCdmMessageLink());
898 Assert.assertEquals("PRM-MSG-35132.TXT", file.getMetadata().getPrmMessageLink());
899 Assert.assertEquals("RDM-MSG-35132.TXT", file.getMetadata().getRdmMessageLink());
900 Assert.assertEquals("COMSPOC", file.getMetadata().getCatalogName());
901 Assert.assertEquals("INTELSAT", file.getMetadata().getOperator());
902 Assert.assertEquals("SIRIUS", file.getMetadata().getOwner());
903 Assert.assertEquals("FRANCE", file.getMetadata().getCountry());
904 Assert.assertEquals("SPIRE", file.getMetadata().getConstellation());
905 Assert.assertEquals("PAYLOAD", file.getMetadata().getObjectType().toString());
906 Assert.assertEquals("Operational", file.getMetadata().getOpsStatus().toString());
907 Assert.assertEquals("Extended Geostationary Orbit", file.getMetadata().getOrbitCategory().toString());
908 Assert.assertEquals(7, file.getMetadata().getOcmDataElements().size());
909 Assert.assertEquals("ORBIT", file.getMetadata().getOcmDataElements().get(0));
910 Assert.assertEquals("PHYSICAL DESCRIPTION", file.getMetadata().getOcmDataElements().get(1));
911 Assert.assertEquals("COVARIANCE", file.getMetadata().getOcmDataElements().get(2));
912 Assert.assertEquals("MANEUVER", file.getMetadata().getOcmDataElements().get(3));
913 Assert.assertEquals("PERTURBATIONS", file.getMetadata().getOcmDataElements().get(4));
914 Assert.assertEquals("OD", file.getMetadata().getOcmDataElements().get(5));
915 Assert.assertEquals("USER", file.getMetadata().getOcmDataElements().get(6));
916 Assert.assertEquals("UTC", file.getMetadata().getTimeSystem().name());
917 final AbsoluteDate epoch = file.getMetadata().getEpochT0();
918 Assert.assertEquals(new AbsoluteDate(2019, 7, 23, 0, 0, 0.0, TimeScalesFactory.getUTC()), epoch);
919 Assert.assertEquals(28800.0, file.getMetadata().getSclkOffsetAtEpoch(), 1.0e-10);
920 Assert.assertEquals(2.5, file.getMetadata().getSclkSecPerSISec(), 1.0e-15);
921 Assert.assertEquals(new AbsoluteDate(2019, 7, 23, 9, 29, 31.576, TimeScalesFactory.getUTC()),
922 file.getMetadata().getPreviousMessageEpoch());
923 Assert.assertEquals(new AbsoluteDate(2019, 7, 23, 11, 29, 31.576, TimeScalesFactory.getUTC()),
924 file.getMetadata().getNextMessageEpoch());
925 Assert.assertEquals(new AbsoluteDate(2019, 7, 23, 9, 30, 0.0, TimeScalesFactory.getUTC()),
926 file.getMetadata().getStartTime());
927 Assert.assertEquals(new AbsoluteDate(2019, 7, 23, 10, 29, 50.0, TimeScalesFactory.getUTC()),
928 file.getMetadata().getStopTime());
929 Assert.assertEquals(0.041550925925 * Constants.JULIAN_DAY, file.getMetadata().getTimeSpan(), 1.0e-15);
930 Assert.assertEquals(37.0, file.getMetadata().getTaimutcT0(), 1.0e-15);
931 Assert.assertEquals(-0.1642060, file.getMetadata().getUt1mutcT0(), 1.0e-15);
932 Assert.assertEquals("IERS", file.getMetadata().getEopSource());
933 Assert.assertEquals("LAGRANGE ORDER 5", file.getMetadata().getInterpMethodEOP());
934 Assert.assertEquals("JPL DE 430", file.getMetadata().getCelestialSource());
935
936
937 Assert.assertEquals(2, file.getData().getOTrajectoryBlocks().size());
938 TrajectoryStateHistory osh0 = file.getData().getOTrajectoryBlocks().get(0);
939 Assert.assertEquals("this is number 1 ORB comment", osh0.getMetadata().getComments().get(0));
940 Assert.assertEquals("orbit 1", osh0.getMetadata().getTrajID());
941 Assert.assertEquals("orbit 0", osh0.getMetadata().getTrajPrevID());
942 Assert.assertEquals("orbit 2", osh0.getMetadata().getTrajNextID());
943 Assert.assertEquals("DETERMINED OD", osh0.getMetadata().getTrajBasis());
944 Assert.assertEquals("OD 17", osh0.getMetadata().getTrajBasisID());
945 Assert.assertEquals(InterpolationMethod.HERMITE, osh0.getMetadata().getInterpolationMethod());
946 Assert.assertEquals(3, osh0.getMetadata().getInterpolationDegree());
947 Assert.assertEquals("ECKSTEIN HECHLER", osh0.getMetadata().getOrbAveraging());
948 Assert.assertEquals(CenterName.EARTH.name(), osh0.getMetadata().getCenter().getName());
949 Assert.assertEquals(CelestialBodyFrame.TOD, osh0.getMetadata().getTrajReferenceFrame().asCelestialBodyFrame());
950 Assert.assertEquals( 0.0, osh0.getMetadata().getTrajFrameEpoch().durationFrom(epoch), 1.0e-12);
951 Assert.assertEquals(34200.0, osh0.getMetadata().getUseableStartTime().durationFrom(epoch), 1.0e-12);
952 Assert.assertEquals(35999.999, osh0.getMetadata().getUseableStopTime().durationFrom(epoch), 1.0e-12);
953 Assert.assertEquals(17, osh0.getMetadata().getOrbRevNum());
954 Assert.assertEquals( 1, osh0.getMetadata().getOrbRevNumBasis());
955 Assert.assertEquals(ElementsType.CARTPVA, osh0.getMetadata().getTrajType());
956 Assert.assertEquals(9, osh0.getMetadata().getTrajUnits().size());
957 Assert.assertEquals(Unit.KILOMETRE, osh0.getMetadata().getTrajUnits().get(0));
958 Assert.assertEquals(Unit.KILOMETRE, osh0.getMetadata().getTrajUnits().get(1));
959 Assert.assertEquals(Unit.KILOMETRE, osh0.getMetadata().getTrajUnits().get(2));
960 Assert.assertEquals(Units.KM_PER_S, osh0.getMetadata().getTrajUnits().get(3));
961 Assert.assertEquals(Units.KM_PER_S, osh0.getMetadata().getTrajUnits().get(4));
962 Assert.assertEquals(Units.KM_PER_S, osh0.getMetadata().getTrajUnits().get(5));
963 Assert.assertEquals(Units.KM_PER_S2, osh0.getMetadata().getTrajUnits().get(6));
964 Assert.assertEquals(Units.KM_PER_S2, osh0.getMetadata().getTrajUnits().get(7));
965 Assert.assertEquals(Units.KM_PER_S2, osh0.getMetadata().getTrajUnits().get(8));
966 Assert.assertEquals(3, osh0.getCoordinates().size());
967 Assert.assertEquals( 0.0, osh0.getCoordinates().get(0).getDate().durationFrom(epoch), 1.0e-10);
968 Assert.assertEquals( 1.0e6, osh0.getCoordinates().get(0).getPosition().getX(), 1.0e-10);
969 Assert.assertEquals( 300.0, osh0.getCoordinates().get(1).getDate().durationFrom(epoch), 1.0e-10);
970 Assert.assertEquals( 3.0e3, osh0.getCoordinates().get(1).getVelocity().getY(), 1.0e-10);
971 Assert.assertEquals( 600.0, osh0.getCoordinates().get(2).getDate().durationFrom(epoch), 1.0e-10);
972 Assert.assertEquals( -6.0, osh0.getCoordinates().get(2).getAcceleration().getZ(), 1.0e-10);
973 TrajectoryStateHistory osh1 = file.getData().getOTrajectoryBlocks().get(1);
974 Assert.assertEquals("this is number 2 ORB comment", osh1.getMetadata().getComments().get(0));
975 Assert.assertEquals("orbit 2", osh1.getMetadata().getTrajID());
976 Assert.assertEquals("orbit 1", osh1.getMetadata().getTrajPrevID());
977 Assert.assertEquals("orbit 3", osh1.getMetadata().getTrajNextID());
978 Assert.assertEquals("PREDICTED", osh1.getMetadata().getTrajBasis());
979 Assert.assertEquals("SIMULATION", osh1.getMetadata().getTrajBasisID());
980 Assert.assertEquals(-1, osh1.getMetadata().getOrbRevNum());
981 Assert.assertEquals(-1, osh1.getMetadata().getOrbRevNumBasis());
982 Assert.assertEquals(3, osh1.getCoordinates().size());
983 Assert.assertEquals(1800.0, osh1.getCoordinates().get(0).getDate().durationFrom(epoch), 1.0e-10);
984 Assert.assertEquals(2100.0, osh1.getCoordinates().get(1).getDate().durationFrom(epoch), 1.0e-10);
985 Assert.assertEquals(2400.0, osh1.getCoordinates().get(2).getDate().durationFrom(epoch), 1.0e-10);
986
987
988 PhysicalProperties phys = file.getData().getPhysicBlock();
989 Assert.assertEquals("this is PHYS comment", phys.getComments().get(0));
990 Assert.assertEquals("AIRBUS", phys.getManufacturer());
991 Assert.assertEquals("EUROSTAR", phys.getBusModel());
992 Assert.assertEquals(3, phys.getDockedWith().size());
993 Assert.assertEquals("A1", phys.getDockedWith().get(0));
994 Assert.assertEquals("A2", phys.getDockedWith().get(1));
995 Assert.assertEquals("A3", phys.getDockedWith().get(2));
996 Assert.assertEquals(5.0, phys.getDragConstantArea(), 1.0e-10);
997 Assert.assertEquals(2.1, phys.getDragCoefficient(), 1.0e-10);
998 Assert.assertEquals(0.1, phys.getDragUncertainty(), 1.0e-10);
999 Assert.assertEquals(700.0, phys.getInitialWetMass(), 1.0e-10);
1000 Assert.assertEquals(600.0, phys.getWetMass(), 1.0e-10);
1001 Assert.assertEquals(500.0, phys.getDryMass(), 1.0e-10);
1002 Assert.assertEquals(OrbitRelativeFrame.RSW_ROTATING, phys.getOebParentFrame().asOrbitRelativeFrame());
1003 Assert.assertEquals(32400.0, phys.getOebParentFrameEpoch().durationFrom(epoch), 1.0e-10);
1004 Assert.assertEquals(0.64, phys.getOebQ().getQ1(), 1.0e-10);
1005 Assert.assertEquals(0.48, phys.getOebQ().getQ2(), 1.0e-10);
1006 Assert.assertEquals(0.48, phys.getOebQ().getQ3(), 1.0e-10);
1007 Assert.assertEquals(0.36, phys.getOebQ().getQ0(), 1.0e-10);
1008 Assert.assertEquals(3.0, phys.getOebMax(), 1.0e-10);
1009 Assert.assertEquals(2.0, phys.getOebIntermediate(), 1.0e-10);
1010 Assert.assertEquals(1.0, phys.getOebMin(), 1.0e-10);
1011 Assert.assertEquals(2.2, phys.getOebAreaAlongMax(), 1.0e-10);
1012 Assert.assertEquals(3.2, phys.getOebAreaAlongIntermediate(), 1.0e-10);
1013 Assert.assertEquals(6.2, phys.getOebAreaAlongMin(), 1.0e-10);
1014 Assert.assertEquals(4.3, phys.getMinAreaForCollisionProbability(), 1.0e-10);
1015 Assert.assertEquals(6.3, phys.getMaxAreaForCollisionProbability(), 1.0e-10);
1016 Assert.assertEquals(5.3, phys.getTypAreaForCollisionProbability(), 1.0e-10);
1017 Assert.assertEquals(2.4, phys.getRcs(), 1.0e-10);
1018 Assert.assertEquals(1.4, phys.getMinRcs(), 1.0e-10);
1019 Assert.assertEquals(3.4, phys.getMaxRcs(), 1.0e-10);
1020 Assert.assertEquals(3.5, phys.getSrpConstantArea(), 1.0e-10);
1021 Assert.assertEquals(1.7, phys.getSrpCoefficient(), 1.0e-10);
1022 Assert.assertEquals(0.2, phys.getSrpUncertainty(), 1.0e-10);
1023 Assert.assertEquals(15.0, phys.getVmAbsolute(), 1.0e-10);
1024 Assert.assertEquals(19.0, phys.getVmApparentMin(), 1.0e-10);
1025 Assert.assertEquals(15.4, phys.getVmApparent(), 1.0e-10);
1026 Assert.assertEquals(14.0, phys.getVmApparentMax(), 1.0e-10);
1027 Assert.assertEquals(0.7, phys.getReflectivity(), 1.0e-10);
1028 Assert.assertEquals("THREE AXIS", phys.getAttitudeControlMode());
1029 Assert.assertEquals("REACTION WHEELS", phys.getAttitudeActuatorType());
1030 Assert.assertEquals(0.3, FastMath.toDegrees(phys.getAttitudeKnowledgeAccuracy()), 1.0e-10);
1031 Assert.assertEquals(2.0, FastMath.toDegrees(phys.getAttitudeControlAccuracy()), 1.0e-10);
1032 Assert.assertEquals(2.3, FastMath.toDegrees(phys.getAttitudePointingAccuracy()), 1.0e-10);
1033 Assert.assertEquals(20.0, phys.getManeuversPerYear(), 1.0e-10);
1034 Assert.assertEquals(6.8, phys.getMaxThrust(), 1.0e-10);
1035 Assert.assertEquals(1900.0, phys.getBolDv(), 1.0e-10);
1036 Assert.assertEquals(200.0, phys.getRemainingDv(), 1.0e-10);
1037 Assert.assertEquals(1000.0, phys.getInertiaMatrix().getEntry(0, 0), 1.0e-10);
1038 Assert.assertEquals( 800.0, phys.getInertiaMatrix().getEntry(1, 1), 1.0e-10);
1039 Assert.assertEquals( 400.0, phys.getInertiaMatrix().getEntry(2, 2), 1.0e-10);
1040 Assert.assertEquals( 20.0, phys.getInertiaMatrix().getEntry(0, 1), 1.0e-10);
1041 Assert.assertEquals( 20.0, phys.getInertiaMatrix().getEntry(1, 0), 1.0e-10);
1042 Assert.assertEquals( 40.0, phys.getInertiaMatrix().getEntry(0, 2), 1.0e-10);
1043 Assert.assertEquals( 40.0, phys.getInertiaMatrix().getEntry(2, 0), 1.0e-10);
1044 Assert.assertEquals( 60.0, phys.getInertiaMatrix().getEntry(1, 2), 1.0e-10);
1045 Assert.assertEquals( 60.0, phys.getInertiaMatrix().getEntry(2, 1), 1.0e-10);
1046
1047
1048 Assert.assertEquals(2, file.getData().getCovarianceBlocks().size());
1049 CovarianceHistory ch0 = file.getData().getCovarianceBlocks().get(0);
1050 Assert.assertEquals("this is number 1 COV comment", ch0.getMetadata().getComments().get(0));
1051 Assert.assertEquals("covariance 1", ch0.getMetadata().getCovID());
1052 Assert.assertEquals("covariance 0", ch0.getMetadata().getCovPrevID());
1053 Assert.assertEquals("covariance 2", ch0.getMetadata().getCovNextID());
1054 Assert.assertEquals("EMPIRICAL", ch0.getMetadata().getCovBasis());
1055 Assert.assertEquals("basis 1", ch0.getMetadata().getCovBasisID());
1056 Assert.assertEquals(OrbitRelativeFrame.TNW_INERTIAL, ch0.getMetadata().getCovReferenceFrame().asOrbitRelativeFrame());
1057 Assert.assertEquals(33000.0, ch0.getMetadata().getCovFrameEpoch().durationFrom(epoch), 1.0e-10);
1058 Assert.assertEquals(0.5, ch0.getMetadata().getCovScaleMin(), 1.0e-10);
1059 Assert.assertEquals(5.0, ch0.getMetadata().getCovScaleMax(), 1.0e-10);
1060 Assert.assertEquals(0.25, ch0.getMetadata().getCovConfidence(), 1.0e-10);
1061 Assert.assertEquals(ElementsType.CARTPV, ch0.getMetadata().getCovType());
1062 Assert.assertEquals(6, ch0.getMetadata().getCovUnits().size());
1063 Assert.assertEquals(Unit.KILOMETRE, ch0.getMetadata().getCovUnits().get(0));
1064 Assert.assertEquals(Unit.KILOMETRE, ch0.getMetadata().getCovUnits().get(1));
1065 Assert.assertEquals(Unit.KILOMETRE, ch0.getMetadata().getCovUnits().get(2));
1066 Assert.assertEquals(Units.KM_PER_S, ch0.getMetadata().getCovUnits().get(3));
1067 Assert.assertEquals(Units.KM_PER_S, ch0.getMetadata().getCovUnits().get(4));
1068 Assert.assertEquals(Units.KM_PER_S, ch0.getMetadata().getCovUnits().get(5));
1069 Assert.assertEquals(3, ch0.getCovariances().size());
1070 Assert.assertEquals( 0.0, ch0.getCovariances().get(0).getDate().durationFrom(epoch), 1.0e-10);
1071 Assert.assertEquals(1.1e6, ch0.getCovariances().get(0).getMatrix().getEntry(0, 0), 1.0e-10);
1072 Assert.assertEquals( 300.0, ch0.getCovariances().get(1).getDate().durationFrom(epoch), 1.0e-10);
1073 Assert.assertEquals(13.2e6, ch0.getCovariances().get(1).getMatrix().getEntry(2, 1), 1.0e-10);
1074 Assert.assertEquals( 600.0, ch0.getCovariances().get(2).getDate().durationFrom(epoch), 1.0e-10);
1075 Assert.assertEquals(26.5e6, ch0.getCovariances().get(2).getMatrix().getEntry(4, 5), 1.0e-10);
1076 CovarianceHistory ch1 = file.getData().getCovarianceBlocks().get(1);
1077 Assert.assertEquals("this is number 2 COV comment", ch1.getMetadata().getComments().get(0));
1078 Assert.assertEquals("covariance 2", ch1.getMetadata().getCovID());
1079 Assert.assertEquals("covariance 1", ch1.getMetadata().getCovPrevID());
1080 Assert.assertEquals("covariance 3", ch1.getMetadata().getCovNextID());
1081 Assert.assertEquals("SIMULATED", ch1.getMetadata().getCovBasis());
1082 Assert.assertEquals("basis 2", ch1.getMetadata().getCovBasisID());
1083 Assert.assertEquals(1, ch1.getCovariances().size());
1084 Assert.assertEquals(1800.0, ch1.getCovariances().get(0).getDate().durationFrom(epoch), 1.0e-10);
1085 Assert.assertEquals(43.0e6, ch1.getCovariances().get(0).getMatrix().getEntry(0, 0), 1.0e-10);
1086 Assert.assertEquals(20.0e6, ch1.getCovariances().get(0).getMatrix().getEntry(0, 1), 1.0e-10);
1087 Assert.assertEquals( 6.0e6, ch1.getCovariances().get(0).getMatrix().getEntry(0, 5), 1.0e-10);
1088 Assert.assertEquals( 2.0e6, ch1.getCovariances().get(0).getMatrix().getEntry(4, 3), 1.0e-10);
1089
1090
1091 Assert.assertEquals(3, file.getData().getManeuverBlocks().size());
1092 ManeuverHistory m0 = file.getData().getManeuverBlocks().get(0);
1093 Assert.assertEquals("this is number 1 MAN comment", m0.getMetadata().getComments().get(0));
1094 Assert.assertEquals("maneuver 1", m0.getMetadata().getManID());
1095 Assert.assertEquals("maneuver 0", m0.getMetadata().getManPrevID());
1096 Assert.assertEquals("maneuver 2", m0.getMetadata().getManNextID());
1097 Assert.assertEquals(ManBasis.DETERMINED_TLM, m0.getMetadata().getManBasis());
1098 Assert.assertEquals("TLM 203", m0.getMetadata().getManBasisID());
1099 Assert.assertEquals("THR 02", m0.getMetadata().getManDeviceID());
1100 Assert.assertEquals(-100.0, m0.getMetadata().getManPrevEpoch().durationFrom(epoch), 1.0-10);
1101 Assert.assertEquals(+100.0, m0.getMetadata().getManNextEpoch().durationFrom(epoch), 1.0-10);
1102 Assert.assertEquals("ORBIT", m0.getMetadata().getManPurpose().get(0));
1103 Assert.assertEquals("OD 5", m0.getMetadata().getManPredSource());
1104 Assert.assertEquals(OrbitRelativeFrame.TNW_INERTIAL, m0.getMetadata().getManReferenceFrame().asOrbitRelativeFrame());
1105 Assert.assertEquals(2.3, m0.getMetadata().getManFrameEpoch().durationFrom(epoch), 1.0e-10);
1106 Assert.assertEquals("MOON", m0.getMetadata().getGravitationalAssist().getName());
1107 Assert.assertEquals(DutyCycleType.TIME, m0.getMetadata().getDcType());
1108 Assert.assertEquals(2.0, m0.getMetadata().getDcWindowOpen().durationFrom(epoch), 1.0e-10);
1109 Assert.assertEquals(100.0, m0.getMetadata().getDcWindowClose().durationFrom(epoch), 1.0e-10);
1110 Assert.assertEquals( 5, m0.getMetadata().getDcMinCycles());
1111 Assert.assertEquals(30, m0.getMetadata().getDcMaxCycles());
1112 Assert.assertEquals( 5.0, m0.getMetadata().getDcExecStart().durationFrom(epoch), 1.0e-10);
1113 Assert.assertEquals(95.0, m0.getMetadata().getDcExecStop().durationFrom(epoch), 1.0e-10);
1114 Assert.assertEquals(8000.0, m0.getMetadata().getDcRefTime().durationFrom(epoch), 1.0e-10);
1115 Assert.assertEquals( 10.0, m0.getMetadata().getDcTimePulseDuration(), 1.0e-10);
1116 Assert.assertEquals(200.0, m0.getMetadata().getDcTimePulsePeriod(), 1.0e-10);
1117 Assert.assertEquals(23, m0.getMetadata().getManComposition().size());
1118 Assert.assertEquals(ManeuverFieldType.TIME_ABSOLUTE, m0.getMetadata().getManComposition().get( 0));
1119 Assert.assertEquals(ManeuverFieldType.TIME_RELATIVE, m0.getMetadata().getManComposition().get( 1));
1120 Assert.assertEquals(ManeuverFieldType.MAN_DURA, m0.getMetadata().getManComposition().get( 2));
1121 Assert.assertEquals(ManeuverFieldType.DELTA_MASS, m0.getMetadata().getManComposition().get( 3));
1122 Assert.assertEquals(ManeuverFieldType.ACC_X, m0.getMetadata().getManComposition().get( 4));
1123 Assert.assertEquals(ManeuverFieldType.ACC_Y, m0.getMetadata().getManComposition().get( 5));
1124 Assert.assertEquals(ManeuverFieldType.ACC_Z, m0.getMetadata().getManComposition().get( 6));
1125 Assert.assertEquals(ManeuverFieldType.ACC_INTERP, m0.getMetadata().getManComposition().get( 7));
1126 Assert.assertEquals(ManeuverFieldType.ACC_MAG_SIGMA, m0.getMetadata().getManComposition().get( 8));
1127 Assert.assertEquals(ManeuverFieldType.ACC_DIR_SIGMA, m0.getMetadata().getManComposition().get( 9));
1128 Assert.assertEquals(ManeuverFieldType.DV_X, m0.getMetadata().getManComposition().get(10));
1129 Assert.assertEquals(ManeuverFieldType.DV_Y, m0.getMetadata().getManComposition().get(11));
1130 Assert.assertEquals(ManeuverFieldType.DV_Z, m0.getMetadata().getManComposition().get(12));
1131 Assert.assertEquals(ManeuverFieldType.DV_MAG_SIGMA, m0.getMetadata().getManComposition().get(13));
1132 Assert.assertEquals(ManeuverFieldType.DV_DIR_SIGMA, m0.getMetadata().getManComposition().get(14));
1133 Assert.assertEquals(ManeuverFieldType.THR_X, m0.getMetadata().getManComposition().get(15));
1134 Assert.assertEquals(ManeuverFieldType.THR_Y, m0.getMetadata().getManComposition().get(16));
1135 Assert.assertEquals(ManeuverFieldType.THR_Z, m0.getMetadata().getManComposition().get(17));
1136 Assert.assertEquals(ManeuverFieldType.THR_EFFIC, m0.getMetadata().getManComposition().get(18));
1137 Assert.assertEquals(ManeuverFieldType.THR_INTERP, m0.getMetadata().getManComposition().get(19));
1138 Assert.assertEquals(ManeuverFieldType.THR_ISP, m0.getMetadata().getManComposition().get(20));
1139 Assert.assertEquals(ManeuverFieldType.THR_MAG_SIGMA, m0.getMetadata().getManComposition().get(21));
1140 Assert.assertEquals(ManeuverFieldType.THR_DIR_SIGMA, m0.getMetadata().getManComposition().get(22));
1141 Assert.assertEquals(m0.getMetadata().getManComposition().size() - 2, m0.getMetadata().getManUnits().size());
1142 for (int i = 0; i < m0.getMetadata().getManUnits().size(); ++i) {
1143 ManeuverFieldType type = m0.getMetadata().getManComposition().get(i + 2);
1144 Unit unit = m0.getMetadata().getManUnits().get(i);
1145 Assert.assertEquals(type.getUnit(), unit);
1146 }
1147 Assert.assertEquals(2, m0.getManeuvers().size());
1148 Assert.assertEquals( 0.0, m0.getManeuvers().get(0).getDate().durationFrom(epoch), 1.0e-10);
1149 Assert.assertEquals( 200.0, m0.getManeuvers().get(0).getDuration(), 1.0e-10);
1150 Assert.assertEquals(OnOff.ON, m0.getManeuvers().get(0).getAccelerationInterpolation());
1151 Assert.assertEquals( 600.0, m0.getManeuvers().get(1).getDate().durationFrom(epoch), 1.0e-10);
1152 Assert.assertEquals( -5.0, m0.getManeuvers().get(1).getDeltaMass(), 1.0e-10);
1153
1154 ManeuverHistory m1 = file.getData().getManeuverBlocks().get(1);
1155 Assert.assertEquals("this is number 2 MAN comment", m1.getMetadata().getComments().get(0));
1156 Assert.assertEquals("maneuver 2", m1.getMetadata().getManID());
1157 Assert.assertEquals("maneuver 1", m1.getMetadata().getManPrevID());
1158 Assert.assertEquals("maneuver 3", m1.getMetadata().getManNextID());
1159 Assert.assertEquals(ManBasis.PLANNED, m1.getMetadata().getManBasis());
1160 Assert.assertEquals("analysis 17", m1.getMetadata().getManBasisID());
1161 Assert.assertEquals("THR 07", m1.getMetadata().getManDeviceID());
1162 Assert.assertEquals( 200.0, m1.getMetadata().getManPrevEpoch().durationFrom(epoch), 1.0-10);
1163 Assert.assertEquals( 300.0, m1.getMetadata().getManNextEpoch().durationFrom(epoch), 1.0-10);
1164 Assert.assertEquals("PERIOD", m1.getMetadata().getManPurpose().get(0));
1165 Assert.assertEquals("OD 5", m1.getMetadata().getManPredSource());
1166 Assert.assertEquals(OrbitRelativeFrame.TNW_INERTIAL, m1.getMetadata().getManReferenceFrame().asOrbitRelativeFrame());
1167 Assert.assertEquals(2.3, m1.getMetadata().getManFrameEpoch().durationFrom(epoch), 1.0e-10);
1168 Assert.assertEquals("EARTH", m1.getMetadata().getGravitationalAssist().getName());
1169 Assert.assertEquals(DutyCycleType.TIME_AND_ANGLE, m1.getMetadata().getDcType());
1170 Assert.assertEquals(1002.0, m1.getMetadata().getDcWindowOpen().durationFrom(epoch), 1.0e-10);
1171 Assert.assertEquals(1100.0, m1.getMetadata().getDcWindowClose().durationFrom(epoch), 1.0e-10);
1172 Assert.assertEquals(14, m1.getMetadata().getDcMinCycles());
1173 Assert.assertEquals(60, m1.getMetadata().getDcMaxCycles());
1174 Assert.assertEquals(1005.0, m1.getMetadata().getDcExecStart().durationFrom(epoch), 1.0e-10);
1175 Assert.assertEquals(1095.0, m1.getMetadata().getDcExecStop().durationFrom(epoch), 1.0e-10);
1176 Assert.assertEquals(12000.0, m1.getMetadata().getDcRefTime().durationFrom(epoch), 1.0e-10);
1177 Assert.assertEquals( 20.0, m1.getMetadata().getDcTimePulseDuration(), 1.0e-10);
1178 Assert.assertEquals(400.0, m1.getMetadata().getDcTimePulsePeriod(), 1.0e-10);
1179 Assert.assertEquals(22, m1.getMetadata().getManComposition().size());
1180 Assert.assertEquals(0.0,
1181 Vector3D.distance(m1.getMetadata().getDcRefDir(),
1182 Vector3D.PLUS_I),
1183 1.0e-10);
1184 Assert.assertEquals(SpacecraftBodyFrame.BaseEquipment.SENSOR, m1.getMetadata().getDcBodyFrame().getBaseEquipment());
1185 Assert.assertEquals("3", m1.getMetadata().getDcBodyFrame().getLabel());
1186 Assert.assertEquals(0.0,
1187 Vector3D.distance(m1.getMetadata().getDcBodyTrigger(),
1188 new Vector3D(0.707, 0.0, 0.707)),
1189 1.0e-10);
1190 Assert.assertEquals(25.0, FastMath.toDegrees(m1.getMetadata().getDcPhaseStartAngle()), 1.0e-10);
1191 Assert.assertEquals(35.0, FastMath.toDegrees(m1.getMetadata().getDcPhaseStopAngle()), 1.0e-10);
1192 Assert.assertEquals(22, m1.getMetadata().getManComposition().size());
1193 Assert.assertEquals(ManeuverFieldType.TIME_RELATIVE, m1.getMetadata().getManComposition().get( 0));
1194 Assert.assertEquals(ManeuverFieldType.MAN_DURA, m1.getMetadata().getManComposition().get( 1));
1195 Assert.assertEquals(ManeuverFieldType.DELTA_MASS, m1.getMetadata().getManComposition().get( 2));
1196 Assert.assertEquals(ManeuverFieldType.ACC_X, m1.getMetadata().getManComposition().get( 3));
1197 Assert.assertEquals(ManeuverFieldType.ACC_Y, m1.getMetadata().getManComposition().get( 4));
1198 Assert.assertEquals(ManeuverFieldType.ACC_Z, m1.getMetadata().getManComposition().get( 5));
1199 Assert.assertEquals(ManeuverFieldType.ACC_INTERP, m1.getMetadata().getManComposition().get( 6));
1200 Assert.assertEquals(ManeuverFieldType.ACC_MAG_SIGMA, m1.getMetadata().getManComposition().get( 7));
1201 Assert.assertEquals(ManeuverFieldType.ACC_DIR_SIGMA, m1.getMetadata().getManComposition().get( 8));
1202 Assert.assertEquals(ManeuverFieldType.DV_X, m1.getMetadata().getManComposition().get( 9));
1203 Assert.assertEquals(ManeuverFieldType.DV_Y, m1.getMetadata().getManComposition().get(10));
1204 Assert.assertEquals(ManeuverFieldType.DV_Z, m1.getMetadata().getManComposition().get(11));
1205 Assert.assertEquals(ManeuverFieldType.DV_MAG_SIGMA, m1.getMetadata().getManComposition().get(12));
1206 Assert.assertEquals(ManeuverFieldType.DV_DIR_SIGMA, m1.getMetadata().getManComposition().get(13));
1207 Assert.assertEquals(ManeuverFieldType.THR_X, m1.getMetadata().getManComposition().get(14));
1208 Assert.assertEquals(ManeuverFieldType.THR_Y, m1.getMetadata().getManComposition().get(15));
1209 Assert.assertEquals(ManeuverFieldType.THR_Z, m1.getMetadata().getManComposition().get(16));
1210 Assert.assertEquals(ManeuverFieldType.THR_EFFIC, m1.getMetadata().getManComposition().get(17));
1211 Assert.assertEquals(ManeuverFieldType.THR_INTERP, m1.getMetadata().getManComposition().get(18));
1212 Assert.assertEquals(ManeuverFieldType.THR_ISP, m1.getMetadata().getManComposition().get(19));
1213 Assert.assertEquals(ManeuverFieldType.THR_MAG_SIGMA, m1.getMetadata().getManComposition().get(20));
1214 Assert.assertEquals(ManeuverFieldType.THR_DIR_SIGMA, m1.getMetadata().getManComposition().get(21));
1215 Assert.assertEquals(m1.getMetadata().getManComposition().size() - 1, m1.getMetadata().getManUnits().size());
1216 for (int i = 0; i < m1.getMetadata().getManUnits().size(); ++i) {
1217 ManeuverFieldType type = m1.getMetadata().getManComposition().get(i + 1);
1218 Unit unit = m1.getMetadata().getManUnits().get(i);
1219 Assert.assertEquals(type.getUnit(), unit);
1220 }
1221 Assert.assertEquals(2, m1.getManeuvers().size());
1222 Assert.assertEquals(1000.0, m1.getManeuvers().get(0).getDate().durationFrom(epoch), 1.0e-10);
1223 Assert.assertEquals(0.02, m1.getManeuvers().get(0).getThrustMagnitudeSigma(), 1.0e-10);
1224 Assert.assertEquals(4.3, FastMath.toDegrees(m1.getManeuvers().get(0).getThrustDirectionSigma()), 1.0e-10);
1225 Assert.assertEquals(OnOff.OFF, m1.getManeuvers().get(0).getAccelerationInterpolation());
1226 Assert.assertEquals(1600.0, m1.getManeuvers().get(1).getDate().durationFrom(epoch), 1.0e-10);
1227 Assert.assertEquals( 25.0, m1.getManeuvers().get(1).getDv().getX(), 1.0e-10);
1228
1229
1230 ManeuverHistory m2 = file.getData().getManeuverBlocks().get(2);
1231 Assert.assertEquals("this is number 3 MAN comment", m2.getMetadata().getComments().get(0));
1232 Assert.assertEquals("maneuver 3", m2.getMetadata().getManID());
1233 Assert.assertEquals("DEPLOYMENT", m2.getMetadata().getManDeviceID());
1234 Assert.assertEquals(10, m2.getMetadata().getManComposition().size());
1235 Assert.assertEquals(ManeuverFieldType.TIME_ABSOLUTE, m2.getMetadata().getManComposition().get( 0));
1236 Assert.assertEquals(ManeuverFieldType.DEPLOY_ID, m2.getMetadata().getManComposition().get( 1));
1237 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_X, m2.getMetadata().getManComposition().get( 2));
1238 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_Y, m2.getMetadata().getManComposition().get( 3));
1239 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_Z, m2.getMetadata().getManComposition().get( 4));
1240 Assert.assertEquals(ManeuverFieldType.DEPLOY_MASS, m2.getMetadata().getManComposition().get( 5));
1241 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_SIGMA, m2.getMetadata().getManComposition().get( 6));
1242 Assert.assertEquals(ManeuverFieldType.DEPLOY_DIR_SIGMA, m2.getMetadata().getManComposition().get( 7));
1243 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_RATIO, m2.getMetadata().getManComposition().get( 8));
1244 Assert.assertEquals(ManeuverFieldType.DEPLOY_DV_CDA, m2.getMetadata().getManComposition().get( 9));
1245 Assert.assertEquals(m2.getMetadata().getManComposition().size() - 1, m2.getMetadata().getManUnits().size());
1246 for (int i = 0; i < m2.getMetadata().getManUnits().size(); ++i) {
1247 ManeuverFieldType type = m2.getMetadata().getManComposition().get(i + 1);
1248 Unit unit = m2.getMetadata().getManUnits().get(i);
1249 Assert.assertEquals(type.getUnit(), unit);
1250 }
1251 Assert.assertEquals(8, m2.getManeuvers().size());
1252 Assert.assertEquals(35100.0, m2.getManeuvers().get(0).getDate().durationFrom(epoch), 1.0e-10);
1253 Assert.assertEquals("BEE_1", m2.getManeuvers().get(0).getDeployId());
1254 Assert.assertEquals(35160.0, m2.getManeuvers().get(1).getDate().durationFrom(epoch), 1.0e-10);
1255 Assert.assertEquals( 0.3, m2.getManeuvers().get(1).getDeployDv().getY(), 1.0e-10);
1256
1257
1258 final Perturbations pert = file.getData().getPerturbationsBlock();
1259 Assert.assertEquals("this is PERT comment", pert.getComments().get(0));
1260 Assert.assertEquals("NRLMSIS00", pert.getAtmosphericModel());
1261 Assert.assertEquals("TEG-4", pert.getGravityModel());
1262 Assert.assertEquals(36, pert.getGravityDegree());
1263 Assert.assertEquals(12, pert.getGravityOrder());
1264 Assert.assertEquals(6378137.0, pert.getEquatorialRadius(), 1.0e-9);
1265 Assert.assertEquals(3.986004415e14, pert.getGm(), 1.0);
1266 Assert.assertEquals("MOON", pert.getNBodyPerturbations().get(0).getName());
1267 Assert.assertEquals("SUN", pert.getNBodyPerturbations().get(1).getName());
1268 Assert.assertEquals(4.17807421629e-3, FastMath.toDegrees(pert.getCentralBodyRotation()), 1.0e-12);
1269 Assert.assertEquals(0.00335281066475, pert.getOblateFlattening(), 1.0e-12);
1270 Assert.assertEquals("SEMI-DIURNAL", pert.getOceanTidesModel());
1271 Assert.assertEquals("DIURNAL", pert.getSolidTidesModel());
1272 Assert.assertEquals("IERS2010", pert.getReductionTheory());
1273 Assert.assertEquals("KNOCKE", pert.getAlbedoModel());
1274 Assert.assertEquals(100, pert.getAlbedoGridSize());
1275 Assert.assertEquals(ShadowModel.DUAL_CONE, pert.getShadowModel());
1276 Assert.assertEquals("EARTH", pert.getShadowBodies().get(0).getName());
1277 Assert.assertEquals("MOON", pert.getShadowBodies().get(1).getName());
1278 Assert.assertEquals("BOX WING", pert.getSrpModel());
1279 Assert.assertEquals("CELESTRAK", pert.getSpaceWeatherSource());
1280 Assert.assertEquals(0.0, pert.getSpaceWeatherEpoch().durationFrom(new AbsoluteDate(2019, 7, 22, TimeScalesFactory.getUTC())), 1.0e-10);
1281 Assert.assertEquals("LAGRANGE ORDER 5", pert.getInterpMethodSW());
1282 Assert.assertEquals(3.2e-9, pert.getFixedGeomagneticKp(), 1.0e-20);
1283 Assert.assertEquals(2.1e-9, pert.getFixedGeomagneticAp(), 1.0e-20);
1284 Assert.assertEquals(-20.0e-9, pert.getFixedGeomagneticDst(), 1.0e-20);
1285 Assert.assertEquals(1.20e-20, pert.getFixedF10P7(), 1.0e-30);
1286 Assert.assertEquals(1.32e-20, pert.getFixedF10P7Mean(), 1.0e-30);
1287 Assert.assertEquals(1.30e-20, pert.getFixedM10P7(), 1.0e-30);
1288 Assert.assertEquals(1.42e-20, pert.getFixedM10P7Mean(), 1.0e-30);
1289 Assert.assertEquals(1.40e-20, pert.getFixedS10P7(), 1.0e-30);
1290 Assert.assertEquals(1.52e-20, pert.getFixedS10P7Mean(), 1.0e-30);
1291 Assert.assertEquals(1.50e-20, pert.getFixedY10P7(), 1.0e-30);
1292 Assert.assertEquals(1.62e-20, pert.getFixedY10P7Mean(), 1.0e-30);
1293
1294
1295 OrbitDetermination od = file.getData().getOrbitDeterminationBlock();
1296 Assert.assertEquals("this is OD comment", od.getComments().get(0));
1297 Assert.assertEquals("OD 24", od.getId());
1298 Assert.assertEquals("OD 23", od.getPrevId());
1299 Assert.assertEquals("BWLS", od.getMethod().getName());
1300 Assert.assertEquals(OdMethodType.BWLS, od.getMethod().getType());
1301 Assert.assertEquals("OREKIT", od.getMethod().getTool());
1302 Assert.assertEquals(0.0,
1303 od.getEpoch().durationFrom(new AbsoluteDate(2019, 7, 22, 17, 32, 27.0,
1304 TimeScalesFactory.getUTC())),
1305 1.0e-10);
1306 Assert.assertEquals(302400.0, od.getTimeSinceFirstObservation(), 1.0e-10);
1307 Assert.assertEquals(103680.0, od.getTimeSinceLastObservation(), 1.0e-10);
1308 Assert.assertEquals(449280.0, od.getRecommendedOdSpan(), 1.0e-10);
1309 Assert.assertEquals(198720.0, od.getActualOdSpan(), 1.0e-10);
1310 Assert.assertEquals(100, od.getObsAvailable());
1311 Assert.assertEquals( 90, od.getObsUsed());
1312 Assert.assertEquals( 33, od.getTracksAvailable());
1313 Assert.assertEquals( 30, od.getTracksUsed());
1314 Assert.assertEquals(86400.0, od.getMaximumObsGap(), 1.0e-10);
1315 Assert.assertEquals(58.73, od.getEpochEigenMaj(), 1.0e-10);
1316 Assert.assertEquals(35.7, od.getEpochEigenMed(), 1.0e-10);
1317 Assert.assertEquals(21.5, od.getEpochEigenMin(), 1.0e-10);
1318 Assert.assertEquals(32.5, od.getMaxPredictedEigenMaj(), 1.0e-10);
1319 Assert.assertEquals(22.0, od.getMinPredictedEigenMin(), 1.0e-10);
1320 Assert.assertEquals(0.953, od.getConfidence(), 1.0e-10);
1321 Assert.assertEquals(0.857, od.getGdop(), 1.0e-10);
1322 Assert.assertEquals(6, od.getSolveN());
1323 Assert.assertEquals("POS[3]", od.getSolveStates().get(0));
1324 Assert.assertEquals("VEL[3]", od.getSolveStates().get(1));
1325 Assert.assertEquals(2, od.getConsiderN());
1326 Assert.assertEquals("DRAG", od.getConsiderParameters().get(0));
1327 Assert.assertEquals("SRP", od.getConsiderParameters().get(1));
1328 Assert.assertEquals(3, od.getSensorsN());
1329 Assert.assertEquals("EGLIN", od.getSensors().get(0));
1330 Assert.assertEquals("FYLINGDALES", od.getSensors().get(1));
1331 Assert.assertEquals("PLAGNOLE", od.getSensors().get(2));
1332 Assert.assertEquals(1.3, od.getWeightedRms(), 1.0e-10);
1333 Assert.assertEquals("RANGE", od.getDataTypes().get(0));
1334 Assert.assertEquals("DOPPLER", od.getDataTypes().get(1));
1335 Assert.assertEquals("AZEL", od.getDataTypes().get(2));
1336
1337
1338 Assert.assertEquals(1, file.getData().getUserDefinedBlock().getParameters().size());
1339 Assert.assertEquals("OREKIT", file.getData().getUserDefinedBlock().getParameters().get("LIBRARY"));
1340
1341 Assert.assertEquals(1, file.getSatellites().size());
1342 OcmSatelliteEphemeris ephemeris = file.getSatellites().get("POLYSAT");
1343 Assert.assertEquals("POLYSAT", ephemeris.getId());
1344 Assert.assertEquals(3.986004415e14, ephemeris.getMu(), 1e5);
1345 Assert.assertEquals(3.0e5, Constants.IERS2003_EARTH_MU - ephemeris.getMu(), 1e0);
1346 Assert.assertEquals(2, ephemeris.getSegments().size());
1347 List<TimeStampedPVCoordinates> h0 = ephemeris.getSegments().get(0).getCoordinates();
1348 Assert.assertEquals(3, h0.size());
1349 Assert.assertEquals( 0.0, h0.get(0).getDate().durationFrom(epoch), 1.0e-10);
1350 Assert.assertEquals( 300.0, h0.get(1).getDate().durationFrom(epoch), 1.0e-10);
1351 Assert.assertEquals( 600.0, h0.get(2).getDate().durationFrom(epoch), 1.0e-10);
1352 List<TimeStampedPVCoordinates> h1 = ephemeris.getSegments().get(1).getCoordinates();
1353 Assert.assertEquals(3, h1.size());
1354 Assert.assertEquals(1800.0, h1.get(0).getDate().durationFrom(epoch), 1.0e-10);
1355 Assert.assertEquals(2100.0, h1.get(1).getDate().durationFrom(epoch), 1.0e-10);
1356 Assert.assertEquals(2400.0, h1.get(2).getDate().durationFrom(epoch), 1.0e-10);
1357
1358 Assert.assertEquals( 0.0, ephemeris.getStart().durationFrom(epoch), 10e-10);
1359 Assert.assertEquals(2400.0, ephemeris.getStop().durationFrom(epoch), 10e-10);
1360
1361 }
1362
1363 }