1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.gnss.antenna;
18
19 import org.hipparchus.geometry.euclidean.threed.Vector3D;
20 import org.hipparchus.util.FastMath;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24 import org.orekit.Utils;
25 import org.orekit.errors.OrekitException;
26 import org.orekit.errors.OrekitMessages;
27 import org.orekit.gnss.Frequency;
28 import org.orekit.gnss.SatelliteSystem;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.time.TimeScalesFactory;
31 import org.orekit.utils.TimeSpanMap;
32
33
34 public class AntexLoaderTest {
35
36 @BeforeEach
37 public void setUp() {
38
39 Utils.setDataRoot("gnss:antex");
40 }
41
42 @Test
43 public void testSmallAntexFile() {
44
45 AntexLoader loader = new AntexLoader("^igs14-small\\.atx$");
46
47 Assertions.assertEquals(16, loader.getSatellitesAntennas().size());
48
49 checkSatellite(loader.getSatellitesAntennas().get( 0), 1992, 11, 22, 2008, 10, 16,
50 SatelliteSystem.GPS, "BLOCK IIA", SatelliteType.BLOCK_IIA, 32, 1,
51 "1992-079A", Frequency.G01, 45.0, 7.0, 1.30);
52 checkSatellite(loader.getSatellitesAntennas().get( 0), 2008, 10, 23, 2009, 1, 6,
53 SatelliteSystem.GPS, "BLOCK IIA", SatelliteType.BLOCK_IIA, 37, 1,
54 "1993-032A", Frequency.G02, 120.0, 4.0, -0.4);
55 checkSatellite(loader.getSatellitesAntennas().get( 0), 2009, 3, 24, 2011, 5, 6,
56 SatelliteSystem.GPS, "BLOCK IIR-M", SatelliteType.BLOCK_IIR_M, 49, 1,
57 "2009-014A", Frequency.G01, 57.0, 3.0, 4.60);
58 checkSatellite(loader.getSatellitesAntennas().get( 0), 2011, 6, 2, 2011, 7, 12,
59 SatelliteSystem.GPS, "BLOCK IIA", SatelliteType.BLOCK_IIA, 35, 1,
60 "1993-054A", Frequency.G02, 25.0, 9.0, 1.20);
61 checkSatellite(loader.getSatellitesAntennas().get( 0), 2011, 7, 16, 9999, 12, 31,
62 SatelliteSystem.GPS, "BLOCK IIF", SatelliteType.BLOCK_IIF, 63, 1,
63 "2011-036A", Frequency.G01, 17.0, 2.0, 2.80);
64
65 checkSatellite(loader.getSatellitesAntennas().get( 1), 1989, 6, 10, 2004, 5, 12,
66 SatelliteSystem.GPS, "BLOCK II", SatelliteType.BLOCK_II, 13, 2,
67 "1989-044A", Frequency.G02, 0.0, 0.0, -0.80);
68 checkSatellite(loader.getSatellitesAntennas().get( 1), 2004, 11, 6, 9999, 12, 31,
69 SatelliteSystem.GPS, "BLOCK IIR-B", SatelliteType.BLOCK_IIR_B, 61, 2,
70 "2004-045A", Frequency.G01, 270.0, 17.0, 40.60);
71
72 checkSatellite(loader.getSatellitesAntennas().get( 2), 1985, 10, 9, 1994, 4, 17,
73 SatelliteSystem.GPS, "BLOCK I", SatelliteType.BLOCK_I, 11, 3,
74 "1985-093A", Frequency.G02, 3.0, 3.0, -0.90);
75 checkSatellite(loader.getSatellitesAntennas().get( 2), 1996, 3, 28, 2014, 8, 18,
76 SatelliteSystem.GPS, "BLOCK IIA", SatelliteType.BLOCK_IIA, 33, 3,
77 "1996-019A", Frequency.G01, 34.0, 6.0, 0.80);
78 checkSatellite(loader.getSatellitesAntennas().get( 2), 2014, 9, 5, 2014, 10, 20,
79 SatelliteSystem.GPS, "BLOCK IIA", SatelliteType.BLOCK_IIA, 35, 3,
80 "1993-054A", Frequency.G02, 12.0, 10.0, 0.70);
81 checkSatellite(loader.getSatellitesAntennas().get( 2), 2014, 10, 29, 9999, 12, 31,
82 SatelliteSystem.GPS, "BLOCK IIF", SatelliteType.BLOCK_IIF, 69, 3,
83 "2014-068A", Frequency.G01, 78.0, 0.5, 5.25);
84
85 checkSatellite(loader.getSatellitesAntennas().get( 3), 1998, 12, 30, 2004, 12, 25,
86 SatelliteSystem.GLONASS, "GLONASS", SatelliteType.GLONASS, 779, 1,
87 "1998-077A", Frequency.R01, 33.0, 9.0, -1.60);
88 checkSatellite(loader.getSatellitesAntennas().get( 3), 2004, 12, 26, 2009, 12, 13,
89 SatelliteSystem.GLONASS, "GLONASS", SatelliteType.GLONASS, 796, 1,
90 "2004-053A", Frequency.R02, 114.0, 5.0, -0.20);
91 checkSatellite(loader.getSatellitesAntennas().get( 3), 2009, 12, 14, 9999, 12, 31,
92 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 730, 1,
93 "2009-070A", Frequency.R01, 46.0, 3.0, 0.8);
94
95 checkSatellite(loader.getSatellitesAntennas().get( 4), 2003, 12, 10, 2008, 12, 24,
96 SatelliteSystem.GLONASS, "GLONASS", SatelliteType.GLONASS, 794, 2,
97 "2003-056B", Frequency.R02, 67.0, 7.0, -1.10);
98 checkSatellite(loader.getSatellitesAntennas().get( 4), 2008, 12, 25, 2013, 6, 30,
99 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 728, 2,
100 "2008-067C", Frequency.R01, 23.0, 6.0, -0.6);
101 checkSatellite(loader.getSatellitesAntennas().get( 4), 2013, 7, 1, 9999, 12, 31,
102 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 747, 2,
103 "2013-019A", Frequency.R02, 1.0, 14.0, 1.50);
104
105 checkSatellite(loader.getSatellitesAntennas().get( 5), 1994, 11, 20, 2001, 11, 30,
106 SatelliteSystem.GLONASS, "GLONASS", SatelliteType.GLONASS, 763, 3,
107 "1994-076A", Frequency.R01, 6.0, 1.0, 1.50);
108 checkSatellite(loader.getSatellitesAntennas().get( 5), 2001, 12, 1, 2008, 12, 24,
109 SatelliteSystem.GLONASS, "GLONASS", SatelliteType.GLONASS, 789, 3,
110 "2001-053B", Frequency.R02, 54.0, 13.0, 0.0);
111 checkSatellite(loader.getSatellitesAntennas().get( 5), 2008, 12, 25, 2010, 9, 30,
112 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 727, 3,
113 "2008-067A", Frequency.R01, 98.0, 5.0, -0.20);
114 checkSatellite(loader.getSatellitesAntennas().get( 5), 2010, 10, 1, 2010, 12, 15,
115 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 722, 3,
116 "2007-065B", Frequency.R02, 112.0, 2.0, 1.10);
117 checkSatellite(loader.getSatellitesAntennas().get( 5), 2010, 12, 16, 2011, 3, 10,
118 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 727, 3,
119 "2008-067A", Frequency.R01, 134.0, 3.0, 0.8);
120 checkSatellite(loader.getSatellitesAntennas().get( 5), 2011, 3, 11, 2011, 10, 12,
121 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 715, 3,
122 "2006-062C", Frequency.R02, 12.0, 2.5, 0.95);
123 checkSatellite(loader.getSatellitesAntennas().get( 5), 2011, 10, 13, 2011, 11, 30,
124 SatelliteSystem.GLONASS, "GLONASS-K1", SatelliteType.GLONASS_K1, 801, 3,
125 "2011-009A", Frequency.R01, 345.0, 3.456, 0.0);
126 checkSatellite(loader.getSatellitesAntennas().get( 5), 2011, 12, 1, 9999, 12, 31,
127 SatelliteSystem.GLONASS, "GLONASS-M", SatelliteType.GLONASS_M, 744, 3,
128 "2011-064A", Frequency.R02, 360.0, 10.0 / 3.0, 0.60);
129
130 checkSatellite(loader.getSatellitesAntennas().get( 6), 2016, 5, 24, 9999, 12, 31,
131 SatelliteSystem.GALILEO, "GALILEO-2", SatelliteType.GALILEO_2, 210, 1,
132 "2016-030B", Frequency.E01, 359.0, 4.2, 0.0);
133
134 checkSatellite(loader.getSatellitesAntennas().get( 7), 2016, 5, 24, 9999, 12, 31,
135 SatelliteSystem.GALILEO, "GALILEO-2", SatelliteType.GALILEO_2, 211, 2,
136 "2016-030A", Frequency.E05, 23.0, 12.0, 0.0);
137
138 checkSatellite(loader.getSatellitesAntennas().get( 8), 2011, 10, 21, 9999, 12, 31,
139 SatelliteSystem.GALILEO, "GALILEO-1", SatelliteType.GALILEO_1, 101, 11,
140 "2011-060A", Frequency.E06, 110.0, 22.0 / 3.0, 0.64);
141
142 checkSatellite(loader.getSatellitesAntennas().get( 9), 2010, 1, 16, 9999, 12, 31,
143 SatelliteSystem.BEIDOU, "BEIDOU-2G", SatelliteType.BEIDOU_2G, 3, 1,
144 "2010-001A", Frequency.C01, 14.0, 7.0, 0.0);
145
146 checkSatellite(loader.getSatellitesAntennas().get(10), 2010, 7, 31, 9999, 12, 31,
147 SatelliteSystem.BEIDOU, "BEIDOU-2I", SatelliteType.BEIDOU_2I, 5, 6,
148 "2010-036A", Frequency.C02, 245.0, 8.0, 0.0);
149
150 checkSatellite(loader.getSatellitesAntennas().get(11), 2012, 4, 29, 9999, 12, 31,
151 SatelliteSystem.BEIDOU, "BEIDOU-2M", SatelliteType.BEIDOU_2M, 12, 11,
152 "2012-018A", Frequency.C06, 146.0, 3.2, 0.0);
153
154 checkSatellite(loader.getSatellitesAntennas().get(12), 2010, 9, 11, 9999, 12, 31,
155 SatelliteSystem.QZSS, "QZSS", SatelliteType.QZSS, 1, 193,
156 "2010-045A", Frequency.J01, 113.0, 6.0, 0.0);
157
158 checkSatellite(loader.getSatellitesAntennas().get(13), 2013, 7, 1, 9999, 12, 31,
159 SatelliteSystem.IRNSS, "IRNSS-1IGSO", SatelliteType.IRNSS_1IGSO, 1, 1,
160 "2013-034A", Frequency.I05, 34.0, 9.0, 0.0);
161
162 checkSatellite(loader.getSatellitesAntennas().get(14), 2014, 10, 15, 9999, 12, 31,
163 SatelliteSystem.IRNSS, "IRNSS-1GEO", SatelliteType.IRNSS_1GEO, 3, 3,
164 "2014-061A", Frequency.I09, 23.0, 10.0, 0.0);
165
166 checkSatellite(loader.getSatellitesAntennas().get(15), 2015, 3, 28, 9999, 12, 31,
167 SatelliteSystem.IRNSS, "IRNSS-1IGSO", SatelliteType.IRNSS_1IGSO, 4, 4,
168 "2015-018A", Frequency.I05, 321.0, 13.0, 0.0);
169
170 Assertions.assertEquals( 3, loader.getReceiversAntennas().size());
171 Assertions.assertEquals("3S-02-TSADM NONE", loader.getReceiversAntennas().get(0).getType());
172 Assertions.assertEquals("", loader.getReceiversAntennas().get(0).getSerialNumber());
173 Assertions.assertEquals("3S-02-TSATE NONE", loader.getReceiversAntennas().get(1).getType());
174 Assertions.assertEquals("", loader.getReceiversAntennas().get(1).getSerialNumber());
175 Assertions.assertEquals("AERAT1675_120 SPKE", loader.getReceiversAntennas().get(2).getType());
176 Assertions.assertEquals("", loader.getReceiversAntennas().get(2).getSerialNumber());
177 Assertions.assertEquals(1, loader.getReceiversAntennas().get(2).getFrequencies().size());
178 Assertions.assertEquals(Frequency.G01, loader.getReceiversAntennas().get(2).getFrequencies().get(0));
179 try {
180 loader.getReceiversAntennas().get(2).getEccentricities(Frequency.E06);
181 Assertions.fail("an exception should have been thrown");
182 } catch (OrekitException oe) {
183 Assertions.assertEquals(OrekitMessages.UNSUPPORTED_FREQUENCY_FOR_ANTENNA, oe.getSpecifier());
184 Assertions.assertSame(Frequency.E06, oe.getParts()[0]);
185 Assertions.assertEquals("AERAT1675_120 SPKE", oe.getParts()[1]);
186 }
187 Assertions.assertEquals(-0.00001, loader.getReceiversAntennas().get(2).getEccentricities(Frequency.G01).getX(), 1.0e-15);
188 Assertions.assertEquals(+0.00057, loader.getReceiversAntennas().get(2).getEccentricities(Frequency.G01).getY(), 1.0e-15);
189 Assertions.assertEquals(+0.08051, loader.getReceiversAntennas().get(2).getEccentricities(Frequency.G01).getZ(), 1.0e-15);
190 Assertions.assertEquals(-0.00249,
191 loader.getReceiversAntennas().get(2).getPhaseCenterVariation(Frequency.G01,
192 new Vector3D(FastMath.toRadians(60.0),
193 FastMath.toRadians(55.0))),
194 1.0e-15);
195
196 }
197
198 @Test
199 public void testWrongColumns() {
200 try {
201 new AntexLoader("^igs14-wrong-columns\\.atx$");
202 Assertions.fail("an exception should have been thrown");
203 } catch (OrekitException oe) {
204 Assertions.assertEquals(OrekitMessages.WRONG_COLUMNS_NUMBER, oe.getSpecifier());
205 Assertions.assertEquals(25, ((Integer) oe.getParts()[1]).intValue());
206 Assertions.assertEquals(17, ((Integer) oe.getParts()[2]).intValue());
207 Assertions.assertEquals(10, ((Integer) oe.getParts()[3]).intValue());
208 }
209 }
210
211 @Test
212 public void testUnknownFrequency() {
213 try {
214 new AntexLoader("^igs14-unknown-rinex-frequency\\.atx$");
215 Assertions.fail("an exception should have been thrown");
216 } catch (OrekitException oe) {
217 Assertions.assertEquals(OrekitMessages.UNKNOWN_RINEX_FREQUENCY, oe.getSpecifier());
218 Assertions.assertEquals("U99", (String) oe.getParts()[0]);
219 Assertions.assertEquals(23, ((Integer) oe.getParts()[2]).intValue());
220 }
221 }
222
223 @Test
224 public void testMismatchedFrequencies() {
225 try {
226 new AntexLoader("^igs14-mismatched-frequencies\\.atx$");
227 Assertions.fail("an exception should have been thrown");
228 } catch (OrekitException oe) {
229 Assertions.assertEquals(OrekitMessages.MISMATCHED_FREQUENCIES, oe.getSpecifier());
230 Assertions.assertEquals(88, ((Integer) oe.getParts()[1]).intValue());
231 Assertions.assertEquals("E01", "" + oe.getParts()[2]);
232 Assertions.assertEquals("E06", "" + oe.getParts()[3]);
233 }
234 }
235
236 @Test
237 public void testWrongLabel() {
238 try {
239 new AntexLoader("^igs14-unknown-label\\.atx$");
240 Assertions.fail("an exception should have been thrown");
241 } catch (OrekitException oe) {
242 Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
243 Assertions.assertEquals(17, ((Integer) oe.getParts()[0]).intValue());
244 Assertions.assertEquals("THIS IS NOT AN ANTEX LABEL", ((String) oe.getParts()[2]).substring(60).trim());
245 }
246 }
247
248 @Test
249
250
251
252 public void testUnknownNumberFrequencies() {
253 try {
254 new AntexLoader("^igs14-unknown-nb-frequencies\\.atx$");
255 Assertions.fail("an exception should have been thrown");
256 } catch (OrekitException oe) {
257 Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
258 Assertions.assertEquals(21, ((Integer) oe.getParts()[0]).intValue());
259 Assertions.assertEquals("END OF FREQUENCY", ((String) oe.getParts()[2]).substring(60).trim());
260 }
261 }
262
263 @Test
264 public void testCorruptedFile() {
265 try {
266 new AntexLoader("^igs14-corrupted\\.atx$");
267 Assertions.fail("an exception should have been thrown");
268 } catch (OrekitException oe) {
269 Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
270 Assertions.assertEquals(21, ((Integer) oe.getParts()[0]).intValue());
271 }
272 }
273
274 private void checkSatellite(final TimeSpanMap<SatelliteAntenna> tsm,
275 final int startYear, final int startMonth, final int startDay,
276 final int endYear, final int endMonth, final int endDay,
277 final SatelliteSystem system, final String type,
278 final SatelliteType satType, final int satCode, final int prnNumber,
279 final String cosparId, final Frequency freq, final double az, final double pol,
280 final double phaseCenterVariation) {
281 final double oneMilliSecond = 0.001;
282 final AbsoluteDate startDate = new AbsoluteDate(startYear, startMonth, startDay,
283 TimeScalesFactory.getGPS());
284 final AbsoluteDate endDate = endYear > 9000 ?
285 AbsoluteDate.FUTURE_INFINITY :
286 new AbsoluteDate(endYear, endMonth, endDay,
287 23, 59, 59.9999999,
288 TimeScalesFactory.getGPS());
289 final SatelliteAntenna antenna = tsm.get(startDate.shiftedBy(oneMilliSecond));
290 Assertions.assertEquals(system, antenna.getSatelliteSystem());
291 Assertions.assertEquals(type, antenna.getType());
292 Assertions.assertEquals(satType, antenna.getSatelliteType());
293 Assertions.assertEquals(satCode, antenna.getSatelliteCode());
294 Assertions.assertEquals(prnNumber, antenna.getPrnNumber());
295 Assertions.assertEquals(cosparId, antenna.getCosparID());
296 Assertions.assertEquals(0.0, startDate.durationFrom(antenna.getValidFrom()), 1.0e-10);
297 if (endDate == AbsoluteDate.FUTURE_INFINITY) {
298 Assertions.assertSame(endDate, antenna.getValidUntil());
299 } else {
300 Assertions.assertEquals(0.0, endDate.durationFrom(antenna.getValidUntil()), 1.0e-10);
301 }
302 Assertions.assertEquals(phaseCenterVariation * 0.001,
303 antenna.getPhaseCenterVariation(freq,
304 new Vector3D(FastMath.toRadians(az),
305 FastMath.toRadians(90 - pol))),
306 1.0e-10);
307 }
308
309 }