1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.sinex;
18
19 import org.orekit.gnss.MeasurementType;
20 import org.orekit.gnss.ObservationType;
21 import org.orekit.gnss.SatInSystem;
22 import org.orekit.time.AbsoluteDate;
23 import org.orekit.utils.Constants;
24
25 import java.util.function.Predicate;
26
27
28
29
30
31 enum BiasSolutionPredicate implements Predicate<SinexBiasParseInfo> {
32
33
34 DSB {
35
36 @Override
37 protected void store(final SinexBiasParseInfo parseInfo,
38 final String svn, final SatInSystem satId, final String siteCode,
39 final ObservationType obs1, final ObservationType obs2,
40 final AbsoluteDate start, final AbsoluteDate end,
41 final double bias) {
42 if (siteCode.isEmpty()) {
43
44 final SatelliteDifferentialSignalBias dsb = parseInfo.getSatelliteDsb(satId);
45 dsb.getDsb().addBias(obs1, obs2, start, end, bias);
46 } else {
47
48 final StationDifferentialSignalBias dsb = parseInfo.getStationDsb(siteCode);
49 dsb.getDsb(satId.getSystem()).addBias(obs1, obs2, start, end, bias);
50 }
51 }
52 },
53
54
55 OSB {
56
57 @Override
58 protected void store(final SinexBiasParseInfo parseInfo,
59 final String svn, final SatInSystem satId, final String siteCode,
60 final ObservationType obs1, final ObservationType obs2,
61 final AbsoluteDate start, final AbsoluteDate end,
62 final double bias) {
63 if (siteCode.isEmpty()) {
64
65 final SatelliteObservableSpecificSignalBias osb = parseInfo.getSatelliteOsb(satId);
66 osb.getOsb().addBias(obs1, start, end, bias);
67 } else {
68
69 final StationObservableSpecificSignalBias osb = parseInfo.getStationOsb(siteCode);
70 osb.getOsb(satId.getSystem()).addBias(obs1, start, end, bias);
71 }
72 }
73 };
74
75
76 @Override
77 public boolean test(final SinexBiasParseInfo parseInfo) {
78 if (name().equals(parseInfo.parseString(1, 3))) {
79
80 final String svn = parseInfo.parseString(6, 4);
81 final SatInSystem satId = new SatInSystem(parseInfo.parseString(11, 3));
82 final String siteCode = parseInfo.parseString(15, 9);
83 final ObservationType obs1 = parseInfo.parseObservationType(satId.getSystem(), 25, 4);
84 final ObservationType obs2 = parseInfo.parseObservationType(satId.getSystem(), 30, 4);
85 final AbsoluteDate start = parseInfo.stringEpochToAbsoluteDate(parseInfo.parseString(35, 14), true);
86 final AbsoluteDate end = parseInfo.stringEpochToAbsoluteDate(parseInfo.parseString(50, 14), false);
87
88
89
90
91 final double factor =
92 obs1.getMeasurementType() == MeasurementType.PSEUDO_RANGE ? Constants.SPEED_OF_LIGHT : 1;
93 final double bias = factor * parseInfo.parseDoubleWithUnit(65, 4, 70, 21);
94
95 store(parseInfo, svn, satId, siteCode, obs1, obs2, start, end, bias);
96 return true;
97 } else {
98
99 return false;
100 }
101 }
102
103
104
105
106
107
108
109
110
111
112
113
114 protected abstract void store(SinexBiasParseInfo parseInfo,
115 String svn, SatInSystem satId, String siteCode,
116 ObservationType obs1, ObservationType obs2,
117 AbsoluteDate start, AbsoluteDate end,
118 double bias);
119
120 }