1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.ilrs;
18
19 import java.io.IOException;
20 import java.net.URISyntaxException;
21 import java.nio.file.Paths;
22 import java.util.List;
23
24 import org.hipparchus.util.FastMath;
25 import org.junit.Assert;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.orekit.Utils;
29 import org.orekit.data.DataContext;
30 import org.orekit.data.DataSource;
31 import org.orekit.errors.OrekitException;
32 import org.orekit.errors.OrekitMessages;
33 import org.orekit.files.ilrs.CRD.AnglesMeasurement;
34 import org.orekit.files.ilrs.CRD.CRDDataBlock;
35 import org.orekit.files.ilrs.CRD.Meteo;
36 import org.orekit.files.ilrs.CRD.MeteorologicalMeasurement;
37 import org.orekit.files.ilrs.CRD.RangeMeasurement;
38 import org.orekit.files.ilrs.CRDConfiguration.TransponderConfiguration;
39 import org.orekit.time.AbsoluteDate;
40 import org.orekit.time.DateComponents;
41 import org.orekit.time.TimeComponents;
42 import org.orekit.time.TimeScalesFactory;
43
44 public class CRDParserTest {
45
46 @Test
47 public void testInvalidFormat() throws URISyntaxException, IOException {
48 try {
49 final String ex = "/ilrs/crd_invalid_format.v2C";
50 final CRDParser parser = new CRDParser();
51 parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
52 Assert.fail("an exception should have been thrown");
53 } catch (OrekitException oe) {
54 Assert.assertEquals(OrekitMessages.UNEXPECTED_FORMAT_FOR_ILRS_FILE,
55 oe.getSpecifier());
56 Assert.assertEquals("CRD", oe.getParts()[0]);
57 Assert.assertEquals("CPF", oe.getParts()[1]);
58 }
59 }
60
61 @Test
62 public void testMissingEOF() throws IOException, URISyntaxException {
63 try {
64 final String ex = "/ilrs/crd_unexpected_end_of_file.v2C";
65 final CRDParser parser = new CRDParser();
66 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
67 parser.parse(new DataSource(fileName));
68 Assert.fail("an exception should have been thrown");
69 } catch (OrekitException oe) {
70 Assert.assertEquals(OrekitMessages.CRD_UNEXPECTED_END_OF_FILE,
71 oe.getSpecifier());
72 Assert.assertEquals(23, ((Integer) oe.getParts()[0]).intValue());
73 }
74
75 }
76
77 @Test
78 public void testCorruptedData() throws IOException, URISyntaxException {
79 try {
80 final String ex = "/ilrs/crd_corrupted_data.v2C";
81 final CRDParser parser = new CRDParser();
82 parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
83 Assert.fail("an exception should have been thrown");
84 } catch (OrekitException oe) {
85 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
86 oe.getSpecifier());
87 Assert.assertEquals(19, ((Integer) oe.getParts()[0]).intValue());
88 }
89
90 }
91
92 @Test
93 public void testInvalidRangeType() throws IOException, URISyntaxException {
94 try {
95 final String ex = "/ilrs/crd_invalid_range_type.v2C";
96 final CRDParser parser = new CRDParser();
97 parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
98 Assert.fail("an exception should have been thrown");
99 } catch (OrekitException oe) {
100 Assert.assertEquals(OrekitMessages.INVALID_RANGE_INDICATOR_IN_CRD_FILE,
101 oe.getSpecifier());
102 Assert.assertEquals(9, ((Integer) oe.getParts()[0]).intValue());
103 }
104
105 }
106
107 @Test
108 public void testLageos2Version2() throws URISyntaxException, IOException {
109
110
111 final String ex = "/ilrs/lageos2_201802.npt.v2C";
112
113 final CRDParser parser = new CRDParser();
114 final CRD file = parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
115
116
117 final CRDDataBlock first = file.getDataBlocks().get(0);
118 final CRDHeader firstHeader = first.getHeader();
119 final CRDConfiguration firstConf = first.getConfigurationRecords();
120 final AbsoluteDate firstStartDate = new AbsoluteDate("2018-02-01T15:14:58.000", TimeScalesFactory.getUTC());
121 final AbsoluteDate firstEndDate = new AbsoluteDate("2018-02-01T15:48:57.000", TimeScalesFactory.getUTC());
122
123
124 Assert.assertEquals(2, firstHeader.getVersion());
125 Assert.assertEquals(2018, firstHeader.getProductionEpoch().getYear());
126 Assert.assertEquals(2, firstHeader.getProductionEpoch().getMonth());
127 Assert.assertEquals(1, firstHeader.getProductionEpoch().getDay());
128 Assert.assertEquals(17, firstHeader.getProductionHour());
129 Assert.assertEquals("CHAL", firstHeader.getStationName());
130 Assert.assertEquals(9998, firstHeader.getSystemIdentifier());
131 Assert.assertEquals(19, firstHeader.getSystemNumber());
132 Assert.assertEquals(1, firstHeader.getSystemOccupancy());
133 Assert.assertEquals(4, firstHeader.getEpochIdentifier());
134 Assert.assertEquals("WPLTN", firstHeader.getStationNetword());
135 Assert.assertEquals("lageos2", firstHeader.getName());
136 Assert.assertEquals("9207002", firstHeader.getIlrsSatelliteId());
137 Assert.assertEquals("5986", firstHeader.getSic());
138 Assert.assertEquals("22195", firstHeader.getNoradId());
139 Assert.assertEquals(0, firstHeader.getSpacecraftEpochTimeScale());
140 Assert.assertEquals(1, firstHeader.getTargetClass());
141 Assert.assertEquals(1, firstHeader.getTargetLocation());
142 Assert.assertEquals(1, firstHeader.getDataType());
143 Assert.assertEquals(0.0, firstHeader.getStartEpoch().durationFrom(firstStartDate), 1.0e-5);
144 Assert.assertEquals(0.0, firstHeader.getEndEpoch().durationFrom(firstEndDate), 1.0e-5);
145 Assert.assertEquals(0, firstHeader.getDataReleaseFlag());
146 Assert.assertFalse(firstHeader.isTroposphericRefractionApplied());
147 Assert.assertFalse(firstHeader.isCenterOfMassCorrectionApplied());
148 Assert.assertFalse(firstHeader.isReceiveAmplitudeCorrectionApplied());
149 Assert.assertTrue(firstHeader.isStationSystemDelayApplied());
150 Assert.assertFalse(firstHeader.isTransponderDelayApplied());
151 Assert.assertEquals(2, firstHeader.getRangeType().getIndicator());
152 Assert.assertEquals(0, firstHeader.getQualityIndicator());
153 Assert.assertEquals(1, firstHeader.getPredictionType());
154 Assert.assertEquals(18, firstHeader.getYearOfCentury());
155 Assert.assertEquals("020115", firstHeader.getDateAndTime());
156 Assert.assertEquals("hts", firstHeader.getPredictionProvider());
157 Assert.assertEquals(3202, firstHeader.getSequenceNumber());
158
159
160 Assert.assertEquals(532.000 * 1.0e-9, firstConf.getSystemRecord().getWavelength(), 1.0e-15);
161 Assert.assertEquals("std", firstConf.getSystemRecord().getSystemId());
162 Assert.assertEquals("CL1", firstConf.getLaserRecord().getLaserId());
163 Assert.assertEquals("RG30-L", firstConf.getLaserRecord().getLaserType());
164 Assert.assertEquals(1064.00 * 1.0e-9, firstConf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
165 Assert.assertEquals(1000.00, firstConf.getLaserRecord().getNominalFireRate(), 1.0e-15);
166 Assert.assertEquals(1.50, firstConf.getLaserRecord().getPulseEnergy(), 1.0e-15);
167 Assert.assertEquals(10.0, firstConf.getLaserRecord().getPulseWidth(), 1.0e-15);
168 Assert.assertEquals(92.82, firstConf.getLaserRecord().getBeamDivergence(), 1.0e-15);
169 Assert.assertEquals(0, firstConf.getLaserRecord().getPulseInOutgoingSemiTrain());
170 Assert.assertEquals("CD1", firstConf.getDetectorRecord().getDetectorId());
171 Assert.assertEquals("CSPAD", firstConf.getDetectorRecord().getDetectorType());
172 Assert.assertEquals(532.000 * 1.0e-9, firstConf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
173 Assert.assertEquals(20.0, firstConf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
174 Assert.assertEquals(5.0, firstConf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
175 Assert.assertEquals(60000.0, firstConf.getDetectorRecord().getDarkCount(), 1.0e-15);
176 Assert.assertEquals("TTL", firstConf.getDetectorRecord().getOutputPulseType());
177 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
178 Assert.assertEquals(1.70 * 1.0e-9, firstConf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
179 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
180 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
181 Assert.assertEquals("none", firstConf.getDetectorRecord().getExternalSignalProcessing());
182 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getAmplifierGain(), 1.0e-15);
183 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getAmplifierBandwidth(), 1.0e-15);
184 Assert.assertEquals("0", firstConf.getDetectorRecord().getAmplifierInUse());
185 Assert.assertEquals("CT1", firstConf.getTimingRecord().getLocalTimingId());
186 Assert.assertEquals("Meridian", firstConf.getTimingRecord().getTimeSource());
187 Assert.assertEquals("Meridian", firstConf.getTimingRecord().getFrequencySource());
188 Assert.assertEquals("ET-A032", firstConf.getTimingRecord().getTimer());
189 Assert.assertEquals("003309", firstConf.getTimingRecord().getTimerSerialNumber());
190 Assert.assertEquals(0.0, firstConf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
191 Assert.assertEquals("pgms", firstConf.getSoftwareRecord().getSoftwareId());
192 Assert.assertEquals("Sattrk", firstConf.getSoftwareRecord().getTrackingSoftwares()[1]);
193 Assert.assertEquals("2.00Cm", firstConf.getSoftwareRecord().getTrackingSoftwareVersions()[1]);
194 Assert.assertEquals("crd_cal", firstConf.getSoftwareRecord().getProcessingSoftwares()[1]);
195 Assert.assertEquals("1.7", firstConf.getSoftwareRecord().getProcessingSoftwareVersions()[1]);
196 Assert.assertEquals("mets", firstConf.getMeteorologicalRecord().getMeteorologicalId());
197 Assert.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getPressSensorManufacturer());
198 Assert.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getPressSensorModel());
199 Assert.assertEquals("123456", firstConf.getMeteorologicalRecord().getPressSensorSerialNumber());
200 Assert.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getTempSensorManufacturer());
201 Assert.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getTempSensorModel());
202 Assert.assertEquals("123456", firstConf.getMeteorologicalRecord().getTempSensorSerialNumber());
203 Assert.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getHumiSensorManufacturer());
204 Assert.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getHumiSensorModel());
205 Assert.assertEquals("123456", firstConf.getMeteorologicalRecord().getHumiSensorSerialNumber());
206 Assert.assertNull(firstConf.getTransponderRecord());
207
208
209 final MeteorologicalMeasurement meteoFirst = first.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
210 Assert.assertEquals(56940.0, meteoFirst.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
211 Assert.assertEquals(0.9989, meteoFirst.getPressure(), 1.0e-15);
212 Assert.assertEquals(259.10, meteoFirst.getTemperature(), 1.0e-15);
213 Assert.assertEquals(80.0, meteoFirst.getHumidity(), 1.0e-15);
214
215
216 final RangeMeasurement rangeFirst1 = first.getRangeData().get(0);
217 Assert.assertEquals(54927.620161400002, rangeFirst1.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
218 Assert.assertEquals(0.044106029140, rangeFirst1.getTimeOfFlight(), 1.0e-15);
219 Assert.assertEquals(2, rangeFirst1.getEpochEvent());
220 Assert.assertEquals(5.7, rangeFirst1.getSnr(), 1.0e-15);
221 final RangeMeasurement rangeFirst2 = first.getRangeData().get(5);
222 Assert.assertEquals(56899.718161400000, rangeFirst2.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
223 Assert.assertEquals(0.050148193335, rangeFirst2.getTimeOfFlight(), 1.0e-15);
224 Assert.assertEquals(2, rangeFirst2.getEpochEvent());
225 Assert.assertEquals(5.7, rangeFirst2.getSnr(), 1.0e-15);
226
227
228 Assert.assertEquals(0, first.getAnglesData().size());
229
230
231 final CRDDataBlock last = file.getDataBlocks().get(file.getDataBlocks().size() - 1);
232 final CRDHeader lastHeader = last.getHeader();
233 final CRDConfiguration lastConf = last.getConfigurationRecords();
234 final AbsoluteDate lastStartDate = new AbsoluteDate("2018-02-27T14:10:10.000", TimeScalesFactory.getUTC());
235 final AbsoluteDate lastEndDate = new AbsoluteDate("2018-02-27T14:39:06.000", TimeScalesFactory.getUTC());
236
237
238 Assert.assertEquals(2, lastHeader.getVersion());
239 Assert.assertEquals(2018, lastHeader.getProductionEpoch().getYear());
240 Assert.assertEquals(2, lastHeader.getProductionEpoch().getMonth());
241 Assert.assertEquals(27, lastHeader.getProductionEpoch().getDay());
242 Assert.assertEquals(14, lastHeader.getProductionHour());
243 Assert.assertEquals("CHAL", lastHeader.getStationName());
244 Assert.assertEquals(9998, lastHeader.getSystemIdentifier());
245 Assert.assertEquals(19, lastHeader.getSystemNumber());
246 Assert.assertEquals(1, lastHeader.getSystemOccupancy());
247 Assert.assertEquals(4, lastHeader.getEpochIdentifier());
248 Assert.assertEquals("WPLTN", lastHeader.getStationNetword());
249 Assert.assertEquals("lageos2", lastHeader.getName());
250 Assert.assertEquals("9207002", lastHeader.getIlrsSatelliteId());
251 Assert.assertEquals("5986", lastHeader.getSic());
252 Assert.assertEquals("22195", lastHeader.getNoradId());
253 Assert.assertEquals(0, lastHeader.getSpacecraftEpochTimeScale());
254 Assert.assertEquals(1, lastHeader.getTargetClass());
255 Assert.assertEquals(1, lastHeader.getTargetLocation());
256 Assert.assertEquals(1, lastHeader.getDataType());
257 Assert.assertEquals(0.0, lastHeader.getStartEpoch().durationFrom(lastStartDate), 1.0e-5);
258 Assert.assertEquals(0.0, lastHeader.getEndEpoch().durationFrom(lastEndDate), 1.0e-5);
259 Assert.assertEquals(0, lastHeader.getDataReleaseFlag());
260 Assert.assertFalse(lastHeader.isTroposphericRefractionApplied());
261 Assert.assertFalse(lastHeader.isCenterOfMassCorrectionApplied());
262 Assert.assertFalse(lastHeader.isReceiveAmplitudeCorrectionApplied());
263 Assert.assertTrue(lastHeader.isStationSystemDelayApplied());
264 Assert.assertFalse(lastHeader.isTransponderDelayApplied());
265 Assert.assertEquals(2, lastHeader.getRangeType().getIndicator());
266 Assert.assertEquals(0, lastHeader.getQualityIndicator());
267 Assert.assertEquals(1, lastHeader.getPredictionType());
268 Assert.assertEquals(18, lastHeader.getYearOfCentury());
269 Assert.assertEquals("022714", lastHeader.getDateAndTime());
270 Assert.assertEquals("hts", lastHeader.getPredictionProvider());
271 Assert.assertEquals(5802, lastHeader.getSequenceNumber());
272
273
274 Assert.assertEquals(532.000 * 1.0e-9, lastConf.getSystemRecord().getWavelength(), 1.0e-15);
275 Assert.assertEquals("std", lastConf.getSystemRecord().getSystemId());
276 Assert.assertEquals("CL1", lastConf.getLaserRecord().getLaserId());
277 Assert.assertEquals("RG30-L", lastConf.getLaserRecord().getLaserType());
278 Assert.assertEquals(1064.00 * 1.0e-9, lastConf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
279 Assert.assertEquals(1000.00, lastConf.getLaserRecord().getNominalFireRate(), 1.0e-15);
280 Assert.assertEquals(1.50, lastConf.getLaserRecord().getPulseEnergy(), 1.0e-15);
281 Assert.assertEquals(10.0, lastConf.getLaserRecord().getPulseWidth(), 1.0e-15);
282 Assert.assertEquals(92.82, lastConf.getLaserRecord().getBeamDivergence(), 1.0e-15);
283 Assert.assertEquals(0, lastConf.getLaserRecord().getPulseInOutgoingSemiTrain());
284 Assert.assertEquals("CD1", lastConf.getDetectorRecord().getDetectorId());
285 Assert.assertEquals("CSPAD", lastConf.getDetectorRecord().getDetectorType());
286 Assert.assertEquals(532.000 * 1.0e-9, lastConf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
287 Assert.assertEquals(20.0, lastConf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
288 Assert.assertEquals(5.0, lastConf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
289 Assert.assertEquals(60000.0, lastConf.getDetectorRecord().getDarkCount(), 1.0e-15);
290 Assert.assertEquals("TTL", lastConf.getDetectorRecord().getOutputPulseType());
291 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
292 Assert.assertEquals(1.70 * 1.0e-9, lastConf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
293 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
294 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
295 Assert.assertEquals("none", lastConf.getDetectorRecord().getExternalSignalProcessing());
296 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getAmplifierGain(), 1.0e-15);
297 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getAmplifierBandwidth(), 1.0e-15);
298 Assert.assertEquals("0", lastConf.getDetectorRecord().getAmplifierInUse());
299 Assert.assertEquals("CT1", lastConf.getTimingRecord().getLocalTimingId());
300 Assert.assertEquals("Meridian", lastConf.getTimingRecord().getTimeSource());
301 Assert.assertEquals("Meridian", lastConf.getTimingRecord().getFrequencySource());
302 Assert.assertEquals("ET-A032", lastConf.getTimingRecord().getTimer());
303 Assert.assertEquals("003309", lastConf.getTimingRecord().getTimerSerialNumber());
304 Assert.assertEquals(0.0, lastConf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
305 Assert.assertEquals("pgms", lastConf.getSoftwareRecord().getSoftwareId());
306 Assert.assertEquals("Sattrk", lastConf.getSoftwareRecord().getTrackingSoftwares()[1]);
307 Assert.assertEquals("2.00Cm", lastConf.getSoftwareRecord().getTrackingSoftwareVersions()[1]);
308 Assert.assertEquals("crd_cal", lastConf.getSoftwareRecord().getProcessingSoftwares()[1]);
309 Assert.assertEquals("1.7", lastConf.getSoftwareRecord().getProcessingSoftwareVersions()[1]);
310 Assert.assertEquals("mets", lastConf.getMeteorologicalRecord().getMeteorologicalId());
311 Assert.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getPressSensorManufacturer());
312 Assert.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getPressSensorModel());
313 Assert.assertEquals("123456", lastConf.getMeteorologicalRecord().getPressSensorSerialNumber());
314 Assert.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getTempSensorManufacturer());
315 Assert.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getTempSensorModel());
316 Assert.assertEquals("123456", lastConf.getMeteorologicalRecord().getTempSensorSerialNumber());
317 Assert.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getHumiSensorManufacturer());
318 Assert.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getHumiSensorModel());
319 Assert.assertEquals("123456", lastConf.getMeteorologicalRecord().getHumiSensorSerialNumber());
320 Assert.assertNull(lastConf.getTransponderRecord());
321
322
323 final MeteorologicalMeasurement meteoLast = last.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
324 Assert.assertEquals(52749.0, meteoLast.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
325 Assert.assertEquals(0.9921, meteoLast.getPressure(), 1.0e-15);
326 Assert.assertEquals(260.80, meteoLast.getTemperature(), 1.0e-15);
327 Assert.assertEquals(67.0, meteoLast.getHumidity(), 1.0e-15);
328
329
330 final RangeMeasurement rangeLast1 = last.getRangeData().get(0);
331 Assert.assertEquals(51080.935001603524, rangeLast1.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
332 Assert.assertEquals(0.045673108965, rangeLast1.getTimeOfFlight(), 1.0e-15);
333 Assert.assertEquals(2, rangeLast1.getEpochEvent());
334 Assert.assertEquals(5.7, rangeLast1.getSnr(), 1.0e-15);
335 final RangeMeasurement rangeLast2 = last.getRangeData().get(13);
336 Assert.assertEquals(52618.095001597932, rangeLast2.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
337 Assert.assertEquals(0.042733272755, rangeLast2.getTimeOfFlight(), 1.0e-15);
338 Assert.assertEquals(2, rangeLast2.getEpochEvent());
339 Assert.assertEquals(5.7, rangeLast2.getSnr(), 1.0e-15);
340
341
342 Assert.assertEquals(0, first.getAnglesData().size());
343
344 }
345
346 @Test
347 public void testChampVersion1() throws URISyntaxException, IOException {
348
349
350 final String ex = "/ilrs/champ_201709-small.frd";
351
352 final CRDParser parser = new CRDParser();
353 final CRD file = parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
354
355
356 final CRDDataBlock block = file.getDataBlocks().get(0);
357 final CRDHeader header = block.getHeader();
358 final CRDConfiguration conf = block.getConfigurationRecords();
359 final AbsoluteDate startDate = new AbsoluteDate("2017-09-26T03:55:41.000", TimeScalesFactory.getUTC());
360 final AbsoluteDate endDate = new AbsoluteDate("2017-09-26T04:04:48.000", TimeScalesFactory.getUTC());
361
362
363 Assert.assertEquals(1, header.getVersion());
364 Assert.assertEquals(2017, header.getProductionEpoch().getYear());
365 Assert.assertEquals(9, header.getProductionEpoch().getMonth());
366 Assert.assertEquals(26, header.getProductionEpoch().getDay());
367 Assert.assertEquals(4, header.getProductionHour());
368 Assert.assertEquals("STL3", header.getStationName());
369 Assert.assertEquals(7825, header.getSystemIdentifier());
370 Assert.assertEquals(90, header.getSystemNumber());
371 Assert.assertEquals(1, header.getSystemOccupancy());
372 Assert.assertEquals(4, header.getEpochIdentifier());
373 Assert.assertEquals("champ", header.getName());
374 Assert.assertEquals("0003902", header.getIlrsSatelliteId());
375 Assert.assertEquals("8002", header.getSic());
376 Assert.assertEquals("026405", header.getNoradId());
377 Assert.assertEquals(0, header.getSpacecraftEpochTimeScale());
378 Assert.assertEquals(1, header.getTargetClass());
379 Assert.assertEquals(0, header.getDataType());
380 Assert.assertEquals(0.0, header.getStartEpoch().durationFrom(startDate), 1.0e-5);
381 Assert.assertEquals(0.0, header.getEndEpoch().durationFrom(endDate), 1.0e-5);
382 Assert.assertEquals(0, header.getDataReleaseFlag());
383 Assert.assertFalse(header.isTroposphericRefractionApplied());
384 Assert.assertFalse(header.isCenterOfMassCorrectionApplied());
385 Assert.assertFalse(header.isReceiveAmplitudeCorrectionApplied());
386 Assert.assertTrue(header.isStationSystemDelayApplied());
387 Assert.assertFalse(header.isTransponderDelayApplied());
388 Assert.assertEquals(2, header.getRangeType().getIndicator());
389 Assert.assertEquals(0, header.getQualityIndicator());
390
391
392 Assert.assertEquals(532.100 * 1.0e-9, conf.getSystemRecord().getWavelength(), 1.0e-15);
393 Assert.assertEquals("IDAA", conf.getSystemRecord().getSystemId());
394 Assert.assertEquals("IDAB", conf.getLaserRecord().getLaserId());
395 Assert.assertEquals("Nd-YAG", conf.getLaserRecord().getLaserType());
396 Assert.assertEquals(532.10 * 1.0e-9, conf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
397 Assert.assertEquals(0.0, conf.getLaserRecord().getNominalFireRate(), 1.0e-15);
398 Assert.assertEquals(21.0, conf.getLaserRecord().getPulseEnergy(), 1.0e-15);
399 Assert.assertEquals(12.0, conf.getLaserRecord().getPulseWidth(), 1.0e-15);
400 Assert.assertEquals(0.0, conf.getLaserRecord().getBeamDivergence(), 1.0e-15);
401 Assert.assertEquals(1, conf.getLaserRecord().getPulseInOutgoingSemiTrain());
402 Assert.assertEquals("IDAJ", conf.getDetectorRecord().getDetectorId());
403 Assert.assertEquals("CSPAD", conf.getDetectorRecord().getDetectorType());
404 Assert.assertEquals(532.000 * 1.0e-9, conf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
405 Assert.assertEquals(20.0, conf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
406 Assert.assertEquals(11.0, conf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
407 Assert.assertEquals(100000.0, conf.getDetectorRecord().getDarkCount(), 1.0e-15);
408 Assert.assertEquals("ECL", conf.getDetectorRecord().getOutputPulseType());
409 Assert.assertEquals(12.0, conf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
410 Assert.assertEquals(2.00 * 1.0e-9, conf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
411 Assert.assertEquals(90.0, conf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
412 Assert.assertEquals(12.0, conf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
413 Assert.assertEquals("Manual", conf.getDetectorRecord().getExternalSignalProcessing());
414 Assert.assertEquals("IDAV", conf.getTimingRecord().getLocalTimingId());
415 Assert.assertEquals("TrueTime_XLi", conf.getTimingRecord().getTimeSource());
416 Assert.assertEquals("TrueTime_OCXO", conf.getTimingRecord().getFrequencySource());
417 Assert.assertEquals("MRCS", conf.getTimingRecord().getTimer());
418 Assert.assertEquals("NA", conf.getTimingRecord().getTimerSerialNumber());
419 Assert.assertEquals(0.2322 * 1.0e-6, conf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
420
421
422 final MeteorologicalMeasurement meteoFirst = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
423 Assert.assertEquals(14353.388283000000, meteoFirst.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
424 Assert.assertEquals(0.92374, meteoFirst.getPressure(), 1.0e-15);
425 Assert.assertEquals(289.42, meteoFirst.getTemperature(), 1.0e-15);
426 Assert.assertEquals(28.1, meteoFirst.getHumidity(), 1.0e-15);
427
428
429 Assert.assertEquals(4, block.getRangeData().size());
430 final RangeMeasurement range = block.getRangeData().get(0);
431 Assert.assertEquals(14487.343206247217, range.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
432 Assert.assertEquals(0.003603959600, range.getTimeOfFlight(), 1.0e-15);
433 Assert.assertEquals(2, range.getEpochEvent());
434
435
436 Assert.assertEquals(4, block.getAnglesData().size());
437 final AnglesMeasurement angles = block.getAnglesData().get(0);
438 Assert.assertEquals(14343.574333000000, angles.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
439 Assert.assertEquals(FastMath.toRadians(215.000000), angles.getAzimuth(), 1.0e-15);
440 Assert.assertEquals(FastMath.toRadians(15.000010), angles.getElevation(), 1.0e-15);
441 Assert.assertEquals(0, angles.getDirectionFlag());
442 Assert.assertEquals(2, angles.getOriginIndicator());
443 Assert.assertFalse(angles.isRefractionCorrected());
444 Assert.assertEquals(Double.NaN, angles.getAzimuthRate(), 1.0e-15);
445 Assert.assertEquals(Double.NaN, angles.getElevationRate(), 1.0e-15);
446
447 }
448
449 @Test
450 public void testAllFields() throws URISyntaxException, IOException {
451
452 final String ex = "/ilrs/crd_all_fields.frd";
453
454 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
455
456 final CRDDataBlock block = file.getDataBlocks().get(0);
457 Assert.assertEquals(0, file.getComments().size());
458 Assert.assertEquals(4, block.getRangeData().size());
459 Assert.assertEquals(4, block.getAnglesData().size());
460
461
462 final TransponderConfiguration transponder = block.getConfigurationRecords().getTransponderRecord();
463 Assert.assertEquals("id", transponder.getTransponderId());
464 Assert.assertEquals(0.0, transponder.getStationUTCOffset(), 1.0e-15);
465 Assert.assertEquals(0.0, transponder.getStationOscDrift(), 1.0e-15);
466 Assert.assertEquals(0.0, transponder.getTranspUTCOffset(), 1.0e-15);
467 Assert.assertEquals(0.0, transponder.getTranspOscDrift(), 1.0e-15);
468 Assert.assertEquals(0.0, transponder.getTranspClkRefTime(), 1.0e-15);
469 Assert.assertEquals(0, transponder.getSpacecraftClockAndDriftApplied());
470 Assert.assertEquals(0, transponder.getStationClockAndDriftApplied());
471 Assert.assertFalse(transponder.isSpacecraftTimeSimplified());
472 }
473
474 @Test
475 public void testMeteorologicalData() {
476
477
478 final CRDDataBlock block = new CRDDataBlock();
479
480
481 Assert.assertNull(block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH));
482
483
484 final AbsoluteDate date = new AbsoluteDate("2020-10-29T11:40:00.000", TimeScalesFactory.getUTC());
485 final MeteorologicalMeasurement meteoData1 = new MeteorologicalMeasurement(date, 1013.0, 273.0, 50.0);
486 block.addMeteoData(meteoData1);
487
488
489 MeteorologicalMeasurement data1 = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
490 Assert.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
491 Assert.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
492 Assert.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
493 data1 = block.getMeteoData().getMeteo(date);
494 Assert.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
495 Assert.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
496 Assert.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
497 data1 = block.getMeteoData().getMeteo(date.shiftedBy(60.0));
498 Assert.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
499 Assert.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
500 Assert.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
501
502
503 final MeteorologicalMeasurement meteoData2 = new MeteorologicalMeasurement(date.shiftedBy(60.0), 1015.0, 275.0, 70.0);
504 block.addMeteoData(meteoData2);
505
506
507 MeteorologicalMeasurement data2 = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
508 Assert.assertEquals(meteoData1.getPressure(), data2.getPressure(), 1.0e-15);
509 Assert.assertEquals(meteoData1.getTemperature(), data2.getTemperature(), 1.0e-15);
510 Assert.assertEquals(meteoData1.getHumidity(), data2.getHumidity(), 1.0e-15);
511 data2 = block.getMeteoData().getMeteo(date.shiftedBy(180.0));
512 Assert.assertEquals(meteoData2.getPressure(), data2.getPressure(), 1.0e-15);
513 Assert.assertEquals(meteoData2.getTemperature(), data2.getTemperature(), 1.0e-15);
514 Assert.assertEquals(meteoData2.getHumidity(), data2.getHumidity(), 1.0e-15);
515 data2 = block.getMeteoData().getMeteo(date.shiftedBy(30.0));
516 Assert.assertEquals(1014.0, data2.getPressure(), 1.0e-15);
517 Assert.assertEquals(274.0, data2.getTemperature(), 1.0e-15);
518 Assert.assertEquals(60.0, data2.getHumidity(), 1.0e-15);
519
520 }
521
522 @Test
523 public void testIssue801() throws URISyntaxException, IOException {
524
525 final String ex = "/ilrs/crd_all_fields.frd";
526
527 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
528
529 final CRDDataBlock block = file.getDataBlocks().get(0);
530 Assert.assertEquals(0, file.getComments().size());
531 Assert.assertEquals(4, block.getRangeData().size());
532 Assert.assertEquals(4, block.getAnglesData().size());
533
534 final Meteo meteo = block.getMeteoData();
535 final List<MeteorologicalMeasurement> data = meteo.getData();
536 Assert.assertEquals(1, data.size());
537
538 final MeteorologicalMeasurement measurement = data.get(0);
539 Assert.assertEquals(0.92374, measurement.getPressure(), 0.00001);
540 Assert.assertEquals(289.42, measurement.getTemperature(), 0.01);
541 Assert.assertEquals(28.1, measurement.getHumidity(), 0.01);
542
543 }
544
545 @Test
546 public void testIssue847() throws IOException {
547
548
549 final String ex = "/ilrs/lageos1-test.npt";
550 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
551
552
553 Assert.assertEquals(6, file.getComments().size());
554 Assert.assertEquals("New CFD in the STOP channel", file.getComments().get(0));
555 Assert.assertEquals("No CFD in the START channel", file.getComments().get(1));
556 Assert.assertEquals("New experimental detector (transistor) in the START channel**", file.getComments().get(2));
557 Assert.assertEquals("New CFD in the STOP channel", file.getComments().get(3));
558 Assert.assertEquals("No CFD in the START channel", file.getComments().get(4));
559 Assert.assertEquals("New experimental detector (transistor) in the START channel", file.getComments().get(5));
560 }
561
562 @Test
563 public void testIssue886() throws IOException {
564 final String ex = "/ilrs/glonass125_trunc.frd";
565 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
566
567 final CRDDataBlock block = file.getDataBlocks().get(0);
568 final List<RangeMeasurement> rangeBlock = block.getRangeData();
569 final RangeMeasurement rangeFirst = rangeBlock.get(0);
570 final RangeMeasurement rangeLast = rangeBlock.get(rangeBlock.size() - 1);
571
572 DateComponents startEpoch = new DateComponents(2019, 04, 21);
573 DateComponents lastEpoch = new DateComponents(2019, 04, 22);
574 double firstSecOfDay = 77387.019063653420;
575 double lastSecOfDay = 694.119563650340;
576 final AbsoluteDate firstDate = new AbsoluteDate(startEpoch, new TimeComponents(firstSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
577 final AbsoluteDate lastDate = new AbsoluteDate(lastEpoch, new TimeComponents(lastSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
578
579
580 Assert.assertEquals(firstDate, rangeFirst.getDate());
581 Assert.assertEquals(lastDate, rangeLast.getDate());
582 }
583
584
585 @Before
586 public void setUp() {
587 Utils.setDataRoot("regular-data");
588 }
589
590 }