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 org.hipparchus.util.FastMath;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.api.BeforeEach;
22 import org.junit.jupiter.api.Test;
23 import org.orekit.Utils;
24 import org.orekit.data.DataContext;
25 import org.orekit.data.DataSource;
26 import org.orekit.errors.OrekitException;
27 import org.orekit.errors.OrekitMessages;
28 import org.orekit.files.ilrs.CRD.AnglesMeasurement;
29 import org.orekit.files.ilrs.CRD.CRDDataBlock;
30 import org.orekit.files.ilrs.CRD.Calibration;
31 import org.orekit.files.ilrs.CRD.CalibrationDetail;
32 import org.orekit.files.ilrs.CRD.FrRangeMeasurement;
33 import org.orekit.files.ilrs.CRD.Meteo;
34 import org.orekit.files.ilrs.CRD.MeteorologicalMeasurement;
35 import org.orekit.files.ilrs.CRD.NptRangeMeasurement;
36 import org.orekit.files.ilrs.CRD.RangeMeasurement;
37 import org.orekit.files.ilrs.CRD.RangeSupplement;
38 import org.orekit.files.ilrs.CRD.SessionStatistics;
39 import org.orekit.files.ilrs.CRDConfiguration.CalibrationTargetConfiguration;
40 import org.orekit.files.ilrs.CRDConfiguration.DetectorConfiguration;
41 import org.orekit.files.ilrs.CRDConfiguration.LaserConfiguration;
42 import org.orekit.files.ilrs.CRDConfiguration.MeteorologicalConfiguration;
43 import org.orekit.files.ilrs.CRDConfiguration.SoftwareConfiguration;
44 import org.orekit.files.ilrs.CRDConfiguration.SystemConfiguration;
45 import org.orekit.files.ilrs.CRDConfiguration.TimingSystemConfiguration;
46 import org.orekit.files.ilrs.CRDConfiguration.TransponderConfiguration;
47 import org.orekit.files.ilrs.CRDHeader.DataType;
48 import org.orekit.time.AbsoluteDate;
49 import org.orekit.time.DateComponents;
50 import org.orekit.time.TimeComponents;
51 import org.orekit.time.TimeScale;
52 import org.orekit.time.TimeScalesFactory;
53
54 import java.io.IOException;
55 import java.net.URISyntaxException;
56 import java.nio.file.Paths;
57 import java.util.Arrays;
58 import java.util.List;
59 import java.util.Set;
60
61 public class CRDParserTest {
62
63 @Test
64 public void testInvalidFormat() throws URISyntaxException, IOException {
65 try {
66 final String ex = "/ilrs/crd_invalid_format.v2C";
67 final CRDParser parser = new CRDParser();
68 parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
69 Assertions.fail("an exception should have been thrown");
70 } catch (OrekitException oe) {
71 Assertions.assertEquals(OrekitMessages.UNEXPECTED_FORMAT_FOR_ILRS_FILE,
72 oe.getSpecifier());
73 Assertions.assertEquals("CRD", oe.getParts()[0]);
74 Assertions.assertEquals("CPF", oe.getParts()[1]);
75 }
76 }
77
78 @Test
79 public void testMissingEOF() throws IOException, URISyntaxException {
80 try {
81 final String ex = "/ilrs/crd_unexpected_end_of_file.v2C";
82 final CRDParser parser = new CRDParser();
83 final String fileName = Paths.get(getClass().getResource(ex).toURI()).toString();
84 parser.parse(new DataSource(fileName));
85 Assertions.fail("an exception should have been thrown");
86 } catch (OrekitException oe) {
87 Assertions.assertEquals(OrekitMessages.CRD_UNEXPECTED_END_OF_FILE,
88 oe.getSpecifier());
89 Assertions.assertEquals(23, ((Integer) oe.getParts()[0]).intValue());
90 }
91
92 }
93
94 @Test
95 public void testCorruptedData() throws IOException, URISyntaxException {
96 try {
97 final String ex = "/ilrs/crd_corrupted_data.v2C";
98 final CRDParser parser = new CRDParser();
99 parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
100 Assertions.fail("an exception should have been thrown");
101 } catch (OrekitException oe) {
102 Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
103 oe.getSpecifier());
104 Assertions.assertEquals(19, ((Integer) oe.getParts()[0]).intValue());
105 }
106
107 }
108
109 @Test
110 public void testInvalidRangeType() throws IOException, URISyntaxException {
111 try {
112 final String ex = "/ilrs/crd_invalid_range_type.v2C";
113 final CRDParser parser = new CRDParser();
114 parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
115 Assertions.fail("an exception should have been thrown");
116 } catch (OrekitException oe) {
117 Assertions.assertEquals(OrekitMessages.INVALID_RANGE_INDICATOR_IN_CRD_FILE,
118 oe.getSpecifier());
119 Assertions.assertEquals(9, ((Integer) oe.getParts()[0]).intValue());
120 }
121
122 }
123
124 @Test
125 public void testLageos2Version2() throws URISyntaxException, IOException {
126
127
128 final String ex = "/ilrs/lageos2_201802.npt.v2C";
129
130 final CRDParser parser = new CRDParser();
131 final CRD file = parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
132
133
134 final CRDDataBlock first = file.getDataBlocks().get(0);
135 final CRDHeader firstHeader = first.getHeader();
136 final CRDConfiguration firstConf = first.getConfigurationRecords();
137 final AbsoluteDate firstStartDate = new AbsoluteDate("2018-02-01T15:14:58.000", TimeScalesFactory.getUTC());
138 final AbsoluteDate firstEndDate = new AbsoluteDate("2018-02-01T15:48:57.000", TimeScalesFactory.getUTC());
139
140
141 Assertions.assertEquals(2, firstHeader.getVersion());
142 Assertions.assertEquals(2018, firstHeader.getProductionEpoch().getYear());
143 Assertions.assertEquals(2, firstHeader.getProductionEpoch().getMonth());
144 Assertions.assertEquals(1, firstHeader.getProductionEpoch().getDay());
145 Assertions.assertEquals(17, firstHeader.getProductionHour());
146 Assertions.assertEquals("CHAL", firstHeader.getStationName());
147 Assertions.assertEquals(9998, firstHeader.getSystemIdentifier());
148 Assertions.assertEquals(19, firstHeader.getSystemNumber());
149 Assertions.assertEquals(1, firstHeader.getSystemOccupancy());
150 Assertions.assertEquals(4, firstHeader.getEpochIdentifier());
151 Assertions.assertEquals("WPLTN", firstHeader.getStationNetword());
152 Assertions.assertEquals("lageos2", firstHeader.getName());
153 Assertions.assertEquals("9207002", firstHeader.getIlrsSatelliteId());
154 Assertions.assertEquals("5986", firstHeader.getSic());
155 Assertions.assertEquals("22195", firstHeader.getNoradId());
156 Assertions.assertEquals(0, firstHeader.getSpacecraftEpochTimeScale());
157 Assertions.assertEquals(1, firstHeader.getTargetClass());
158 Assertions.assertEquals(1, firstHeader.getTargetLocation());
159 Assertions.assertEquals(1, firstHeader.getDataType());
160 Assertions.assertEquals(0.0, firstHeader.getStartEpoch().durationFrom(firstStartDate), 1.0e-5);
161 Assertions.assertEquals(0.0, firstHeader.getEndEpoch().durationFrom(firstEndDate), 1.0e-5);
162 Assertions.assertEquals(0, firstHeader.getDataReleaseFlag());
163 Assertions.assertFalse(firstHeader.isTroposphericRefractionApplied());
164 Assertions.assertFalse(firstHeader.isCenterOfMassCorrectionApplied());
165 Assertions.assertFalse(firstHeader.isReceiveAmplitudeCorrectionApplied());
166 Assertions.assertTrue(firstHeader.isStationSystemDelayApplied());
167 Assertions.assertFalse(firstHeader.isTransponderDelayApplied());
168 Assertions.assertEquals(2, firstHeader.getRangeType().getIndicator());
169 Assertions.assertEquals(0, firstHeader.getQualityIndicator());
170 Assertions.assertEquals(1, firstHeader.getPredictionType());
171 Assertions.assertEquals(18, firstHeader.getYearOfCentury());
172 Assertions.assertEquals("020115", firstHeader.getDateAndTime());
173 Assertions.assertEquals("hts", firstHeader.getPredictionProvider());
174 Assertions.assertEquals(3202, firstHeader.getSequenceNumber());
175
176
177 Assertions.assertEquals(532.000 * 1.0e-9, firstConf.getSystemRecord().getWavelength(), 1.0e-15);
178 Assertions.assertEquals("std", firstConf.getSystemRecord().getSystemId());
179 Assertions.assertEquals("CL1", firstConf.getLaserRecord().getLaserId());
180 Assertions.assertEquals("RG30-L", firstConf.getLaserRecord().getLaserType());
181 Assertions.assertEquals(1064.00 * 1.0e-9, firstConf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
182 Assertions.assertEquals(1000.00, firstConf.getLaserRecord().getNominalFireRate(), 1.0e-15);
183 Assertions.assertEquals(1.50, firstConf.getLaserRecord().getPulseEnergy(), 1.0e-15);
184 Assertions.assertEquals(10.0, firstConf.getLaserRecord().getPulseWidth(), 1.0e-15);
185 Assertions.assertEquals(92.82, firstConf.getLaserRecord().getBeamDivergence(), 1.0e-15);
186 Assertions.assertEquals(0, firstConf.getLaserRecord().getPulseInOutgoingSemiTrain());
187 Assertions.assertEquals("CD1", firstConf.getDetectorRecord().getDetectorId());
188 Assertions.assertEquals("CSPAD", firstConf.getDetectorRecord().getDetectorType());
189 Assertions.assertEquals(532.000 * 1.0e-9, firstConf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
190 Assertions.assertEquals(20.0, firstConf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
191 Assertions.assertEquals(5.0, firstConf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
192 Assertions.assertEquals(60000.0, firstConf.getDetectorRecord().getDarkCount(), 1.0e-15);
193 Assertions.assertEquals("TTL", firstConf.getDetectorRecord().getOutputPulseType());
194 Assertions.assertEquals(0.0, firstConf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
195 Assertions.assertEquals(1.70 * 1.0e-9, firstConf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
196 Assertions.assertEquals(0.0, firstConf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
197 Assertions.assertEquals(0.0, firstConf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
198 Assertions.assertEquals("none", firstConf.getDetectorRecord().getExternalSignalProcessing());
199 Assertions.assertEquals(0.0, firstConf.getDetectorRecord().getAmplifierGain(), 1.0e-15);
200 Assertions.assertEquals(0.0, firstConf.getDetectorRecord().getAmplifierBandwidth(), 1.0e-15);
201 Assertions.assertEquals("0", firstConf.getDetectorRecord().getAmplifierInUse());
202 Assertions.assertEquals("CT1", firstConf.getTimingRecord().getLocalTimingId());
203 Assertions.assertEquals("Meridian", firstConf.getTimingRecord().getTimeSource());
204 Assertions.assertEquals("Meridian", firstConf.getTimingRecord().getFrequencySource());
205 Assertions.assertEquals("ET-A032", firstConf.getTimingRecord().getTimer());
206 Assertions.assertEquals("003309", firstConf.getTimingRecord().getTimerSerialNumber());
207 Assertions.assertEquals(0.0, firstConf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
208 Assertions.assertEquals("pgms", firstConf.getSoftwareRecord().getSoftwareId());
209 Assertions.assertEquals("Sattrk", firstConf.getSoftwareRecord().getTrackingSoftwares()[1]);
210 Assertions.assertEquals("2.00Cm", firstConf.getSoftwareRecord().getTrackingSoftwareVersions()[1]);
211 Assertions.assertEquals("crd_cal", firstConf.getSoftwareRecord().getProcessingSoftwares()[1]);
212 Assertions.assertEquals("1.7", firstConf.getSoftwareRecord().getProcessingSoftwareVersions()[1]);
213 Assertions.assertEquals("mets", firstConf.getMeteorologicalRecord().getMeteorologicalId());
214 Assertions.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getPressSensorManufacturer());
215 Assertions.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getPressSensorModel());
216 Assertions.assertEquals("123456", firstConf.getMeteorologicalRecord().getPressSensorSerialNumber());
217 Assertions.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getTempSensorManufacturer());
218 Assertions.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getTempSensorModel());
219 Assertions.assertEquals("123456", firstConf.getMeteorologicalRecord().getTempSensorSerialNumber());
220 Assertions.assertEquals("Paroscientific", firstConf.getMeteorologicalRecord().getHumiSensorManufacturer());
221 Assertions.assertEquals("Met4a", firstConf.getMeteorologicalRecord().getHumiSensorModel());
222 Assertions.assertEquals("123456", firstConf.getMeteorologicalRecord().getHumiSensorSerialNumber());
223 Assertions.assertNull(firstConf.getTransponderRecord());
224
225
226 final MeteorologicalMeasurement meteoFirst = first.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
227 Assertions.assertEquals(56940.0, meteoFirst.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
228 Assertions.assertEquals(0.9989, meteoFirst.getPressure(), 1.0e-15);
229 Assertions.assertEquals(259.10, meteoFirst.getTemperature(), 1.0e-15);
230 Assertions.assertEquals(80.0, meteoFirst.getHumidity(), 1.0e-15);
231
232
233 final RangeMeasurement rangeFirst1 = first.getRangeData().get(0);
234 Assertions.assertEquals(54927.620161400002, rangeFirst1.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
235 Assertions.assertEquals(0.044106029140, rangeFirst1.getTimeOfFlight(), 1.0e-15);
236 Assertions.assertEquals(2, rangeFirst1.getEpochEvent());
237 Assertions.assertEquals(5.7, rangeFirst1.getSnr(), 1.0e-15);
238 final RangeMeasurement rangeFirst2 = first.getRangeData().get(5);
239 Assertions.assertEquals(56899.718161400000, rangeFirst2.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
240 Assertions.assertEquals(0.050148193335, rangeFirst2.getTimeOfFlight(), 1.0e-15);
241 Assertions.assertEquals(2, rangeFirst2.getEpochEvent());
242 Assertions.assertEquals(5.7, rangeFirst2.getSnr(), 1.0e-15);
243
244
245 Assertions.assertEquals(0, first.getAnglesData().size());
246
247
248 final CRDDataBlock last = file.getDataBlocks().get(file.getDataBlocks().size() - 1);
249 final CRDHeader lastHeader = last.getHeader();
250 final CRDConfiguration lastConf = last.getConfigurationRecords();
251 final AbsoluteDate lastStartDate = new AbsoluteDate("2018-02-27T14:10:10.000", TimeScalesFactory.getUTC());
252 final AbsoluteDate lastEndDate = new AbsoluteDate("2018-02-27T14:39:06.000", TimeScalesFactory.getUTC());
253
254
255 Assertions.assertEquals(2, lastHeader.getVersion());
256 Assertions.assertEquals(2018, lastHeader.getProductionEpoch().getYear());
257 Assertions.assertEquals(2, lastHeader.getProductionEpoch().getMonth());
258 Assertions.assertEquals(27, lastHeader.getProductionEpoch().getDay());
259 Assertions.assertEquals(14, lastHeader.getProductionHour());
260 Assertions.assertEquals("CHAL", lastHeader.getStationName());
261 Assertions.assertEquals(9998, lastHeader.getSystemIdentifier());
262 Assertions.assertEquals(19, lastHeader.getSystemNumber());
263 Assertions.assertEquals(1, lastHeader.getSystemOccupancy());
264 Assertions.assertEquals(4, lastHeader.getEpochIdentifier());
265 Assertions.assertEquals("WPLTN", lastHeader.getStationNetword());
266 Assertions.assertEquals("lageos2", lastHeader.getName());
267 Assertions.assertEquals("9207002", lastHeader.getIlrsSatelliteId());
268 Assertions.assertEquals("5986", lastHeader.getSic());
269 Assertions.assertEquals("22195", lastHeader.getNoradId());
270 Assertions.assertEquals(0, lastHeader.getSpacecraftEpochTimeScale());
271 Assertions.assertEquals(1, lastHeader.getTargetClass());
272 Assertions.assertEquals(1, lastHeader.getTargetLocation());
273 Assertions.assertEquals(1, lastHeader.getDataType());
274 Assertions.assertEquals(0.0, lastHeader.getStartEpoch().durationFrom(lastStartDate), 1.0e-5);
275 Assertions.assertEquals(0.0, lastHeader.getEndEpoch().durationFrom(lastEndDate), 1.0e-5);
276 Assertions.assertEquals(0, lastHeader.getDataReleaseFlag());
277 Assertions.assertFalse(lastHeader.isTroposphericRefractionApplied());
278 Assertions.assertFalse(lastHeader.isCenterOfMassCorrectionApplied());
279 Assertions.assertFalse(lastHeader.isReceiveAmplitudeCorrectionApplied());
280 Assertions.assertTrue(lastHeader.isStationSystemDelayApplied());
281 Assertions.assertFalse(lastHeader.isTransponderDelayApplied());
282 Assertions.assertEquals(2, lastHeader.getRangeType().getIndicator());
283 Assertions.assertEquals(0, lastHeader.getQualityIndicator());
284 Assertions.assertEquals(1, lastHeader.getPredictionType());
285 Assertions.assertEquals(18, lastHeader.getYearOfCentury());
286 Assertions.assertEquals("022714", lastHeader.getDateAndTime());
287 Assertions.assertEquals("hts", lastHeader.getPredictionProvider());
288 Assertions.assertEquals(5802, lastHeader.getSequenceNumber());
289
290
291 Assertions.assertEquals(532.000 * 1.0e-9, lastConf.getSystemRecord().getWavelength(), 1.0e-15);
292 Assertions.assertEquals("std", lastConf.getSystemRecord().getSystemId());
293 Assertions.assertEquals("CL1", lastConf.getLaserRecord().getLaserId());
294 Assertions.assertEquals("RG30-L", lastConf.getLaserRecord().getLaserType());
295 Assertions.assertEquals(1064.00 * 1.0e-9, lastConf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
296 Assertions.assertEquals(1000.00, lastConf.getLaserRecord().getNominalFireRate(), 1.0e-15);
297 Assertions.assertEquals(1.50, lastConf.getLaserRecord().getPulseEnergy(), 1.0e-15);
298 Assertions.assertEquals(10.0, lastConf.getLaserRecord().getPulseWidth(), 1.0e-15);
299 Assertions.assertEquals(92.82, lastConf.getLaserRecord().getBeamDivergence(), 1.0e-15);
300 Assertions.assertEquals(0, lastConf.getLaserRecord().getPulseInOutgoingSemiTrain());
301 Assertions.assertEquals("CD1", lastConf.getDetectorRecord().getDetectorId());
302 Assertions.assertEquals("CSPAD", lastConf.getDetectorRecord().getDetectorType());
303 Assertions.assertEquals(532.000 * 1.0e-9, lastConf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
304 Assertions.assertEquals(20.0, lastConf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
305 Assertions.assertEquals(5.0, lastConf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
306 Assertions.assertEquals(60000.0, lastConf.getDetectorRecord().getDarkCount(), 1.0e-15);
307 Assertions.assertEquals("TTL", lastConf.getDetectorRecord().getOutputPulseType());
308 Assertions.assertEquals(0.0, lastConf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
309 Assertions.assertEquals(1.70 * 1.0e-9, lastConf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
310 Assertions.assertEquals(0.0, lastConf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
311 Assertions.assertEquals(0.0, lastConf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
312 Assertions.assertEquals("none", lastConf.getDetectorRecord().getExternalSignalProcessing());
313 Assertions.assertEquals(0.0, lastConf.getDetectorRecord().getAmplifierGain(), 1.0e-15);
314 Assertions.assertEquals(0.0, lastConf.getDetectorRecord().getAmplifierBandwidth(), 1.0e-15);
315 Assertions.assertEquals("0", lastConf.getDetectorRecord().getAmplifierInUse());
316 Assertions.assertEquals("CT1", lastConf.getTimingRecord().getLocalTimingId());
317 Assertions.assertEquals("Meridian", lastConf.getTimingRecord().getTimeSource());
318 Assertions.assertEquals("Meridian", lastConf.getTimingRecord().getFrequencySource());
319 Assertions.assertEquals("ET-A032", lastConf.getTimingRecord().getTimer());
320 Assertions.assertEquals("003309", lastConf.getTimingRecord().getTimerSerialNumber());
321 Assertions.assertEquals(0.0, lastConf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
322 Assertions.assertEquals("pgms", lastConf.getSoftwareRecord().getSoftwareId());
323 Assertions.assertEquals("Sattrk", lastConf.getSoftwareRecord().getTrackingSoftwares()[1]);
324 Assertions.assertEquals("2.00Cm", lastConf.getSoftwareRecord().getTrackingSoftwareVersions()[1]);
325 Assertions.assertEquals("crd_cal", lastConf.getSoftwareRecord().getProcessingSoftwares()[1]);
326 Assertions.assertEquals("1.7", lastConf.getSoftwareRecord().getProcessingSoftwareVersions()[1]);
327 Assertions.assertEquals("mets", lastConf.getMeteorologicalRecord().getMeteorologicalId());
328 Assertions.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getPressSensorManufacturer());
329 Assertions.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getPressSensorModel());
330 Assertions.assertEquals("123456", lastConf.getMeteorologicalRecord().getPressSensorSerialNumber());
331 Assertions.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getTempSensorManufacturer());
332 Assertions.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getTempSensorModel());
333 Assertions.assertEquals("123456", lastConf.getMeteorologicalRecord().getTempSensorSerialNumber());
334 Assertions.assertEquals("Paroscientific", lastConf.getMeteorologicalRecord().getHumiSensorManufacturer());
335 Assertions.assertEquals("Met4a", lastConf.getMeteorologicalRecord().getHumiSensorModel());
336 Assertions.assertEquals("123456", lastConf.getMeteorologicalRecord().getHumiSensorSerialNumber());
337 Assertions.assertNull(lastConf.getTransponderRecord());
338
339
340 final MeteorologicalMeasurement meteoLast = last.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
341 Assertions.assertEquals(52749.0, meteoLast.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
342 Assertions.assertEquals(0.9921, meteoLast.getPressure(), 1.0e-15);
343 Assertions.assertEquals(260.80, meteoLast.getTemperature(), 1.0e-15);
344 Assertions.assertEquals(67.0, meteoLast.getHumidity(), 1.0e-15);
345
346
347 final RangeMeasurement rangeLast1 = last.getRangeData().get(0);
348 Assertions.assertEquals(51080.935001603524, rangeLast1.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
349 Assertions.assertEquals(0.045673108965, rangeLast1.getTimeOfFlight(), 1.0e-15);
350 Assertions.assertEquals(2, rangeLast1.getEpochEvent());
351 Assertions.assertEquals(5.7, rangeLast1.getSnr(), 1.0e-15);
352 final RangeMeasurement rangeLast2 = last.getRangeData().get(13);
353 Assertions.assertEquals(52618.095001597932, rangeLast2.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
354 Assertions.assertEquals(0.042733272755, rangeLast2.getTimeOfFlight(), 1.0e-15);
355 Assertions.assertEquals(2, rangeLast2.getEpochEvent());
356 Assertions.assertEquals(5.7, rangeLast2.getSnr(), 1.0e-15);
357
358
359 Assertions.assertEquals(0, first.getAnglesData().size());
360
361 }
362
363 @Test
364 public void testChampVersion1() throws URISyntaxException, IOException {
365
366
367 final String ex = "/ilrs/champ_201709-small.frd";
368
369 final CRDParser parser = new CRDParser();
370 final CRD file = parser.parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
371
372
373 final CRDDataBlock block = file.getDataBlocks().get(0);
374 final CRDHeader header = block.getHeader();
375 final CRDConfiguration conf = block.getConfigurationRecords();
376 final AbsoluteDate startDate = new AbsoluteDate("2017-09-26T03:55:41.000", TimeScalesFactory.getUTC());
377 final AbsoluteDate endDate = new AbsoluteDate("2017-09-26T04:04:48.000", TimeScalesFactory.getUTC());
378
379
380 Assertions.assertEquals(1, header.getVersion());
381 Assertions.assertEquals(2017, header.getProductionEpoch().getYear());
382 Assertions.assertEquals(9, header.getProductionEpoch().getMonth());
383 Assertions.assertEquals(26, header.getProductionEpoch().getDay());
384 Assertions.assertEquals(4, header.getProductionHour());
385 Assertions.assertEquals("STL3", header.getStationName());
386 Assertions.assertEquals(7825, header.getSystemIdentifier());
387 Assertions.assertEquals(90, header.getSystemNumber());
388 Assertions.assertEquals(1, header.getSystemOccupancy());
389 Assertions.assertEquals(4, header.getEpochIdentifier());
390 Assertions.assertEquals("champ", header.getName());
391 Assertions.assertEquals("0003902", header.getIlrsSatelliteId());
392 Assertions.assertEquals("8002", header.getSic());
393 Assertions.assertEquals("026405", header.getNoradId());
394 Assertions.assertEquals(0, header.getSpacecraftEpochTimeScale());
395 Assertions.assertEquals(1, header.getTargetClass());
396 Assertions.assertEquals(0, header.getDataType());
397 Assertions.assertEquals(0.0, header.getStartEpoch().durationFrom(startDate), 1.0e-5);
398 Assertions.assertEquals(0.0, header.getEndEpoch().durationFrom(endDate), 1.0e-5);
399 Assertions.assertEquals(0, header.getDataReleaseFlag());
400 Assertions.assertFalse(header.isTroposphericRefractionApplied());
401 Assertions.assertFalse(header.isCenterOfMassCorrectionApplied());
402 Assertions.assertFalse(header.isReceiveAmplitudeCorrectionApplied());
403 Assertions.assertTrue(header.isStationSystemDelayApplied());
404 Assertions.assertFalse(header.isTransponderDelayApplied());
405 Assertions.assertEquals(2, header.getRangeType().getIndicator());
406 Assertions.assertEquals(0, header.getQualityIndicator());
407
408
409 Assertions.assertEquals(532.100 * 1.0e-9, conf.getSystemRecord().getWavelength(), 1.0e-15);
410 Assertions.assertEquals("IDAA", conf.getSystemRecord().getSystemId());
411 Assertions.assertEquals("IDAB", conf.getLaserRecord().getLaserId());
412 Assertions.assertEquals("Nd-YAG", conf.getLaserRecord().getLaserType());
413 Assertions.assertEquals(532.10 * 1.0e-9, conf.getLaserRecord().getPrimaryWavelength(), 1.0e-15);
414 Assertions.assertEquals(0.0, conf.getLaserRecord().getNominalFireRate(), 1.0e-15);
415 Assertions.assertEquals(21.0, conf.getLaserRecord().getPulseEnergy(), 1.0e-15);
416 Assertions.assertEquals(12.0, conf.getLaserRecord().getPulseWidth(), 1.0e-15);
417 Assertions.assertEquals(0.0, conf.getLaserRecord().getBeamDivergence(), 1.0e-15);
418 Assertions.assertEquals(1, conf.getLaserRecord().getPulseInOutgoingSemiTrain());
419 Assertions.assertEquals("IDAJ", conf.getDetectorRecord().getDetectorId());
420 Assertions.assertEquals("CSPAD", conf.getDetectorRecord().getDetectorType());
421 Assertions.assertEquals(532.000 * 1.0e-9, conf.getDetectorRecord().getApplicableWavelength(), 1.0e-15);
422 Assertions.assertEquals(20.0, conf.getDetectorRecord().getQuantumEfficiency(), 1.0e-15);
423 Assertions.assertEquals(11.0, conf.getDetectorRecord().getAppliedVoltage(), 1.0e-15);
424 Assertions.assertEquals(100000.0, conf.getDetectorRecord().getDarkCount(), 1.0e-15);
425 Assertions.assertEquals("ECL", conf.getDetectorRecord().getOutputPulseType());
426 Assertions.assertEquals(12.0, conf.getDetectorRecord().getOutputPulseWidth(), 1.0e-15);
427 Assertions.assertEquals(2.00 * 1.0e-9, conf.getDetectorRecord().getSpectralFilter(), 1.0e-15);
428 Assertions.assertEquals(90.0, conf.getDetectorRecord().getTransmissionOfSpectralFilter(), 1.0e-15);
429 Assertions.assertEquals(12.0, conf.getDetectorRecord().getSpatialFilter(), 1.0e-15);
430 Assertions.assertEquals("Manual", conf.getDetectorRecord().getExternalSignalProcessing());
431 Assertions.assertEquals("IDAV", conf.getTimingRecord().getLocalTimingId());
432 Assertions.assertEquals("TrueTime_XLi", conf.getTimingRecord().getTimeSource());
433 Assertions.assertEquals("TrueTime_OCXO", conf.getTimingRecord().getFrequencySource());
434 Assertions.assertEquals("MRCS", conf.getTimingRecord().getTimer());
435 Assertions.assertEquals("NA", conf.getTimingRecord().getTimerSerialNumber());
436 Assertions.assertEquals(0.2322 * 1.0e-6, conf.getTimingRecord().getEpochDelayCorrection(), 1.0e-15);
437
438
439 final MeteorologicalMeasurement meteoFirst = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
440 Assertions.assertEquals(14353.388283000000, meteoFirst.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
441 Assertions.assertEquals(0.92374, meteoFirst.getPressure(), 1.0e-15);
442 Assertions.assertEquals(289.42, meteoFirst.getTemperature(), 1.0e-15);
443 Assertions.assertEquals(28.1, meteoFirst.getHumidity(), 1.0e-15);
444
445
446 Assertions.assertEquals(4, block.getRangeData().size());
447 final RangeMeasurement range = block.getRangeData().get(0);
448 Assertions.assertEquals(14487.343206247217, range.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
449 Assertions.assertEquals(0.003603959600, range.getTimeOfFlight(), 1.0e-15);
450 Assertions.assertEquals(2, range.getEpochEvent());
451
452
453 Assertions.assertEquals(4, block.getAnglesData().size());
454 final AnglesMeasurement angles = block.getAnglesData().get(0);
455 Assertions.assertEquals(14343.574333000000, angles.getDate().getComponents(parser.getTimeScale()).getTime().getSecondsInLocalDay(), 1.0e-15);
456 Assertions.assertEquals(FastMath.toRadians(215.000000), angles.getAzimuth(), 1.0e-15);
457 Assertions.assertEquals(FastMath.toRadians(15.000010), angles.getElevation(), 1.0e-15);
458 Assertions.assertEquals(0, angles.getDirectionFlag());
459 Assertions.assertEquals(2, angles.getOriginIndicator());
460 Assertions.assertFalse(angles.isRefractionCorrected());
461 Assertions.assertEquals(Double.NaN, angles.getAzimuthRate(), 1.0e-15);
462 Assertions.assertEquals(Double.NaN, angles.getElevationRate(), 1.0e-15);
463
464 }
465
466 @Test
467 public void testAllFields() throws URISyntaxException, IOException {
468
469 final String ex = "/ilrs/crd_all_fields.frd";
470
471 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
472
473 final CRDDataBlock block = file.getDataBlocks().get(0);
474 Assertions.assertEquals(0, file.getComments().size());
475 Assertions.assertEquals(4, block.getRangeData().size());
476 Assertions.assertEquals(4, block.getAnglesData().size());
477
478
479 final TransponderConfiguration transponder = block.getConfigurationRecords().getTransponderRecord();
480 Assertions.assertEquals("id", transponder.getTransponderId());
481 Assertions.assertEquals(0.0, transponder.getStationUTCOffset(), 1.0e-15);
482 Assertions.assertEquals(0.0, transponder.getStationOscDrift(), 1.0e-15);
483 Assertions.assertEquals(0.0, transponder.getTranspUTCOffset(), 1.0e-15);
484 Assertions.assertEquals(0.0, transponder.getTranspOscDrift(), 1.0e-15);
485 Assertions.assertEquals(0.0, transponder.getTranspClkRefTime(), 1.0e-15);
486 Assertions.assertEquals(0, transponder.getSpacecraftClockAndDriftApplied());
487 Assertions.assertEquals(0, transponder.getStationClockAndDriftApplied());
488 Assertions.assertFalse(transponder.isSpacecraftTimeSimplified());
489 }
490
491 @Test
492 public void testMeteorologicalData() {
493
494
495 final CRDDataBlock block = new CRDDataBlock();
496
497
498 Assertions.assertNull(block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH));
499
500
501 final AbsoluteDate date = new AbsoluteDate("2020-10-29T11:40:00.000", TimeScalesFactory.getUTC());
502 final MeteorologicalMeasurement meteoData1 = new MeteorologicalMeasurement(date, 1013.0, 273.0, 50.0);
503 block.addMeteoData(meteoData1);
504
505
506 MeteorologicalMeasurement data1 = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
507 Assertions.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
508 Assertions.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
509 Assertions.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
510 data1 = block.getMeteoData().getMeteo(date);
511 Assertions.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
512 Assertions.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
513 Assertions.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
514 data1 = block.getMeteoData().getMeteo(date.shiftedBy(60.0));
515 Assertions.assertEquals(meteoData1.getPressure(), data1.getPressure(), 1.0e-15);
516 Assertions.assertEquals(meteoData1.getTemperature(), data1.getTemperature(), 1.0e-15);
517 Assertions.assertEquals(meteoData1.getHumidity(), data1.getHumidity(), 1.0e-15);
518
519
520 final MeteorologicalMeasurement meteoData2 = new MeteorologicalMeasurement(date.shiftedBy(60.0), 1015.0, 275.0, 70.0);
521 block.addMeteoData(meteoData2);
522
523
524 MeteorologicalMeasurement data2 = block.getMeteoData().getMeteo(AbsoluteDate.J2000_EPOCH);
525 Assertions.assertEquals(meteoData1.getPressure(), data2.getPressure(), 1.0e-15);
526 Assertions.assertEquals(meteoData1.getTemperature(), data2.getTemperature(), 1.0e-15);
527 Assertions.assertEquals(meteoData1.getHumidity(), data2.getHumidity(), 1.0e-15);
528 data2 = block.getMeteoData().getMeteo(date.shiftedBy(180.0));
529 Assertions.assertEquals(meteoData2.getPressure(), data2.getPressure(), 1.0e-15);
530 Assertions.assertEquals(meteoData2.getTemperature(), data2.getTemperature(), 1.0e-15);
531 Assertions.assertEquals(meteoData2.getHumidity(), data2.getHumidity(), 1.0e-15);
532 data2 = block.getMeteoData().getMeteo(date.shiftedBy(30.0));
533 Assertions.assertEquals(1014.0, data2.getPressure(), 1.0e-15);
534 Assertions.assertEquals(274.0, data2.getTemperature(), 1.0e-15);
535 Assertions.assertEquals(60.0, data2.getHumidity(), 1.0e-15);
536
537 }
538
539 @Test
540 public void testIssue801() throws URISyntaxException, IOException {
541
542 final String ex = "/ilrs/crd_all_fields.frd";
543
544 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
545
546 final CRDDataBlock block = file.getDataBlocks().get(0);
547 Assertions.assertEquals(0, file.getComments().size());
548 Assertions.assertEquals(4, block.getRangeData().size());
549 Assertions.assertEquals(4, block.getAnglesData().size());
550
551 final Meteo meteo = block.getMeteoData();
552 final List<MeteorologicalMeasurement> data = meteo.getData();
553 Assertions.assertEquals(1, data.size());
554
555 final MeteorologicalMeasurement measurement = data.get(0);
556 Assertions.assertEquals(0.92374, measurement.getPressure(), 0.00001);
557 Assertions.assertEquals(289.42, measurement.getTemperature(), 0.01);
558 Assertions.assertEquals(28.1, measurement.getHumidity(), 0.01);
559
560 }
561
562 @Test
563 public void testIssue847() throws IOException {
564
565
566 final String ex = "/ilrs/lageos1-test.npt";
567 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
568
569
570 Assertions.assertEquals(6, file.getComments().size());
571 Assertions.assertEquals("New CFD in the STOP channel", file.getComments().get(0));
572 Assertions.assertEquals("No CFD in the START channel", file.getComments().get(1));
573 Assertions.assertEquals("New experimental detector (transistor) in the START channel**", file.getComments().get(2));
574 Assertions.assertEquals("New CFD in the STOP channel", file.getComments().get(3));
575 Assertions.assertEquals("No CFD in the START channel", file.getComments().get(4));
576 Assertions.assertEquals("New experimental detector (transistor) in the START channel", file.getComments().get(5));
577 }
578
579 @Test
580 public void testIssue886() throws IOException {
581 final String ex = "/ilrs/glonass125_trunc.frd";
582 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
583
584 final CRDDataBlock block = file.getDataBlocks().get(0);
585 final List<RangeMeasurement> rangeBlock = block.getRangeData();
586 final RangeMeasurement rangeFirst = rangeBlock.get(0);
587 final RangeMeasurement rangeLast = rangeBlock.get(rangeBlock.size() - 1);
588
589 DateComponents startEpoch = new DateComponents(2019, 04, 19);
590 DateComponents lastEpoch = new DateComponents(2019, 04, 20);
591 double firstSecOfDay = 77387.019063653420;
592 double lastSecOfDay = 694.119563650340;
593 final AbsoluteDate firstDate = new AbsoluteDate(startEpoch, new TimeComponents(firstSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
594 final AbsoluteDate lastDate = new AbsoluteDate(lastEpoch, new TimeComponents(lastSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
595
596
597 Assertions.assertEquals(firstDate, rangeFirst.getDate());
598 Assertions.assertEquals(lastDate, rangeLast.getDate());
599 }
600
601 @Test
602 public void testIssue886Bis() throws IOException {
603 final String ex = "/ilrs/Rollover.frd";
604 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
605
606
607
608
609 CRDDataBlock block = file.getDataBlocks().get(0);
610 List<RangeMeasurement> rangeBlock = block.getRangeData();
611 RangeMeasurement rangeFirst = rangeBlock.get(0);
612 RangeMeasurement rangeLast = rangeBlock.get(rangeBlock.size() - 1);
613
614 DateComponents startEpoch = new DateComponents(2022, 6, 6);
615 DateComponents lastEpoch = new DateComponents(2022, 6, 6);
616 double firstSecOfDay = 43410.8898329;
617 double lastSecOfDay = 43444.1690476;
618 AbsoluteDate firstDate = new AbsoluteDate(startEpoch, new TimeComponents(firstSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
619 AbsoluteDate lastDate = new AbsoluteDate(lastEpoch, new TimeComponents(lastSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
620
621 Assertions.assertEquals(firstDate, rangeFirst.getDate());
622 Assertions.assertEquals(lastDate, rangeLast.getDate());
623
624
625 block = file.getDataBlocks().get(1);
626 rangeBlock = block.getRangeData();
627 rangeFirst = rangeBlock.get(0);
628 rangeLast = rangeBlock.get(rangeBlock.size() - 1);
629
630 startEpoch = new DateComponents(2022, 6, 6);
631 lastEpoch = new DateComponents(2022, 6, 6);
632 firstSecOfDay = 26579.400543200001;
633 lastSecOfDay = 26618.200540700000;
634 firstDate = new AbsoluteDate(startEpoch, new TimeComponents(firstSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
635 lastDate = new AbsoluteDate(lastEpoch, new TimeComponents(lastSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
636
637 Assertions.assertEquals(firstDate, rangeFirst.getDate());
638 Assertions.assertEquals(lastDate, rangeLast.getDate());
639
640
641 block = file.getDataBlocks().get(2);
642 rangeBlock = block.getRangeData();
643 rangeFirst = rangeBlock.get(0);
644 rangeLast = rangeBlock.get(rangeBlock.size() - 1);
645
646 startEpoch = new DateComponents(2021, 1, 26);
647 lastEpoch = new DateComponents(2021, 1, 27);
648 firstSecOfDay = 86181.271863631440;
649 lastSecOfDay = 1007.946763625370;
650 firstDate = new AbsoluteDate(startEpoch, new TimeComponents(firstSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
651 lastDate = new AbsoluteDate(lastEpoch, new TimeComponents(lastSecOfDay), DataContext.getDefault().getTimeScales().getUTC());
652
653 Assertions.assertEquals(firstDate, rangeFirst.getDate());
654 Assertions.assertEquals(lastDate, rangeLast.getDate());
655
656 }
657
658 @Test
659 public void testIssue938() throws IOException {
660 final String ex = "/ilrs/crd201_all_samples";
661 final CRD file = new CRDParser().parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
662
663 final TimeScale utc = TimeScalesFactory.getUTC();
664
665 final double DELTA_PS = 1e-12;
666 final double DELTA_TENTH_PS = 0.1e-12;
667 final double DELTA_TENTH_US = 0.1e-6;
668 final double DELTA_MILLI_NM = 1e-12;
669 final double DELTA_TENTH_MM = 1e-3;
670 final double DELTA_MILLI = 1e-3;
671 final double DELTA_CENTI = 1e-2;
672
673 final List<CRDDataBlock> dataBlocks = file.getDataBlocks();
674 Assertions.assertEquals(12, dataBlocks.size());
675
676
677 final CRDDataBlock block0 = dataBlocks.get(0);
678 final List<RangeMeasurement> b0_rangeData = block0.getRangeData();
679 final List<RangeSupplement> b0_rangeSupplementData = block0.getRangeSupplementData();
680 final List<MeteorologicalMeasurement> b0_meteorologicalMeasurementData = block0.getMeteoData().getData();
681 final List<AnglesMeasurement> b0_anglesData = block0.getAnglesData();
682 final List<Calibration> b0_calibrations = block0.getCalibrationRecords();
683
684 Assertions.assertEquals(2, block0.getHeader().getVersion());
685 Assertions.assertEquals(3, b0_rangeData.size());
686 Assertions.assertEquals(0, block0.getHeader().getDataType());
687 Assertions.assertEquals(DataType.FULL_RATE, DataType.getDataType(block0.getHeader().getDataType()));
688 Assertions.assertInstanceOf(FrRangeMeasurement.class, b0_rangeData.get(0));
689 final FrRangeMeasurement b0_fr0 = (FrRangeMeasurement)b0_rangeData.get(0);
690 Assertions.assertEquals(0.047960587856, b0_fr0.getTimeOfFlight(), DELTA_PS);
691 Assertions.assertEquals(2, b0_fr0.getEpochEvent());
692 Assertions.assertEquals(Double.NaN, b0_fr0.getSnr(), DELTA_CENTI);
693 Assertions.assertEquals("2006-11-13T15:23:52.0414338", b0_fr0.getDate().toStringWithoutUtcOffset(utc, 7));
694 Assertions.assertEquals("std1", b0_fr0.getSystemConfigurationId());
695 Assertions.assertEquals(0, b0_fr0.getFilterFlag());
696 Assertions.assertEquals(0, b0_fr0.getDetectorChannel());
697 Assertions.assertEquals(0, b0_fr0.getStopNumber());
698 Assertions.assertEquals(-1, b0_fr0.getReceiveAmplitude());
699 Assertions.assertEquals(-1, b0_fr0.getTransmitAmplitude());
700 Assertions.assertEquals("10 55432.041433800000 0.047960587856 std1 2 0 0 0 na na", b0_fr0.toCrdString());
701
702 final RangeSupplement b0_rangeSupplement1 = b0_rangeSupplementData.get(1);
703 Assertions.assertEquals(3, b0_rangeSupplementData.size());
704 Assertions.assertEquals("2006-11-13T15:23:55.6429746", b0_rangeSupplement1.getDate().toStringWithoutUtcOffset(utc, 7));
705 Assertions.assertEquals("std1", b0_rangeSupplement1.getSystemConfigurationId());
706 Assertions.assertEquals(20697.0e-12, b0_rangeSupplement1.getTroposphericRefractionCorrection(), DELTA_TENTH_PS);
707 Assertions.assertEquals(1601.0000, b0_rangeSupplement1.getCenterOfMassCorrection(), DELTA_TENTH_MM);
708 Assertions.assertEquals(0.00, b0_rangeSupplement1.getNdFilterValue(), DELTA_CENTI);
709 Assertions.assertEquals(0.0000, b0_rangeSupplement1.getTimeBiasApplied(), 0.1e-4);
710 Assertions.assertEquals(0.0, b0_rangeSupplement1.getRangeRate(), DELTA_MILLI);
711 Assertions.assertEquals("12 55435.642974600000 std1 20697.0 1601.0000 0.00 0.0000 0.000000", b0_rangeSupplement1.toCrdString());
712
713 final MeteorologicalMeasurement b0_meteorologicalMeasurement0 = b0_meteorologicalMeasurementData.get(0);
714 Assertions.assertEquals(1, b0_meteorologicalMeasurementData.size());
715 Assertions.assertEquals("2006-11-13T15:23:52.0414338", b0_meteorologicalMeasurement0.getDate().toStringWithoutUtcOffset(utc, 7));
716 Assertions.assertEquals(801.80e-3, b0_meteorologicalMeasurement0.getPressure(), 0.01e-3);
717 Assertions.assertEquals(301.36, b0_meteorologicalMeasurement0.getTemperature(), DELTA_CENTI);
718 Assertions.assertEquals(39, b0_meteorologicalMeasurement0.getHumidity(), 1);
719 Assertions.assertEquals(0, b0_meteorologicalMeasurement0.getOriginOfValues());
720 Assertions.assertEquals("20 55432.041 801.80 301.36 39 0", b0_meteorologicalMeasurement0.toCrdString());
721
722 final AnglesMeasurement b0_angles2 = b0_anglesData.get(2);
723 Assertions.assertEquals(3, b0_anglesData.size());
724 Assertions.assertEquals("2006-11-13T15:45:35.8021609", b0_angles2.getDate().toStringWithoutUtcOffset(utc, 7));
725 Assertions.assertEquals(15.2330, FastMath.toDegrees(b0_angles2.getAzimuth()), 1e-4);
726 Assertions.assertEquals(45.7100, FastMath.toDegrees(b0_angles2.getElevation()), 1e-4);
727 Assertions.assertEquals(0, b0_angles2.getDirectionFlag());
728 Assertions.assertEquals(2, b0_angles2.getOriginIndicator());
729 Assertions.assertEquals(true, b0_angles2.isRefractionCorrected());
730 Assertions.assertEquals(Double.NaN, b0_angles2.getAzimuthRate(), 1e-6);
731 Assertions.assertEquals(Double.NaN, b0_angles2.getElevationRate(), 1e-6);
732 Assertions.assertEquals("30 56735.802 15.2330 45.7100 0 2 1 na na", b0_angles2.toCrdString());
733
734 final Calibration b0_calibration0 = b0_calibrations.get(0);
735 Assertions.assertEquals(1, b0_calibrations.size());
736 Assertions.assertEquals("2006-11-13T15:23:52.0414338", b0_calibration0.getDate().toStringWithoutUtcOffset(utc, 7));
737 Assertions.assertEquals(0, b0_calibration0.getTypeOfData());
738 Assertions.assertEquals("std1", b0_calibration0.getSystemConfigurationId());
739 Assertions.assertEquals(-1, b0_calibration0.getNumberOfPointsRecorded());
740 Assertions.assertEquals(-1, b0_calibration0.getNumberOfPointsUsed());
741 Assertions.assertEquals(0.000, b0_calibration0.getOneWayDistance(), DELTA_TENTH_MM);
742 Assertions.assertEquals(-913.0e-12, b0_calibration0.getSystemDelay(), DELTA_TENTH_PS);
743 Assertions.assertEquals(0.0, b0_calibration0.getDelayShift(), DELTA_TENTH_PS);
744 Assertions.assertEquals(56.0e-12, b0_calibration0.getRms(), DELTA_TENTH_PS);
745 Assertions.assertEquals(Double.NaN, b0_calibration0.getSkew(), DELTA_MILLI);
746 Assertions.assertEquals(Double.NaN, b0_calibration0.getKurtosis(), DELTA_MILLI);
747 Assertions.assertEquals(Double.NaN, b0_calibration0.getPeakMinusMean(), DELTA_TENTH_PS);
748 Assertions.assertEquals(3, b0_calibration0.getTypeIndicator());
749 Assertions.assertEquals(3, b0_calibration0.getShiftTypeIndicator());
750 Assertions.assertEquals(0, b0_calibration0.getDetectorChannel());
751 Assertions.assertEquals(4, b0_calibration0.getSpan());
752 Assertions.assertEquals(Double.NaN, b0_calibration0.getReturnRate(), DELTA_CENTI);
753 Assertions.assertEquals("40 55432.041433800000 0 std1 na na 0.0000 -913.0 0.0 56.0 na na na 3 3 0 4 na",
754 b0_calibration0.toCrdString());
755
756
757 Assertions.assertEquals(true, block0.getSessionStatisticsData().isEmpty());
758 Assertions.assertEquals(null, block0.getSessionStatisticsRecord());
759
760
761 final CRDDataBlock block1 = dataBlocks.get(1);
762 final List<RangeMeasurement> b1_rangeData = block1.getRangeData();
763 Assertions.assertEquals(2, block1.getHeader().getVersion());
764 Assertions.assertEquals(8, b1_rangeData.size());
765 Assertions.assertEquals(1, block1.getHeader().getDataType());
766 Assertions.assertEquals(DataType.NORMAL_POINT, DataType.getDataType(block1.getHeader().getDataType()));
767 Assertions.assertInstanceOf(NptRangeMeasurement.class, b1_rangeData.get(0));
768 final NptRangeMeasurement b1_npt3 = (NptRangeMeasurement)b1_rangeData.get(3);
769 Assertions.assertEquals(0.044605221903, b1_npt3.getTimeOfFlight(), DELTA_PS);
770 Assertions.assertEquals(2, b1_npt3.getEpochEvent());
771 Assertions.assertEquals(0.0, b1_npt3.getSnr(), DELTA_CENTI);
772 Assertions.assertEquals("2006-11-13T15:37:03.2817254", b1_npt3.getDate().toStringWithoutUtcOffset(utc, 7));
773 Assertions.assertEquals("std1", b1_npt3.getSystemConfigurationId());
774 Assertions.assertEquals(120, b1_npt3.getWindowLength(), 1e-15);
775 Assertions.assertEquals(25, b1_npt3.getNumberOfRawRanges());
776 Assertions.assertEquals(87.0e-12, b1_npt3.getBinRms(), DELTA_TENTH_PS);
777 Assertions.assertEquals(Double.NaN, b1_npt3.getBinSkew(), DELTA_MILLI);
778 Assertions.assertEquals(Double.NaN, b1_npt3.getBinKurtosis(), DELTA_MILLI);
779 Assertions.assertEquals(Double.NaN, b1_npt3.getBinPeakMinusMean(), DELTA_TENTH_PS);
780 Assertions.assertEquals(0.0, b1_npt3.getReturnRate(), DELTA_CENTI);
781 Assertions.assertEquals(0, b1_npt3.getDetectorChannel());
782 Assertions.assertEquals("11 56223.281725400000 0.044605221903 std1 2 120.0 25 87.0 na na na 0.00 0 0.0",
783 b1_npt3.toCrdString());
784
785 final SessionStatistics b1_sessionStatistics = block1.getSessionStatisticsRecord();
786 Assertions.assertEquals("std1", b1_sessionStatistics.getSystemConfigurationId());
787 Assertions.assertEquals(86.0e-12, b1_sessionStatistics.getRms(), DELTA_TENTH_PS);
788 Assertions.assertEquals(Double.NaN, b1_sessionStatistics.getSkewness(), DELTA_MILLI);
789 Assertions.assertEquals(Double.NaN, b1_sessionStatistics.getKurtosis(), DELTA_MILLI);
790 Assertions.assertEquals(Double.NaN, b1_sessionStatistics.getPeakMinusMean(), DELTA_TENTH_PS);
791 Assertions.assertEquals(0, b1_sessionStatistics.getDataQulityIndicator());
792 Assertions.assertEquals("50 std1 86.0 na na na 0", b1_sessionStatistics.toCrdString());
793
794 final List<MeteorologicalMeasurement> b1_meteorologicalMeasurementData = block1.getMeteoData().getData();
795 Assertions.assertEquals(5, b1_meteorologicalMeasurementData.size());
796
797
798 Assertions.assertEquals(null, block1.getSessionStatisticsRecord("std2"));
799
800
801 final CRDDataBlock block2 = dataBlocks.get(2);
802 Assertions.assertEquals(2, block2.getHeader().getDataType());
803 Assertions.assertEquals(DataType.SAMPLED_ENGIEERING, DataType.getDataType(block2.getHeader().getDataType()));
804
805 Assertions.assertEquals(true, block2.getCalibrationData().isEmpty());
806 Assertions.assertEquals(null, block2.getCalibrationRecords());
807
808
809 final CRDDataBlock block3 = dataBlocks.get(3);
810 final CRDConfiguration b3_config = block3.getConfigurationRecords();
811 final List<SystemConfiguration> b3_systemConfigurations = b3_config.getSystemConfigurationRecords();
812 Assertions.assertEquals(2, b3_systemConfigurations.size());
813 Assertions.assertSame(b3_config.getSystemRecord(), b3_config.getSystemRecord(null));
814 final Set<String> b3_config_systemIds = b3_config.getSystemConfigurationIds();
815 Assertions.assertEquals(2, b3_config_systemIds.size());
816 final String b3_systemConfigId_std1 = "std1";
817 final String b3_systemConfigId_std2 = "std2";
818 Assertions.assertEquals(true, b3_config_systemIds.contains(b3_systemConfigId_std1) && b3_config_systemIds.contains(b3_systemConfigId_std2));
819 final SystemConfiguration b3_systemConfig_std1 = b3_config.getSystemRecord(b3_systemConfigId_std1);
820 final SystemConfiguration b3_systemConfig_std2 = b3_config.getSystemRecord(b3_systemConfigId_std2);
821 Assertions.assertEquals(846.000e-9, b3_systemConfig_std1.getWavelength(), DELTA_MILLI_NM);
822 Assertions.assertEquals(423.000e-9, b3_systemConfig_std2.getWavelength(), DELTA_MILLI_NM);
823
824 final List<Calibration> b3_calibrations_std1 = block3.getCalibrationRecords(b3_systemConfigId_std1);
825 final List<Calibration> b3_calibrations_std2 = block3.getCalibrationRecords(b3_systemConfigId_std2);
826 Assertions.assertEquals(1, b3_calibrations_std1.size());
827 Assertions.assertEquals(0, b3_calibrations_std2.size());
828
829 final List<SessionStatistics> b3_sessionStatisticsData = block3.getSessionStatisticsData();
830 Assertions.assertEquals(2, b3_sessionStatisticsData.size());
831
832 final SessionStatistics b3_sessionStatistics_std1 = block3.getSessionStatisticsRecord(b3_systemConfigId_std1);
833 final SessionStatistics b3_sessionStatistics_std2 = block3.getSessionStatisticsRecord(b3_systemConfigId_std2);
834 Assertions.assertEquals(165.0e-12, b3_sessionStatistics_std1.getRms(), DELTA_TENTH_PS);
835 Assertions.assertEquals(78.0e-12, b3_sessionStatistics_std2.getRms(), DELTA_TENTH_PS);
836
837 final List<RangeMeasurement> b3_rangeData = block3.getRangeData();
838 Assertions.assertEquals(20, b3_rangeData.size());
839 final NptRangeMeasurement b3_npt3 = (NptRangeMeasurement)b3_rangeData.get(3);
840 Assertions.assertEquals(0.050886342010, b3_npt3.getTimeOfFlight(), DELTA_PS);
841 Assertions.assertEquals(2, b3_npt3.getEpochEvent());
842 Assertions.assertEquals(0.0, b3_npt3.getSnr(), DELTA_CENTI);
843 Assertions.assertEquals("2006-12-30T07:36:13.1080893", b3_npt3.getDate().toStringWithoutUtcOffset(utc, 7));
844 Assertions.assertEquals("std1", b3_npt3.getSystemConfigurationId());
845 Assertions.assertEquals(120, b3_npt3.getWindowLength(), 1e-15);
846 Assertions.assertEquals(17, b3_npt3.getNumberOfRawRanges());
847 Assertions.assertEquals(158.0e-12, b3_npt3.getBinRms(), DELTA_TENTH_PS);
848 Assertions.assertEquals(Double.NaN, b3_npt3.getBinSkew(),DELTA_MILLI);
849 Assertions.assertEquals(Double.NaN, b3_npt3.getBinKurtosis(), DELTA_MILLI);
850 Assertions.assertEquals(Double.NaN, b3_npt3.getBinPeakMinusMean(), DELTA_TENTH_PS);
851 Assertions.assertEquals(0.0, b3_npt3.getReturnRate(), DELTA_CENTI);
852 Assertions.assertEquals(0, b3_npt3.getDetectorChannel());
853 Assertions.assertEquals("11 27373.108089300000 0.050886342010 std1 2 120.0 17 158.0 na na na 0.00 0 0.0",
854 b3_npt3.toCrdString());
855 final NptRangeMeasurement b3_npt5 = (NptRangeMeasurement)b3_rangeData.get(5);
856 Assertions.assertEquals(0.042208378233, b3_npt5.getTimeOfFlight(), DELTA_PS);
857 Assertions.assertEquals(2, b3_npt5.getEpochEvent());
858 Assertions.assertEquals(0.0, b3_npt5.getSnr(), DELTA_CENTI);
859 Assertions.assertEquals("2006-12-30T07:46:48.7080899", b3_npt5.getDate().toStringWithoutUtcOffset(utc, 7));
860 Assertions.assertEquals("std2", b3_npt5.getSystemConfigurationId());
861 Assertions.assertEquals(120, b3_npt5.getWindowLength(), 1e-15);
862 Assertions.assertEquals(85, b3_npt5.getNumberOfRawRanges());
863 Assertions.assertEquals(71.0e-12, b3_npt5.getBinRms(), DELTA_TENTH_PS);
864 Assertions.assertEquals(Double.NaN, b3_npt5.getBinSkew(), DELTA_MILLI);
865 Assertions.assertEquals(Double.NaN, b3_npt5.getBinKurtosis(), DELTA_MILLI);
866 Assertions.assertEquals(Double.NaN, b3_npt5.getBinPeakMinusMean(), DELTA_TENTH_PS);
867 Assertions.assertEquals(0.0, b3_npt5.getReturnRate(), DELTA_CENTI);
868 Assertions.assertEquals(0, b3_npt5.getDetectorChannel());
869 Assertions.assertEquals("11 28008.708089900000 0.042208378233 std2 2 120.0 85 71.0 na na na 0.00 0 0.0",
870 b3_npt5.toCrdString());
871
872 Assertions.assertEquals(846.000e-9,
873 block3.getConfigurationRecords().getSystemRecord(b3_npt3.getSystemConfigurationId()).getWavelength(),
874 DELTA_MILLI_NM);
875 Assertions.assertEquals(846.000e-9, block3.getWavelength(b3_npt3), DELTA_MILLI_NM);
876 Assertions.assertEquals(423.000e-9,
877 block3.getConfigurationRecords().getSystemRecord(b3_npt5.getSystemConfigurationId()).getWavelength(),
878 DELTA_MILLI_NM);
879 Assertions.assertEquals(423.000e-9, block3.getWavelength(b3_npt5), DELTA_MILLI_NM);
880
881
882 final CRDDataBlock block4 = dataBlocks.get(4);
883 final CRDConfiguration b4_config = block4.getConfigurationRecords();
884 final SystemConfiguration b4_systemConfig = b4_config.getSystemRecord();
885 final LaserConfiguration b4_laserConfig = b4_config.getLaserRecord();
886 final DetectorConfiguration b4_detectorConfig = b4_config.getDetectorRecord();
887 final TimingSystemConfiguration b4_timingConfig = b4_config.getTimingRecord();
888 final SoftwareConfiguration b4_softwareConfig = b4_config.getSoftwareRecord();
889 final MeteorologicalConfiguration b4_meteorologicalConfig = b4_config.getMeteorologicalRecord();
890 final TransponderConfiguration b4_transponderConfig = b4_config.getTransponderRecord();
891
892 Assertions.assertEquals(6, b4_config.getConfigurationRecordMap().size());
893 Assertions.assertInstanceOf(LaserConfiguration.class, b4_config.getConfigurationRecord("ml1"));
894
895 Assertions.assertEquals(532.000e-9, b4_systemConfig.getWavelength(), DELTA_MILLI_NM);
896 Assertions.assertEquals("std", b4_systemConfig.getSystemId());
897 Assertions.assertEquals("[ml1, mcp, mt1, swv, met]", b4_systemConfig.getComponents().toString());
898 Assertions.assertEquals("C0 0 532.000 std ml1 mcp mt1 swv met", b4_systemConfig.toCrdString());
899
900 Assertions.assertEquals("ml1", b4_laserConfig.getLaserId());
901 Assertions.assertEquals("Nd-Yag", b4_laserConfig.getLaserType());
902 Assertions.assertEquals(1064.00e-9, b4_laserConfig.getPrimaryWavelength(), DELTA_MILLI_NM);
903 Assertions.assertEquals(10.00, b4_laserConfig.getNominalFireRate(), DELTA_CENTI);
904 Assertions.assertEquals(100.00, b4_laserConfig.getPulseEnergy(), DELTA_CENTI);
905 Assertions.assertEquals(200.0, b4_laserConfig.getPulseWidth(), DELTA_CENTI);
906 Assertions.assertEquals(Double.NaN, b4_laserConfig.getBeamDivergence(), DELTA_CENTI);
907 Assertions.assertEquals(1, b4_laserConfig.getPulseInOutgoingSemiTrain());
908 Assertions.assertEquals("C1 0 ml1 Nd-Yag 1064.00 10.00 100.00 200.0 na 1", b4_laserConfig.toCrdString());
909
910 Assertions.assertEquals("mcp", b4_detectorConfig.getDetectorId());
911 Assertions.assertEquals("mcp", b4_detectorConfig.getDetectorType());
912 Assertions.assertEquals(532.00e-9, b4_detectorConfig.getApplicableWavelength(), DELTA_MILLI_NM);
913 Assertions.assertEquals(Double.NaN, b4_detectorConfig.getQuantumEfficiency(), DELTA_CENTI);
914 Assertions.assertEquals(3800.0, b4_detectorConfig.getAppliedVoltage(), DELTA_CENTI);
915 Assertions.assertEquals(0.0, b4_detectorConfig.getDarkCount(), 0.1e3);
916 Assertions.assertEquals("unknown", b4_detectorConfig.getOutputPulseType());
917 Assertions.assertEquals(Double.NaN, b4_detectorConfig.getOutputPulseWidth(), DELTA_CENTI);
918 Assertions.assertEquals(0.0, b4_detectorConfig.getSpectralFilter(), 0.1e-9);
919 Assertions.assertEquals(Double.NaN, b4_detectorConfig.getTransmissionOfSpectralFilter());
920 Assertions.assertEquals(0.0, b4_detectorConfig.getSpatialFilter(), 0.1);
921 Assertions.assertEquals("none", b4_detectorConfig.getExternalSignalProcessing());
922 Assertions.assertEquals(5.0, b4_detectorConfig.getAmplifierGain(), 0.1);
923 Assertions.assertEquals(10.0e3, b4_detectorConfig.getAmplifierBandwidth(), 0.1e3);
924 Assertions.assertEquals("1", b4_detectorConfig.getAmplifierInUse());
925 Assertions.assertEquals("C2 0 mcp mcp 532.000 na 3800.0 0.0 unknown na 0.00 na 0.0 none 5.0 10.0 1", b4_detectorConfig.toCrdString());
926
927 Assertions.assertEquals("mt1", b4_timingConfig.getLocalTimingId());
928 Assertions.assertEquals("TAC", b4_timingConfig.getTimeSource());
929 Assertions.assertEquals("TAC", b4_timingConfig.getFrequencySource());
930 Assertions.assertEquals("MLRS_CMOS_TMRB_TD811", b4_timingConfig.getTimer());
931 Assertions.assertEquals("na", b4_timingConfig.getTimerSerialNumber());
932 Assertions.assertEquals(445.9e-6, b4_timingConfig.getEpochDelayCorrection(), DELTA_TENTH_US);
933 Assertions.assertEquals("C3 0 mt1 TAC TAC MLRS_CMOS_TMRB_TD811 na 445.9", b4_timingConfig.toCrdString());
934
935 Assertions.assertEquals("swv", b4_softwareConfig.getConfigurationId());
936 Assertions.assertEquals("swv", b4_softwareConfig.getSoftwareId());
937 Assertions.assertEquals("[Monitor, Sattrk]", Arrays.toString(b4_softwareConfig.getTrackingSoftwares()));
938 Assertions.assertEquals("[2.000Bm, 2.00Cm]", Arrays.toString(b4_softwareConfig.getTrackingSoftwareVersions()));
939 Assertions.assertEquals("[conpro, crd_cal, PoissonCRD, gnp]", Arrays.toString(b4_softwareConfig.getProcessingSoftwares()));
940 Assertions.assertEquals("[2.4a, 1.7, 2.2a, CM-2.01a]", Arrays.toString(b4_softwareConfig.getProcessingSoftwareVersions()));
941 Assertions.assertEquals("C5 0 swv Monitor,Sattrk 2.000Bm,2.00Cm conpro,crd_cal,PoissonCRD,gnp 2.4a,1.7,2.2a,CM-2.01a", b4_softwareConfig.toCrdString());
942
943 Assertions.assertEquals("met", b4_meteorologicalConfig.getConfigurationId());
944 Assertions.assertEquals("met", b4_meteorologicalConfig.getMeteorologicalId());
945 Assertions.assertEquals("Paroscientific", b4_meteorologicalConfig.getPressSensorManufacturer());
946 Assertions.assertEquals("Met4", b4_meteorologicalConfig.getPressSensorModel());
947 Assertions.assertEquals("123456", b4_meteorologicalConfig.getPressSensorSerialNumber());
948 Assertions.assertEquals("Paroscientific", b4_meteorologicalConfig.getTempSensorManufacturer());
949 Assertions.assertEquals("Met4", b4_meteorologicalConfig.getTempSensorModel());
950 Assertions.assertEquals("123456", b4_meteorologicalConfig.getTempSensorSerialNumber());
951 Assertions.assertEquals("Paroscientific", b4_meteorologicalConfig.getHumiSensorManufacturer());
952 Assertions.assertEquals("Met4", b4_meteorologicalConfig.getHumiSensorModel());
953 Assertions.assertEquals("123456", b4_meteorologicalConfig.getHumiSensorSerialNumber());
954 Assertions.assertEquals("C6 0 met Paroscientific Met4 123456 Paroscientific Met4 123456 Paroscientific Met4 123456", b4_meteorologicalConfig.toCrdString());
955
956 final SessionStatistics b4_sessionStatistics = block4.getSessionStatisticsRecord();
957 Assertions.assertEquals("std", b4_sessionStatistics.getSystemConfigurationId());
958 Assertions.assertEquals(72.7e-12, b4_sessionStatistics.getRms(), DELTA_TENTH_PS);
959 Assertions.assertEquals(1.494, b4_sessionStatistics.getSkewness(), DELTA_MILLI);
960 Assertions.assertEquals(-0.536, b4_sessionStatistics.getKurtosis(), DELTA_MILLI);
961 Assertions.assertEquals(-32.4e-12, b4_sessionStatistics.getPeakMinusMean(), DELTA_TENTH_PS);
962 Assertions.assertEquals(0, b4_sessionStatistics.getDataQulityIndicator());
963 Assertions.assertEquals("50 std 72.7 1.494 -0.536 -32.4 0", b4_sessionStatistics.toCrdString());
964
965 Assertions.assertEquals(null, b4_transponderConfig);
966
967 Assertions.assertEquals(false, b4_systemConfig.equals(null));
968 Assertions.assertEquals(true, b4_systemConfig.equals(b4_systemConfig));
969 Assertions.assertEquals(-766950339, b4_systemConfig.hashCode());
970 Assertions.assertEquals(false, b4_systemConfig.equals(b3_systemConfig_std1));
971 final SystemConfiguration b4_systemConfig_new = new SystemConfiguration();
972 b4_systemConfig_new.setSystemId(b4_systemConfig.getConfigurationId());
973 b4_systemConfig_new.setWavelength(b4_systemConfig.getWavelength());
974 String[] components = new String[b4_systemConfig.getComponents().size()];
975 b4_systemConfig_new.setComponents(b4_systemConfig.getComponents().toArray(components));
976 Assertions.assertEquals(true, b4_systemConfig.equals(b4_systemConfig_new));
977
978
979 final CRDDataBlock block5 = dataBlocks.get(5);
980 final TransponderConfiguration b5_transponderConfig = block5.getConfigurationRecords().getTransponderRecord();
981 Assertions.assertEquals("C4 0 mc1 0.000 0.00 1234567890123456.800 0.00 0.000000000000 0 0 0", b5_transponderConfig.toCrdString());
982
983
984 final CRDDataBlock block9 = dataBlocks.get(9);
985 Assertions.assertEquals(1, block9.getHeader().getVersion());
986 final List<RangeMeasurement> b9_rangeData = block9.getRangeData();
987 Assertions.assertEquals(10, b9_rangeData.size());
988 final NptRangeMeasurement b9_npt7 = (NptRangeMeasurement)b9_rangeData.get(7);
989 Assertions.assertEquals(0.049383687622, b9_npt7.getTimeOfFlight(), DELTA_PS);
990 Assertions.assertEquals(2, b9_npt7.getEpochEvent());
991 Assertions.assertEquals(Double.NaN, b9_npt7.getSnr(), DELTA_CENTI);
992 Assertions.assertEquals("2022-03-25T23:59:06.0200637", b9_npt7.getDate().toStringWithoutUtcOffset(utc, 7));
993 Assertions.assertEquals("0902", b9_npt7.getSystemConfigurationId());
994 Assertions.assertEquals(120, b9_npt7.getWindowLength(), 1e-15);
995 Assertions.assertEquals(1516, b9_npt7.getNumberOfRawRanges());
996 Assertions.assertEquals(34.4e-12, b9_npt7.getBinRms(), DELTA_TENTH_PS);
997 Assertions.assertEquals(-0.017, b9_npt7.getBinSkew(),DELTA_MILLI);
998 Assertions.assertEquals(-1.038, b9_npt7.getBinKurtosis(), DELTA_MILLI);
999 Assertions.assertEquals(11.4e-12, b9_npt7.getBinPeakMinusMean(), DELTA_TENTH_PS);
1000 Assertions.assertEquals(0.6, b9_npt7.getReturnRate(), DELTA_CENTI);
1001 Assertions.assertEquals(0, b9_npt7.getDetectorChannel());
1002 Assertions.assertEquals("11 86346.020063735530 0.049383687622 0902 2 120.0 1516 34.4 -0.017 -1.038 11.4 0.60 0 na",
1003 b9_npt7.toCrdString());
1004 final NptRangeMeasurement b9_npt8 = (NptRangeMeasurement)b9_rangeData.get(8);
1005 Assertions.assertEquals(0.056059159587, b9_npt8.getTimeOfFlight(), DELTA_PS);
1006 Assertions.assertEquals(2, b9_npt8.getEpochEvent());
1007 Assertions.assertEquals(Double.NaN, b9_npt8.getSnr(), DELTA_CENTI);
1008 Assertions.assertEquals("2022-03-26T00:05:45.6451637", b9_npt8.getDate().toStringWithoutUtcOffset(utc, 7));
1009 Assertions.assertEquals("0902", b9_npt8.getSystemConfigurationId());
1010 Assertions.assertEquals(120, b9_npt8.getWindowLength(), 1e-15);
1011 Assertions.assertEquals(525, b9_npt8.getNumberOfRawRanges());
1012 Assertions.assertEquals(33.7e-12, b9_npt8.getBinRms(), DELTA_TENTH_PS);
1013 Assertions.assertEquals(0.023, b9_npt8.getBinSkew(),DELTA_MILLI);
1014 Assertions.assertEquals(-0.939, b9_npt8.getBinKurtosis(), DELTA_MILLI);
1015 Assertions.assertEquals(12.9e-12, b9_npt8.getBinPeakMinusMean(), DELTA_TENTH_PS);
1016 Assertions.assertEquals(0.2, b9_npt8.getReturnRate(), DELTA_CENTI);
1017 Assertions.assertEquals(0, b9_npt8.getDetectorChannel());
1018 Assertions.assertEquals("11 345.645163732581 0.056059159587 0902 2 120.0 525 33.7 0.023 -0.939 12.9 0.20 0 na",
1019 b9_npt8.toCrdString());
1020
1021 final MeteorologicalMeasurement b9_meteorologicalMeasurement1 = block9.getMeteoData().getData().get(1);
1022 Assertions.assertEquals("2022-03-26T00:06:50.0000000", b9_meteorologicalMeasurement1.getDate().toStringWithoutUtcOffset(utc, 7));
1023 Assertions.assertEquals(969.45e-3, b9_meteorologicalMeasurement1.getPressure(), 0.01e-3);
1024 Assertions.assertEquals(283.15, b9_meteorologicalMeasurement1.getTemperature(), DELTA_CENTI);
1025 Assertions.assertEquals(37.5, b9_meteorologicalMeasurement1.getHumidity(), 1);
1026 Assertions.assertEquals(1, b9_meteorologicalMeasurement1.getOriginOfValues());
1027 Assertions.assertEquals("20 410.000 969.45 283.15 38 1", b9_meteorologicalMeasurement1.toCrdString());
1028
1029 final Calibration b9_calibration1 = block9.getCalibrationRecords().get(1);
1030 Assertions.assertEquals("2022-03-26T00:06:50.0000000", b9_calibration1.getDate().toStringWithoutUtcOffset(utc, 7));
1031 Assertions.assertEquals(0, b9_calibration1.getTypeOfData());
1032 Assertions.assertEquals("0902", b9_calibration1.getSystemConfigurationId());
1033 Assertions.assertEquals(10000, b9_calibration1.getNumberOfPointsRecorded());
1034 Assertions.assertEquals(8073, b9_calibration1.getNumberOfPointsUsed());
1035 Assertions.assertEquals(1.742, b9_calibration1.getOneWayDistance(), DELTA_TENTH_MM);
1036 Assertions.assertEquals(112205.4e-12, b9_calibration1.getSystemDelay(), DELTA_TENTH_PS);
1037 Assertions.assertEquals(3.8e-12, b9_calibration1.getDelayShift(), DELTA_TENTH_PS);
1038 Assertions.assertEquals(16e-12, b9_calibration1.getRms(), DELTA_TENTH_PS);
1039 Assertions.assertEquals(0.043, b9_calibration1.getSkew(), DELTA_MILLI);
1040 Assertions.assertEquals(-0.665, b9_calibration1.getKurtosis(), DELTA_MILLI);
1041 Assertions.assertEquals(-1e-12, b9_calibration1.getPeakMinusMean(), DELTA_TENTH_PS);
1042 Assertions.assertEquals(2, b9_calibration1.getTypeIndicator());
1043 Assertions.assertEquals(2, b9_calibration1.getShiftTypeIndicator());
1044 Assertions.assertEquals(0, b9_calibration1.getDetectorChannel());
1045 Assertions.assertEquals(0, b9_calibration1.getSpan());
1046 Assertions.assertEquals(Double.NaN, b9_calibration1.getReturnRate(), DELTA_CENTI);
1047 Assertions.assertEquals("40 410.000000000000 0 0902 10000 8073 1.7420 112205.4 3.8 16.0 0.043 -0.665 -1.0 2 2 0 0 na",
1048 b9_calibration1.toCrdString());
1049
1050 final SessionStatistics b9_sessionStatistics = block9.getSessionStatisticsRecord();
1051 Assertions.assertEquals("0902", b9_sessionStatistics.getSystemConfigurationId());
1052 Assertions.assertEquals(34.0e-12, b9_sessionStatistics.getRms(), DELTA_TENTH_PS);
1053 Assertions.assertEquals(0.258, b9_sessionStatistics.getSkewness(), DELTA_MILLI);
1054 Assertions.assertEquals(-0.949, b9_sessionStatistics.getKurtosis(), DELTA_MILLI);
1055 Assertions.assertEquals(-18.6e-12, b9_sessionStatistics.getPeakMinusMean(), DELTA_TENTH_PS);
1056 Assertions.assertEquals(1, b9_sessionStatistics.getDataQulityIndicator());
1057 Assertions.assertEquals("50 std 72.7 1.494 -0.536 -32.4 0", b4_sessionStatistics.toCrdString());
1058
1059 Assertions.assertEquals(null, block9.getConfigurationRecords().getCalibrationTargetRecord());
1060
1061 final List<Calibration> b9_calibrationData = block9.getCalibrationData();
1062 Assertions.assertEquals(2, b9_calibrationData.size());
1063
1064 final List<CalibrationDetail> b9_calibrationDetailData = block9.getCalibrationDetailData();
1065 Assertions.assertEquals(true, b9_calibrationDetailData.isEmpty());
1066 Assertions.assertEquals(null, block9.getCalibrationDetailRecords());
1067
1068 final CRDHeader b9_header = block9.getHeader();
1069 Assertions.assertEquals("H1 CRD 1 2022 03 26 20", b9_header.getH1CrdString());
1070 Assertions.assertEquals("H2 GRZL 7839 34 02 4 na", b9_header.getH2CrdString());
1071 Assertions.assertEquals("H3 lageos1 7603901 1155 08820 0 1 1", b9_header.getH3CrdString());
1072 Assertions.assertEquals("H4 1 2022 03 25 23 10 20 2022 03 26 00 14 20 0 0 0 0 1 0 2 0", b9_header.getH4CrdString());
1073 Assertions.assertEquals("H5 0 00 null null 0", b9_header.getH5CrdString());
1074
1075
1076 final CRDDataBlock block10 = dataBlocks.get(10);
1077 Assertions.assertEquals(2, block10.getHeader().getVersion());
1078 final List<RangeMeasurement> b10_rangeData = block10.getRangeData();
1079 Assertions.assertEquals(4, b10_rangeData.size());
1080 final NptRangeMeasurement b10_npt0 = (NptRangeMeasurement)b10_rangeData.get(0);
1081 Assertions.assertEquals(0.040190018544, b10_npt0.getTimeOfFlight(), DELTA_PS);
1082 Assertions.assertEquals(532.000e-9, block10.getWavelength(b10_npt0), DELTA_MILLI_NM);
1083
1084 final CRDConfiguration b10_config = block10.getConfigurationRecords();
1085 final SystemConfiguration b10_systemConfig = b10_config.getSystemRecord();
1086 final LaserConfiguration b10_laserConfig = b10_config.getLaserRecord();
1087 final DetectorConfiguration b10_detectorConfig = b10_config.getDetectorRecord();
1088 final TimingSystemConfiguration b10_timingConfig = b10_config.getTimingRecord();
1089 final SoftwareConfiguration b10_softwareConfig = b10_config.getSoftwareRecord();
1090 final MeteorologicalConfiguration b10_meteorologicalConfig = b10_config.getMeteorologicalRecord();
1091 final CalibrationTargetConfiguration b10_calibrationTargetConfig = b10_config.getCalibrationTargetRecord();
1092
1093 Assertions.assertEquals(7, b10_config.getConfigurationRecordMap().size());
1094 Assertions.assertInstanceOf(LaserConfiguration.class, b10_config.getConfigurationRecord("la1"));
1095
1096 Assertions.assertEquals(532.000e-9, b10_systemConfig.getWavelength(), DELTA_MILLI_NM);
1097 Assertions.assertEquals("new", b10_systemConfig.getSystemId());
1098 Assertions.assertEquals("[la1, mcp, ti1, swm, met, cac]", b10_systemConfig.getComponents().toString());
1099 Assertions.assertEquals("C0 0 532.000 new la1 mcp ti1 swm met cac", b10_systemConfig.toCrdString());
1100
1101 Assertions.assertEquals("la1", b10_laserConfig.getLaserId());
1102 Assertions.assertEquals("Nd:Yag", b10_laserConfig.getLaserType());
1103 Assertions.assertEquals(1064.00e-9, b10_laserConfig.getPrimaryWavelength(), DELTA_MILLI_NM);
1104 Assertions.assertEquals(5.00, b10_laserConfig.getNominalFireRate(), DELTA_CENTI);
1105 Assertions.assertEquals(100.00, b10_laserConfig.getPulseEnergy(), DELTA_CENTI);
1106 Assertions.assertEquals(150.0, b10_laserConfig.getPulseWidth(), DELTA_CENTI);
1107 Assertions.assertEquals(15.00, b10_laserConfig.getBeamDivergence(), DELTA_CENTI);
1108 Assertions.assertEquals(1, b10_laserConfig.getPulseInOutgoingSemiTrain());
1109 Assertions.assertEquals("C1 0 la1 Nd:Yag 1064.00 5.00 100.00 150.0 15.00 1", b10_laserConfig.toCrdString());
1110
1111 Assertions.assertEquals("mcp", b10_detectorConfig.getDetectorId());
1112 Assertions.assertEquals("MCP-PMT", b10_detectorConfig.getDetectorType());
1113 Assertions.assertEquals(532.00e-9, b10_detectorConfig.getApplicableWavelength(), DELTA_MILLI_NM);
1114 Assertions.assertEquals(15.0, b10_detectorConfig.getQuantumEfficiency(), DELTA_CENTI);
1115 Assertions.assertEquals(3488.3, b10_detectorConfig.getAppliedVoltage(), 0.1);
1116 Assertions.assertEquals(31.0e3, b10_detectorConfig.getDarkCount(), 0.1e3);
1117 Assertions.assertEquals("analog", b10_detectorConfig.getOutputPulseType());
1118 Assertions.assertEquals(400.0, b10_detectorConfig.getOutputPulseWidth(), 0.1);
1119 Assertions.assertEquals(1.0e-9, b10_detectorConfig.getSpectralFilter(), 0.1e-9);
1120 Assertions.assertEquals(80.0, b10_detectorConfig.getTransmissionOfSpectralFilter(), 0.1);
1121 Assertions.assertEquals(30.00, b10_detectorConfig.getSpatialFilter(), DELTA_CENTI);
1122 Assertions.assertEquals("none", b10_detectorConfig.getExternalSignalProcessing());
1123 Assertions.assertEquals(Double.NaN, b10_detectorConfig.getAmplifierGain(), 0.1);
1124 Assertions.assertEquals(Double.NaN, b10_detectorConfig.getAmplifierBandwidth(), 0.1e3);
1125 Assertions.assertEquals("0", b10_detectorConfig.getAmplifierInUse());
1126 Assertions.assertEquals("C2 0 mcp MCP-PMT 532.000 15.00 3488.3 31.0 analog 400.0 1.00 80.0 30.0 none na na 0",
1127 b10_detectorConfig.toCrdString());
1128
1129 Assertions.assertEquals("ti1", b10_timingConfig.getLocalTimingId());
1130 Assertions.assertEquals("Truetime_XLDC", b10_timingConfig.getTimeSource());
1131 Assertions.assertEquals("Truetime_XLDC", b10_timingConfig.getFrequencySource());
1132 Assertions.assertEquals("Cybi_ETM", b10_timingConfig.getTimer());
1133 Assertions.assertEquals("na", b10_timingConfig.getTimerSerialNumber());
1134 Assertions.assertEquals(0.0, b10_timingConfig.getEpochDelayCorrection(), DELTA_TENTH_US);
1135 Assertions.assertEquals("C3 0 ti1 Truetime_XLDC Truetime_XLDC Cybi_ETM na 0.0", b10_timingConfig.toCrdString());
1136
1137 Assertions.assertEquals("swm", b10_softwareConfig.getConfigurationId());
1138 Assertions.assertEquals("swm", b10_softwareConfig.getSoftwareId());
1139 Assertions.assertEquals("[sattrk]", Arrays.toString(b10_softwareConfig.getTrackingSoftwares()));
1140 Assertions.assertEquals("[6.10]", Arrays.toString(b10_softwareConfig.getTrackingSoftwareVersions()));
1141 Assertions.assertEquals("[HPLDP, GNP]", Arrays.toString(b10_softwareConfig.getProcessingSoftwares()));
1142 Assertions.assertEquals("[9.11.3, 2.8.3]", Arrays.toString(b10_softwareConfig.getProcessingSoftwareVersions()));
1143 Assertions.assertEquals("C5 0 swm sattrk 6.10 HPLDP,GNP 9.11.3,2.8.3", b10_softwareConfig.toCrdString());
1144
1145 Assertions.assertEquals("met", b10_meteorologicalConfig.getConfigurationId());
1146 Assertions.assertEquals("met", b10_meteorologicalConfig.getMeteorologicalId());
1147 Assertions.assertEquals("Paroscientific", b10_meteorologicalConfig.getPressSensorManufacturer());
1148 Assertions.assertEquals("MET-4", b10_meteorologicalConfig.getPressSensorModel());
1149 Assertions.assertEquals("106772", b10_meteorologicalConfig.getPressSensorSerialNumber());
1150 Assertions.assertEquals("Paroscientific", b10_meteorologicalConfig.getTempSensorManufacturer());
1151 Assertions.assertEquals("MET-4", b10_meteorologicalConfig.getTempSensorModel());
1152 Assertions.assertEquals("106772", b10_meteorologicalConfig.getTempSensorSerialNumber());
1153 Assertions.assertEquals("Paroscientific", b10_meteorologicalConfig.getHumiSensorManufacturer());
1154 Assertions.assertEquals("MET-4", b10_meteorologicalConfig.getHumiSensorModel());
1155 Assertions.assertEquals("106772", b10_meteorologicalConfig.getHumiSensorSerialNumber());
1156 Assertions.assertEquals("C6 0 met Paroscientific MET-4 106772 Paroscientific MET-4 106772 Paroscientific MET-4 106772",
1157 b10_meteorologicalConfig.toCrdString());
1158
1159 Assertions.assertEquals("cac", b10_calibrationTargetConfig.getConfigurationId());
1160 Assertions.assertEquals("B", b10_calibrationTargetConfig.getTargetName());
1161 Assertions.assertEquals(150.42450, b10_calibrationTargetConfig.getSurveyedTargetDistance(), DELTA_TENTH_MM);
1162 Assertions.assertEquals(1.0e-3, b10_calibrationTargetConfig.getSurveyError(), DELTA_TENTH_MM);
1163 Assertions.assertEquals(0.1651, b10_calibrationTargetConfig.getSumOfAllConstantDelays(), DELTA_TENTH_MM);
1164 Assertions.assertEquals(Double.NaN, b10_calibrationTargetConfig.getPulseEnergy(), DELTA_CENTI);
1165 Assertions.assertEquals("HPLDP", b10_calibrationTargetConfig.getProcessingSoftwareName());
1166 Assertions.assertEquals("9.11.3", b10_calibrationTargetConfig.getProcessingSoftwareVersion());
1167 Assertions.assertEquals("C7 0 cac B 150.42450 1.00 0.1651 na HPLDP 9.11.3", b10_calibrationTargetConfig.toCrdString());
1168
1169 final List<CalibrationDetail> b10_calibrationDetailData = block10.getCalibrationDetailData();
1170 Assertions.assertEquals(2, b10_calibrationDetailData.size());
1171 final List<CalibrationDetail> b10_calibrationDetails = block10.getCalibrationDetailRecords();
1172 Assertions.assertEquals(2, b10_calibrationDetails.size());
1173 final CalibrationDetail b10_calibrationDetail0 = b10_calibrationDetails.get(0);
1174 Assertions.assertEquals("41 7907.550577400252 0 new 822 819 150.4245 96809.6 na 18.0 na na na 2 2 0 1 na",
1175 b10_calibrationDetail0.toCrdString());
1176 Assertions.assertEquals(true, block10.getCalibrationDetailRecords("std").isEmpty());
1177 Assertions.assertEquals(2, block10.getCalibrationDetailRecords("new").size());
1178
1179 final CRDHeader b10_header = block10.getHeader();
1180 Assertions.assertEquals("H1 CRD 2 2022 05 01 03", b10_header.getH1CrdString());
1181 Assertions.assertEquals("H2 YARL 7090 05 13 3 ILRS", b10_header.getH2CrdString());
1182 Assertions.assertEquals("H3 lageos2 9207002 5986 22195 0 1 1", b10_header.getH3CrdString());
1183 Assertions.assertEquals("H4 1 2022 05 01 02 18 58 2022 05 01 02 24 03 0 0 0 0 1 0 2 0", b10_header.getH4CrdString());
1184 Assertions.assertEquals("H5 1 22 043000 HTS 12001", b10_header.getH5CrdString());
1185
1186 final CRDConfiguration config = new CRDConfiguration();
1187 Assertions.assertEquals(true, config.getSystemConfigurationRecords().isEmpty());
1188 Assertions.assertEquals(null, config.getSystemRecord());
1189 Assertions.assertEquals(null, config.getSystemRecord(null));
1190 Assertions.assertEquals(null, config.getSystemRecord("std"));
1191
1192 config.addConfigurationRecord(b3_systemConfig_std1);
1193 config.addConfigurationRecord(b3_systemConfig_std2);
1194 Assertions.assertEquals(2, config.getSystemConfigurationRecords().size());
1195 Assertions.assertSame(b3_systemConfig_std1, config.getSystemRecord());
1196
1197 final RangeMeasurement range_new = new RangeMeasurement(b10_npt0.getDate(),
1198 b10_npt0.getTimeOfFlight(), b10_npt0.getEpochEvent());
1199 Assertions.assertEquals(0.040190018544,range_new.getTimeOfFlight(), DELTA_PS);
1200 Assertions.assertEquals(8357.400568200001,
1201 range_new.getDate().getComponents(utc).getTime().getSecondsInUTCDay(), DELTA_PS);
1202 final RangeMeasurement range_new2 = new RangeMeasurement(b10_npt0.getDate(),
1203 b10_npt0.getTimeOfFlight(), b10_npt0.getEpochEvent(), b10_npt0.getSnr());
1204 Assertions.assertEquals("00 not supported. use NptRangeMeasurement or FrRangeMeasurement instead.",
1205 range_new2.toCrdString());
1206
1207 final NptRangeMeasurement npt_new = new NptRangeMeasurement(b10_npt0.getDate(),
1208 b10_npt0.getTimeOfFlight(), b10_npt0.getEpochEvent(), b10_npt0.getSnr(),
1209 b10_npt0.getSystemConfigurationId());
1210 Assertions.assertEquals("11 8357.400568200000 0.040190018544 new 2 -1.0 -1 na na na na na 0 na",
1211 npt_new.toCrdString());
1212
1213 Assertions.assertEquals(0, DataType.FULL_RATE.getIndicator());
1214 Assertions.assertEquals(1, DataType.NORMAL_POINT.getIndicator());
1215 Assertions.assertEquals(2, DataType.SAMPLED_ENGIEERING.getIndicator());
1216 Assertions.assertEquals(DataType.FULL_RATE, DataType.getDataType(0));
1217 Assertions.assertEquals(DataType.NORMAL_POINT, DataType.getDataType(1));
1218 Assertions.assertEquals(DataType.SAMPLED_ENGIEERING, DataType.getDataType(2));
1219 try {
1220 DataType.getDataType(3);
1221 Assertions.fail("an exception should have been thrown");
1222 } catch (RuntimeException oe) {
1223 }
1224
1225
1226 final CRDDataBlock block11 = dataBlocks.get(11);
1227 final AbsoluteDate startEpoch = new AbsoluteDate("2012-01-16T03:11:54", utc);
1228 final AbsoluteDate endEpoch = new AbsoluteDate("2012-01-16T00:00:00", utc).shiftedBy(11532.317500081099);
1229 Assertions.assertEquals(1, block11.getHeader().getVersion());
1230 Assertions.assertEquals(startEpoch, block11.getHeader().getStartEpoch());
1231 Assertions.assertEquals(endEpoch, block11.getHeader().getEndEpoch());
1232 }
1233
1234 @BeforeEach
1235 public void setUp() {
1236 Utils.setDataRoot("regular-data");
1237 }
1238
1239 }