1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.sinex;
18
19 import java.lang.reflect.InvocationTargetException;
20 import java.lang.reflect.Method;
21
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.junit.Assert;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.orekit.Utils;
27 import org.orekit.errors.OrekitException;
28 import org.orekit.errors.OrekitMessages;
29 import org.orekit.files.sinex.Station.ReferenceSystem;
30 import org.orekit.time.AbsoluteDate;
31 import org.orekit.time.DateComponents;
32 import org.orekit.time.TimeComponents;
33 import org.orekit.time.TimeScalesFactory;
34 import org.orekit.utils.Constants;
35
36 public class SinexLoaderTest {
37
38 @Before
39 public void setUp() {
40
41 Utils.setDataRoot("gnss:sinex");
42 }
43
44 @Test
45 public void testSmallIGSSinexFile() {
46
47 SinexLoader loader = new SinexLoader("cod20842-small.snx");
48
49 Assert.assertEquals(2, loader.getStations().size());
50
51 checkStation(loader.getStation("ABMF"), 2019, 350, 0.0, 2019, 352, 86370, 2019, 351, 43185,
52 "ABMF", "97103M001", Vector3D.ZERO,
53 new Vector3D(0.291978579235962e07, -0.538374495897593e07, 0.177460486102077e07),
54 Vector3D.ZERO);
55
56 checkStation(loader.getStation("ABPO"), 2019, 350, 0.0, 2019, 352, 86370, 2019, 351, 43185,
57 "ABPO", "33302M001", new Vector3D(0.0083, 0., 0.),
58 new Vector3D(0.409721654480569e07, 0.442911920899428e07, -.206577118054971e07),
59 Vector3D.ZERO);
60
61 }
62
63 @Test
64 public void testSLRSinexFile() {
65
66 SinexLoader loader = new SinexLoader("SLRF2008_150928_2015.09.28.snx");
67
68
69 try {
70 Method method = SinexLoader.class.getDeclaredMethod("stringEpochToAbsoluteDate", String.class);
71 method.setAccessible(true);
72 final AbsoluteDate date = (AbsoluteDate) method.invoke(loader, "95:120:86399");
73 final AbsoluteDate refDate = new AbsoluteDate("1995-04-30T23:59:59.000", TimeScalesFactory.getUTC());
74 Assert.assertEquals(0., refDate.durationFrom(date), 0.);
75 } catch (NoSuchMethodException | SecurityException e) {
76 e.printStackTrace();
77 } catch (IllegalAccessException e) {
78 e.printStackTrace();
79 } catch (IllegalArgumentException e) {
80 e.printStackTrace();
81 } catch (InvocationTargetException e) {
82 e.printStackTrace();
83 }
84
85
86 checkStation(loader.getStation("1885"), 1996, 310, 71317, 1996, 320, 73221, 2005, 1, 0.,
87 "1885", "12302S006", Vector3D.ZERO,
88 new Vector3D(0.318389220590831e07, 0.142146588920043e07, 0.532281398355808e07),
89 new Vector3D(-.239370506815545e-01 / Constants.JULIAN_YEAR,
90 0.114173567092327e-01 / Constants.JULIAN_YEAR,
91 -.145139658580209e-02 / Constants.JULIAN_YEAR));
92
93 checkStation(loader.getStation("7082"), 1983, 313, 13398, 1984, 4, 83080, 2005, 1, 0.,
94 "7082", "40438M001", Vector3D.ZERO,
95 new Vector3D(-.173599736285899e07, -.442504854754010e07, 0.424143058893134e07),
96 new Vector3D(-.142509359401051e-01 / Constants.JULIAN_YEAR,
97 -.975043019205914e-02 / Constants.JULIAN_YEAR,
98 -.506419781207987e-03 / Constants.JULIAN_YEAR));
99 }
100
101 @Test
102 public void testStationEccentricityXYZFile() {
103
104
105 SinexLoader loader = new SinexLoader("ecc_xyz-small.snx");
106 Assert.assertEquals(3, loader.getStations().size());
107
108
109 final Vector3D ecc1148 = Vector3D.ZERO;
110 final Vector3D ecc7035 = new Vector3D(-0.9670, -1.9490, 1.3990);
111 final Vector3D ecc7120 = new Vector3D(-3.0850, -1.3670, 1.2620);
112
113
114 Assert.assertEquals(ReferenceSystem.XYZ, loader.getStation("1148").getEccRefSystem());
115 Assert.assertEquals(0., ecc1148.distance(loader.getStation("1148").getEccentricities()), 1.0e-15);
116 Assert.assertEquals(ReferenceSystem.XYZ, loader.getStation("7035").getEccRefSystem());
117 Assert.assertEquals(0., ecc7035.distance(loader.getStation("7035").getEccentricities()), 1.0e-15);
118 Assert.assertEquals(ReferenceSystem.XYZ, loader.getStation("7120").getEccRefSystem());
119 Assert.assertEquals(0., ecc7120.distance(loader.getStation("7120").getEccentricities()), 1.0e-15);
120
121 }
122
123 @Test
124 public void testStationEccentricityUNEFile() {
125
126
127 SinexLoader loader = new SinexLoader("ecc_une-small.snx");
128 Assert.assertEquals(3, loader.getStations().size());
129
130
131 final Vector3D ecc1148 = Vector3D.ZERO;
132 final Vector3D ecc7035 = new Vector3D(2.5870, 0.0060, 0.0170);
133 final Vector3D ecc7120 = new Vector3D(3.6020, -0.0130, 0.0090);
134
135
136 Assert.assertEquals(ReferenceSystem.UNE, loader.getStation("1148").getEccRefSystem());
137 Assert.assertEquals(0., ecc1148.distance(loader.getStation("1148").getEccentricities()), 1.0e-15);
138 Assert.assertEquals(ReferenceSystem.UNE, loader.getStation("7035").getEccRefSystem());
139 Assert.assertEquals(0., ecc7035.distance(loader.getStation("7035").getEccentricities()), 1.0e-15);
140 Assert.assertEquals(ReferenceSystem.UNE, loader.getStation("7120").getEccRefSystem());
141 Assert.assertEquals(0., ecc7120.distance(loader.getStation("7120").getEccentricities()), 1.0e-15);
142
143 }
144
145 @Test
146 public void testIssue867() {
147
148
149 SinexLoader loader = new SinexLoader("ecc_xyz-small-multiple-ecc.snx");
150 Assert.assertEquals(4, loader.getStations().size());
151
152
153 final Station station7236 = loader.getStation("7236");
154 final Vector3D refStation7236 = Vector3D.ZERO;
155 Assert.assertEquals(0.0, refStation7236.distance(station7236.getEccentricities(new AbsoluteDate("1995-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
156 Assert.assertEquals(0.0, station7236.getValidFrom().durationFrom(new AbsoluteDate("1988-01-01T00:00:00.000", TimeScalesFactory.getUTC())), 1.0e-15);
157 Assert.assertEquals(0.0, station7236.getValidUntil().durationFrom(new AbsoluteDate("1999-09-30T23:59:59.000", TimeScalesFactory.getUTC())), 1.0e-15);
158
159
160 final Station station7237 = loader.getStation("7237");
161 final Vector3D refStation7237 = Vector3D.ZERO;
162 Assert.assertEquals(0.0, refStation7237.distance(station7237.getEccentricities(new AbsoluteDate("1995-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
163 Assert.assertEquals(0.0, refStation7237.distance(station7237.getEccentricities(new AbsoluteDate("2021-12-06T17:30:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
164 Assert.assertEquals(0.0, refStation7237.distance(station7237.getEccentricities(new AbsoluteDate("2999-12-06T17:30:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
165 Assert.assertEquals(0.0, station7237.getValidFrom().durationFrom(new AbsoluteDate("1988-01-01T00:00:00.000", TimeScalesFactory.getUTC())), 1.0e-15);
166 Assert.assertTrue(station7237.getValidUntil() == AbsoluteDate.FUTURE_INFINITY);
167
168
169 final Station station7090 = loader.getStation("7090");
170 Vector3D refStation7090 = new Vector3D(-1.2030, 2.5130, -1.5440);
171 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1982-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
172 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1984-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
173 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1985-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
174 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1986-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
175 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1987-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
176 refStation7090 = new Vector3D(-1.1990, 2.5070, -1.5400);
177 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1988-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
178 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1990-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
179 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1991-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
180 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1992-01-01T12:00:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
181 refStation7090 = new Vector3D(-1.2060, 2.5010, -1.5530);
182 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1992-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
183 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1995-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
184 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("1998-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
185 refStation7090 = new Vector3D(-1.2048, 2.5019, -1.5516);
186 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2002-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
187 refStation7090 = new Vector3D(-1.2058, 2.5026, -1.5522);
188 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2005-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
189 refStation7090 = new Vector3D(-1.2069, 2.5034, -1.5505);
190 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2008-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
191 refStation7090 = new Vector3D(-1.2043, 2.5040, -1.5509);
192 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2012-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
193 refStation7090 = new Vector3D(-1.2073, 2.5034, -1.5509);
194 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2015-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
195 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2021-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
196 Assert.assertEquals(0.0, refStation7090.distance(station7090.getEccentricities(new AbsoluteDate("2999-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
197 Assert.assertEquals(0.0, station7090.getValidFrom().durationFrom(new AbsoluteDate("1979-07-01T00:00:00.000", TimeScalesFactory.getUTC())), 1.0e-15);
198 Assert.assertTrue(station7090.getValidUntil() == AbsoluteDate.FUTURE_INFINITY);
199
200
201 final Station station7092 = loader.getStation("7092");
202 Vector3D refStation7092 = new Vector3D(-3.0380, 0.6290, 0.4980);
203 Assert.assertEquals(0.0, refStation7092.distance(station7092.getEccentricities(new AbsoluteDate("1980-07-05T07:50:00.000", TimeScalesFactory.getUTC()))), 1.0e-15);
204 Assert.assertEquals(0.0, station7092.getValidFrom().durationFrom(new AbsoluteDate("1979-08-15T00:00:00.000", TimeScalesFactory.getUTC())), 1.0e-15);
205 Assert.assertEquals(0.0, station7092.getValidUntil().durationFrom(new AbsoluteDate("1980-10-31T23:59:59.000", TimeScalesFactory.getUTC())), 1.0e-15);
206
207 }
208
209 @Test
210 public void testNoEccentricityEntryForEpoch() {
211
212
213 SinexLoader loader = new SinexLoader("ecc_xyz-small-multiple-ecc.snx");
214
215
216 final Station station7236 = loader.getStation("7236");
217
218
219 final AbsoluteDate exceptionEpoch = new AbsoluteDate("1987-01-11T00:00:00.000", TimeScalesFactory.getUTC());
220
221
222 try {
223 station7236.getEccentricities(exceptionEpoch);
224 Assert.fail("an exception should have been thrown");
225 } catch (OrekitException oe) {
226 Assert.assertEquals(OrekitMessages.NO_STATION_ECCENTRICITY_FOR_EPOCH, oe.getSpecifier());
227 }
228
229 }
230
231 @Test
232 public void testCorruptedFile() {
233 try {
234 new SinexLoader("cod20842-corrupted.snx");
235 Assert.fail("an exception should have been thrown");
236 } catch (OrekitException oe) {
237 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE, oe.getSpecifier());
238 Assert.assertEquals(52, ((Integer) oe.getParts()[0]).intValue());
239 }
240 }
241
242 private void checkStation(final Station station, final int startYear, final int startDay, final double secInStartDay,
243 final int endYear, final int endDay, final double secInEndDay,
244 final int epochYear, final int epochDay, final double secInEpoch,
245 final String siteCode, final String refDomes, final Vector3D refEcc,
246 final Vector3D refPos, final Vector3D refVel) {
247
248 final AbsoluteDate start = new AbsoluteDate(new DateComponents(startYear, startDay),
249 new TimeComponents(secInStartDay),
250 TimeScalesFactory.getUTC());
251 final AbsoluteDate end = new AbsoluteDate(new DateComponents(endYear, endDay),
252 new TimeComponents(secInEndDay),
253 TimeScalesFactory.getUTC());
254 final AbsoluteDate epoch = new AbsoluteDate(new DateComponents(epochYear, epochDay),
255 new TimeComponents(secInEpoch),
256 TimeScalesFactory.getUTC());
257
258 Assert.assertEquals(0., start.durationFrom(station.getValidFrom()), 1.0e-10);
259 Assert.assertEquals(0., end.durationFrom(station.getValidUntil()), 1.0e-10);
260 Assert.assertEquals(0., epoch.durationFrom(station.getEpoch()), 1.0e-10);
261 Assert.assertEquals(siteCode, station.getSiteCode());
262 Assert.assertEquals(refDomes, station.getDomes());
263 Assert.assertEquals(0., refEcc.distance(station.getEccentricities()), 1.0e-10);
264 Assert.assertEquals(0., refPos.distance(station.getPosition()), 1.0e-10);
265 Assert.assertEquals(0., refVel.distance(station.getVelocity()), 1.0e-10);
266
267 }
268
269 }