1   package org.orekit.propagation.conversion.averaging;
2   
3   import org.junit.jupiter.api.Assertions;
4   import org.junit.jupiter.api.BeforeEach;
5   import org.junit.jupiter.api.Test;
6   import org.orekit.Utils;
7   import org.orekit.frames.Frame;
8   import org.orekit.frames.FramesFactory;
9   import org.orekit.orbits.KeplerianOrbit;
10  import org.orekit.orbits.Orbit;
11  import org.orekit.orbits.PositionAngleType;
12  import org.orekit.propagation.analytical.tle.TLE;
13  import org.orekit.propagation.conversion.averaging.elements.AveragedKeplerianWithMeanAngle;
14  import org.orekit.time.AbsoluteDate;
15  
16  class SGP4OrbitalStateTest {
17  
18      @BeforeEach
19      public void setUp() {
20          Utils.setDataRoot("regular-data");
21      }
22  
23      @Test
24      void testToOsculating() {
25          final SGP4OrbitalState averagedState = new SGP4OrbitalState(AbsoluteDate.ARBITRARY_EPOCH,
26                  new AveragedKeplerianWithMeanAngle(1e7, 0.1, 1., 2., 3., -1.));
27          // WHEN
28          final Orbit orbit = averagedState.toOsculatingOrbit();
29          final KeplerianOrbit keplerianOrbit = (KeplerianOrbit) averagedState.getOrbitType().convertType(orbit);
30          // THEN
31          Assertions.assertEquals(averagedState.getDate(), keplerianOrbit.getDate());
32          Assertions.assertEquals(averagedState.getFrame(), keplerianOrbit.getFrame());
33          compareOrbitalElements(averagedState.getAveragedElements(), keplerianOrbit,
34                  averagedState.getPositionAngleType());
35      }
36  
37      private void compareOrbitalElements(final AveragedKeplerianWithMeanAngle elements,
38                                          final KeplerianOrbit keplerianOrbit,
39                                          final PositionAngleType positionAngleType) {
40          Assertions.assertEquals(elements.getAveragedSemiMajorAxis(), keplerianOrbit.getA(), 1e3);
41          Assertions.assertEquals(elements.getAveragedEccentricity(), keplerianOrbit.getE(), 1e-3);
42          Assertions.assertEquals(elements.getAveragedInclination(), keplerianOrbit.getI(), 1e-3);
43          Assertions.assertEquals(elements.getAveragedPerigeeArgument(),
44                  keplerianOrbit.getPerigeeArgument(), 1e-2);
45          Assertions.assertEquals(elements.getAveragedRightAscensionOfTheAscendingNode(),
46                  keplerianOrbit.getRightAscensionOfAscendingNode(), 1e-3);
47          Assertions.assertEquals(elements.getAveragedMeanAnomaly(),
48                  keplerianOrbit.getAnomaly(positionAngleType), 1e-2);
49      }
50  
51      @Test
52      void testOf() {
53          // GIVEN
54          final String line1SPOT = "1 22823U 93061A   03339.49496229  .00000173  00000-0  10336-3 0   133";
55          final String line2SPOT = "2 22823  98.4132 359.2998 0017888 100.4310 259.8872 14.18403464527664";
56          final TLE tle = new TLE(line1SPOT, line2SPOT);
57          final Frame teme = FramesFactory.getTEME();
58          // WHEN
59          final SGP4OrbitalState orbitalState = SGP4OrbitalState.of(tle, teme);
60          // THEN
61          final AveragedKeplerianWithMeanAngle elements = orbitalState.getAveragedElements();
62          Assertions.assertEquals(tle.getE(), elements.getAveragedEccentricity());
63          Assertions.assertEquals(tle.getI(), elements.getAveragedInclination());
64          Assertions.assertEquals(tle.getRaan(), elements.getAveragedRightAscensionOfTheAscendingNode());
65          Assertions.assertEquals(tle.getPerigeeArgument(), elements.getAveragedPerigeeArgument());
66          Assertions.assertEquals(tle.getMeanAnomaly(), elements.getAveragedMeanAnomaly());
67      }
68  
69  }