CARMA C++
TipData.h
Go to the documentation of this file.
1 
11 #ifndef CARMA_TIPPER_TIPDATA_H
12 #define CARMA_TIPPER_TIPDATA_H
13 
14 #include <cstring>
15 
16 // CARMA includes
17 #include "carma/util/Program.h"
19 #include "carma/util/Logger.h"
20 #include "carma/util/Time.h"
21 
22 namespace carma
23 {
24  namespace tipper
25  {
26  class TipData
27  {
28 
29  public:
30  TipData();
31 
32  double _mjdOfReading;
33  int _airMassNumber;
34  float _tipAngle;
35 
36  static const int _numChannels = 16;
37  static const int _numReadings = 10;
38 
39  int _tipNumber;
40  double _avgSigRef, _scaledAvgSigRef;
41  double _rmsSigRef, _scaledRmsSigRef;
42  float _channelData[_numChannels];
43  float _scaledChannelData[_numChannels];
44 
45  void convertAndScaleChannels()
46  {
47  // Readings are raw, need to be converted to mVolts and scaled
48 
49 
50  // mVolt Conversion
51  for ( int i = 0; i < _numChannels; i++ )
52  {
53  _channelData[i] = (float)(5.0 * (_channelData[i] / 16.0 ));
54  }
55 
56  // convert average and rms of channel 1
57  _avgSigRef = 5.0 * (_avgSigRef/16.0);
58  _rmsSigRef = 5.0 * (_rmsSigRef/16.0);
59 
60  // scale all values
61  _scaledAvgSigRef = _avgSigRef/20.0;
62  _scaledRmsSigRef = _rmsSigRef/20.0;
63  _scaledChannelData[0] = (float)(_channelData[0]/20.0); // signal ref
64  _scaledChannelData[1] = (float)(_channelData[1]/200.0); // hot ref
65  _scaledChannelData[2] = (float)(_channelData[2]/2.0)+5000; // tot power ref
66  _scaledChannelData[3] = (float)(_channelData[3]/100.0); // ref temp
67  _scaledChannelData[4] = (float)(_channelData[4]/100.0); // hot temp
68  _scaledChannelData[5] = (float)(_channelData[5]/100.0); // amb temp
69 
70  // temp probe tends to malfunction, this is a safeguard
71  if (( _scaledChannelData[5] < -40.0 ) || ( _scaledChannelData[5] > 50.0 ))
72  {
73  _scaledChannelData[5] = (float) 0.0;
74  }
75 
76  _scaledChannelData[6] = (float)(_channelData[6]/100.0); // chassis temp
77  _scaledChannelData[7] = (float)(_channelData[7]/-1000.0); // mixer curr
78  _scaledChannelData[8] = (float)(_channelData[8]/-1000.0); // tripler curr
79  _scaledChannelData[9] = (float)(_channelData[9]/10000.0); // gunn curr
80  _scaledChannelData[10] = (float)(_channelData[10]/500.0); // btty volt
81  // not passed to monitor system because it is has no physical
82  // connection. See bug #777
83  //_scaledChannelData[11] = (float)(_channelData[11]/50.0); // zenith angle
84  _scaledChannelData[12] = (float)(_channelData[12]/1000.0); // supply curr
85  _scaledChannelData[13] = (float)(_channelData[13]/13.89); // wind dir
86  _scaledChannelData[14] = (float)(_channelData[14]/25.0); // wind speed
87  _scaledChannelData[15] = (float)(_channelData[15]/500.0); // station supply volt
88  }
89 
90  ::std::string toString()
91  {
92  ::std::string outStr;
93  char rawbuf[80];
94 
95  ::snprintf( rawbuf, 79, "%4d %2d %4.1f ", _tipNumber, _airMassNumber, _tipAngle );
96  outStr = ::std::string(rawbuf);
97  // getDateTimeString still has formmating bug, so, using two calls
98  outStr += ::carma::util::Time::getNonBuggyByDesignDateTimeString( (double)(_mjdOfReading),
99  "%d%b%y/%H:%M:%S " );
100  ::snprintf( rawbuf, 79, "%0.5f %6.1f %4.2f ", _mjdOfReading, _scaledAvgSigRef,
101  _scaledRmsSigRef );
102  outStr += ::std::string(rawbuf);
103 
104  ::snprintf( rawbuf, 79, "%6.1f ", _scaledChannelData[0] );
105  outStr += ::std::string(rawbuf);
106  ::snprintf( rawbuf, 79, "%5.2f ", _scaledChannelData[1] );
107  outStr += ::std::string(rawbuf);
108  ::snprintf( rawbuf, 79, "%4.0f ", _scaledChannelData[2] );
109  outStr += ::std::string(rawbuf);
110  ::snprintf( rawbuf, 79, "%4.1f ", _scaledChannelData[3] );
111  outStr += ::std::string(rawbuf);
112  ::snprintf( rawbuf, 79, "%4.1f ", _scaledChannelData[4] );
113  outStr += ::std::string(rawbuf);
114  ::snprintf( rawbuf, 79, "%5.1f ", _scaledChannelData[5] );
115  outStr += ::std::string(rawbuf);
116  ::snprintf( rawbuf, 79, "%4.1f ", _scaledChannelData[6] );
117  outStr += ::std::string(rawbuf);
118  ::snprintf( rawbuf, 79, "%5.2f ", _scaledChannelData[7] );
119  outStr += ::std::string(rawbuf);
120  ::snprintf( rawbuf, 79, "%5.2f ", _scaledChannelData[8] );
121  outStr += ::std::string(rawbuf);
122  ::snprintf( rawbuf, 79, "%5.2f ", _scaledChannelData[9] );
123  outStr += ::std::string(rawbuf);
124  ::snprintf( rawbuf, 79, "%4.1f ", _scaledChannelData[10] );
125  outStr += ::std::string(rawbuf);
126  ::snprintf( rawbuf, 79, "%4.2f", _scaledChannelData[12] );
127  outStr += ::std::string(rawbuf);
128 
129  return outStr;
130  }
131 
132  protected:
133 
134  private:
135 
136 
137 
138  }; // class TipData
139  } // namespace antenna
140 } // namespace carma
141 
142 ::std::ostream& operator<<( ::std::ostream& os,
143  ::carma::tipper::TipData &tReading );
144 
145 #endif // CARMA_TIPPER_TIPDATA_H
146 
147 // vim: set expandtab sw=2 ts=2 cindent :
std::ostream & operator<<(::std::ostream &os, const carma::dbms::Table &table)
Common time functions.
std::string toString(const SortOrder &sortOrder)
get a string representing the specified sort order
::std::string getNonBuggyByDesignDateTimeString(double mjd, const ::std::string &dateFormat)
Get date and time of day string for current time.
This is the interface file for extra APIs for program logging.