1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.analytical.tle;
18
19
20 import java.io.IOException;
21 import java.util.Set;
22
23 import org.apache.commons.math3.analysis.polynomials.PolynomialFunction;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.orekit.Utils;
28 import org.orekit.errors.OrekitException;
29 import org.orekit.frames.Frame;
30 import org.orekit.frames.FramesFactory;
31 import org.orekit.frames.Predefined;
32 import org.orekit.propagation.Propagator;
33 import org.orekit.time.AbsoluteDate;
34 import org.orekit.time.TimeScalesFactory;
35 import org.orekit.utils.Constants;
36 import org.orekit.utils.PVCoordinates;
37
38
39 public class TLESeriesTest {
40
41 @Test(expected=OrekitException.class)
42 public void testNoData() throws IOException, OrekitException {
43 TLESeries series = new TLESeries("^inexistant\\.tle$", false);
44 series.loadTLEData();
45 }
46
47 @Test(expected=OrekitException.class)
48 public void testNoTopexPoseidonNumber() throws IOException, OrekitException {
49 TLESeries series = new TLESeries("^spot-5\\.tle$", false);
50 series.loadTLEData(22076);
51 }
52
53 @Test(expected=OrekitException.class)
54 public void testNoTopexPoseidonLaunchElements() throws IOException, OrekitException {
55 TLESeries series = new TLESeries("^spot-5\\.tle$", false);
56 series.loadTLEData(1992, 52, "A");
57 }
58
59 @Test
60 public void testAvailableSatNums() throws IOException, OrekitException {
61 int[] refIds = {
62 5, 4632, 6251, 8195, 9880, 9998, 11801, 14128, 16925,
63 20413, 21897, 22312, 22674, 23177, 23333, 23599, 24208, 25954, 26900,
64 26975, 28057, 28129, 28350, 28623, 28626, 28872, 29141, 29238, 88888};
65
66 Utils.setDataRoot("tle/extrapolationTest-data:regular-data");
67 TLESeries series = new TLESeries(".*-entry$", true);
68 Set<Integer> available = series.getAvailableSatelliteNumbers();
69 Assert.assertEquals(refIds.length, available.size());
70 for (int ref : refIds) {
71 Assert.assertTrue(available.contains(ref));
72 }
73 }
74
75
76 @Test
77 public void testDefaultSearchAndLoad() throws IOException, OrekitException {
78 TLESeries series = new TLESeries(null, true);
79 Assert.assertNotNull(series);
80 Set<Integer> available = series.getAvailableSatelliteNumbers();
81 Assert.assertNotNull(available);
82
83 int expectedSatId = 27421;
84 Assert.assertTrue(available.contains(expectedSatId));
85
86
87 available = series.getAvailableSatelliteNumbers();
88 Assert.assertNotNull(available);
89 Assert.assertTrue(available.contains(expectedSatId));
90
91 }
92
93 @Test
94 public void testSpot5Available() throws IOException, OrekitException {
95 TLESeries series = new TLESeries("^spot-5\\.tle$", false);
96 Set<Integer> available = series.getAvailableSatelliteNumbers();
97 Assert.assertEquals(1, available.size());
98 Assert.assertTrue(available.contains(27421));
99 }
100
101 @Test
102 public void testSpot5WithExtraLines() throws IOException, OrekitException {
103 TLESeries series = new TLESeries("^spot-5-with-extra-lines\\.tle$", true);
104 series.loadTLEData(-1);
105 Assert.assertEquals(27421, series.getFirst().getSatelliteNumber());
106 AbsoluteDate referenceFirst =
107 new AbsoluteDate(2002, 5, 4, 11, 45, 15.695136, TimeScalesFactory.getUTC());
108 Assert.assertEquals(0, series.getFirstDate().durationFrom(referenceFirst), 1e-13);
109 AbsoluteDate referenceLast =
110 new AbsoluteDate(2002, 5, 4, 19, 10, 59.114784, TimeScalesFactory.getUTC());
111 Assert.assertEquals(0, series.getLastDate().durationFrom(referenceLast), 1e-13);
112 }
113
114 @Test(expected=OrekitException.class)
115 public void testSpot5WithExtraLinesExpectException() throws IOException, OrekitException {
116 TLESeries series = new TLESeries("^spot-5-with-extra-lines\\.tle$", false);
117 series.loadTLEData(-1);
118 }
119
120 @Test(expected=OrekitException.class)
121 public void testSpot5OneLineExpectException() throws IOException, OrekitException {
122 TLESeries series = new TLESeries("^spot-5-one-line\\.tle$", false);
123 series.loadTLEData(-1);
124 }
125
126 @Test
127 public void testPVStart() throws IOException, OrekitException {
128 TLESeries series = new TLESeries("^spot-5\\.tle$", false);
129 series.loadTLEData();
130
131 AbsoluteDate t0 = new AbsoluteDate(2002, 5, 4, 11, 0, 0.0, TimeScalesFactory.getUTC());
132
133
134
135 PolynomialFunction errorModel =
136 new PolynomialFunction(new double[] { -135.98, 0.010186, 1.3115e-06 });
137
138 Propagator propagator = TLEPropagator.selectExtrapolator(series.getFirst());
139 for (double dt = 0; dt < 3 * Constants.JULIAN_DAY; dt += 600) {
140 AbsoluteDate date = t0.shiftedBy(dt);
141 PVCoordinates delta = new PVCoordinates(propagator.getPVCoordinates(date, FramesFactory.getTEME()),
142 series.getPVCoordinates(date));
143 Assert.assertEquals(errorModel.value(dt), delta.getPosition().getNorm(), 1500.0);
144 }
145
146 }
147
148 @Test
149 public void testPVEnd() throws IOException, OrekitException {
150 TLESeries series = new TLESeries("^spot-5\\.tle$", false);
151 series.loadTLEData();
152
153 AbsoluteDate t0 =
154 new AbsoluteDate(2002, 6, 21, 20, 0, 0.0, TimeScalesFactory.getUTC());
155
156 TLEPropagator propagator = TLEPropagator.selectExtrapolator(series.getLast());
157 for (double dt = 3 * Constants.JULIAN_DAY; dt >= 0; dt -= 600) {
158 AbsoluteDate date = t0.shiftedBy(dt);
159 PVCoordinates delta = new PVCoordinates(propagator.getPVCoordinates(date), series.getPVCoordinates(date));
160 Assert.assertEquals(0, delta.getPosition().getNorm(), 660.0);
161 }
162
163 }
164
165 @Test
166 public void testSpot5() throws IOException, OrekitException {
167
168 TLESeries series = new TLESeries("^spot-5\\.tle$", false);
169
170 series.loadTLEData(-1);
171 Assert.assertEquals(27421, series.getFirst().getSatelliteNumber());
172
173 series.loadTLEData(27421);
174 Assert.assertEquals(27421, series.getFirst().getSatelliteNumber());
175
176 series.loadTLEData(-1, -1, null);
177 Assert.assertEquals(27421, series.getFirst().getSatelliteNumber());
178
179 series.loadTLEData(2002, -1, null);
180 Assert.assertEquals(27421, series.getFirst().getSatelliteNumber());
181
182 series.loadTLEData(2002, 21, "A");
183 Assert.assertEquals(27421, series.getFirst().getSatelliteNumber());
184 Assert.assertEquals(2002, series.getFirst().getLaunchYear());
185 Assert.assertEquals(21, series.getFirst().getLaunchNumber());
186 Assert.assertEquals("A", series.getFirst().getLaunchPiece());
187 Assert.assertEquals(27421, series.getLast().getSatelliteNumber());
188 Assert.assertEquals(2002, series.getLast().getLaunchYear());
189 Assert.assertEquals(21, series.getLast().getLaunchNumber());
190 Assert.assertEquals("A", series.getLast().getLaunchPiece());
191
192 AbsoluteDate referenceFirst =
193 new AbsoluteDate(2002, 5, 4, 11, 45, 15.695136, TimeScalesFactory.getUTC());
194 Assert.assertEquals(0, series.getFirstDate().durationFrom(referenceFirst), 1e-13);
195 AbsoluteDate referenceLast =
196 new AbsoluteDate(2002, 6, 24, 18, 12, 44.591616, TimeScalesFactory.getUTC());
197 Assert.assertEquals(0, series.getLastDate().durationFrom(referenceLast), 1e-13);
198
199 AbsoluteDate inside = new AbsoluteDate(2002, 06, 02, 11, 12, 15, TimeScalesFactory.getUTC());
200 AbsoluteDate referenceInside =
201 new AbsoluteDate(2002, 6, 2, 10, 8, 25.401, TimeScalesFactory.getUTC());
202 Assert.assertEquals(0, series.getClosestTLE(inside).getDate().durationFrom(referenceInside), 1e-3);
203
204 AbsoluteDate oneYearBefore = new AbsoluteDate(2001, 06, 02, 11, 12, 15, TimeScalesFactory.getUTC());
205 Assert.assertTrue(series.getClosestTLE(oneYearBefore).getDate().equals(series.getFirstDate()));
206
207 AbsoluteDate oneYearAfter = new AbsoluteDate(2003, 06, 02, 11, 12, 15, TimeScalesFactory.getUTC());
208 Assert.assertTrue(series.getClosestTLE(oneYearAfter).getDate().equals(series.getLastDate()));
209
210
211 series.loadTLEData(2002, 21, null);
212 TLE currentTle = series.getFirst();
213 Assert.assertEquals(27421, currentTle.getSatelliteNumber());
214 Assert.assertEquals(2002, currentTle.getLaunchYear());
215 Assert.assertEquals(21, currentTle.getLaunchNumber());
216 Assert.assertEquals("A", currentTle.getLaunchPiece());
217
218 series.loadTLEData(2002, 21, "");
219 currentTle = series.getFirst();
220 Assert.assertEquals(27421, currentTle.getSatelliteNumber());
221 Assert.assertEquals(2002, currentTle.getLaunchYear());
222 Assert.assertEquals(21, currentTle.getLaunchNumber());
223 Assert.assertEquals("A", currentTle.getLaunchPiece());
224
225 try {
226 series.loadTLEData(2002, 22, "A");
227 Assert.fail("Should have thrown exception about not having any TLE data for this combination");
228 }
229 catch(OrekitException exception) {
230 }
231
232 try {
233 series.loadTLEData(2002, 21, "B");
234 Assert.fail("Should have thrown exception about not having any TLE data for this combination");
235 }
236 catch(OrekitException exception) {
237
238 }
239 }
240
241 @Test
242 public void testTLEFrame() throws OrekitException {
243
244 TLE tle = new TLE("1 27421U 02021A 02124.48976499 -.00021470 00000-0 -89879-2 0 20",
245 "2 27421 98.7490 199.5121 0001333 133.9522 226.1918 14.26113993 62");
246 Frame tleFrame = TLEPropagator.selectExtrapolator(tle).getFrame();
247 Assert.assertEquals(tleFrame.getName(), FramesFactory.getFrame(Predefined.TEME).getName());
248 }
249
250 @Before
251 public void setUp() {
252 Utils.setDataRoot("regular-data");
253 }
254
255 }