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.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.Collections;
22 import java.util.Hashtable;
23 import java.util.List;
24 import java.util.Map;
25 import java.util.Set;
26 import java.util.regex.Pattern;
27
28
29
30
31
32
33
34 public class CRDConfiguration {
35
36
37 private Map<String, BaseConfiguration> mapConfigurationRecords;
38
39
40 private List<SystemConfiguration> systemConfigurationRecords;
41
42
43
44
45 public CRDConfiguration() {
46 systemConfigurationRecords = new ArrayList<>();
47 mapConfigurationRecords = new Hashtable<>();
48 }
49
50
51
52
53
54 public SystemConfiguration getSystemRecord() {
55 return systemConfigurationRecords.isEmpty() ? null : systemConfigurationRecords.get(0);
56 }
57
58
59
60
61
62 public SystemConfiguration getLastSystemRecord() {
63 return systemConfigurationRecords.isEmpty() ? null : systemConfigurationRecords.get(systemConfigurationRecords.size() - 1);
64 }
65
66
67
68
69
70 public LaserConfiguration getLaserRecord() {
71 return getLaserRecord(getSystemRecord());
72 }
73
74
75
76
77
78 public DetectorConfiguration getDetectorRecord() {
79 return getDetectorRecord(getSystemRecord());
80 }
81
82
83
84
85
86 public TimingSystemConfiguration getTimingRecord() {
87 return getTimingRecord(getSystemRecord());
88 }
89
90
91
92
93
94 public TransponderConfiguration getTransponderRecord() {
95 return getTransponderRecord(getSystemRecord());
96 }
97
98
99
100
101
102
103 public SoftwareConfiguration getSoftwareRecord() {
104 return getSoftwareRecord(getSystemRecord());
105 }
106
107
108
109
110
111 public MeteorologicalConfiguration getMeteorologicalRecord() {
112 return getMeteorologicalRecord(getSystemRecord());
113 }
114
115
116
117
118
119
120 public void addConfigurationRecord(final BaseConfiguration config) {
121 if (config == null) {
122 return;
123 }
124
125 mapConfigurationRecords.put(config.getConfigurationId(), config);
126
127 if (config instanceof SystemConfiguration) {
128
129 systemConfigurationRecords.add((SystemConfiguration) config);
130 }
131 }
132
133
134
135
136
137
138 public Map<String, BaseConfiguration> getConfigurationRecordMap() {
139 return Collections.unmodifiableMap(mapConfigurationRecords);
140 }
141
142
143
144
145
146
147
148 public BaseConfiguration getConfigurationRecord(final String configId) {
149 return mapConfigurationRecords.get(configId);
150 }
151
152
153
154
155
156
157 public Set<String> getSystemConfigurationIds() {
158 return Collections.unmodifiableSet(mapConfigurationRecords.keySet());
159 }
160
161
162
163
164
165
166 public List<SystemConfiguration> getSystemConfigurationRecords() {
167 return Collections.unmodifiableList(systemConfigurationRecords);
168 }
169
170
171
172
173
174
175
176
177 private BaseConfiguration getRecord(final SystemConfiguration systemRecord,
178 final Class<? extends BaseConfiguration> c) {
179 BaseConfiguration config;
180 for (final String configId : systemRecord.getComponents()) {
181 config = getConfigurationRecord(configId);
182 if (config != null && config.getClass() == c) {
183 return config;
184 }
185 }
186
187 return null;
188 }
189
190
191
192
193
194
195
196 public SystemConfiguration getSystemRecord(final String configId) {
197 if (configId == null) {
198
199 return getSystemRecord();
200 }
201
202 final BaseConfiguration config = mapConfigurationRecords.get(configId);
203 return config == null ? null : (SystemConfiguration) config;
204 }
205
206
207
208
209
210
211
212 public LaserConfiguration getLaserRecord(final SystemConfiguration systemRecord) {
213 final BaseConfiguration config = getRecord(systemRecord, LaserConfiguration.class);
214 return config == null ? null : (LaserConfiguration) config;
215 }
216
217
218
219
220
221
222
223 public DetectorConfiguration getDetectorRecord(final SystemConfiguration systemRecord) {
224 final BaseConfiguration config = getRecord(systemRecord, DetectorConfiguration.class);
225 return config == null ? null : (DetectorConfiguration) config;
226 }
227
228
229
230
231
232
233
234 public TimingSystemConfiguration getTimingRecord(final SystemConfiguration systemRecord) {
235 final BaseConfiguration config = getRecord(systemRecord, TimingSystemConfiguration.class);
236 return config == null ? null : (TimingSystemConfiguration) config;
237 }
238
239
240
241
242
243
244
245 public TransponderConfiguration getTransponderRecord(final SystemConfiguration systemRecord) {
246 final BaseConfiguration config = getRecord(systemRecord, TransponderConfiguration.class);
247 return config == null ? null : (TransponderConfiguration) config;
248 }
249
250
251
252
253
254
255
256 public SoftwareConfiguration getSoftwareRecord(final SystemConfiguration systemRecord) {
257 final BaseConfiguration config = getRecord(systemRecord, SoftwareConfiguration.class);
258 return config == null ? null : (SoftwareConfiguration) config;
259 }
260
261
262
263
264
265
266
267 public MeteorologicalConfiguration getMeteorologicalRecord(final SystemConfiguration systemRecord) {
268 final BaseConfiguration config = getRecord(systemRecord, MeteorologicalConfiguration.class);
269 return config == null ? null : (MeteorologicalConfiguration) config;
270 }
271
272
273
274
275
276
277
278 public CalibrationTargetConfiguration getCalibrationTargetRecord(final SystemConfiguration systemRecord) {
279 final BaseConfiguration config = getRecord(systemRecord, CalibrationTargetConfiguration.class);
280 return config == null ? null : (CalibrationTargetConfiguration) config;
281 }
282
283
284
285
286
287
288 public CalibrationTargetConfiguration getCalibrationTargetRecord() {
289 return getCalibrationTargetRecord(getSystemRecord());
290 }
291
292
293
294
295
296 public abstract static class BaseConfiguration {
297
298
299 private String configurationId;
300
301
302
303
304
305
306
307
308 public BaseConfiguration() {
309
310 }
311
312
313
314
315
316 public String getConfigurationId() {
317 return configurationId;
318 }
319
320
321
322
323
324 public void setConfigurationId(final String configurationId) {
325 this.configurationId = configurationId;
326 }
327
328 @Override
329 public int hashCode() {
330 return toString().hashCode();
331 }
332
333 @Override
334 public boolean equals(final Object record) {
335 if (record == null) {
336 return false;
337 }
338
339 if (record == this) {
340 return true;
341 }
342
343 return toString().equals(record.toString());
344
345 }
346
347
348
349
350
351
352 public abstract String toCrdString();
353 }
354
355
356 public static class SystemConfiguration extends BaseConfiguration {
357
358
359 private double wavelength;
360
361
362 private List<String> components;
363
364
365
366
367 public SystemConfiguration() {
368 this.components = new ArrayList<>();
369 }
370
371
372
373
374
375 public double getWavelength() {
376 return wavelength;
377 }
378
379
380
381
382
383 public void setWavelength(final double wavelength) {
384 this.wavelength = wavelength;
385 }
386
387
388
389
390
391 public String getSystemId() {
392 return getConfigurationId();
393 }
394
395
396
397
398
399 public void setSystemId(final String systemId) {
400 setConfigurationId(systemId);
401 }
402
403
404
405
406
407
408 public List<String> getComponents() {
409 return Collections.unmodifiableList(components);
410 }
411
412
413
414
415
416
417 public void setComponents(final String[] components) {
418 this.components = Arrays.asList(components);
419 }
420
421
422 @Override
423 public String toCrdString() {
424 return String.format("C0 0 %s", toString());
425 }
426
427 @Override
428 public String toString() {
429
430 final StringBuilder sb = new StringBuilder();
431 sb.append(String.format("%10.3f %s", wavelength * 1e9, getConfigurationId()));
432 for (final String comp : components) {
433 sb.append(String.format(" %s", comp));
434 }
435 return sb.toString().replace(',', '.');
436 }
437 }
438
439
440 public static class LaserConfiguration extends BaseConfiguration {
441
442
443 private String laserType;
444
445
446 private double primaryWavelength;
447
448
449 private double nominalFireRate;
450
451
452 private double pulseEnergy;
453
454
455 private double pulseWidth;
456
457
458 private double beamDivergence;
459
460
461 private int pulseInOutgoingSemiTrain;
462
463
464
465
466
467
468
469
470 public LaserConfiguration() {
471
472 }
473
474
475
476
477
478 public String getLaserId() {
479 return getConfigurationId();
480 }
481
482
483
484
485
486 public void setLaserId(final String laserId) {
487 setConfigurationId(laserId);
488 }
489
490
491
492
493
494 public String getLaserType() {
495 return laserType;
496 }
497
498
499
500
501
502 public void setLaserType(final String laserType) {
503 this.laserType = laserType;
504 }
505
506
507
508
509
510 public double getPrimaryWavelength() {
511 return primaryWavelength;
512 }
513
514
515
516
517
518 public void setPrimaryWavelength(final double primaryWavelength) {
519 this.primaryWavelength = primaryWavelength;
520 }
521
522
523
524
525
526 public double getNominalFireRate() {
527 return nominalFireRate;
528 }
529
530
531
532
533
534 public void setNominalFireRate(final double nominalFireRate) {
535 this.nominalFireRate = nominalFireRate;
536 }
537
538
539
540
541
542 public double getPulseEnergy() {
543 return pulseEnergy;
544 }
545
546
547
548
549
550 public void setPulseEnergy(final double pulseEnergy) {
551 this.pulseEnergy = pulseEnergy;
552 }
553
554
555
556
557
558 public double getPulseWidth() {
559 return pulseWidth;
560 }
561
562
563
564
565
566 public void setPulseWidth(final double pulseWidth) {
567 this.pulseWidth = pulseWidth;
568 }
569
570
571
572
573
574 public double getBeamDivergence() {
575 return beamDivergence;
576 }
577
578
579
580
581
582 public void setBeamDivergence(final double beamDivergence) {
583 this.beamDivergence = beamDivergence;
584 }
585
586
587
588
589
590 public int getPulseInOutgoingSemiTrain() {
591 return pulseInOutgoingSemiTrain;
592 }
593
594
595
596
597
598 public void setPulseInOutgoingSemiTrain(final int pulseInOutgoingSemiTrain) {
599 this.pulseInOutgoingSemiTrain = pulseInOutgoingSemiTrain;
600 }
601
602
603 @Override
604 public String toCrdString() {
605 return String.format("C1 0 %s", toString());
606 }
607
608 @Override
609 public String toString() {
610
611
612 final String str = String.format(
613 "%s %s %.2f %.2f %.2f %.1f %.2f %d", getConfigurationId(),
614 laserType, primaryWavelength * 1e9, nominalFireRate,
615 pulseEnergy, pulseWidth, beamDivergence,
616 pulseInOutgoingSemiTrain);
617 return CRD.handleNaN(str).replace(',', '.');
618 }
619
620 }
621
622
623 public static class DetectorConfiguration extends BaseConfiguration {
624
625
626 private String detectorType;
627
628
629 private double applicableWavelength;
630
631
632 private double quantumEfficiency;
633
634
635 private double appliedVoltage;
636
637
638 private double darkCount;
639
640
641 private String outputPulseType;
642
643
644 private double outputPulseWidth;
645
646
647 private double spectralFilter;
648
649
650 private double transmissionOfSpectralFilter;
651
652
653 private double spatialFilter;
654
655
656 private String externalSignalProcessing;
657
658
659 private double amplifierGain;
660
661
662 private double amplifierBandwidth;
663
664
665 private String amplifierInUse;
666
667
668
669
670
671
672
673
674 public DetectorConfiguration() {
675
676 }
677
678
679
680
681
682 public String getDetectorId() {
683 return getConfigurationId();
684 }
685
686
687
688
689
690 public void setDetectorId(final String detectorId) {
691 setConfigurationId(detectorId);
692 }
693
694
695
696
697
698 public String getDetectorType() {
699 return detectorType;
700 }
701
702
703
704
705
706 public void setDetectorType(final String detectorType) {
707 this.detectorType = detectorType;
708 }
709
710
711
712
713
714 public double getApplicableWavelength() {
715 return applicableWavelength;
716 }
717
718
719
720
721
722 public void setApplicableWavelength(final double applicableWavelength) {
723 this.applicableWavelength = applicableWavelength;
724 }
725
726
727
728
729
730 public double getQuantumEfficiency() {
731 return quantumEfficiency;
732 }
733
734
735
736
737
738 public void setQuantumEfficiency(final double quantumEfficiency) {
739
740 if (quantumEfficiency == -1.0) {
741 this.quantumEfficiency = Double.NaN;
742 } else {
743 this.quantumEfficiency = quantumEfficiency;
744 }
745 }
746
747
748
749
750
751 public double getAppliedVoltage() {
752 return appliedVoltage;
753 }
754
755
756
757
758
759 public void setAppliedVoltage(final double appliedVoltage) {
760
761 if (appliedVoltage == -1.0) {
762 this.appliedVoltage = Double.NaN;
763 } else {
764 this.appliedVoltage = appliedVoltage;
765 }
766 }
767
768
769
770
771
772 public double getDarkCount() {
773 return darkCount;
774 }
775
776
777
778
779
780 public void setDarkCount(final double darkCount) {
781
782 if (darkCount == -1.0e3) {
783 this.darkCount = Double.NaN;
784 } else {
785 this.darkCount = darkCount;
786 }
787 }
788
789
790
791
792
793 public String getOutputPulseType() {
794 return outputPulseType;
795 }
796
797
798
799
800
801 public void setOutputPulseType(final String outputPulseType) {
802 this.outputPulseType = outputPulseType;
803 }
804
805
806
807
808
809 public double getOutputPulseWidth() {
810 return outputPulseWidth;
811 }
812
813
814
815
816
817 public void setOutputPulseWidth(final double outputPulseWidth) {
818
819 if (outputPulseWidth == -1.0) {
820 this.outputPulseWidth = Double.NaN;
821 } else {
822 this.outputPulseWidth = outputPulseWidth;
823 }
824 }
825
826
827
828
829
830 public double getSpectralFilter() {
831 return spectralFilter;
832 }
833
834
835
836
837
838 public void setSpectralFilter(final double spectralFilter) {
839 this.spectralFilter = spectralFilter;
840 }
841
842
843
844
845
846 public double getTransmissionOfSpectralFilter() {
847 return transmissionOfSpectralFilter;
848 }
849
850
851
852
853
854 public void setTransmissionOfSpectralFilter(final double transmissionOfSpectralFilter) {
855 this.transmissionOfSpectralFilter = transmissionOfSpectralFilter;
856 }
857
858
859
860
861
862 public double getSpatialFilter() {
863 return spatialFilter;
864 }
865
866
867
868
869
870 public void setSpatialFilter(final double spatialFilter) {
871 this.spatialFilter = spatialFilter;
872 }
873
874
875
876
877
878 public String getExternalSignalProcessing() {
879 return externalSignalProcessing;
880 }
881
882
883
884
885
886 public void setExternalSignalProcessing(final String externalSignalProcessing) {
887 this.externalSignalProcessing = externalSignalProcessing;
888 }
889
890
891
892
893
894 public double getAmplifierGain() {
895 return amplifierGain;
896 }
897
898
899
900
901
902 public void setAmplifierGain(final double amplifierGain) {
903 this.amplifierGain = amplifierGain;
904 }
905
906
907
908
909
910 public double getAmplifierBandwidth() {
911 return amplifierBandwidth;
912 }
913
914
915
916
917
918 public void setAmplifierBandwidth(final double amplifierBandwidth) {
919 this.amplifierBandwidth = amplifierBandwidth;
920 }
921
922
923
924
925
926 public String getAmplifierInUse() {
927 return amplifierInUse;
928 }
929
930
931
932
933
934 public void setAmplifierInUse(final String amplifierInUse) {
935 this.amplifierInUse = amplifierInUse;
936 }
937
938
939 @Override
940 public String toCrdString() {
941 return String.format("C2 0 %s", toString());
942 }
943
944 @Override
945 public String toString() {
946
947
948
949 final String str = String.format(
950 "%s %s %.3f %.2f %.1f %.1f %s %.1f %.2f %.1f %.1f %s %.1f %.1f %s",
951 getConfigurationId(), detectorType,
952 applicableWavelength * 1e9, quantumEfficiency,
953 appliedVoltage, darkCount * 1e-3, outputPulseType,
954 outputPulseWidth, spectralFilter * 1e9,
955 transmissionOfSpectralFilter, spatialFilter,
956 externalSignalProcessing, amplifierGain,
957 amplifierBandwidth * 1e-3, amplifierInUse);
958 return CRD.handleNaN(str).replace(',', '.');
959 }
960 }
961
962
963 public static class TimingSystemConfiguration extends BaseConfiguration {
964
965
966 private String timeSource;
967
968
969 private String frequencySource;
970
971
972 private String timer;
973
974
975 private String timerSerialNumber;
976
977
978 private double epochDelayCorrection;
979
980
981
982
983
984
985
986
987 public TimingSystemConfiguration() {
988
989 }
990
991
992
993
994
995 public String getTimeSource() {
996 return timeSource;
997 }
998
999
1000
1001
1002
1003 public String getLocalTimingId() {
1004 return getConfigurationId();
1005 }
1006
1007
1008
1009
1010
1011 public void setLocalTimingId(final String localTimingId) {
1012 setConfigurationId(localTimingId);
1013 }
1014
1015
1016
1017
1018
1019 public void setTimeSource(final String timeSource) {
1020 this.timeSource = timeSource;
1021 }
1022
1023
1024
1025
1026
1027 public String getFrequencySource() {
1028 return frequencySource;
1029 }
1030
1031
1032
1033
1034
1035 public void setFrequencySource(final String frequencySource) {
1036 this.frequencySource = frequencySource;
1037 }
1038
1039
1040
1041
1042
1043 public String getTimer() {
1044 return timer;
1045 }
1046
1047
1048
1049
1050
1051 public void setTimer(final String timer) {
1052 this.timer = timer;
1053 }
1054
1055
1056
1057
1058
1059 public String getTimerSerialNumber() {
1060 return timerSerialNumber;
1061 }
1062
1063
1064
1065
1066
1067 public void setTimerSerialNumber(final String timerSerialNumber) {
1068 this.timerSerialNumber = timerSerialNumber;
1069 }
1070
1071
1072
1073
1074
1075 public double getEpochDelayCorrection() {
1076 return epochDelayCorrection;
1077 }
1078
1079
1080
1081
1082
1083 public void setEpochDelayCorrection(final double epochDelayCorrection) {
1084 this.epochDelayCorrection = epochDelayCorrection;
1085 }
1086
1087
1088 @Override
1089 public String toCrdString() {
1090 return String.format("C3 0 %s", toString());
1091 }
1092
1093 @Override
1094 public String toString() {
1095
1096
1097 final String str = String.format("%s %s %s %s %s %.1f",
1098 getConfigurationId(), timeSource, frequencySource, timer,
1099 timerSerialNumber, epochDelayCorrection * 1e6);
1100 return CRD.handleNaN(str).replace(',', '.');
1101 }
1102 }
1103
1104
1105 public static class TransponderConfiguration extends BaseConfiguration {
1106
1107
1108 private double stationUTCOffset;
1109
1110
1111 private double stationOscDrift;
1112
1113
1114 private double transpUTCOffset;
1115
1116
1117 private double transpOscDrift;
1118
1119
1120 private double transpClkRefTime;
1121
1122
1123 private int stationClockAndDriftApplied;
1124
1125
1126 private int spacecraftClockAndDriftApplied;
1127
1128
1129 private boolean isSpacecraftTimeSimplified;
1130
1131
1132
1133
1134
1135
1136
1137
1138 public TransponderConfiguration() {
1139
1140 }
1141
1142
1143
1144
1145
1146 public String getTransponderId() {
1147 return getConfigurationId();
1148 }
1149
1150
1151
1152
1153
1154 public void setTransponderId(final String transponderId) {
1155 setConfigurationId(transponderId);
1156 }
1157
1158
1159
1160
1161
1162 public double getStationUTCOffset() {
1163 return stationUTCOffset;
1164 }
1165
1166
1167
1168
1169
1170 public void setStationUTCOffset(final double stationUTCOffset) {
1171 this.stationUTCOffset = stationUTCOffset;
1172 }
1173
1174
1175
1176
1177
1178 public double getStationOscDrift() {
1179 return stationOscDrift;
1180 }
1181
1182
1183
1184
1185
1186 public void setStationOscDrift(final double stationOscDrift) {
1187 this.stationOscDrift = stationOscDrift;
1188 }
1189
1190
1191
1192
1193
1194 public double getTranspUTCOffset() {
1195 return transpUTCOffset;
1196 }
1197
1198
1199
1200
1201
1202 public void setTranspUTCOffset(final double transpUTCOffset) {
1203 this.transpUTCOffset = transpUTCOffset;
1204 }
1205
1206
1207
1208
1209
1210 public double getTranspOscDrift() {
1211 return transpOscDrift;
1212 }
1213
1214
1215
1216
1217
1218 public void setTranspOscDrift(final double transpOscDrift) {
1219 this.transpOscDrift = transpOscDrift;
1220 }
1221
1222
1223
1224
1225
1226 public double getTranspClkRefTime() {
1227 return transpClkRefTime;
1228 }
1229
1230
1231
1232
1233
1234 public void setTranspClkRefTime(final double transpClkRefTime) {
1235 this.transpClkRefTime = transpClkRefTime;
1236 }
1237
1238
1239
1240
1241
1242 public int getStationClockAndDriftApplied() {
1243 return stationClockAndDriftApplied;
1244 }
1245
1246
1247
1248
1249
1250 public void setStationClockAndDriftApplied(final int stationClockAndDriftApplied) {
1251 this.stationClockAndDriftApplied = stationClockAndDriftApplied;
1252 }
1253
1254
1255
1256
1257
1258 public int getSpacecraftClockAndDriftApplied() {
1259 return spacecraftClockAndDriftApplied;
1260 }
1261
1262
1263
1264
1265
1266 public void setSpacecraftClockAndDriftApplied(final int spacecraftClockAndDriftApplied) {
1267 this.spacecraftClockAndDriftApplied = spacecraftClockAndDriftApplied;
1268 }
1269
1270
1271
1272
1273
1274 public boolean isSpacecraftTimeSimplified() {
1275 return isSpacecraftTimeSimplified;
1276 }
1277
1278
1279
1280
1281
1282 public void setIsSpacecraftTimeSimplified(final boolean isSpacecraftTimeSimplified) {
1283 this.isSpacecraftTimeSimplified = isSpacecraftTimeSimplified;
1284 }
1285
1286
1287 @Override
1288 public String toCrdString() {
1289 return String.format("C4 0 %s", toString());
1290 }
1291
1292 @Override
1293 public String toString() {
1294
1295
1296 final String str = String.format(
1297 "%s %.3f %.2f %.3f %.2f %.12f %d %d %d",
1298 getConfigurationId(),
1299 stationUTCOffset * 1e9, stationOscDrift,
1300 transpUTCOffset * 1e9, transpOscDrift,
1301 transpClkRefTime,
1302 stationClockAndDriftApplied, spacecraftClockAndDriftApplied,
1303 isSpacecraftTimeSimplified ? 1 : 0);
1304 return CRD.handleNaN(str).replace(',', '.');
1305 }
1306
1307 }
1308
1309
1310 public static class SoftwareConfiguration extends BaseConfiguration {
1311
1312
1313 private static final Pattern PATTERN_WHITESPACE_OR_SQUAREBRACKET = Pattern.compile("[\\s+\\[\\]]");
1314
1315
1316 private String[] trackingSoftwares;
1317
1318
1319 private String[] trackingSoftwareVersions;
1320
1321
1322 private String[] processingSoftwares;
1323
1324
1325 private String[] processingSoftwareVersions;
1326
1327
1328
1329
1330
1331
1332
1333
1334 public SoftwareConfiguration() {
1335
1336 }
1337
1338
1339
1340
1341
1342 public String getSoftwareId() {
1343 return getConfigurationId();
1344 }
1345
1346
1347
1348
1349
1350 public void setSoftwareId(final String softwareId) {
1351 setConfigurationId(softwareId);
1352 }
1353
1354
1355
1356
1357
1358 public String[] getTrackingSoftwares() {
1359 return trackingSoftwares.clone();
1360 }
1361
1362
1363
1364
1365
1366 public void setTrackingSoftwares(final String[] trackingSoftwares) {
1367 this.trackingSoftwares = trackingSoftwares.clone();
1368 }
1369
1370
1371
1372
1373
1374 public String[] getTrackingSoftwareVersions() {
1375 return trackingSoftwareVersions.clone();
1376 }
1377
1378
1379
1380
1381
1382 public void setTrackingSoftwareVersions(final String[] trackingSoftwareVersions) {
1383 this.trackingSoftwareVersions = trackingSoftwareVersions.clone();
1384 }
1385
1386
1387
1388
1389
1390 public String[] getProcessingSoftwares() {
1391 return processingSoftwares.clone();
1392 }
1393
1394
1395
1396
1397
1398 public void setProcessingSoftwares(final String[] processingSoftwares) {
1399 this.processingSoftwares = processingSoftwares.clone();
1400 }
1401
1402
1403
1404
1405
1406 public String[] getProcessingSoftwareVersions() {
1407 return processingSoftwareVersions.clone();
1408 }
1409
1410
1411
1412
1413
1414 public void setProcessingSoftwareVersions(final String[] processingSoftwareVersions) {
1415 this.processingSoftwareVersions = processingSoftwareVersions.clone();
1416 }
1417
1418 private static String formatArray(final String[] arr) {
1419
1420
1421
1422 final String s = Arrays.toString(arr);
1423 return PATTERN_WHITESPACE_OR_SQUAREBRACKET.matcher(s).replaceAll("");
1424 }
1425
1426
1427 @Override
1428 public String toCrdString() {
1429 return String.format("C5 0 %s", toString());
1430 }
1431
1432 @Override
1433 public String toString() {
1434
1435 return String.format("%s %s %s %s %s", getConfigurationId(),
1436 formatArray(trackingSoftwares),
1437 formatArray(trackingSoftwareVersions),
1438 formatArray(processingSoftwares),
1439 formatArray(processingSoftwareVersions));
1440 }
1441
1442 }
1443
1444
1445 public static class MeteorologicalConfiguration extends BaseConfiguration {
1446
1447
1448 private String pressSensorManufacturer;
1449
1450
1451 private String pressSensorModel;
1452
1453
1454 private String pressSensorSerialNumber;
1455
1456
1457 private String tempSensorManufacturer;
1458
1459
1460 private String tempSensorModel;
1461
1462
1463 private String tempSensorSerialNumber;
1464
1465
1466 private String humiSensorManufacturer;
1467
1468
1469 private String humiSensorModel;
1470
1471
1472 private String humiSensorSerialNumber;
1473
1474
1475
1476
1477
1478
1479
1480
1481 public MeteorologicalConfiguration() {
1482
1483 }
1484
1485
1486
1487
1488
1489 public String getMeteorologicalId() {
1490 return getConfigurationId();
1491 }
1492
1493
1494
1495
1496
1497 public void setMeteorologicalId(final String meteorologicalId) {
1498 setConfigurationId(meteorologicalId);
1499 }
1500
1501
1502
1503
1504
1505 public String getPressSensorManufacturer() {
1506 return pressSensorManufacturer;
1507 }
1508
1509
1510
1511
1512
1513 public void setPressSensorManufacturer(final String pressSensorManufacturer) {
1514 this.pressSensorManufacturer = pressSensorManufacturer;
1515 }
1516
1517
1518
1519
1520
1521 public String getPressSensorModel() {
1522 return pressSensorModel;
1523 }
1524
1525
1526
1527
1528
1529 public void setPressSensorModel(final String pressSensorModel) {
1530 this.pressSensorModel = pressSensorModel;
1531 }
1532
1533
1534
1535
1536
1537 public String getPressSensorSerialNumber() {
1538 return pressSensorSerialNumber;
1539 }
1540
1541
1542
1543
1544
1545 public void setPressSensorSerialNumber(final String pressSensorSerialNumber) {
1546 this.pressSensorSerialNumber = pressSensorSerialNumber;
1547 }
1548
1549
1550
1551
1552
1553 public String getTempSensorManufacturer() {
1554 return tempSensorManufacturer;
1555 }
1556
1557
1558
1559
1560
1561 public void setTempSensorManufacturer(final String tempSensorManufacturer) {
1562 this.tempSensorManufacturer = tempSensorManufacturer;
1563 }
1564
1565
1566
1567
1568
1569 public String getTempSensorModel() {
1570 return tempSensorModel;
1571 }
1572
1573
1574
1575
1576
1577 public void setTempSensorModel(final String tempSensorModel) {
1578 this.tempSensorModel = tempSensorModel;
1579 }
1580
1581
1582
1583
1584
1585 public String getTempSensorSerialNumber() {
1586 return tempSensorSerialNumber;
1587 }
1588
1589
1590
1591
1592
1593 public void setTempSensorSerialNumber(final String tempSensorSerialNumber) {
1594 this.tempSensorSerialNumber = tempSensorSerialNumber;
1595 }
1596
1597
1598
1599
1600
1601 public String getHumiSensorManufacturer() {
1602 return humiSensorManufacturer;
1603 }
1604
1605
1606
1607
1608
1609 public void setHumiSensorManufacturer(final String humiSensorManufacturer) {
1610 this.humiSensorManufacturer = humiSensorManufacturer;
1611 }
1612
1613
1614
1615
1616
1617 public String getHumiSensorModel() {
1618 return humiSensorModel;
1619 }
1620
1621
1622
1623
1624
1625 public void setHumiSensorModel(final String humiSensorModel) {
1626 this.humiSensorModel = humiSensorModel;
1627 }
1628
1629
1630
1631
1632
1633 public String getHumiSensorSerialNumber() {
1634 return humiSensorSerialNumber;
1635 }
1636
1637
1638
1639
1640
1641 public void setHumiSensorSerialNumber(final String humiSensorSerialNumber) {
1642 this.humiSensorSerialNumber = humiSensorSerialNumber;
1643 }
1644
1645
1646 @Override
1647 public String toCrdString() {
1648 return String.format("C6 0 %s", toString());
1649 }
1650
1651 @Override
1652 public String toString() {
1653
1654 return String.format("%s %s %s %s %s %s %s %s %s %s",
1655 getConfigurationId(), pressSensorManufacturer,
1656 pressSensorModel, pressSensorSerialNumber,
1657 tempSensorManufacturer, tempSensorModel,
1658 tempSensorSerialNumber, humiSensorManufacturer,
1659 humiSensorModel, humiSensorSerialNumber);
1660 }
1661 }
1662
1663
1664
1665
1666
1667 public static class CalibrationTargetConfiguration extends BaseConfiguration {
1668
1669
1670 private String targetName;
1671
1672
1673 private double surveyedTargetDistance;
1674
1675
1676 private double surveyError;
1677
1678
1679 private double sumOfAllConstantDelays;
1680
1681
1682 private double pulseEnergy;
1683
1684
1685 private String processingSoftwareName;
1686
1687
1688 private String processingSoftwareVersion;
1689
1690
1691
1692
1693
1694
1695
1696
1697 public CalibrationTargetConfiguration() {
1698
1699 }
1700
1701
1702
1703
1704
1705 public String getTargetName() {
1706 return targetName;
1707 }
1708
1709
1710
1711
1712
1713 public void setTargetName(final String targetName) {
1714 this.targetName = targetName;
1715 }
1716
1717
1718
1719
1720
1721 public double getSurveyedTargetDistance() {
1722 return surveyedTargetDistance;
1723 }
1724
1725
1726
1727
1728
1729 public void setSurveyedTargetDistance(final double surveyedTargetDistance) {
1730 this.surveyedTargetDistance = surveyedTargetDistance;
1731 }
1732
1733
1734
1735
1736
1737 public double getSurveyError() {
1738 return surveyError;
1739 }
1740
1741
1742
1743
1744
1745 public void setSurveyError(final double surveyError) {
1746 this.surveyError = surveyError;
1747 }
1748
1749
1750
1751
1752
1753
1754
1755 public double getSumOfAllConstantDelays() {
1756 return sumOfAllConstantDelays;
1757 }
1758
1759
1760
1761
1762
1763
1764
1765 public void setSumOfAllConstantDelays(final double sumOfAllConstantDelays) {
1766 this.sumOfAllConstantDelays = sumOfAllConstantDelays;
1767 }
1768
1769
1770
1771
1772
1773 public double getPulseEnergy() {
1774 return pulseEnergy;
1775 }
1776
1777
1778
1779
1780
1781 public void setPulseEnergy(final double pulseEnergy) {
1782 this.pulseEnergy = pulseEnergy;
1783 }
1784
1785
1786
1787
1788
1789 public String getProcessingSoftwareName() {
1790 return processingSoftwareName;
1791 }
1792
1793
1794
1795
1796
1797 public void setProcessingSoftwareName(final String processingSoftwareName) {
1798 this.processingSoftwareName = processingSoftwareName;
1799 }
1800
1801
1802
1803
1804
1805 public String getProcessingSoftwareVersion() {
1806 return processingSoftwareVersion;
1807 }
1808
1809
1810
1811
1812
1813 public void setProcessingSoftwareVersion(final String processingSoftwareVersion) {
1814 this.processingSoftwareVersion = processingSoftwareVersion;
1815 }
1816
1817
1818 @Override
1819 public String toCrdString() {
1820 return String.format("C7 0 %s", toString());
1821 }
1822
1823 @Override
1824 public String toString() {
1825
1826
1827 final String str = String.format("%s %s %.5f %.2f %.4f %.2f %s %s",
1828 getConfigurationId(), targetName, surveyedTargetDistance,
1829 surveyError * 1e3, sumOfAllConstantDelays, pulseEnergy,
1830 processingSoftwareName, processingSoftwareVersion);
1831 return CRD.handleNaN(str).replace(',', '.');
1832 }
1833
1834 }
1835 }