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.io.InputStream;
21 import java.net.URISyntaxException;
22 import java.nio.file.Paths;
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.errors.OrekitException;
30 import org.orekit.errors.OrekitMessages;
31 import org.orekit.files.ilrs.CRDConfiguration.TransponderConfiguration;
32 import org.orekit.files.ilrs.CRDFile.AnglesMeasurement;
33 import org.orekit.files.ilrs.CRDFile.CRDDataBlock;
34 import org.orekit.files.ilrs.CRDFile.MeteorologicalMeasurement;
35 import org.orekit.files.ilrs.CRDFile.RangeMeasurement;
36 import org.orekit.time.AbsoluteDate;
37 import org.orekit.time.TimeScalesFactory;
38
39 public class CRDParserTest {
40
41 @Test
42 public void testInvalidFormat() throws URISyntaxException, IOException {
43 try {
44 final String ex = "/ilrs/crd_invalid_format.v2C";
45 final CRDParser parser = new CRDParser();
46 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
47 parser.parse(fileName);
48 Assert.fail("an exception should have been thrown");
49 } catch (OrekitException oe) {
50 Assert.assertEquals(OrekitMessages.UNEXPECTED_FORMAT_FOR_ILRS_FILE,
51 oe.getSpecifier());
52 Assert.assertEquals("CRD", oe.getParts()[0]);
53 Assert.assertEquals("CPF", oe.getParts()[1]);
54 }
55 }
56
57 @Test
58 public void testMissingEOF() throws IOException, URISyntaxException {
59 try {
60 final String ex = "/ilrs/crd_unexpected_end_of_file.v2C";
61 final CRDParser parser = new CRDParser();
62 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
63 parser.parse(fileName);
64 Assert.fail("an exception should have been thrown");
65 } catch (OrekitException oe) {
66 Assert.assertEquals(OrekitMessages.CRD_UNEXPECTED_END_OF_FILE,
67 oe.getSpecifier());
68 Assert.assertEquals(23, ((Integer) oe.getParts()[0]).intValue());
69 }
70
71 }
72
73 @Test
74 public void testCorruptedData() throws IOException, URISyntaxException {
75 try {
76 final String ex = "/ilrs/crd_corrupted_data.v2C";
77 final CRDParser parser = new CRDParser();
78 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
79 parser.parse(fileName);
80 Assert.fail("an exception should have been thrown");
81 } catch (OrekitException oe) {
82 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
83 oe.getSpecifier());
84 Assert.assertEquals(19, ((Integer) oe.getParts()[0]).intValue());
85 }
86
87 }
88
89 @Test
90 public void testInvalidRangeType() throws IOException, URISyntaxException {
91 try {
92 final String ex = "/ilrs/crd_invalid_range_type.v2C";
93 final CRDParser parser = new CRDParser();
94 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
95 parser.parse(fileName);
96 Assert.fail("an exception should have been thrown");
97 } catch (OrekitException oe) {
98 Assert.assertEquals(OrekitMessages.INVALID_RANGE_INDICATOR_IN_CRD_FILE,
99 oe.getSpecifier());
100 Assert.assertEquals(9, ((Integer) oe.getParts()[0]).intValue());
101 }
102
103 }
104
105 @Test
106 public void testLageos2Version2() throws URISyntaxException, IOException {
107
108
109 final String ex = "/ilrs/lageos2_201802.npt.v2C";
110
111 final CRDParser parser = new CRDParser();
112 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
113 final CRDFile file = (CRDFile) parser.parse(fileName);
114
115
116 final CRDDataBlock first = file.getDataBlocks().get(0);
117 final CRDHeader firstHeader = first.getHeader();
118 final CRDConfiguration firstConf = first.getConfigurationRecords();
119 final AbsoluteDate firstStartDate = new AbsoluteDate("2018-02-01T15:14:58.000", TimeScalesFactory.getUTC());
120 final AbsoluteDate firstEndDate = new AbsoluteDate("2018-02-01T15:48:57.000", TimeScalesFactory.getUTC());
121
122
123 Assert.assertEquals(2, firstHeader.getVersion());
124 Assert.assertEquals(2018, firstHeader.getProductionEpoch().getYear());
125 Assert.assertEquals(2, firstHeader.getProductionEpoch().getMonth());
126 Assert.assertEquals(1, firstHeader.getProductionEpoch().getDay());
127 Assert.assertEquals(17, firstHeader.getProductionHour());
128 Assert.assertEquals("CHAL", firstHeader.getStationName());
129 Assert.assertEquals(9998, firstHeader.getSystemIdentifier());
130 Assert.assertEquals(19, firstHeader.getSystemNumber());
131 Assert.assertEquals(1, firstHeader.getSystemOccupancy());
132 Assert.assertEquals(4, firstHeader.getEpochIdentifier());
133 Assert.assertEquals("WPLTN", firstHeader.getStationNetword());
134 Assert.assertEquals("lageos2", firstHeader.getName());
135 Assert.assertEquals("9207002", firstHeader.getIlrsSatelliteId());
136 Assert.assertEquals("5986", firstHeader.getSic());
137 Assert.assertEquals("22195", firstHeader.getNoradId());
138 Assert.assertEquals(0, firstHeader.getSpacecraftEpochTimeScale());
139 Assert.assertEquals(1, firstHeader.getTargetClass());
140 Assert.assertEquals(1, firstHeader.getTargetLocation());
141 Assert.assertEquals(1, firstHeader.getDataType());
142 Assert.assertEquals(0.0, firstHeader.getStartEpoch().durationFrom(firstStartDate), 1.0e-5);
143 Assert.assertEquals(0.0, firstHeader.getEndEpoch().durationFrom(firstEndDate), 1.0e-5);
144 Assert.assertEquals(0, firstHeader.getDataReleaseFlag());
145 Assert.assertFalse(firstHeader.isTroposphericRefractionApplied());
146 Assert.assertFalse(firstHeader.isCenterOfMassCorrectionApplied());
147 Assert.assertFalse(firstHeader.isReceiveAmplitudeCorrectionApplied());
148 Assert.assertTrue(firstHeader.isStationSystemDelayApplied());
149 Assert.assertFalse(firstHeader.isTransponderDelayApplied());
150 Assert.assertEquals(2, firstHeader.getRangeType().getIndicator());
151 Assert.assertEquals(0, firstHeader.getQualityIndicator());
152 Assert.assertEquals(1, firstHeader.getPredictionType());
153 Assert.assertEquals(18, firstHeader.getYearOfCentury());
154 Assert.assertEquals("020115", firstHeader.getDateAndTime());
155 Assert.assertEquals("hts", firstHeader.getPredictionProvider());
156 Assert.assertEquals(3202, firstHeader.getSequenceNumber());
157
158
159 Assert.assertEquals(532.000 * 1.0e-9, firstConf.getSystemRecord().getWavelength(), 1.0e-15);
160 Assert.assertEquals("std", firstConf.getSystemRecord().getSystemId());
161 Assert.assertEquals("CL1", firstConf.getLaserRecord().getLaserId());
162 Assert.assertEquals("RG30-L", firstConf.getLaserRecord().getLaserType());
163 Assert.assertEquals(1064.00 * 1.0e-9, firstConf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
164 Assert.assertEquals(1000.00, firstConf.getLaserRecord().getNominalFireRate(), 1.0e-15);
165 Assert.assertEquals(1.50, firstConf.getLaserRecord().getPulseEnergy(), 1.0e-15);
166 Assert.assertEquals(10.0, firstConf.getLaserRecord().getPulseWidth(), 1.0e-15);
167 Assert.assertEquals(92.82, firstConf.getLaserRecord().getBeamDivergence(), 1.0e-15);
168 Assert.assertEquals(0, firstConf.getLaserRecord().getPulseInOutgoingSemiTrain());
169 Assert.assertEquals("CD1", firstConf.getDetectorRecord().getDetectorId());
170 Assert.assertEquals("CSPAD", firstConf.getDetectorRecord().getDetectorType());
171 Assert.assertEquals(532.000 * 1.0e-9, firstConf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
172 Assert.assertEquals(20.0, firstConf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
173 Assert.assertEquals(5.0, firstConf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
174 Assert.assertEquals(60000.0, firstConf.getDetectorRecord().getDarkCount(), 1.0e-15);
175 Assert.assertEquals("TTL", firstConf.getDetectorRecord().getOutputPulseType());
176 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
177 Assert.assertEquals(1.70 * 1.0e-9, firstConf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
178 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
179 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
180 Assert.assertEquals("none", firstConf.getDetectorRecord().getExternalSignalProcessing());
181 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getAmplifierGain(), 1.0e-15);
182 Assert.assertEquals(0.0, firstConf.getDetectorRecord().getAmplifierBandwidth(), 1.0e-15);
183 Assert.assertEquals("0", firstConf.getDetectorRecord().getAmplifierInUse());
184 Assert.assertEquals("CT1", firstConf.getTimingRecord().getLocalTimingId());
185 Assert.assertEquals("Meridian", firstConf.getTimingRecord().getTimeSource());
186 Assert.assertEquals("Meridian", firstConf.getTimingRecord().getFrequencySource());
187 Assert.assertEquals("ET-A032", firstConf.getTimingRecord().getTimer());
188 Assert.assertEquals("003309", firstConf.getTimingRecord().getTimerSerialNumber());
189 Assert.assertEquals(0.0, firstConf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
190 Assert.assertEquals("pgms", firstConf.getSoftwareRecord().getSoftwareId());
191 Assert.assertEquals("Sattrk", firstConf.getSoftwareRecord().getTrackingSoftwares()[1]);
192 Assert.assertEquals("2.00Cm", firstConf.getSoftwareRecord().getTrackingSoftwareVersions()[1]);
193 Assert.assertEquals("crd_cal", firstConf.getSoftwareRecord().getProcessingSoftwares()[1]);
194 Assert.assertEquals("1.7", firstConf.getSoftwareRecord().getProcessingSoftwareVersions()[1]);
195 Assert.assertEquals("mets", firstConf.getMeteorologicalRecord().getMeteorologicalId());
196 Assert.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getPressSensorManufacturer());
197 Assert.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getPressSensorModel());
198 Assert.assertEquals("123456", firstConf.getMeteorologicalRecord().getPressSensorSerialNumber());
199 Assert.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getTempSensorManufacturer());
200 Assert.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getTempSensorModel());
201 Assert.assertEquals("123456", firstConf.getMeteorologicalRecord().getTempSensorSerialNumber());
202 Assert.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getHumiSensorManufacturer());
203 Assert.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getHumiSensorModel());
204 Assert.assertEquals("123456", firstConf.getMeteorologicalRecord().getHumiSensorSerialNumber());
205 Assert.assertNull(firstConf.getTransponderRecord());
206
207
208 final MeteorologicalMeasurement meteoFirst = first.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
209 Assert.assertEquals(56940.0, meteoFirst.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
210 Assert.assertEquals(0.9989, meteoFirst.getPressure(), 1.0e-15);
211 Assert.assertEquals(259.10, meteoFirst.getTemperature(), 1.0e-15);
212 Assert.assertEquals(80.0, meteoFirst.getHumidity(), 1.0e-15);
213
214
215 final RangeMeasurement rangeFirst1 = first.getRangeData().get(0);
216 Assert.assertEquals(54927.620161400002, rangeFirst1.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
217 Assert.assertEquals(0.044106029140, rangeFirst1.getTimeOfFlight(), 1.0e-15);
218 Assert.assertEquals(2, rangeFirst1.getEpochEvent());
219 Assert.assertEquals(5.7, rangeFirst1.getSnr(), 1.0e-15);
220 final RangeMeasurement rangeFirst2 = first.getRangeData().get(5);
221 Assert.assertEquals(56899.718161400000, rangeFirst2.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
222 Assert.assertEquals(0.050148193335, rangeFirst2.getTimeOfFlight(), 1.0e-15);
223 Assert.assertEquals(2, rangeFirst2.getEpochEvent());
224 Assert.assertEquals(5.7, rangeFirst2.getSnr(), 1.0e-15);
225
226
227 Assert.assertEquals(0, first.getAnglesData().size());
228
229
230 final CRDDataBlock last = file.getDataBlocks().get(file.getDataBlocks().size() - 1);
231 final CRDHeader lastHeader = last.getHeader();
232 final CRDConfiguration lastConf = last.getConfigurationRecords();
233 final AbsoluteDate lastStartDate = new AbsoluteDate("2018-02-27T14:10:10.000", TimeScalesFactory.getUTC());
234 final AbsoluteDate lastEndDate = new AbsoluteDate("2018-02-27T14:39:06.000", TimeScalesFactory.getUTC());
235
236
237 Assert.assertEquals(2, lastHeader.getVersion());
238 Assert.assertEquals(2018, lastHeader.getProductionEpoch().getYear());
239 Assert.assertEquals(2, lastHeader.getProductionEpoch().getMonth());
240 Assert.assertEquals(27, lastHeader.getProductionEpoch().getDay());
241 Assert.assertEquals(14, lastHeader.getProductionHour());
242 Assert.assertEquals("CHAL", lastHeader.getStationName());
243 Assert.assertEquals(9998, lastHeader.getSystemIdentifier());
244 Assert.assertEquals(19, lastHeader.getSystemNumber());
245 Assert.assertEquals(1, lastHeader.getSystemOccupancy());
246 Assert.assertEquals(4, lastHeader.getEpochIdentifier());
247 Assert.assertEquals("WPLTN", lastHeader.getStationNetword());
248 Assert.assertEquals("lageos2", lastHeader.getName());
249 Assert.assertEquals("9207002", lastHeader.getIlrsSatelliteId());
250 Assert.assertEquals("5986", lastHeader.getSic());
251 Assert.assertEquals("22195", lastHeader.getNoradId());
252 Assert.assertEquals(0, lastHeader.getSpacecraftEpochTimeScale());
253 Assert.assertEquals(1, lastHeader.getTargetClass());
254 Assert.assertEquals(1, lastHeader.getTargetLocation());
255 Assert.assertEquals(1, lastHeader.getDataType());
256 Assert.assertEquals(0.0, lastHeader.getStartEpoch().durationFrom(lastStartDate), 1.0e-5);
257 Assert.assertEquals(0.0, lastHeader.getEndEpoch().durationFrom(lastEndDate), 1.0e-5);
258 Assert.assertEquals(0, lastHeader.getDataReleaseFlag());
259 Assert.assertFalse(lastHeader.isTroposphericRefractionApplied());
260 Assert.assertFalse(lastHeader.isCenterOfMassCorrectionApplied());
261 Assert.assertFalse(lastHeader.isReceiveAmplitudeCorrectionApplied());
262 Assert.assertTrue(lastHeader.isStationSystemDelayApplied());
263 Assert.assertFalse(lastHeader.isTransponderDelayApplied());
264 Assert.assertEquals(2, lastHeader.getRangeType().getIndicator());
265 Assert.assertEquals(0, lastHeader.getQualityIndicator());
266 Assert.assertEquals(1, lastHeader.getPredictionType());
267 Assert.assertEquals(18, lastHeader.getYearOfCentury());
268 Assert.assertEquals("022714", lastHeader.getDateAndTime());
269 Assert.assertEquals("hts", lastHeader.getPredictionProvider());
270 Assert.assertEquals(5802, lastHeader.getSequenceNumber());
271
272
273 Assert.assertEquals(532.000 * 1.0e-9, lastConf.getSystemRecord().getWavelength(), 1.0e-15);
274 Assert.assertEquals("std", lastConf.getSystemRecord().getSystemId());
275 Assert.assertEquals("CL1", lastConf.getLaserRecord().getLaserId());
276 Assert.assertEquals("RG30-L", lastConf.getLaserRecord().getLaserType());
277 Assert.assertEquals(1064.00 * 1.0e-9, lastConf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
278 Assert.assertEquals(1000.00, lastConf.getLaserRecord().getNominalFireRate(), 1.0e-15);
279 Assert.assertEquals(1.50, lastConf.getLaserRecord().getPulseEnergy(), 1.0e-15);
280 Assert.assertEquals(10.0, lastConf.getLaserRecord().getPulseWidth(), 1.0e-15);
281 Assert.assertEquals(92.82, lastConf.getLaserRecord().getBeamDivergence(), 1.0e-15);
282 Assert.assertEquals(0, lastConf.getLaserRecord().getPulseInOutgoingSemiTrain());
283 Assert.assertEquals("CD1", lastConf.getDetectorRecord().getDetectorId());
284 Assert.assertEquals("CSPAD", lastConf.getDetectorRecord().getDetectorType());
285 Assert.assertEquals(532.000 * 1.0e-9, lastConf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
286 Assert.assertEquals(20.0, lastConf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
287 Assert.assertEquals(5.0, lastConf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
288 Assert.assertEquals(60000.0, lastConf.getDetectorRecord().getDarkCount(), 1.0e-15);
289 Assert.assertEquals("TTL", lastConf.getDetectorRecord().getOutputPulseType());
290 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
291 Assert.assertEquals(1.70 * 1.0e-9, lastConf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
292 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
293 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
294 Assert.assertEquals("none", lastConf.getDetectorRecord().getExternalSignalProcessing());
295 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getAmplifierGain(), 1.0e-15);
296 Assert.assertEquals(0.0, lastConf.getDetectorRecord().getAmplifierBandwidth(), 1.0e-15);
297 Assert.assertEquals("0", lastConf.getDetectorRecord().getAmplifierInUse());
298 Assert.assertEquals("CT1", lastConf.getTimingRecord().getLocalTimingId());
299 Assert.assertEquals("Meridian", lastConf.getTimingRecord().getTimeSource());
300 Assert.assertEquals("Meridian", lastConf.getTimingRecord().getFrequencySource());
301 Assert.assertEquals("ET-A032", lastConf.getTimingRecord().getTimer());
302 Assert.assertEquals("003309", lastConf.getTimingRecord().getTimerSerialNumber());
303 Assert.assertEquals(0.0, lastConf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
304 Assert.assertEquals("pgms", lastConf.getSoftwareRecord().getSoftwareId());
305 Assert.assertEquals("Sattrk", lastConf.getSoftwareRecord().getTrackingSoftwares()[1]);
306 Assert.assertEquals("2.00Cm", lastConf.getSoftwareRecord().getTrackingSoftwareVersions()[1]);
307 Assert.assertEquals("crd_cal", lastConf.getSoftwareRecord().getProcessingSoftwares()[1]);
308 Assert.assertEquals("1.7", lastConf.getSoftwareRecord().getProcessingSoftwareVersions()[1]);
309 Assert.assertEquals("mets", lastConf.getMeteorologicalRecord().getMeteorologicalId());
310 Assert.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getPressSensorManufacturer());
311 Assert.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getPressSensorModel());
312 Assert.assertEquals("123456", lastConf.getMeteorologicalRecord().getPressSensorSerialNumber());
313 Assert.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getTempSensorManufacturer());
314 Assert.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getTempSensorModel());
315 Assert.assertEquals("123456", lastConf.getMeteorologicalRecord().getTempSensorSerialNumber());
316 Assert.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getHumiSensorManufacturer());
317 Assert.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getHumiSensorModel());
318 Assert.assertEquals("123456", lastConf.getMeteorologicalRecord().getHumiSensorSerialNumber());
319 Assert.assertNull(lastConf.getTransponderRecord());
320
321
322 final MeteorologicalMeasurement meteoLast = last.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
323 Assert.assertEquals(52749.0, meteoLast.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
324 Assert.assertEquals(0.9921, meteoLast.getPressure(), 1.0e-15);
325 Assert.assertEquals(260.80, meteoLast.getTemperature(), 1.0e-15);
326 Assert.assertEquals(67.0, meteoLast.getHumidity(), 1.0e-15);
327
328
329 final RangeMeasurement rangeLast1 = last.getRangeData().get(0);
330 Assert.assertEquals(51080.935001603524, rangeLast1.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
331 Assert.assertEquals(0.045673108965, rangeLast1.getTimeOfFlight(), 1.0e-15);
332 Assert.assertEquals(2, rangeLast1.getEpochEvent());
333 Assert.assertEquals(5.7, rangeLast1.getSnr(), 1.0e-15);
334 final RangeMeasurement rangeLast2 = last.getRangeData().get(13);
335 Assert.assertEquals(52618.095001597932, rangeLast2.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
336 Assert.assertEquals(0.042733272755, rangeLast2.getTimeOfFlight(), 1.0e-15);
337 Assert.assertEquals(2, rangeLast2.getEpochEvent());
338 Assert.assertEquals(5.7, rangeLast2.getSnr(), 1.0e-15);
339
340
341 Assert.assertEquals(0, first.getAnglesData().size());
342
343 }
344
345 @Test
346 public void testChampVersion1() throws URISyntaxException, IOException {
347
348
349 final String ex = "/ilrs/champ_201709-small.frd";
350
351 final CRDParser parser = new CRDParser();
352 final InputStream inEntry = getClass().getResourceAsStream(ex);
353 final CRDFile file = (CRDFile) parser.parse(inEntry);
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 CRDParser parser = new CRDParser();
455 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
456 final CRDFile file = (CRDFile) parser.parse(fileName);
457
458 final CRDDataBlock block = file.getDataBlocks().get(0);
459 Assert.assertEquals(0, file.getComments().size());
460 Assert.assertEquals(4, block.getRangeData().size());
461 Assert.assertEquals(4, block.getAnglesData().size());
462
463
464 final TransponderConfiguration transponder = block.getConfigurationRecords().getTransponderRecord();
465 Assert.assertEquals("id", transponder.getTransponderId());
466 Assert.assertEquals(0.0, transponder.getStationUTCOffset(), 1.0e-15);
467 Assert.assertEquals(0.0, transponder.getStationOscDrift(), 1.0e-15);
468 Assert.assertEquals(0.0, transponder.getTranspUTCOffset(), 1.0e-15);
469 Assert.assertEquals(0.0, transponder.getTranspOscDrift(), 1.0e-15);
470 Assert.assertEquals(0.0, transponder.getTranspClkRefTime(), 1.0e-15);
471 Assert.assertEquals(0, transponder.getSpacecraftClockAndDriftApplied());
472 Assert.assertEquals(0, transponder.getStationClockAndDriftApplied());
473 Assert.assertFalse(transponder.isSpacecraftTimeSimplified());
474 }
475
476 @Test
477 public void testMeteorologicalData() {
478
479
480 final CRDDataBlock block = new CRDDataBlock();
481
482
483 Assert.assertNull(block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH));
484
485
486 final AbsoluteDate date = new AbsoluteDate("2020-10-29T11:40:00.000", TimeScalesFactory.getUTC());
487 final MeteorologicalMeasurement meteoData1 = new MeteorologicalMeasurement(date, 1013.0, 273.0, 50.0);
488 block.addMeteoData(meteoData1);
489
490
491 MeteorologicalMeasurement data1 = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
492 Assert.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
493 Assert.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
494 Assert.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
495 data1 = block.getMeteoData().getMeteo(date);
496 Assert.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
497 Assert.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
498 Assert.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
499 data1 = block.getMeteoData().getMeteo(date.shiftedBy(60.0));
500 Assert.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
501 Assert.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
502 Assert.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
503
504
505 final MeteorologicalMeasurement meteoData2 = new MeteorologicalMeasurement(date.shiftedBy(60.0), 1015.0, 275.0, 70.0);
506 block.addMeteoData(meteoData2);
507
508
509 MeteorologicalMeasurement data2 = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
510 Assert.assertEquals(meteoData1.getPressure(), data2.getPressure(), 1.0e-15);
511 Assert.assertEquals(meteoData1.getTemperature(), data2.getTemperature(), 1.0e-15);
512 Assert.assertEquals(meteoData1.getHumidity(), data2.getHumidity(), 1.0e-15);
513 data2 = block.getMeteoData().getMeteo(date.shiftedBy(180.0));
514 Assert.assertEquals(meteoData2.getPressure(), data2.getPressure(), 1.0e-15);
515 Assert.assertEquals(meteoData2.getTemperature(), data2.getTemperature(), 1.0e-15);
516 Assert.assertEquals(meteoData2.getHumidity(), data2.getHumidity(), 1.0e-15);
517 data2 = block.getMeteoData().getMeteo(date.shiftedBy(30.0));
518 Assert.assertEquals(1014.0, data2.getPressure(), 1.0e-15);
519 Assert.assertEquals(274.0, data2.getTemperature(), 1.0e-15);
520 Assert.assertEquals(60.0, data2.getHumidity(), 1.0e-15);
521
522 }
523
524 @Before
525 public void setUp() {
526 Utils.setDataRoot("regular-data");
527 }
528
529 }