1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.attitudes;
18
19 import java.util.Collections;
20
21 import org.hipparchus.Field;
22 import org.hipparchus.CalculusFieldElement;
23 import org.hipparchus.geometry.euclidean.threed.FieldRotation;
24 import org.hipparchus.geometry.euclidean.threed.Rotation;
25 import org.hipparchus.util.Decimal64Field;
26 import org.junit.Assert;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.orekit.Utils;
30 import org.orekit.data.DataSource;
31 import org.orekit.errors.OrekitException;
32 import org.orekit.errors.OrekitMessages;
33 import org.orekit.files.ccsds.ndm.ParserBuilder;
34 import org.orekit.files.ccsds.ndm.adm.aem.Aem;
35 import org.orekit.files.ccsds.ndm.adm.aem.AemSatelliteEphemeris;
36 import org.orekit.time.AbsoluteDate;
37 import org.orekit.time.FieldAbsoluteDate;
38 import org.orekit.time.TimeScalesFactory;
39
40 public class AggregateBoundedAttitudeProviderTest {
41
42 @Before
43 public void setUp() {
44 Utils.setDataRoot("regular-data:ccsds");
45 }
46
47 @Test
48 public void testEmptyList() {
49 try {
50 new AggregateBoundedAttitudeProvider(Collections.emptyList());
51 } catch (OrekitException oe) {
52 Assert.assertEquals(OrekitMessages.NOT_ENOUGH_ATTITUDE_PROVIDERS, oe.getSpecifier());
53 }
54 }
55
56 @Test
57 public void testAEM() {
58
59 final String ex = "/ccsds/adm/aem/AEMExample10.txt";
60 final DataSource source = new DataSource(ex, () -> getClass().getResourceAsStream(ex));
61 final Aem file = new ParserBuilder().buildAemParser().parseMessage(source);
62
63 final AemSatelliteEphemeris ephemeris = file.getSatellites().get("1996-062A");
64 final BoundedAttitudeProvider provider = ephemeris.getAttitudeProvider();
65
66
67 Assert.assertEquals(0.0, provider.getMinDate().durationFrom(ephemeris.getStart()), 1.0e-10);
68 Assert.assertEquals(0.0, provider.getMaxDate().durationFrom(ephemeris.getStop()), 1.0e-10);
69 Assert.assertEquals(0.0, provider.getMinDate().durationFrom(ephemeris.getSegments().get(0).getStart()), 1.0e-10);
70 Assert.assertEquals(0.0, provider.getMaxDate().durationFrom(ephemeris.getSegments().get(1).getStop()), 1.0e-10);
71
72
73 Attitude attitude = provider.getAttitude(null, new AbsoluteDate("1996-11-28T22:08:04.555", TimeScalesFactory.getUTC()), null);
74 Rotation rotation = attitude.getRotation();
75 Assert.assertEquals(0.45652, rotation.getQ0(), 0.00001);
76 Assert.assertEquals(-0.84532, rotation.getQ1(), 0.00001);
77 Assert.assertEquals(0.26974, rotation.getQ2(), 0.00001);
78 Assert.assertEquals(-0.06532, rotation.getQ3(), 0.00001);
79
80 }
81
82 @Test
83 public void testFieldAEM() {
84 doTestFieldAEM(Decimal64Field.getInstance());
85 }
86
87 private <T extends CalculusFieldElement<T>> void doTestFieldAEM(final Field<T> field) {
88
89 final String ex = "/ccsds/adm/aem/AEMExample10.txt";
90 final DataSource source = new DataSource(ex, () -> getClass().getResourceAsStream(ex));
91 final Aem file = new ParserBuilder().buildAemParser().parseMessage(source);
92
93 final AemSatelliteEphemeris ephemeris = file.getSatellites().get("1996-062A");
94 final BoundedAttitudeProvider provider = ephemeris.getAttitudeProvider();
95
96
97 Assert.assertEquals(0.0, provider.getMinDate().durationFrom(ephemeris.getStart()), 1.0e-10);
98 Assert.assertEquals(0.0, provider.getMaxDate().durationFrom(ephemeris.getStop()), 1.0e-10);
99 Assert.assertEquals(0.0, provider.getMinDate().durationFrom(ephemeris.getSegments().get(0).getStart()), 1.0e-10);
100 Assert.assertEquals(0.0, provider.getMaxDate().durationFrom(ephemeris.getSegments().get(1).getStop()), 1.0e-10);
101
102
103 FieldAttitude<T> attitude = provider.getAttitude(null, new FieldAbsoluteDate<>(new AbsoluteDate("1996-11-28T22:08:04.555", TimeScalesFactory.getUTC()), field.getZero()), null);
104 FieldRotation<T> rotation = attitude.getRotation();
105 Assert.assertEquals(0.45652, rotation.getQ0().getReal(), 0.00001);
106 Assert.assertEquals(-0.84532, rotation.getQ1().getReal(), 0.00001);
107 Assert.assertEquals(0.26974, rotation.getQ2().getReal(), 0.00001);
108 Assert.assertEquals(-0.06532, rotation.getQ3().getReal(), 0.00001);
109
110 }
111
112 @Test
113 public void testOutsideBounds() throws Exception {
114
115 final String ex = "/ccsds/adm/aem/AEMExample10.txt";
116 final DataSource source = new DataSource(ex, () -> getClass().getResourceAsStream(ex));
117 final Aem file = new ParserBuilder().withSimpleEOP(true).buildAemParser().parseMessage(source);
118
119 final AemSatelliteEphemeris ephemeris = file.getSatellites().get("1996-062A");
120 final BoundedAttitudeProvider provider = ephemeris.getAttitudeProvider();
121
122
123 try {
124 provider.getAttitude(null, provider.getMinDate().shiftedBy(-60.0), null);
125 } catch (OrekitException oe) {
126 Assert.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_BEFORE, oe.getSpecifier());
127 }
128
129
130 try {
131 provider.getAttitude(null, provider.getMaxDate().shiftedBy(60.0), null);
132 } catch (OrekitException oe) {
133 Assert.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_AFTER, oe.getSpecifier());
134 }
135
136 }
137
138 @Test
139 public void testFieldOutsideBounds() throws Exception {
140 doTestFieldOutsideBounds(Decimal64Field.getInstance());
141 }
142
143 private <T extends CalculusFieldElement<T>> void doTestFieldOutsideBounds(final Field<T> field) throws Exception {
144
145 final String ex = "/ccsds/adm/aem/AEMExample10.txt";
146 final DataSource source = new DataSource(ex, () -> getClass().getResourceAsStream(ex));
147 final Aem file = new ParserBuilder().withSimpleEOP(true).buildAemParser().parseMessage(source);
148
149 final AemSatelliteEphemeris ephemeris = file.getSatellites().get("1996-062A");
150 final BoundedAttitudeProvider provider = ephemeris.getAttitudeProvider();
151
152
153 try {
154 provider.getAttitude(null, new FieldAbsoluteDate<>(provider.getMinDate(), field.getZero().subtract(60.0)), null);
155 } catch (OrekitException oe) {
156 Assert.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_BEFORE, oe.getSpecifier());
157 }
158
159
160 try {
161 provider.getAttitude(null, new FieldAbsoluteDate<>(provider.getMinDate(), field.getZero().add(60.0)), null);
162 } catch (OrekitException oe) {
163 Assert.assertEquals(OrekitMessages.UNABLE_TO_GENERATE_NEW_DATA_AFTER, oe.getSpecifier());
164 }
165
166 }
167
168
169 }