RinexMetHeader.hpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 // This software was developed by Applied Research Laboratories at the
28 // University of Texas at Austin, under contract to an agency or agencies
29 // within the U.S. Department of Defense. The U.S. Government retains all
30 // rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 // Pursuant to DoD Directive 523024
33 //
34 // DISTRIBUTION STATEMENT A: This software has been approved for public
35 // release, distribution is unlimited.
36 //
37 //==============================================================================
38 
44 #ifndef GNSSTK_RINEXMETHEADER_HPP
45 #define GNSSTK_RINEXMETHEADER_HPP
46 
47 #include <vector>
48 #include "gnsstk_export.h"
49 #include "StringUtils.hpp"
50 #include "FFStream.hpp"
51 #include "RinexMetBase.hpp"
52 #include "Triple.hpp"
53 
54 namespace gnsstk
55 {
57 
58 
59 
71  {
72 
73  public:
74 
75  // forward declarations
76  struct sensorType;
77 
78  struct sensorPosType;
79 
82  {
83  PR,
84  TD,
85  HR,
86  ZW,
87  ZD,
88  ZT,
89  WD,
90  WS,
91  RI,
92  HI
93  };
94 
96  RinexMetHeader() : valid(0), version(2.1) {}
97 
99  virtual ~RinexMetHeader() {}
100 
101  // The next four lines is our common interface
103  virtual bool isHeader(void) const {return true;}
104 
106  virtual void dump(std::ostream& s) const;
107 
111  static RinexMetType convertObsType(const std::string& oneObs);
112 
116  static std::string convertObsType(const RinexMetType& oneObs);
117 
119  unsigned long valid;
120 
123  {
124  validVersion = 0x01,
125  validRunBy = 0x02,
126  validComment = 0x04,
129  validObsType = 0x020,
130  validSensorType = 0x040,
131  validSensorPos = 0x080,
132 
133  validEoH = 0x080000000,
134 
137  allValid20 = 0x0800000EB,
140  allValid21 = 0x0800000EB,
143  allValid211 = 0x0800000EB
144  };
145 
146  static inline std::string bitsAsString(validBits b)
147  {
148  switch (b)
149  {
150  case validVersion:
151  return stringVersion;
152  case validRunBy:
153  return stringRunBy;
154  case validComment:
155  return stringComment;
156  case validMarkerName:
157  return stringMarkerName;
158  case validMarkerNumber:
159  return stringMarkerNumber;
160  case validObsType:
161  return stringObsType;
162  case validSensorType:
163  return stringSensorType;
164  case validSensorPos:
165  return stringSensorPos;
166  case validEoH:
167  return stringEoH;
168  default: break; //NB Determine if additional enumeration values need to be handled
169  }
170 
171  return "*UNKNOWN/INVALID BITS*";
172  }
173 
174  /* @return a string composed the RINEX header strings
175  * represented by the validBits set in vb, surrounded by the
176  * quote character, separated by sep.
177  * @param vb bit field with valid bits set
178  * @param quote quote character to use around RINEX header strings.
179  * @param sep separator used between rinex header strings.
180  */
181  static std::string bitString(unsigned long vb, char quote='\"',
182  std::string sep=", ");
183 
191  bool compare(const RinexMetHeader& right,
192  std::vector<std::string>& diffs,
193  const std::vector<std::string>& inclExclList,
194  bool incl = false);
195 
196 
197  double version;
198 
199  std::string fileType;
200  std::string fileProgram;
201  std::string fileAgency;
202  std::string date;
203  std::vector<std::string> commentList;
204  std::string markerName;
205  std::string markerNumber;
206 
213  std::vector<RinexMetType> obsTypeList;
214  std::vector<sensorType> sensorTypeList;
215  std::vector<sensorPosType> sensorPosList;
216 
217  GNSSTK_EXPORT
218  static const int maxObsPerLine;
219 
220  GNSSTK_EXPORT
221  static const std::string stringVersion;
222  GNSSTK_EXPORT
223  static const std::string stringRunBy;
224  GNSSTK_EXPORT
225  static const std::string stringComment;
226  GNSSTK_EXPORT
227  static const std::string stringMarkerName;
228  GNSSTK_EXPORT
229  static const std::string stringMarkerNumber;
230  GNSSTK_EXPORT
231  static const std::string stringObsType;
232  GNSSTK_EXPORT
233  static const std::string stringSensorType;
234  GNSSTK_EXPORT
235  static const std::string stringSensorPos;
236  GNSSTK_EXPORT
237  static const std::string stringEoH;
238 
239 #ifndef SWIG // nested structs not supported by SWIG
240  struct sensorType
242  {
243  std::string model;
244  std::string type;
245  double accuracy;
247  bool operator==(const sensorType& r) const;
248  bool operator<(const sensorType& r) const;
249  };
250 #endif
251 
252 
253 #ifndef SWIG // nested structs not supported by SWIG
254  struct sensorPosType
256  {
261  double height;
264  bool operator==(const sensorPosType& r) const;
265  bool operator<(const sensorPosType& r) const;
266  };
267 #endif
268 
269  protected:
270 
276  virtual void reallyPutRecord(FFStream& s) const;
277 
288  virtual void reallyGetRecord(FFStream& s);
289 
290  }; // class RinexMetHeader
291 
293 
294 } // namespace
295 
296 #endif
gnsstk::RinexMetHeader::PR
@ PR
Pressure (mbar)
Definition: RinexMetHeader.hpp:83
gnsstk::RinexMetHeader::RI
@ RI
"Rain increment": Rain accumulation since last measurement (1/10 mm)
Definition: RinexMetHeader.hpp:91
gnsstk::RinexMetHeader::markerNumber
std::string markerNumber
The number of the location.
Definition: RinexMetHeader.hpp:205
gnsstk::RinexMetBase
Definition: RinexMetBase.hpp:57
gnsstk::RinexMetHeader::RinexMetHeader
RinexMetHeader()
Constructor.
Definition: RinexMetHeader.hpp:96
gnsstk::RinexMetHeader::bitsAsString
static std::string bitsAsString(validBits b)
Definition: RinexMetHeader.hpp:146
gnsstk::RinexMetHeader::commentList
std::vector< std::string > commentList
A list of comments.
Definition: RinexMetHeader.hpp:203
gnsstk::RinexMetHeader::sensorType::operator<
bool operator<(const sensorType &r) const
Definition: RinexMetHeader.cpp:589
gnsstk::RinexMetHeader::stringComment
static const GNSSTK_EXPORT std::string stringComment
"COMMENT"
Definition: RinexMetHeader.hpp:225
gnsstk::RinexMetHeader::HR
@ HR
Relative humidity (percent)
Definition: RinexMetHeader.hpp:85
gnsstk::RinexMetHeader::bitString
static std::string bitString(unsigned long vb, char quote='\"', std::string sep=", ")
Definition: RinexMetHeader.cpp:71
gnsstk::FFStream
Definition: FFStream.hpp:119
gnsstk::RinexMetHeader::maxObsPerLine
static const GNSSTK_EXPORT int maxObsPerLine
Holds the max records per line.
Definition: RinexMetHeader.hpp:218
StringUtils.hpp
gnsstk::RinexMetHeader::stringSensorPos
static const GNSSTK_EXPORT std::string stringSensorPos
"SENSOR POS XYZ/H"
Definition: RinexMetHeader.hpp:235
gnsstk::RinexMetHeader::allValid20
@ allValid20
Definition: RinexMetHeader.hpp:137
gnsstk::RinexMetHeader::sensorPosType::height
double height
Definition: RinexMetHeader.hpp:261
gnsstk::RinexMetHeader::sensorPosType::operator==
bool operator==(const sensorPosType &r) const
Definition: RinexMetHeader.cpp:604
gnsstk::RinexMetHeader::reallyGetRecord
virtual void reallyGetRecord(FFStream &s)
Definition: RinexMetHeader.cpp:257
gnsstk::RinexMetHeader::stringSensorType
static const GNSSTK_EXPORT std::string stringSensorType
"SENSOR MOD/TYPE/ACC"
Definition: RinexMetHeader.hpp:233
gnsstk::RinexMetHeader::sensorType
Struct for holding information about a sensor.
Definition: RinexMetHeader.hpp:241
gnsstk::RinexMetHeader::stringObsType
static const GNSSTK_EXPORT std::string stringObsType
"# / TYPES OF OBSERV"
Definition: RinexMetHeader.hpp:231
gnsstk::RinexMetHeader::sensorType::obsType
RinexMetHeader::RinexMetType obsType
The obs type this sensor corresponds to.
Definition: RinexMetHeader.hpp:246
gnsstk::RinexMetHeader::validVersion
@ validVersion
Set if the RINEX version is valid.
Definition: RinexMetHeader.hpp:124
gnsstk::Triple
Definition: Triple.hpp:68
gnsstk::RinexMetHeader::RinexMetType
RinexMetType
Enum for the different types of data in this file.
Definition: RinexMetHeader.hpp:81
gnsstk::RinexMetHeader::reallyPutRecord
virtual void reallyPutRecord(FFStream &s) const
Definition: RinexMetHeader.cpp:92
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::RinexMetHeader::TD
@ TD
Dry temperature (deg C)
Definition: RinexMetHeader.hpp:84
gnsstk::RinexMetHeader::fileAgency
std::string fileAgency
The group who generated it.
Definition: RinexMetHeader.hpp:201
gnsstk::RinexMetHeader::valid
unsigned long valid
Tell me, Am I valid?
Definition: RinexMetHeader.hpp:119
gnsstk::RinexMetHeader::ZT
@ ZT
Total zenith path delay (mm)
Definition: RinexMetHeader.hpp:88
gnsstk::RinexMetHeader::validBits
validBits
These are validity bits used in checking the RINEX MET header.
Definition: RinexMetHeader.hpp:122
gnsstk::RinexMetHeader::dump
virtual void dump(std::ostream &s) const
A debug function that outputs the header to s.
Definition: RinexMetHeader.cpp:446
gnsstk::RinexMetHeader::stringEoH
static const GNSSTK_EXPORT std::string stringEoH
"END OF HEADER"
Definition: RinexMetHeader.hpp:237
gnsstk::RinexMetHeader::fileType
std::string fileType
The type of file it is.
Definition: RinexMetHeader.hpp:199
gnsstk::RinexMetHeader::validSensorPos
@ validSensorPos
Set if Sensor position is valid.
Definition: RinexMetHeader.hpp:131
gnsstk::RinexMetHeader::validObsType
@ validObsType
Set if Num/Types of Obs is valid.
Definition: RinexMetHeader.hpp:129
RinexMetBase.hpp
gnsstk::RinexMetHeader::isHeader
virtual bool isHeader(void) const
RinexMetHeader is a "header" so this function always returns true.
Definition: RinexMetHeader.hpp:103
gnsstk::RinexMetHeader::WD
@ WD
Wind azmiuth from where the wind blows (deg)
Definition: RinexMetHeader.hpp:89
gnsstk::RinexMetHeader::convertObsType
static RinexMetType convertObsType(const std::string &oneObs)
Definition: RinexMetHeader.cpp:464
gnsstk::RinexMetHeader::ZW
@ ZW
Wet zenith path delay (mm)
Definition: RinexMetHeader.hpp:86
gnsstk::RinexMetHeader::validEoH
@ validEoH
Set if the end of header is valid.
Definition: RinexMetHeader.hpp:133
gnsstk::RinexMetHeader::validComment
@ validComment
Set if the comments are valid. Very subjective...
Definition: RinexMetHeader.hpp:126
gnsstk::RinexMetHeader::sensorPosType::operator<
bool operator<(const sensorPosType &r) const
Definition: RinexMetHeader.cpp:614
gnsstk::RinexMetHeader::sensorPosList
std::vector< sensorPosType > sensorPosList
A list of sensor positions used in the file.
Definition: RinexMetHeader.hpp:215
gnsstk::RinexMetHeader::sensorPosType::position
gnsstk::Triple position
Definition: RinexMetHeader.hpp:260
gnsstk::RinexMetHeader::compare
bool compare(const RinexMetHeader &right, std::vector< std::string > &diffs, const std::vector< std::string > &inclExclList, bool incl=false)
Definition: RinexMetHeader.cpp:503
gnsstk::RinexMetHeader::sensorPosType::obsType
RinexMetHeader::RinexMetType obsType
The obs type of the sensor this position corresponds to.
Definition: RinexMetHeader.hpp:263
gnsstk::RinexMetHeader::validMarkerNumber
@ validMarkerNumber
Set if the Marker Number is valid.
Definition: RinexMetHeader.hpp:128
gnsstk::RinexMetHeader::validSensorType
@ validSensorType
Set if Sensor Mod/Type/Acc is valid.
Definition: RinexMetHeader.hpp:130
gnsstk::RinexMetHeader::allValid21
@ allValid21
Definition: RinexMetHeader.hpp:140
gnsstk::RinexMetHeader::obsTypeList
std::vector< RinexMetType > obsTypeList
Definition: RinexMetHeader.hpp:213
gnsstk::RinexMetHeader::ZD
@ ZD
Dry component of zenith path delay (mm)
Definition: RinexMetHeader.hpp:87
Triple.hpp
gnsstk::RinexMetHeader::sensorPosType
Struct for holding info about a sensor position.
Definition: RinexMetHeader.hpp:255
gnsstk::RinexMetHeader::allValid211
@ allValid211
Definition: RinexMetHeader.hpp:143
gnsstk::RinexMetHeader::sensorType::accuracy
double accuracy
The accuracy of the sensor.
Definition: RinexMetHeader.hpp:245
gnsstk::RinexMetHeader::stringVersion
static const GNSSTK_EXPORT std::string stringVersion
"RINEX VERSION / TYPE"
Definition: RinexMetHeader.hpp:221
gnsstk::RinexMetHeader::validMarkerName
@ validMarkerName
Set if the Marker Name is valid.
Definition: RinexMetHeader.hpp:127
gnsstk::RinexMetHeader::sensorType::model
std::string model
The manufacturer of the sensor.
Definition: RinexMetHeader.hpp:243
gnsstk::RinexMetHeader::HI
@ HI
Hail indicator non-zero: Hail detected since last mesaurement.
Definition: RinexMetHeader.hpp:92
gnsstk::RinexMetHeader::~RinexMetHeader
virtual ~RinexMetHeader()
Destructor.
Definition: RinexMetHeader.hpp:99
gnsstk::RinexMetHeader::WS
@ WS
Wind speed (m/s)
Definition: RinexMetHeader.hpp:90
gnsstk::RinexMetHeader::stringMarkerName
static const GNSSTK_EXPORT std::string stringMarkerName
"MARKER NAME"
Definition: RinexMetHeader.hpp:227
FFStream.hpp
gnsstk::RinexMetHeader::version
double version
RINEX Version.
Definition: RinexMetHeader.hpp:197
gnsstk::RinexMetHeader::sensorType::type
std::string type
The specific type of sensor.
Definition: RinexMetHeader.hpp:244
gnsstk::RinexMetHeader::markerName
std::string markerName
The name of the location.
Definition: RinexMetHeader.hpp:204
gnsstk::RinexMetHeader::validRunBy
@ validRunBy
Set if the Run-by value is valid.
Definition: RinexMetHeader.hpp:125
gnsstk::RinexMetHeader::date
std::string date
When the file was written.
Definition: RinexMetHeader.hpp:202
gnsstk::RinexMetHeader::sensorTypeList
std::vector< sensorType > sensorTypeList
A list of sensors used in the file.
Definition: RinexMetHeader.hpp:214
gnsstk::RinexMetHeader::stringMarkerNumber
static const GNSSTK_EXPORT std::string stringMarkerNumber
"MARKER NUMBER"
Definition: RinexMetHeader.hpp:229
gnsstk::RinexMetHeader::stringRunBy
static const GNSSTK_EXPORT std::string stringRunBy
"PGM / RUN BY / DATE"
Definition: RinexMetHeader.hpp:223
gnsstk::RinexMetHeader::sensorType::operator==
bool operator==(const sensorType &r) const
Definition: RinexMetHeader.cpp:579
gnsstk::RinexMetHeader::fileProgram
std::string fileProgram
The program that generated it.
Definition: RinexMetHeader.hpp:200
gnsstk::RinexMetHeader
Definition: RinexMetHeader.hpp:70


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:41