1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.rinex.navigation.parsers.ephemeris;
18
19 import org.orekit.files.rinex.navigation.RinexNavigation;
20 import org.orekit.files.rinex.navigation.parsers.ParseInfo;
21 import org.orekit.files.rinex.utils.ParsingUtils;
22 import org.orekit.propagation.analytical.gnss.data.GLONASSFdmaNavigationMessage;
23 import org.orekit.time.AbsoluteDate;
24 import org.orekit.utils.Constants;
25 import org.orekit.utils.units.Unit;
26
27
28
29
30
31
32 public class GlonassFdmaParser extends AbstractEphemerisParser<GLONASSFdmaNavigationMessage> {
33
34
35
36
37
38 public GlonassFdmaParser(final ParseInfo parseInfo, final GLONASSFdmaNavigationMessage message) {
39 super(parseInfo, message);
40 }
41
42
43 @Override
44 public void parseLine00() {
45
46 final ParseInfo parseInfo = getParseInfo();
47 final GLONASSFdmaNavigationMessage message = getMessage();
48
49 if (parseInfo.getHeader().getFormatVersion() < 3.0) {
50
51 message.setPRN(ParsingUtils.parseInt(parseInfo.getLine(), 0, 2));
52
53
54 final int year = ParsingUtils.convert2DigitsYear(ParsingUtils.parseInt(parseInfo.getLine(), 3, 2));
55 final int month = ParsingUtils.parseInt(parseInfo.getLine(), 6, 2);
56 final int day = ParsingUtils.parseInt(parseInfo.getLine(), 9, 2);
57 final int hours = ParsingUtils.parseInt(parseInfo.getLine(), 12, 2);
58 final int min = ParsingUtils.parseInt(parseInfo.getLine(), 15, 2);
59 final double sec = ParsingUtils.parseDouble(parseInfo.getLine(), 17, 5);
60 message.setEpochToc(new AbsoluteDate(year, month, day, hours, min, sec,
61 parseInfo.getTimeScales().getUTC()));
62
63
64 message.setTauN(Unit.SECOND.toSI(-ParsingUtils.parseDouble(parseInfo.getLine(), 22, 19)));
65 message.setGammaN(Unit.NONE.toSI(ParsingUtils.parseDouble(parseInfo.getLine(), 41, 19)));
66
67
68 message.setDate(message.getEpochToc());
69
70 } else {
71 message.setPRN(ParsingUtils.parseInt(parseInfo.getLine(), 1, 2));
72
73
74 message.setEpochToc(parseInfo.parseDate(parseInfo.getTimeScales().getUTC()));
75
76
77 message.setTauN(-parseInfo.parseDouble2(Unit.ONE));
78 message.setGammaN(parseInfo.parseDouble3(Unit.ONE));
79 message.setTime(fmod(parseInfo.parseDouble4(Unit.ONE), Constants.JULIAN_DAY));
80
81
82 message.setDate(message.getEpochToc());
83 }
84
85 }
86
87
88 @Override
89 public void parseLine01() {
90 super.parseLine01();
91 getMessage().setHealth(getParseInfo().parseDouble4(Unit.NONE));
92 }
93
94
95 @Override
96 public void parseLine02() {
97 super.parseLine02();
98 getMessage().setFrequencyNumber(getParseInfo().parseDouble4(Unit.NONE));
99 }
100
101
102 @Override
103 public void parseLine03() {
104 super.parseLine03();
105 final ParseInfo parseInfo = getParseInfo();
106 if (parseInfo.getHeader().getFormatVersion() < 3.045) {
107 parseInfo.closePendingRecord();
108 }
109 }
110
111
112 @Override
113 public void parseLine04() {
114 final ParseInfo parseInfo = getParseInfo();
115 final GLONASSFdmaNavigationMessage message = getMessage();
116 message.setStatusFlags(parseInfo.parseDouble1(Unit.NONE));
117 message.setGroupDelayDifference(parseInfo.parseDouble2(Unit.NONE));
118 message.setURA(parseInfo.parseDouble3(Unit.NONE));
119 message.setHealthFlags(parseInfo.parseDouble4(Unit.NONE));
120 parseInfo.closePendingRecord();
121 }
122
123
124 @Override
125 public void closeRecord(final RinexNavigation file) {
126 file.addGlonassNavigationMessage(getMessage());
127 }
128
129 }