1 package org.orekit.files.iirv;
2
3 import org.hipparchus.geometry.euclidean.threed.Vector3D;
4 import org.junit.jupiter.api.BeforeEach;
5 import org.junit.jupiter.api.Test;
6 import org.orekit.Utils;
7 import org.orekit.annotation.DefaultDataContext;
8 import org.orekit.data.DataContext;
9 import org.orekit.data.DataSource;
10 import org.orekit.time.AbsoluteDate;
11 import org.orekit.time.TimeScalesFactory;
12 import org.orekit.time.UTCScale;
13 import org.orekit.utils.CartesianDerivativesFilter;
14 import org.orekit.utils.Constants;
15 import org.orekit.utils.TimeStampedPVCoordinates;
16
17 import java.util.Arrays;
18 import java.util.List;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21
22 public class IIRVEphemerisTest {
23
24 private static UTCScale UTC;
25 private IIRVEphemerisFile.IIRVEphemeris iirvEphemeris;
26 private IIRVSegment iirvSegment;
27
28 @BeforeEach
29 @DefaultDataContext
30 public void setUp() {
31 Utils.setDataRoot("regular-data");
32 UTC = TimeScalesFactory.getUTC();
33 final IIRVParser parser = new IIRVParser(2024, UTC);
34
35 final String stereoAheadIirvFile = "/iirv/ahead_20240909_01.iirv";
36 final IIRVEphemerisFile iirvEphemerisFile = parser.parse(
37 new DataSource(stereoAheadIirvFile,
38 () -> getClass().getResourceAsStream(stereoAheadIirvFile)));
39
40 iirvEphemeris = iirvEphemerisFile.getSatellites().get("01");
41 iirvSegment = iirvEphemeris.getSegment();
42 }
43
44 @Test
45 void testConstructors() {
46
47 IIRVEphemerisFile fileFromEphemeris = new IIRVEphemerisFile(iirvEphemeris);
48 IIRVEphemerisFile fileFromValues = new IIRVEphemerisFile(
49 iirvSegment.getMu(),
50 iirvSegment.getInterpolationSamples(),
51 iirvSegment.getStartYear(),
52 iirvSegment.getIIRVMessage()
53 );
54 IIRVEphemerisFile fileFromMessage = new IIRVEphemerisFile(
55 iirvSegment.getStartYear(),
56 iirvSegment.getIIRVMessage()
57 );
58 assertEquals(fileFromEphemeris.getIIRV(), fileFromValues.getIIRV());
59 assertEquals(fileFromEphemeris.getIIRV(), fileFromMessage.getIIRV());
60 }
61
62 @Test
63 void testIIRVSegment() {
64 assertEquals(iirvEphemeris.getMu(), iirvSegment.getMu());
65 assertEquals(iirvEphemeris.getStart(), iirvSegment.getStart());
66 assertEquals(iirvEphemeris.getStop(), iirvSegment.getStop());
67
68
69 IIRVMessage testMessage = iirvSegment.getIIRVMessage();
70 IIRVSegment testSegment = new IIRVSegment(
71 Constants.IERS96_EARTH_MU,
72 14,
73 2020,
74 testMessage
75 );
76
77 assertEquals(testSegment.getMu(), Constants.IERS96_EARTH_MU);
78 assertEquals(testSegment.getFrame().getName(), "GTOD/2010 simple EOP");
79 assertEquals(testSegment.getInterpolationSamples(), 14);
80 assertEquals(testSegment.getAvailableDerivatives(), CartesianDerivativesFilter.USE_PV);
81 assertEquals(testSegment.getStartYear(), 2020);
82 assertEquals(testSegment.getStart().toString(UTC), "2020-09-09T00:00:00.000");
83 assertEquals(testSegment.getStop().toString(UTC), "2020-09-10T00:00:00.000");
84 assertEquals(testSegment.getIIRVMessage(), testMessage);
85
86
87 for (IIRVVector iirv : testSegment.getIIRVMessage().getVectors()) {
88 assertEquals(testSegment.getFrame().getName(), iirv.getFrame().getName());
89 assertEquals(testSegment.getFrame().getName(), iirv.getFrame(DataContext.getDefault()).getName());
90 assertEquals(testSegment.getFrame().getName(), iirv.getCoordinateSystem().getFrame().getName());
91 }
92
93 }
94
95 @Test
96 void testYearRolloverHandling() {
97
98
99
100 TimeStampedPVCoordinates pv_before_midnight = new TimeStampedPVCoordinates(
101 new AbsoluteDate(2020, 12, 31, 23, 59, 59, UTC),
102 new Vector3D(1.0e6, 2.0e6, 3.0e6),
103 new Vector3D(-300, -200, -100));
104 TimeStampedPVCoordinates pv_after_midnight = new TimeStampedPVCoordinates(
105 new AbsoluteDate(2021, 1, 1, 0, 0, 1, UTC),
106 new Vector3D(1.0e6, 2.0e6, 3.0e6),
107 new Vector3D(-300, -200, -100));
108
109 final IIRVBuilder iirvBuilder = new IIRVBuilder(UTC);
110 IIRVSegment iirv_segment = new IIRVSegment(2020, iirvBuilder.buildIIRVMessage(Arrays.asList(pv_before_midnight, pv_after_midnight)));
111
112 List<TimeStampedPVCoordinates> coordinates_from_segment = iirv_segment.getCoordinates();
113 assert (coordinates_from_segment.get(0).getDate().getComponents(UTC).getDate().getYear() == 2020);
114 assert (coordinates_from_segment.get(1).getDate().getComponents(UTC).getDate().getYear() == 2021);
115 }
116 }