nidas  v1.2-1520
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 
37 namespace nidas { namespace core {
38 
39 class SampleTag;
40 class Parameter;
41 class Site;
42 
46 class Variable : public DOMable
47 {
48 public:
49 
51 
55  Variable();
56 
60  Variable(const Variable&);
61 
65  Variable& operator=(const Variable&);
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  {
343  _missingValue = val;
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 
403  void fromDOMElement(const xercesc::DOMElement*)
404  throw(nidas::util::InvalidParameterException);
405 
406  xercesc::DOMElement*
407  toDOMParent(xercesc::DOMElement* parent,bool complete) const
408  throw(xercesc::DOMException);
409 
410  xercesc::DOMElement*
411  toDOMElement(xercesc::DOMElement* node,bool complete) const
412  throw(xercesc::DOMException);
413 
414 private:
415 
416  void setSiteSuffix(const std::string& val);
417 
418  std::string _name;
419 
420  const Site* _site;
421 
422  int _station;
423 
424  std::string _nameWithoutSite;
425 
426  std::string _prefix;
427 
428  std::string _suffix;
429 
430  std::string _siteSuffix;
431 
432  std::string _longname;
433 
435 
437 
438  std::string _units;
439 
441 
442  unsigned int _length;
443 
445 
449  std::list<Parameter*> _parameters;
450 
455  std::list<const Parameter*> _constParameters;
456 
458 
459  float _minValue;
460 
461  float _maxValue;
462 
463  float _plotRange[2];
464 
465  bool _dynamic;
466 
467 };
468 
469 }} // namespace nidas namespace core
470 
471 #endif
const std::string & getPrefix() const
Definition: Variable.h:170
std::list< const Parameter * > _constParameters
List of const pointers to Parameters for providing via getParameters().
Definition: Variable.h:455
xercesc::DOMElement * toDOMElement(xercesc::DOMElement *node, bool complete) const
Add my content into a DOMElement.
Definition: Variable.cc:413
int getA2dChannel() const
Definition: Variable.h:226
const std::string & getSuffix() const
Definition: Site.h:106
float _missingValue
Definition: Variable.h:457
bool operator!=(const Variable &x) const
Definition: Variable.cc:204
bool isDynamic() const
Definition: Variable.h:401
void setMissingValue(float val)
Definition: Variable.h:341
void fromDOMElement(const xercesc::DOMElement *)
Initialize myself from a xercesc::DOMElement.
Definition: Variable.cc:275
std::string _nameWithoutSite
Definition: Variable.h:424
const Site * _site
Definition: Variable.h:420
std::string _prefix
Definition: Variable.h:426
std::string _suffix
Definition: Variable.h:428
A measurement site.
Definition: Site.h:49
void setSuffix(const std::string &val)
Definition: Variable.h:181
const Parameter * getParameter(const std::string &name) const
Fetch a parameter by name.
Definition: Variable.cc:266
float getMaxValue() const
Definition: Variable.h:374
std::list< Parameter * > _parameters
List of pointers to Parameters.
Definition: Variable.h:449
std::string _name
Definition: Variable.h:418
float getSampleRate() const
Convenience routine to get the SampleTag rate.
Definition: Variable.cc:261
bool _dynamic
Definition: Variable.h:465
type_t getType() const
Definition: Variable.h:138
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:61
Class describing a sampled variable.
Definition: Variable.h:46
unsigned int _length
Definition: Variable.h:442
void setUnits(const std::string &val)
The string discription of the units for this variable.
Definition: Variable.h:231
bool operator==(const Variable &x) const
Equivalence operator for Variable, checks equivalence of their length, the variables&#39;s names without ...
Definition: Variable.cc:181
float getMissingValue() const
Definition: Variable.h:346
std::string _siteSuffix
Definition: Variable.h:430
void setLength(unsigned int val)
Definition: Variable.h:240
void setName(const std::string &val)
Set the full name.
Definition: Variable.h:198
const std::string & getSiteSuffix() const
Site suffix, which is added to the name.
Definition: Variable.h:191
Interface of an object that can be instantiated from a DOM element, via the fromDOMElement method...
Definition: DOMable.h:51
void setSite(const Site *val)
Set the Site where this variable was measured.
Definition: Variable.h:89
float _maxValue
Definition: Variable.h:461
const std::string & getUnits() const
Definition: Variable.h:233
void setLongName(const std::string &val)
Descriptive, long name, e.g.
Definition: Variable.h:217
std::string _longname
Definition: Variable.h:432
void setStation(int val)
Definition: Variable.h:131
type_t _type
Definition: Variable.h:440
const Site * getSite() const
Return the measurement site for this variable.
Definition: Variable.h:99
std::string _units
Definition: Variable.h:438
const std::string & getLongName() const
Definition: Variable.h:219
Variable()
Create a variable.
Definition: Variable.cc:45
virtual ~Variable()
Definition: Variable.cc:150
void setMaxValue(float val)
Definition: Variable.h:368
void setA2dChannel(int val)
The A2D channel for this variable.
Definition: Variable.h:224
const std::string & getNameWithoutSite() const
Get the name without the site suffix.
Definition: Variable.h:212
void getPlotRange(float &minv, float &maxv) const
Definition: Variable.h:385
int _A2dChannel
Definition: Variable.h:436
const std::list< const Parameter * > & getParameters() const
Get full list of parameters.
Definition: Variable.h:330
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
void setSiteSuffix(const std::string &val)
Definition: Variable.cc:158
Definition: Variable.h:50
void addParameter(Parameter *val)
Add a parameter to this Variable.
Definition: Variable.h:321
void setConverter(VariableConverter *val)
Set the VariableConverter for this Variable.
Definition: Variable.h:246
int getStation() const
Station number of this variable:
Definition: Variable.h:129
Definition: Variable.h:50
int _station
Definition: Variable.h:422
float _minValue
Definition: Variable.h:459
float _plotRange[2]
Definition: Variable.h:463
const std::string & getName() const
Definition: Variable.h:207
xercesc::DOMElement * toDOMParent(xercesc::DOMElement *parent, bool complete) const
Create a DOMElement and append it to the parent.
Definition: Variable.cc:402
const std::string & getSuffix() const
Variable suffix, which is added to the name.
Definition: Variable.h:179
Definition: Parameter.h:46
bool operator<(const Variable &x) const
Definition: Variable.cc:209
float getMinValue() const
Definition: Variable.h:363
void setSampleTag(const SampleTag *val)
Set the sample tag pointer.
Definition: Variable.cc:172
var_type
Definition: Variable.h:50
VariableConverter * getConverter()
Definition: Variable.h:254
void setPrefix(const std::string &val)
Set the name prefix.
Definition: Variable.h:163
Class describing a group of variables that are sampled and handled together.
Definition: SampleTag.h:87
void setDynamic(bool val)
A dynamic variable is one that can come and go.
Definition: Variable.h:399
Definition: Variable.h:50
Variable & operator=(const Variable &)
Assignment.
Definition: Variable.cc:100
const SampleTag * _sampleTag
Definition: Variable.h:434
Definition: Variable.h:50
const VariableConverter * getConverter() const
Definition: Variable.h:252
enum nidas::core::Variable::var_type type_t
const SampleTag * getSampleTag() const
What sample am I a part of?
Definition: Variable.h:145
unsigned int getLength() const
How many values in this variable?
Definition: Variable.h:238
Definition: VariableConverter.h:69
void setType(type_t val)
Definition: Variable.h:140
Definition: Variable.h:50
VariableConverter * _converter
Definition: Variable.h:444
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:452
void setPlotRange(float minv, float maxv)
Definition: Variable.h:379
void setMinValue(float val)
Set the minimum allowed value for this variable.
Definition: Variable.h:357