1   /* Copyright 2002-2018 CS Systèmes d'Information
2    * Licensed to CS Systèmes d'Information (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.gnss;
18  
19  import java.util.HashMap;
20  import java.util.Map;
21  
22  /** Enumerate for all the Observation Types for Rinex 2 and 3.
23   * For Rinex 2, there is an two-character enumerate composed of the Observation
24   * Code (C,P,L,D,S) and the Frequency code (1,2,5,6,7,8).
25   * For Rinex 3 there is a three-character enumerate composed of the Observation
26   * Code (C,L,D,S), the frequency code (1,2,5,6,7,8) and a final attribute depending
27   * on the tracking mode or channel.
28   *
29   */
30  public enum ObservationType {
31  
32      /** Pseudorange GPS L1 / GLONASS G1 / Galileo E2-L1-E1 / SBAS L1 for Rinex2. */
33      C1(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.R01, Frequency.C01, Frequency.S01),
34  
35      /** Pseudorange GPS L2 / GLONASS G2 for Rinex2. */
36      C2(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.R02),
37  
38      /** Pseudorange GPS L5 / Galileo E5a / SBAS L5 for Rinex2. */
39      C5(MeasurementType.PSEUDO_RANGE, Frequency.G05, Frequency.E05, Frequency.S05),
40  
41      /** Pseudorange Galileo E6 for Rinex2. */
42      C6(MeasurementType.PSEUDO_RANGE, Frequency.E06),
43  
44      /** Pseudorange Galileo E5b for Rinex2. */
45      C7(MeasurementType.PSEUDO_RANGE, Frequency.E07),
46  
47      /** Pseudorange Galileo E5a+b for Rinex2. */
48      C8(MeasurementType.PSEUDO_RANGE, Frequency.E08),
49  
50      /** Pseudorange GPS L1 / GLONASS G1 for Rinex2. */
51      P1(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.R01),
52  
53      /** Pseudorange GPS L2 / GLONASS G2 for Rinex2. */
54      P2(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.R02),
55  
56      /** Carrier-phase GPS L1 / GLONASS G1 / Galileo E2-L1-E1 / SBAS L1 for Rinex2. */
57      L1(MeasurementType.CARRIER_PHASE, Frequency.G01, Frequency.R01, Frequency.C01, Frequency.S01),
58  
59      /** Carrier-phase GPS L2 / GLONASS G2 for Rinex2. */
60      L2(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.R02),
61  
62      /** Carrier-phase GPS L5 / Galileo E5a / SBAS L5 for Rinex2. */
63      L5(MeasurementType.CARRIER_PHASE, Frequency.G05, Frequency.E05, Frequency.S05),
64  
65      /** Carrier-phase Galileo E6 for Rinex2. */
66      L6(MeasurementType.CARRIER_PHASE, Frequency.E06),
67  
68      /** Carrier-phase Galileo E5b for Rinex2. */
69      L7(MeasurementType.CARRIER_PHASE, Frequency.E07),
70  
71      /** Carrier-phase Galileo E5a+b for Rinex2. */
72      L8(MeasurementType.CARRIER_PHASE, Frequency.E08),
73  
74      /** Doppler GPS L1 / GLONASS G1 / Galileo E2-L1-E1 / SBAS L1 for Rinex2. */
75      D1(MeasurementType.DOPPLER, Frequency.G01, Frequency.R01, Frequency.C01, Frequency.S01),
76  
77      /** Doppler GPS L2 / GLONASS G2 for Rinex2. */
78      D2(MeasurementType.DOPPLER, Frequency.G02, Frequency.R02),
79  
80      /** Doppler GPS L5 / Galileo E5a / SBAS L5 for Rinex2. */
81      D5(MeasurementType.DOPPLER, Frequency.G05, Frequency.E05, Frequency.S05),
82  
83      /** Doppler Galileo E6 for Rinex2. */
84      D6(MeasurementType.DOPPLER, Frequency.E06),
85  
86      /** Doppler Galileo E5b for Rinex2. */
87      D7(MeasurementType.DOPPLER, Frequency.E07),
88  
89      /** Doppler Galileo E5a+b for Rinex2. */
90      D8(MeasurementType.DOPPLER, Frequency.E08),
91  
92      /** Doppler GPS L1 / GLONASS G1 / Galileo E2-L1-E1 / SBAS L1 for Rinex2. */
93      S1(MeasurementType.SIGNAL_STRENGTH, Frequency.G01, Frequency.R01, Frequency.C01, Frequency.S01),
94  
95      /** Signal Strength GPS L2 / GLONASS G2 for Rinex2. */
96      S2(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.R02),
97  
98      /** Signal Strength GPS L5 / Galileo E5a / SBAS L5 for Rinex2. */
99      S5(MeasurementType.SIGNAL_STRENGTH, Frequency.G05, Frequency.E05, Frequency.S05),
100 
101     /** Signal Strength Galileo E6 for Rinex2. */
102     S6(MeasurementType.SIGNAL_STRENGTH, Frequency.E06),
103 
104     /** Signal Strength Galileo E5b for Rinex2. */
105     S7(MeasurementType.SIGNAL_STRENGTH, Frequency.E07),
106 
107     /** Signal Strength Galileo E5a+b for Rinex2. */
108     S8(MeasurementType.SIGNAL_STRENGTH, Frequency.E08),
109 
110     /** Pseudorange Galileo E1 A for Rinex3. */
111     C1A(MeasurementType.PSEUDO_RANGE, Frequency.E01),
112 
113     /** Pseudorange Galileo E1 I/NAV OS/CS/SoL for Rinex3. */
114     C1B(MeasurementType.PSEUDO_RANGE, Frequency.E01),
115 
116     /** Pseudorange GPS L1 C/A / GLONASS G1 C/A / Galileo E1 C / SBAS L1 C/A / QZSS L1 C/A for Rinex3. */
117     C1C(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.R01, Frequency.E01, Frequency.S01, Frequency.J01),
118 
119     /** Pseudorange Beidou B1 I for Rinex3.02. */
120     C1I(MeasurementType.PSEUDO_RANGE, Frequency.B01),
121 
122     /** Pseudorange GPS L1 L1C(P) / QZSS L1 L1C(P) for Rinex3. */
123     C1L(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.J01),
124 
125     /** Pseudorange GPS L1 M for Rinex3. */
126     C1M(MeasurementType.PSEUDO_RANGE, Frequency.G01),
127 
128     /** Pseudorange GPS L1 P(AS off) / GLONASS G1 P for Rinex3. */
129     C1P(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.R01),
130 
131     /** Pseudorange Beidou B1 Q for Rinex3.02. */
132     C1Q(MeasurementType.PSEUDO_RANGE, Frequency.B01),
133 
134     /** Pseudorange GPS L1 L1C(D) / QZSS L1 L1C(D) for Rinex3. */
135     C1S(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.J01),
136 
137     /** Pseudorange GPS L1 Z-tracking and similar (AS on) for Rinex3. */
138     C1W(MeasurementType.PSEUDO_RANGE, Frequency.G01),
139 
140     /** Pseudorange GPS L1 L1C (D+P) / Galileo E1 B+C / QZSS L1 L1C(D+P) for Rinex3. */
141     C1X(MeasurementType.PSEUDO_RANGE, Frequency.G01, Frequency.E01, Frequency.J01),
142 
143     /** Pseudorange GPS L1 Y for Rinex3. */
144     C1Y(MeasurementType.PSEUDO_RANGE, Frequency.G01),
145 
146     /** Pseudorange Galileo E1 C1Z A+B+C / QZSS L1 L1-SAIF for Rinex3. */
147     C1Z(MeasurementType.PSEUDO_RANGE, Frequency.E01, Frequency.J01),
148 
149     /** Pseudorange GPS L2 C/A / GLONASS G2 C/A for Rinex3. */
150     C2C(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.R02),
151 
152     /** Pseudorange GPS L1(C/A)+(P2-P1) (semi-codeless) for Rinex3. */
153     C2D(MeasurementType.PSEUDO_RANGE, Frequency.G01),
154 
155     /** Pseudorange Beidou B1 I for Rinex3.03. */
156     C2I(MeasurementType.PSEUDO_RANGE, Frequency.B01),
157 
158     /** Pseudorange GPS L2 L2C(L) / QZSS L2 L2C(2) for Rinex3. */
159     C2L(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.J02),
160 
161     /** Pseudorange GPS L2 M for Rinex3. */
162     C2M(MeasurementType.PSEUDO_RANGE, Frequency.G02),
163 
164     /** Pseudorange GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
165     C2P(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.R02),
166 
167     /** Pseudorange Beidou B1 Q for Rinex3.03. */
168     C2Q(MeasurementType.PSEUDO_RANGE, Frequency.B01),
169 
170     /** Pseudorange GPS L2 L2C(M) / QZSS L2 L2C(M) for Rinex3. */
171     C2S(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.J02),
172 
173     /** Pseudorange GPS L2 Z-tracking and similar (AS on) for Rinex3. */
174     C2W(MeasurementType.PSEUDO_RANGE, Frequency.G02),
175 
176     /** Pseudorange GPS L2 L2C (M+L) / QZSS L2 L2C(M+L) for Rinex3. */
177     C2X(MeasurementType.PSEUDO_RANGE, Frequency.G02, Frequency.J02),
178 
179     /** Pseudorange GPS L2 Y for Rinex3. */
180     C2Y(MeasurementType.PSEUDO_RANGE, Frequency.G02),
181 
182     /** Pseudorange GPS L5 I/ Galileo E5a F/NAV OS / SBAS L5 I / QZSS L5 I for Rinex3. */
183     C5I(MeasurementType.PSEUDO_RANGE, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
184 
185     /** Pseudorange GPS L5 Q/ Galileo E5a Q / SBAS L5 Q / QZSS L5 Q for Rinex3. */
186     C5Q(MeasurementType.PSEUDO_RANGE, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
187 
188     /** Pseudorange GPS L5 I+Q/ Galileo E5a I+Q / SBAS L5 I+Q / QZSS L5 I+Q for Rinex3. */
189     C5X(MeasurementType.PSEUDO_RANGE, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
190 
191     /** Pseudorange Galileo E6 A PRS for Rinex3. */
192     C6A(MeasurementType.PSEUDO_RANGE, Frequency.E06),
193 
194     /** Pseudorange Galileo E6 B C/NAV CS for Rinex3. */
195     C6B(MeasurementType.PSEUDO_RANGE, Frequency.E06),
196 
197     /** Pseudorange Galileo E6 C no data for Rinex3. */
198     C6C(MeasurementType.PSEUDO_RANGE, Frequency.E06),
199 
200     /** Pseudorange Beidou B3 I for Rinex3. */
201     C6I(MeasurementType.PSEUDO_RANGE, Frequency.B03),
202 
203     /** Pseudorange Beidou B3 Q for Rinex3. */
204     C6Q(MeasurementType.PSEUDO_RANGE, Frequency.B03),
205 
206     /** Pseudorange Galileo E6 B+C / QZSS LEX(6) S+L / Beidou B3 I+Q for Rinex3. */
207     C6X(MeasurementType.PSEUDO_RANGE, Frequency.E06, Frequency.J06, Frequency.B03),
208 
209     /** Pseudorange Galileo E6 A+B+C for Rinex3. */
210     C6Z(MeasurementType.PSEUDO_RANGE, Frequency.E06),
211 
212     /** Pseudorange Galileo E5b I I/NAV OS/CS/SoL / Beidou B2 I for Rinex3. */
213     C7I(MeasurementType.PSEUDO_RANGE, Frequency.E07, Frequency.B02),
214 
215     /** Pseudorange Galileo Q no data / Beidou B2 Q for Rinex3. */
216     C7Q(MeasurementType.PSEUDO_RANGE, Frequency.E07, Frequency.B02),
217 
218     /** Pseudorange Galileo E5b I+Q / Beidou B2 I+Q for Rinex3. */
219     C7X(MeasurementType.PSEUDO_RANGE, Frequency.E07, Frequency.B02),
220 
221     /** Pseudorange Galileo E5(E5a+E5b) I for Rinex3. */
222     C8I(MeasurementType.PSEUDO_RANGE, Frequency.E08),
223 
224     /** Pseudorange Galileo E5(E5a+E5b) Q for Rinex3. */
225     C8Q(MeasurementType.PSEUDO_RANGE, Frequency.E08),
226 
227     /** Pseudorange Galileo E5(E5a+E5b) I+Q for Rinex3. */
228     C8X(MeasurementType.PSEUDO_RANGE, Frequency.E08),
229 
230     /** Doppler Galileo E1 A for Rinex3. */
231     D1A(MeasurementType.DOPPLER, Frequency.E01),
232 
233     /** Doppler Galileo E1 I/NAV OS/CS/SoL for Rinex3. */
234     D1B(MeasurementType.DOPPLER, Frequency.E01),
235 
236     /** Doppler GPS L1 C/A / GLONASS G1 C/A / Galileo E1 C / SBAS L1 C/A / QZSS L1 C/A for Rinex3. */
237     D1C(MeasurementType.DOPPLER, Frequency.G01, Frequency.R01, Frequency.E01, Frequency.S01, Frequency.J01),
238 
239     /** Doppler Beidou B1 I for Rinex3. */
240     D1I(MeasurementType.DOPPLER, Frequency.B01),
241 
242     /** Doppler GPS L1 L1C(P) / QZSS L1 L1C(P) for Rinex3. */
243     D1L(MeasurementType.DOPPLER, Frequency.G01, Frequency.J01),
244 
245     /** Doppler GPS L2 M for Rinex3. */
246     D1M(MeasurementType.DOPPLER, Frequency.G02),
247 
248     /** Doppler GPS L1 codeless for Rinex3. */
249     D1N(MeasurementType.DOPPLER, Frequency.G01),
250 
251     /** Doppler GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
252     D1P(MeasurementType.DOPPLER, Frequency.G02, Frequency.R02),
253 
254     /** Doppler GPS L1 L1C(D) / QZSS L1 L1C(D) for Rinex3. */
255     D1S(MeasurementType.DOPPLER, Frequency.G01, Frequency.J01),
256 
257     /** Doppler GPS L1 Z-tracking and similar (AS on) for Rinex3. */
258     D1W(MeasurementType.DOPPLER, Frequency.G01),
259 
260     /** Doppler GPS L1 L1C (D+P) / Galileo E1 B+C / QZSS L1 L1C(D+P) for Rinex3. */
261     D1X(MeasurementType.DOPPLER, Frequency.G01, Frequency.E01, Frequency.J01),
262 
263     /** Doppler GPS L1 Y for Rinex3. */
264     D1Y(MeasurementType.DOPPLER, Frequency.G01),
265 
266     /** Doppler Galileo E1 C1Z A+B+C / QZSS L1 L1-SAIF for Rinex3. */
267     D1Z(MeasurementType.DOPPLER, Frequency.E01, Frequency.J01),
268 
269     /** Doppler GPS L2 C/A / GLONASS G2 C/A for Rinex3. */
270     D2C(MeasurementType.DOPPLER, Frequency.G02, Frequency.R02),
271 
272     /** Doppler GPS L1(C/A)+(P2-P1) (semi-codeless) for Rinex3. */
273     D2D(MeasurementType.DOPPLER, Frequency.G01),
274 
275     /** Doppler Beidou B1 I for Rinex3.03. */
276     D2I(MeasurementType.DOPPLER, Frequency.B01),
277 
278     /** Doppler GPS L2 L2C(L) / QZSS L2 L2C(2) for Rinex3. */
279     D2L(MeasurementType.DOPPLER, Frequency.G02, Frequency.J02),
280 
281     /** Doppler GPS L2 M for Rinex3. */
282     D2M(MeasurementType.DOPPLER, Frequency.G02),
283 
284     /** Doppler GPS L2 codeless for Rinex3. */
285     D2N(MeasurementType.DOPPLER, Frequency.G02),
286 
287     /** Doppler GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
288     D2P(MeasurementType.DOPPLER, Frequency.G02, Frequency.R02),
289 
290     /** Doppler Beidou B1 Q for Rinex3.03. */
291     D2Q(MeasurementType.DOPPLER, Frequency.B01),
292 
293     /** Doppler GPS L2 L2C(M) / QZSS L2 L2C(M) for Rinex3. */
294     D2S(MeasurementType.DOPPLER, Frequency.G02, Frequency.J02),
295 
296     /** Doppler GPS L2 Z-tracking and similar (AS on) for Rinex3. */
297     D2W(MeasurementType.DOPPLER, Frequency.G02),
298 
299     /** Doppler GPS L2 L2C (M+L) / QZSS L2 L2C(M+L) for Rinex3. */
300     D2X(MeasurementType.DOPPLER, Frequency.G02, Frequency.J02),
301 
302     /** Doppler GPS L2 Y for Rinex3. */
303     D2Y(MeasurementType.DOPPLER, Frequency.G02),
304 
305     /** Doppler GPS L5 I/ Galileo E5a F/NAV OS / SBAS L5 I / QZSS L5 I for Rinex3. */
306     D5I(MeasurementType.DOPPLER, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
307 
308     /** Doppler GPS L5 Q/ Galileo E5a Q / SBAS L5 Q / QZSS L5 Q for Rinex3. */
309     D5Q(MeasurementType.DOPPLER, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
310 
311     /** Doppler GPS L5 I+Q/ Galileo E5a I+Q / SBAS L5 I+Q / QZSS L5 I+Q for Rinex3. */
312     D5X(MeasurementType.DOPPLER, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
313 
314     /** Doppler Galileo E6 A PRS for Rinex3. */
315     D6A(MeasurementType.DOPPLER, Frequency.E06),
316 
317     /** Doppler Galileo E6 B C/NAV CS for Rinex3. */
318     D6B(MeasurementType.DOPPLER, Frequency.E06),
319 
320     /** Doppler Galileo E6 C no data for Rinex3. */
321     D6C(MeasurementType.DOPPLER, Frequency.E06),
322 
323     /** Doppler Beidou B3 I for Rinex3. */
324     D6I(MeasurementType.DOPPLER, Frequency.B03),
325 
326     /** Doppler Beidou B3 Q for Rinex3. */
327     D6Q(MeasurementType.DOPPLER, Frequency.B03),
328 
329     /** Doppler Galileo E6 B+C / QZSS LEX(6) S+L / Beidou B3 I+Q for Rinex3. */
330     D6X(MeasurementType.DOPPLER, Frequency.E06, Frequency.J06, Frequency.B03),
331 
332     /** Doppler Galileo E6 A+B+C for Rinex3. */
333     D6Z(MeasurementType.DOPPLER, Frequency.E06),
334 
335     /** Doppler Galileo E5b I I/NAV OS/CS/SoL / Beidou B2 I for Rinex3. */
336     D7I(MeasurementType.DOPPLER, Frequency.E07, Frequency.B02),
337 
338     /** Doppler Galileo Q no data / Beidou B2 Q for Rinex3. */
339     D7Q(MeasurementType.DOPPLER, Frequency.E07, Frequency.B02),
340 
341     /** Doppler Galileo E5b I+Q / Beidou B2 I+Q for Rinex3. */
342     D7X(MeasurementType.DOPPLER, Frequency.E07, Frequency.B02),
343 
344     /** Doppler Galileo E5(E5a+E5b) I for Rinex3. */
345     D8I(MeasurementType.DOPPLER, Frequency.E08),
346 
347     /** Doppler Galileo E5(E5a+E5b) Q for Rinex3. */
348     D8Q(MeasurementType.DOPPLER, Frequency.E08),
349 
350     /** Doppler Galileo E5(E5a+E5b) I+Q for Rinex3. */
351     D8X(MeasurementType.DOPPLER, Frequency.E08),
352 
353     /** Carrier-phase Galileo E1 A for Rinex3. */
354     L1A(MeasurementType.CARRIER_PHASE, Frequency.E01),
355 
356     /** Carrier-phase Galileo E1 I/NAV OS/CS/SoL for Rinex3. */
357     L1B(MeasurementType.CARRIER_PHASE, Frequency.E01),
358 
359     /** Carrier-phase GPS L1 C/A / GLONASS G1 C/A / Galileo E1 C / SBAS L1 C/A / QZSS L1 C/A for Rinex3. */
360     L1C(MeasurementType.CARRIER_PHASE, Frequency.G01, Frequency.R01, Frequency.E01, Frequency.S01, Frequency.J01),
361 
362     /** Carrier-phase Beidou B1 I for Rinex3. */
363     L1I(MeasurementType.CARRIER_PHASE, Frequency.B01),
364 
365     /** Carrier-phase GPS L1 L1C(P) / QZSS L1 L1C(P) for Rinex3. */
366     L1L(MeasurementType.CARRIER_PHASE, Frequency.G01, Frequency.J01),
367 
368     /** Carrier-phase GPS L2 M for Rinex3. */
369     L1M(MeasurementType.CARRIER_PHASE, Frequency.G02),
370 
371     /** Carrier-phase GPS L1 codeless for Rinex3. */
372     L1N(MeasurementType.CARRIER_PHASE, Frequency.G01),
373 
374     /** Carrier-phase GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
375     L1P(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.R02),
376 
377     /** Carrier-phase GPS L1 L1C(D) / QZSS L1 L1C(D) for Rinex3. */
378     L1S(MeasurementType.CARRIER_PHASE, Frequency.G01, Frequency.J01),
379 
380     /** Carrier-phase GPS L1 Z-tracking and similar (AS on) for Rinex3. */
381     L1W(MeasurementType.CARRIER_PHASE, Frequency.G01),
382 
383     /** Carrier-phase GPS L1 L1C (D+P) / Galileo E1 B+C / QZSS L1 L1C(D+P) for Rinex3. */
384     L1X(MeasurementType.CARRIER_PHASE, Frequency.G01, Frequency.E01, Frequency.J01),
385 
386     /** Carrier-phase GPS L1 Y for Rinex3. */
387     L1Y(MeasurementType.CARRIER_PHASE, Frequency.G01),
388 
389     /** Carrier-phase Galileo E1 C1Z A+B+C / QZSS L1 L1-SAIF for Rinex3. */
390     L1Z(MeasurementType.CARRIER_PHASE, Frequency.E01, Frequency.J01),
391 
392     /** Carrier-phase GPS L2 C/A / GLONASS G2 C/A for Rinex3. */
393     L2C(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.R02),
394 
395     /** Carrier-phase GPS L1(C/A)+(P2-P1) (semi-codeless) for Rinex3. */
396     L2D(MeasurementType.CARRIER_PHASE, Frequency.G01),
397 
398     /** Carrier-phase Beidou B1 I for Rinex3.03. */
399     L2I(MeasurementType.CARRIER_PHASE, Frequency.B01),
400 
401     /** Carrier-phase GPS L2 L2C(L) / QZSS L2 L2C(2) for Rinex3. */
402     L2L(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.J02),
403 
404     /** Carrier-phase GPS L2 M for Rinex3. */
405     L2M(MeasurementType.CARRIER_PHASE, Frequency.G02),
406 
407     /** Carrier-phase GPS L2 codeless for Rinex3. */
408     L2N(MeasurementType.CARRIER_PHASE, Frequency.G02),
409 
410     /** Carrier-phase GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
411     L2P(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.R02),
412 
413     /** Carrier-phase Beidou B1 Q for Rinex3.03. */
414     L2Q(MeasurementType.CARRIER_PHASE, Frequency.B01),
415 
416     /** Carrier-phase GPS L2 L2C(M) / QZSS L2 L2C(M) for Rinex3. */
417     L2S(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.J02),
418 
419     /** Carrier-phase GPS L2 Z-tracking and similar (AS on) for Rinex3. */
420     L2W(MeasurementType.CARRIER_PHASE, Frequency.G02),
421 
422     /** Carrier-phase GPS L2 L2C (M+L) / QZSS L2 L2C(M+L) for Rinex3. */
423     L2X(MeasurementType.CARRIER_PHASE, Frequency.G02, Frequency.J02),
424 
425     /** Carrier-phase GPS L2 Y for Rinex3. */
426     L2Y(MeasurementType.CARRIER_PHASE, Frequency.G02),
427 
428     /** Carrier-phase GPS L5 I/ Galileo E5a F/NAV OS / SBAS L5 I / QZSS L5 I for Rinex3. */
429     L5I(MeasurementType.CARRIER_PHASE, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
430 
431     /** Carrier-phase GPS L5 Q/ Galileo E5a Q / SBAS L5 Q / QZSS L5 Q for Rinex3. */
432     L5Q(MeasurementType.CARRIER_PHASE, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
433 
434     /** Carrier-phase GPS L5 I+Q/ Galileo E5a I+Q / SBAS L5 I+Q / QZSS L5 I+Q for Rinex3. */
435     L5X(MeasurementType.CARRIER_PHASE, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
436 
437     /** Carrier-phase Galileo E6 A PRS for Rinex3. */
438     L6A(MeasurementType.CARRIER_PHASE, Frequency.E06),
439 
440     /** Carrier-phase Galileo E6 B C/NAV CS for Rinex3. */
441     L6B(MeasurementType.CARRIER_PHASE, Frequency.E06),
442 
443     /** Carrier-phase Galileo E6 C no data for Rinex3. */
444     L6C(MeasurementType.CARRIER_PHASE, Frequency.E06),
445 
446     /** Carrier-phase Beidou B3 I for Rinex3. */
447     L6I(MeasurementType.CARRIER_PHASE, Frequency.B03),
448 
449     /** Carrier-phase Beidou B3 Q for Rinex3. */
450     L6Q(MeasurementType.CARRIER_PHASE, Frequency.B03),
451 
452     /** Carrier-phase Galileo E6 B+C / QZSS LEX(6) S+L / Beidou B3 I+Q for Rinex3. */
453     L6X(MeasurementType.CARRIER_PHASE, Frequency.E06, Frequency.J06, Frequency.B03),
454 
455     /** Carrier-phase Galileo E6 A+B+C for Rinex3. */
456     L6Z(MeasurementType.CARRIER_PHASE, Frequency.E06),
457 
458     /** Carrier-phase Galileo E5b I I/NAV OS/CS/SoL / Beidou B2 I for Rinex3. */
459     L7I(MeasurementType.CARRIER_PHASE, Frequency.E07, Frequency.B02),
460 
461     /** Carrier-phase Galileo Q no data / Beidou B2 Q for Rinex3. */
462     L7Q(MeasurementType.CARRIER_PHASE, Frequency.E07, Frequency.B02),
463 
464     /** Carrier-phase Galileo E5b I+Q / Beidou B2 I+Q for Rinex3. */
465     L7X(MeasurementType.CARRIER_PHASE, Frequency.E07, Frequency.B02),
466 
467     /** Carrier-phase Galileo E5(E5a+E5b) I for Rinex3. */
468     L8I(MeasurementType.CARRIER_PHASE, Frequency.E08),
469 
470     /** Carrier-phase Galileo E5(E5a+E5b) Q for Rinex3. */
471     L8Q(MeasurementType.CARRIER_PHASE, Frequency.E08),
472 
473     /** Carrier-phase Galileo E5(E5a+E5b) I+Q for Rinex3. */
474     L8X(MeasurementType.CARRIER_PHASE, Frequency.E08),
475 
476     /** Signal-strength Galileo E1 A for Rinex3. */
477     S1A(MeasurementType.SIGNAL_STRENGTH, Frequency.E01),
478 
479     /** Signal-strength Galileo E1 I/NAV OS/CS/SoL for Rinex3. */
480     S1B(MeasurementType.SIGNAL_STRENGTH, Frequency.E01),
481 
482     /** Signal-strength GPS L1 C/A / GLONASS G1 C/A / Galileo E1 C / SBAS L1 C/A / QZSS L1 C/A for Rinex3. */
483     S1C(MeasurementType.SIGNAL_STRENGTH, Frequency.G01, Frequency.R01, Frequency.E01, Frequency.S01, Frequency.J01),
484 
485     /** Signal-strength Beidou B1 I for Rinex3. */
486     S1I(MeasurementType.SIGNAL_STRENGTH, Frequency.B01),
487 
488     /** Signal-strength GPS L1 L1C(P) / QZSS L1 L1C(P) for Rinex3. */
489     S1L(MeasurementType.SIGNAL_STRENGTH, Frequency.G01, Frequency.J01),
490 
491     /** Signal-strength GPS L2 M for Rinex3. */
492     S1M(MeasurementType.SIGNAL_STRENGTH, Frequency.G02),
493 
494     /** Signal-strength GPS L1 codeless for Rinex3. */
495     S1N(MeasurementType.SIGNAL_STRENGTH, Frequency.G01),
496 
497     /** Signal-strength GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
498     S1P(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.R02),
499 
500     /** Signal-strength GPS L1 L1C(D) / QZSS L1 L1C(D) for Rinex3. */
501     S1S(MeasurementType.SIGNAL_STRENGTH, Frequency.G01, Frequency.J01),
502 
503     /** Signal-strength GPS L1 Z-tracking and similar (AS on) for Rinex3. */
504     S1W(MeasurementType.SIGNAL_STRENGTH, Frequency.G01),
505 
506     /** Signal-strength GPS L1 L1C (D+P) / Galileo E1 B+C / QZSS L1 L1C(D+P) for Rinex3. */
507     S1X(MeasurementType.SIGNAL_STRENGTH, Frequency.G01, Frequency.E01, Frequency.J01),
508 
509     /** Signal-strength GPS L1 Y for Rinex3. */
510     S1Y(MeasurementType.SIGNAL_STRENGTH, Frequency.G01),
511 
512     /** Signal-strength Galileo E1 C1Z A+B+C / QZSS L1 L1-SAIF for Rinex3. */
513     S1Z(MeasurementType.SIGNAL_STRENGTH, Frequency.E01, Frequency.J01),
514 
515     /** Signal-strength GPS L2 C/A / GLONASS G2 C/A for Rinex3. */
516     S2C(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.R02),
517 
518     /** Signal-strength GPS L1(C/A)+(P2-P1) (semi-codeless) for Rinex3. */
519     S2D(MeasurementType.SIGNAL_STRENGTH, Frequency.G01),
520 
521     /** Signal-strength Beidou B1 I for Rinex3.03. */
522     S2I(MeasurementType.SIGNAL_STRENGTH, Frequency.B01),
523 
524     /** Signal-strength GPS L2 L2C(L) / QZSS L2 L2C(2) for Rinex3. */
525     S2L(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.J02),
526 
527     /** Signal-strength GPS L2 M for Rinex3. */
528     S2M(MeasurementType.SIGNAL_STRENGTH, Frequency.G02),
529 
530     /** Signal-strength GPS L2 codeless for Rinex3. */
531     S2N(MeasurementType.SIGNAL_STRENGTH, Frequency.G02),
532 
533     /** Signal-strength GPS L2 P(AS off) / GLONASS G2 P for Rinex3. */
534     S2P(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.R02),
535 
536     /** Signal-strength Beidou B1 Q for Rinex3.03. */
537     S2Q(MeasurementType.SIGNAL_STRENGTH, Frequency.B01),
538 
539     /** Signal-strength GPS L2 L2C(M) / QZSS L2 L2C(M) for Rinex3. */
540     S2S(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.J02),
541 
542     /** Signal-strength GPS L2 Z-tracking and similar (AS on) for Rinex3. */
543     S2W(MeasurementType.SIGNAL_STRENGTH, Frequency.G02),
544 
545     /** Signal-strength GPS L2 L2C (M+L) / QZSS L2 L2C(M+L) for Rinex3. */
546     S2X(MeasurementType.SIGNAL_STRENGTH, Frequency.G02, Frequency.J02),
547 
548     /** Signal-strength GPS L2 Y for Rinex3. */
549     S2Y(MeasurementType.SIGNAL_STRENGTH, Frequency.G02),
550 
551     /** Signal-strength GPS L5 I/ Galileo E5a F/NAV OS / SBAS L5 I / QZSS L5 I for Rinex3. */
552     S5I(MeasurementType.SIGNAL_STRENGTH, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
553 
554     /** Signal-strength GPS L5 Q/ Galileo E5a Q / SBAS L5 Q / QZSS L5 Q for Rinex3. */
555     S5Q(MeasurementType.SIGNAL_STRENGTH, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
556 
557     /** Signal-strength GPS L5 I+Q/ Galileo E5a I+Q / SBAS L5 I+Q / QZSS L5 I+Q for Rinex3. */
558     S5X(MeasurementType.SIGNAL_STRENGTH, Frequency.G05, Frequency.E05, Frequency.S05, Frequency.J05),
559 
560     /** Signal-strength Galileo E6 A PRS for Rinex3. */
561     S6A(MeasurementType.SIGNAL_STRENGTH, Frequency.E06),
562 
563     /** Signal-strength Galileo E6 B C/NAV CS for Rinex3. */
564     S6B(MeasurementType.SIGNAL_STRENGTH, Frequency.E06),
565 
566     /** Signal-strength Galileo E6 C no data for Rinex3. */
567     S6C(MeasurementType.SIGNAL_STRENGTH, Frequency.E06),
568 
569     /** Signal-strength Beidou B3 I for Rinex3. */
570     S6I(MeasurementType.SIGNAL_STRENGTH, Frequency.B03),
571 
572     /** Signal-strength Beidou B3 Q for Rinex3. */
573     S6Q(MeasurementType.SIGNAL_STRENGTH, Frequency.B03),
574 
575     /** Signal-strength Galileo E6 B+C / QZSS LEX(6) S+L / Beidou B3 I+Q for Rinex3. */
576     S6X(MeasurementType.SIGNAL_STRENGTH, Frequency.E06, Frequency.J06, Frequency.B03),
577 
578     /** Signal-strength Galileo E6 A+B+C for Rinex3. */
579     S6Z(MeasurementType.SIGNAL_STRENGTH, Frequency.E06),
580 
581     /** Signal-strength Galileo E5b I I/NAV OS/CS/SoL / Beidou B2 I for Rinex3. */
582     S7I(MeasurementType.SIGNAL_STRENGTH, Frequency.E07, Frequency.B02),
583 
584     /** Signal-strength Galileo Q no data / Beidou B2 Q for Rinex3. */
585     S7Q(MeasurementType.SIGNAL_STRENGTH, Frequency.E07, Frequency.B02),
586 
587     /** Signal-strength Galileo E5b I+Q / Beidou B2 I+Q for Rinex3. */
588     S7X(MeasurementType.SIGNAL_STRENGTH, Frequency.E07, Frequency.B02),
589 
590     /** Signal-strength Galileo E5(E5a+E5b) I for Rinex3. */
591     S8I(MeasurementType.SIGNAL_STRENGTH, Frequency.E08),
592 
593     /** Signal-strength Galileo E5(E5a+E5b) Q for Rinex3. */
594     S8Q(MeasurementType.SIGNAL_STRENGTH, Frequency.E08),
595 
596     /** Signal-strength Galileo E5(E5a+E5b) I+Q for Rinex3. */
597     S8X(MeasurementType.SIGNAL_STRENGTH, Frequency.E08);
598 
599     /** Measurement type. */
600     private final MeasurementType type;
601 
602     /** Map of ferquencies. */
603     private final Map<SatelliteSystem, Frequency> frequencies;
604 
605     /** Simple  constructor.
606      * @param type measurement type
607      * @param frequencies compatible frequencies
608      */
609     ObservationType(final MeasurementType type, final Frequency... frequencies) {
610         this.type = type;
611         this.frequencies = new HashMap<>(frequencies.length);
612         for (final Frequency f : frequencies) {
613             this.frequencies.put(f.getSatelliteSystem(), f);
614         }
615     }
616 
617     /** Get the measurement type.
618      * @return measurement type
619      */
620     public MeasurementType getMeasurementType() {
621         return type;
622     }
623 
624     /** Get the frequency for a specified satellite system.
625      * @param system satellite system
626      * @return frequency for the satellite system, or null if satellite system not compatible
627      */
628     public Frequency getFrequency(final SatelliteSystem system) {
629         return frequencies.get(system);
630     }
631 
632 }