nidas v1.2.3
Variable.h
Go to the documentation of this file.
1// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 4; -*-
2// vim: set shiftwidth=4 softtabstop=4 expandtab:
3/*
4 ********************************************************************
5 ** NIDAS: NCAR In-situ Data Acquistion Software
6 **
7 ** 2005, Copyright University Corporation for Atmospheric Research
8 **
9 ** This program is free software; you can redistribute it and/or modify
10 ** it under the terms of the GNU General Public License as published by
11 ** the Free Software Foundation; either version 2 of the License, or
12 ** (at your option) any later version.
13 **
14 ** This program is distributed in the hope that it will be useful,
15 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ** GNU General Public License for more details.
18 **
19 ** The LICENSE.txt file accompanying this software contains
20 ** a copy of the GNU General Public License. If it is not found,
21 ** write to the Free Software Foundation, Inc.,
22 ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 **
24 ********************************************************************
25*/
26#ifndef NIDAS_CORE_VARIABLE_H
27#define NIDAS_CORE_VARIABLE_H
28
29#include "DOMable.h"
30#include "Site.h"
31#include "VariableConverter.h"
33
34#include <string>
35#include <list>
36
37namespace nidas { namespace core {
38
39class SampleTag;
40class Parameter;
41class Site;
42
46class Variable : public DOMable
47{
48public:
49
51
55 Variable();
56
60 Variable(const Variable&);
61
66
67 virtual ~Variable();
68
74 bool operator == (const Variable& x) const;
75
76 bool operator != (const Variable& x) const;
77
78 bool operator < (const Variable& x) const;
79
84 bool closeMatch(const Variable& x) const;
85
89 void setSite(const Site* val)
90 {
91 _site = val;
92 if (_site && getStation() == 0) setSiteSuffix(_site->getSuffix());
93 else setSiteSuffix("");
94 }
95
99 const Site* getSite() const
100 {
101 return _site;
102 }
103
129 int getStation() const { return _station; }
130
131 void setStation(int val)
132 {
133 _station = val;
134 if (_site && _station == 0) setSiteSuffix(_site->getSuffix());
135 else setSiteSuffix("");
136 }
137
138 type_t getType() const { return _type; }
139
140 void setType(type_t val) { _type = val; }
141
145 const SampleTag* getSampleTag() const { return _sampleTag; }
146
152 void setSampleTag(const SampleTag* val);
153
157 float getSampleRate() const;
158
163 void setPrefix(const std::string& val)
164 {
165 _prefix = val;
168 }
169
170 const std::string& getPrefix() const { return _prefix; }
171
179 const std::string& getSuffix() const { return _suffix; }
180
181 void setSuffix(const std::string& val)
182 {
183 _suffix = val;
186 }
187
191 const std::string& getSiteSuffix() const { return _siteSuffix; }
192
198 void setName(const std::string& val)
199 {
200 _suffix.clear();
201 _siteSuffix.clear();
202 _prefix = val;
203 _name = _prefix;
205 }
206
207 const std::string& getName() const { return _name; }
208
212 const std::string& getNameWithoutSite() const { return _nameWithoutSite; }
213
217 void setLongName(const std::string& val) { _longname = val; }
218
219 const std::string& getLongName() const { return _longname; }
220
224 void setA2dChannel( int val ) { _A2dChannel = val; }
225
226 int getA2dChannel() const { return _A2dChannel; }
227
231 void setUnits(const std::string& val) { _units = val; }
232
233 const std::string& getUnits() const { return _units; }
234
238 unsigned int getLength() const { return _length; }
239
240 void setLength(unsigned int val) { _length = val; }
241
247 {
248 delete _converter;
249 _converter = val;
250 }
251
252 const VariableConverter* getConverter() const { return _converter; }
253
255
313 float*
314 convert(dsm_time_t ttag, float* values, int nvalues=0, float* results=0);
315
322 {
323 _parameters.push_back(val);
324 _constParameters.push_back(val);
325 }
326
330 const std::list<const Parameter*>& getParameters() const
331 {
332 return _constParameters;
333 }
334
339 const Parameter* getParameter(const std::string& name) const;
340
341 void setMissingValue(float val)
342 {
344 }
345
346 float getMissingValue() const
347 {
348 return _missingValue;
349 }
350
357 void setMinValue(float val)
358 {
359 _minValue = val;
360 if (std::isnan(_plotRange[0])) _plotRange[0] = val;
361 }
362
363 float getMinValue() const
364 {
365 return _minValue;
366 }
367
368 void setMaxValue(float val)
369 {
370 _maxValue = val;
371 if (std::isnan(_plotRange[1])) _plotRange[1] = val;
372 }
373
374 float getMaxValue() const
375 {
376 return _maxValue;
377 }
378
379 void setPlotRange(float minv,float maxv)
380 {
381 _plotRange[0] = minv;
382 _plotRange[1] = maxv;
383 }
384
385 void getPlotRange(float& minv,float& maxv) const
386 {
387 minv = _plotRange[0];
388 maxv = _plotRange[1];
389 }
390
399 void setDynamic(bool val) { _dynamic = val; }
400
401 bool isDynamic() const { return _dynamic; }
402
406 void fromDOMElement(const xercesc::DOMElement*);
407
411 xercesc::DOMElement*
412 toDOMParent(xercesc::DOMElement* parent, bool complete) const;
413
417 xercesc::DOMElement*
418 toDOMElement(xercesc::DOMElement* node, bool complete) const;
419
420private:
421
422 void setSiteSuffix(const std::string& val);
423
424 std::string _name;
425
426 const Site* _site;
427
429
430 std::string _nameWithoutSite;
431
432 std::string _prefix;
433
434 std::string _suffix;
435
436 std::string _siteSuffix;
437
438 std::string _longname;
439
441
443
444 std::string _units;
445
447
448 unsigned int _length;
449
451
455 std::list<Parameter*> _parameters;
456
461 std::list<const Parameter*> _constParameters;
462
464
466
468
469 float _plotRange[2];
470
472
473};
474
475}} // namespace nidas namespace core
476
477#endif
Interface of an object that can be instantiated from a DOM element, via the fromDOMElement method,...
Definition DOMable.h:51
Definition Parameter.h:47
Class describing a group of variables that are sampled and handled together.
Definition SampleTag.h:88
A measurement site.
Definition Site.h:49
Definition VariableConverter.h:70
Class describing a sampled variable.
Definition Variable.h:47
float _maxValue
Definition Variable.h:467
std::string _prefix
Definition Variable.h:432
std::string _units
Definition Variable.h:444
float getMissingValue() const
Definition Variable.h:346
xercesc::DOMElement * toDOMParent(xercesc::DOMElement *parent, bool complete) const
Definition Variable.cc:401
const VariableConverter * getConverter() const
Definition Variable.h:252
const Site * _site
Definition Variable.h:426
void setDynamic(bool val)
A dynamic variable is one that can come and go.
Definition Variable.h:399
const Site * getSite() const
Return the measurement site for this variable.
Definition Variable.h:99
void addParameter(Parameter *val)
Add a parameter to this Variable.
Definition Variable.h:321
void setMinValue(float val)
Set the minimum allowed value for this variable.
Definition Variable.h:357
float _minValue
Definition Variable.h:465
void setType(type_t val)
Definition Variable.h:140
void setMaxValue(float val)
Definition Variable.h:368
std::string _longname
Definition Variable.h:438
int getA2dChannel() const
Definition Variable.h:226
float getSampleRate() const
Convenience routine to get the SampleTag rate.
Definition Variable.cc:261
int _station
Definition Variable.h:428
void setStation(int val)
Definition Variable.h:131
void setSampleTag(const SampleTag *val)
Set the sample tag pointer.
Definition Variable.cc:172
std::string _siteSuffix
Definition Variable.h:436
enum nidas::core::Variable::var_type type_t
var_type
Definition Variable.h:50
@ WEIGHT
Definition Variable.h:50
@ COUNTER
Definition Variable.h:50
@ CLOCK
Definition Variable.h:50
@ CONTINUOUS
Definition Variable.h:50
@ OTHER
Definition Variable.h:50
void setConverter(VariableConverter *val)
Set the VariableConverter for this Variable.
Definition Variable.h:246
bool closeMatch(const Variable &x) const
A more loose check of the equivalence of two variables, This will also return a value of true if eith...
Definition Variable.cc:232
const std::string & getUnits() const
Definition Variable.h:233
std::list< Parameter * > _parameters
List of pointers to Parameters.
Definition Variable.h:455
bool operator!=(const Variable &x) const
Definition Variable.cc:204
void setSiteSuffix(const std::string &val)
Definition Variable.cc:158
const std::string & getNameWithoutSite() const
Get the name without the site suffix.
Definition Variable.h:212
int _A2dChannel
Definition Variable.h:442
const std::string & getLongName() const
Definition Variable.h:219
Variable()
Create a variable.
Definition Variable.cc:45
std::list< const Parameter * > _constParameters
List of const pointers to Parameters for providing via getParameters().
Definition Variable.h:461
unsigned int getLength() const
How many values in this variable?
Definition Variable.h:238
const Parameter * getParameter(const std::string &name) const
Fetch a parameter by name.
Definition Variable.cc:266
void setName(const std::string &val)
Set the full name.
Definition Variable.h:198
std::string _nameWithoutSite
Definition Variable.h:430
std::string _name
Definition Variable.h:424
xercesc::DOMElement * toDOMElement(xercesc::DOMElement *node, bool complete) const
Definition Variable.cc:412
void getPlotRange(float &minv, float &maxv) const
Definition Variable.h:385
float getMaxValue() const
Definition Variable.h:374
const std::string & getPrefix() const
Definition Variable.h:170
bool _dynamic
Definition Variable.h:471
void setPrefix(const std::string &val)
Set the name prefix.
Definition Variable.h:163
const SampleTag * getSampleTag() const
What sample am I a part of?
Definition Variable.h:145
const std::list< const Parameter * > & getParameters() const
Get full list of parameters.
Definition Variable.h:330
void fromDOMElement(const xercesc::DOMElement *)
Definition Variable.cc:275
VariableConverter * getConverter()
Definition Variable.h:254
float * convert(dsm_time_t ttag, float *values, int nvalues=0, float *results=0)
Apply the conversions for this Variable to the floats pointed to by values, putting the results in re...
Definition Variable.cc:451
VariableConverter * _converter
Definition Variable.h:450
unsigned int _length
Definition Variable.h:448
const std::string & getSiteSuffix() const
Site suffix, which is added to the name.
Definition Variable.h:191
type_t _type
Definition Variable.h:446
void setLongName(const std::string &val)
Descriptive, long name, e.g.
Definition Variable.h:217
bool isDynamic() const
Definition Variable.h:401
const std::string & getName() const
Definition Variable.h:207
int getStation() const
Station number of this variable:
Definition Variable.h:129
float _missingValue
Definition Variable.h:463
void setA2dChannel(int val)
The A2D channel for this variable.
Definition Variable.h:224
void setUnits(const std::string &val)
The string discription of the units for this variable.
Definition Variable.h:231
Variable & operator=(const Variable &)
Assignment.
Definition Variable.cc:100
void setPlotRange(float minv, float maxv)
Definition Variable.h:379
float getMinValue() const
Definition Variable.h:363
void setSite(const Site *val)
Set the Site where this variable was measured.
Definition Variable.h:89
bool operator<(const Variable &x) const
Definition Variable.cc:209
std::string _suffix
Definition Variable.h:434
bool operator==(const Variable &x) const
Equivalence operator for Variable, checks equivalence of their length, the variables's names without ...
Definition Variable.cc:181
virtual ~Variable()
Definition Variable.cc:150
const std::string & getSuffix() const
Variable suffix, which is added to the name.
Definition Variable.h:179
type_t getType() const
Definition Variable.h:138
void setSuffix(const std::string &val)
Definition Variable.h:181
const SampleTag * _sampleTag
Definition Variable.h:440
float _plotRange[2]
Definition Variable.h:469
void setMissingValue(float val)
Definition Variable.h:341
void setLength(unsigned int val)
Definition Variable.h:240
Sample * getSample(sampleType type, unsigned int len)
A convienence method for getting a sample of an enumerated type from a pool.
Definition Sample.cc:70
long long dsm_time_t
Posix time in microseconds, the number of non-leap microseconds since 1970 Jan 1 00:00 UTC.
Definition Sample.h:62
Root namespace for the NCAR In-Situ Data Acquisition Software.
Definition A2DConverter.h:31