Diana Software
QRunData.cc
Go to the documentation of this file.
1 #include "QRunData.hh"
2 #include <sstream>
3 #include <TBuffer.h>
4 
5 class TBuffer;
6 
7 using std::stringstream;
8 
10 
11 
13 {
17  fType = RT_UNKNOWN;
20  fBolometerChannels.clear();
21  fThermometerChannels.clear();
22  fStartDate = 0;
23  fStopDate = 0;
24  fDuration = 0;
25  fChannelsRunData_ptr.clear();
26  for (auto& entry : fChannelsRunData_ptr) {
27  delete entry.second;
28  }
29 }
30 
31 void QRunData::Dump(std::ostream& o) const
32 {
33  o<<"RunNumber : "<<fNumber<<std::endl;
34  o<<"SourceRun : "<<fSourceRun<<std::endl;
35  o<<"Detector : "<<fDetector.AsString()<<std::endl;
36  o<<"Type : "<<fType.AsString()<<std::endl;
37  o<<"SourceType : "<<fSourceType.AsString()<<std::endl;
38  o<<"# of thermal det. : "<<fThermalDetectorChannels.size()<<std::endl;
39  o<<"# of bolometers : "<<fBolometerChannels.size()<<std::endl;
40  o<<"# of thermometers : "<<fThermometerChannels.size()<<std::endl;
41  o<<"Start date : "<<ctime(&fStartDate);
42  o<<"Stop date : "<<ctime(&fStopDate);
43  o<<"Duration : "<<fDuration<<" s"<<" ("<<float(fDuration)/3600<<" h)"<<std::endl;
44 
45  double samplMin = 1e15, samplMax=-1e15;
46  double ADC2mVMin = 1e15, ADC2mVMax=-1e15;
47 // for(size_t i = 0; i < fThermalDetectorChannels.size(); i++) {
48  for(std::map<int,QChannelRunData*>::const_iterator it = fChannelsRunData_ptr.cbegin();it!=fChannelsRunData_ptr.cend();it++){
49 // const QChannelRunData& chanRunData = GetChannelRunData(fThermalDetectorChannels[i]);
50  const QChannelRunData& chanRunData = *it->second;
53  if(chanRunData.fADC2mV > ADC2mVMax) ADC2mVMax = chanRunData.fADC2mV;
54  if(chanRunData.fADC2mV < ADC2mVMin) ADC2mVMin = chanRunData.fADC2mV;
55  }
56  o<<"Sampling frequency: ";
57  if(samplMin == samplMax) {
58  o<<samplMin;
59  } else {
60  o<<"["<<samplMin<<","<<samplMax<<"]";
61  }
62  o<<" Hz"<<std::endl;
63  o<<"ADC2mV : ";
64  if(ADC2mVMin == ADC2mVMax) {
65  o<<ADC2mVMin;
66  } else {
67  o<<"["<<ADC2mVMin<<","<<ADC2mVMax<<"]";
68  }
69  o<<" mV/ADC units"<<std::endl;
70 
71 }
72 
73 QError QRunData::WriteOnStream(std::ostream& o) const
74 {
76 
77  o<<"fNumber"<<"\t"<<fNumber<<std::endl;
78  o<<"fDetector"<<"\t"<<fDetector.AsString()<<std::endl;
79  o<<"fType"<<"\t"<<fType.AsString()<<std::endl;
80 
81 
82  // thermal detector channels
83  o<<"fThermalDetectorChannels.size"<<"\t"<<fThermalDetectorChannels.size()<<std::endl;
84  for(size_t i =0; i < fThermalDetectorChannels.size(); i++) {
85  o<<"fThermalDetectorChannels["<<i<<"]\t"<<fThermalDetectorChannels[i]<<std::endl;
86  }
87 
88  // bolometer channels
89  o<<"fBolometerChannels.size"<<"\t"<<fBolometerChannels.size()<<std::endl;
90  for(size_t i =0; i < fBolometerChannels.size(); i++) {
91  o<<"fBolometerChannels["<<i<<"]\t"<<fBolometerChannels[i]<<std::endl;
92  }
93 
94  // thermometer channels
95  o<<"fThermometerChannels.size"<<"\t"<<fThermometerChannels.size()<<std::endl;
96  for(size_t i =0; i < fThermometerChannels.size(); i++) {
97  o<<"fThermometerChannels["<<i<<"]\t"<<fThermometerChannels[i]<<std::endl;
98  }
99 
100  // channels run data
101  for(size_t i =0; i < fThermalDetectorChannels.size(); i++) {
102  int chan = fThermalDetectorChannels[i];
103  const QChannelRunData & chrundata = GetChannelRunData(chan);
104 
105  o<<"fChannelsRunData["<<i<<"].fADC2mV"<<"\t"<<chrundata.fADC2mV<<std::endl;
106  o<<"fChannelsRunData["<<i<<"].fSamplingFrequency"<<"\t"<<chrundata.fSamplingFrequency<<std::endl;
107  o<<"fChannelsRunData["<<i<<"].fADCMax"<<"\t"<<chrundata.fADCMax<<std::endl;
108  o<<"fChannelsRunData["<<i<<"].fADCMin"<<"\t"<<chrundata.fADCMin<<std::endl;
109  o<<"fChannelsRunData["<<i<<"].fNumberOfSamples"<<"\t"<<chrundata.fNumberOfSamples<<std::endl;
110  o<<"fChannelsRunData["<<i<<"].fIsBolometer"<<"\t"<<chrundata.fIsBolometer<<std::endl;
111  o<<"fChannelsRunData["<<i<<"].fIsThermometer"<<"\t"<<chrundata.fIsThermometer<<std::endl;
112  }
113 
114  o<<"fStartDate"<<"\t"<<fStartDate<<std::endl;
115  o<<"fStopDate"<<"\t"<<fStopDate<<std::endl;
116  o<<"fDuration"<<"\t"<<fDuration<<std::endl;
117 
118  return err;
119 }
120 
122 {
124 
125  std::string tag, det, type;
126  size_t td_size, b_size, t_size;
127  int nrun, tdc, bc, tc;
128  double adc2mv, samplf;
129  int adcmax, adcmin, nsamples;
130  bool isbol, istherm;
131  time_t start, stop, duration;
132 
133  // fNumber
134  ob >> tag >> nrun;
135  if(tag != "fNumber") {
137  err.SetDescription("Expected tag fNumber");
138  return err;
139  }
140  fNumber = nrun;
141 
142  // fDetector
143  ob >> tag >> det;
144  if(tag != "fDetector") {
146  err.SetDescription("Expected tag fDetector");
147  return err;
148  }
149  fDetector.Set(nrun);
150 
151  // fType
152  ob >> tag >> type;
153  if(tag != "fType") {
155  err.SetDescription("Expected tag fType");
156  return err;
157  }
158  fType.Set(type);
159 
160  // fThermalDetectorChannels
161 
162  fThermalDetectorChannels.clear();
163  ob >> tag >> td_size;
164 
165  if(tag != "fThermalDetectorChannels.size") {
167  err.SetDescription("Expected tag fThermalDetectorChannels.size()");
168  return err;
169  }
170 
171  for(size_t i =0; i < td_size; i++) {
172  ob >> tag >> tdc;
173  stringstream tagstr;
174  tagstr<<"fThermalDetectorChannels["<<i<<"]";
175  if(tag != tagstr.str()) {
177  err.SetDescription(std::string("Expected tag ")+tagstr.str());
178  return err;
179  }
180  fThermalDetectorChannels.push_back(tdc);
181  }
182 
183  // fBolometerChannels
184 
185  fBolometerChannels.clear();
186  ob >> tag >> b_size;
187 
188  if(tag != "fBolometerChannels.size") {
190  err.SetDescription("Expected tag fBolometerChannels.size()");
191  return err;
192  }
193 
194  for(size_t i =0; i < b_size; i++) {
195  ob >> tag >> bc;
196  stringstream tagstr;
197  tagstr<<"fBolometerChannels["<<i<<"]";
198  if(tag != tagstr.str()) {
200  err.SetDescription(std::string("Expected tag ")+tagstr.str());
201  return err;
202  }
203  fBolometerChannels.push_back(bc);
204  }
205 
206  // fThermometerChannels
207 
208  fThermometerChannels.clear();
209  ob >> tag >> t_size;
210 
211  if(tag != "fThermometerChannels.size") {
213  err.SetDescription("Expected tag fThermometerChannels.size()");
214  return err;
215  }
216 
217  for(size_t i =0; i < t_size; i++) {
218  ob >> tag >> tc;
219  stringstream tagstr;
220  tagstr<<"fThermometerChannels["<<i<<"]";
221  if(tag != tagstr.str()) {
223  err.SetDescription(std::string("Expected tag ")+tagstr.str());
224  return err;
225  }
226  fThermometerChannels.push_back(tc);
227  }
228 
229  // fChannelsRunData
230 
231  for(size_t i =0; i < td_size; i++) {
232  int chan = fThermalDetectorChannels[i];
233  QChannelRunData chrundata;
234 
235  ob >> tag >> adc2mv;
236  stringstream tagstr;
237  tagstr<<"fChannelsRunData["<<i<<"].fADC2mV";
238  if(tag != tagstr.str()) {
240  err.SetDescription(std::string("Expected tag ")+tagstr.str());
241  return err;
242  }
243  chrundata.fADC2mV = adc2mv;
244 
245  ob >> tag >> samplf;
246  tagstr.str("");
247  tagstr<<"fChannelsRunData["<<i<<"].fSamplingFrequency";
248  if(tag != tagstr.str()) {
250  err.SetDescription(std::string("Expected tag ")+tagstr.str());
251  return err;
252  }
253  chrundata.fSamplingFrequency = samplf;
254 
255  ob >> tag >> adcmax;
256  tagstr.str("");
257  tagstr<<"fChannelsRunData["<<i<<"].fADCMax";
258  if(tag != tagstr.str()) {
260  err.SetDescription(std::string("Expected tag ")+tagstr.str());
261  return err;
262  }
263  chrundata.fADCMax = adcmax;
264 
265  ob >> tag >> adcmin;
266  tagstr.str("");
267  tagstr<<"fChannelsRunData["<<i<<"].fADCMin";
268  if(tag != tagstr.str()) {
270  err.SetDescription(std::string("Expected tag ")+tagstr.str());
271  return err;
272  }
273  chrundata.fADCMin = adcmin;
274 
275  ob >> tag >> nsamples;
276  tagstr.str("");
277  tagstr<<"fChannelsRunData["<<i<<"].fNumberOfSamples";
278  if(tag != tagstr.str()) {
280  err.SetDescription(std::string("Expected tag ")+tagstr.str());
281  return err;
282  }
283  chrundata.fNumberOfSamples = nsamples;
284 
285  ob >> tag >> isbol;
286  tagstr.str("");
287  tagstr<<"fChannelsRunData["<<i<<"].fIsBolometer";
288  if(tag != tagstr.str()) {
290  err.SetDescription(std::string("Expected tag ")+tagstr.str());
291  return err;
292  }
293  chrundata.fIsBolometer = isbol;
294 
295  ob >> tag >> istherm;
296  tagstr.str("");
297  tagstr<<"fChannelsRunData["<<i<<"].fIsThermometer";
298  if(tag != tagstr.str()) {
300  err.SetDescription(std::string("Expected tag ")+tagstr.str());
301  return err;
302  }
303  chrundata.fIsBolometer = istherm;
304 
305  SetChannelRunData(chan,chrundata);
306 
307  }
308 
309  // fStartTime
310  ob >> tag >> start;
311  if(tag != "fStartDate") {
313  err.SetDescription("Expected tag fStartDate");
314  return err;
315  }
316  fStartDate = start;
317 
318  // fStopTime
319  ob >> tag >> stop;
320  if(tag != "fStopDate") {
322  err.SetDescription("Expected tag fStopDate");
323  return err;
324  }
325  fStopDate = stop;
326 
327  // fDuration
328  ob >> tag >> duration;
329  if(tag != "fDuration") {
331  err.SetDescription("Expected tag fDuration");
332  return err;
333  }
334  fDuration = duration;
335 
336  return err;
337 }
338 
340 {
341  std::map<int,QChannelRunData*>::const_iterator iter = fChannelsRunData_ptr.find(channel);
342  if(iter == fChannelsRunData_ptr.end()) {
344  stringstream msg;
345  msg<<"Cannot find QChannelRunData for channel "<<channel<<" in QRunData of run "<<fNumber;
346  err.SetDescription(__FILE__,__LINE__,msg.str());
347  throw err;
348  }
349  return *(iter->second);
350 }
351 
353 {
354  const QChannelRunData* chptr = &chanRunData;
355  QChannelRunData* newptr= dynamic_cast<QChannelRunData*>(chptr->Duplicate());
356  chptr->Fill(newptr);
357  fChannelsRunData_ptr[channel] = newptr;
358 }
359 
361 // this->QObject::operator=(other);
362  fNumber = other.fNumber;
363  fType = other.fType;
364  fSourceType = other.fSourceType;
365  fSourceRun = other.fSourceRun;
366  fDetector = other.fDetector;
367  fStartDate = other.fStartDate;
368  fStopDate = other.fStopDate;
369  fDuration = other.fDuration;
370 
374 
375  for(auto it=other.fChannelsRunData_ptr.cbegin();it!=other.fChannelsRunData_ptr.cend();it++){
376  SetChannelRunData(it->first,other.GetChannelRunData(it->first));
377  }
378 
379  return *this;
380 }
381 /*
382 void QRunData::Streamer(TBuffer &R__b){
383  if(R__b.IsReading()){
384  UInt_t R__s,R__c;
385  Version_t R__v = R__b.ReadVersion(&R__s,&R__c);
386  if(R__v<5){
387  QObject::Streamer(R__b);
388  R__b>>fNumber;
389  R__b.ReadClassBuffer(TClass::GetClass<DetectorName>(),&fDetector);
390  R__b.ReadClassBuffer(TClass::GetClass<RunType>(),&fType);//Working until here
391 // R__b.StreamObject(&fThermalDetectorChannels);
392 // StreamVector(R__b, fThermalDetectorChannels);
393  size_t vsize;
394  R__b>>vsize;
395  std::cout<<"Thermal Size:"<<vsize<<std::endl;
396  R__b>>vsize;
397  std::cout<<"Bolo Size:"<<vsize<<std::endl;
398  R__b>>vsize;
399  std::cout<<"Thermo Size:"<<vsize<<std::endl;
400  R__b>>fStartDate;
401  R__b>>fStopDate;
402  R__b>>fDuration;
403 
404  //std::map<int,QChannelRunData> fChannelsRunData;
405  //R__b>>fSourceRun;
406  //R__b.ReadClassBuffer(TClass::GetClass<RunType>(),&fSourceType);//Working until here
407  //Dump(std::cout);
408  //std::cout<<"Thermal "<<vsize<<std::endl;
409  //fThermalDetectorChannels.resize(vsize);
410  //for(auto& element:fThermalDetectorChannels){
411  // R__b>>element;
412  //}
413  //R__b>>fThermalDetectorChannels;
414  //R__b>>fBolometerChannels;
415  //R__b>>fThermometerChannels;
416  //R__b>>fStartDate;
417  //R__b>>fStopDate;
418  //R__b>>fDuration;
419  //std::map<int,QChannelRunData> fmap;
420  //R__b>>fmap;
421  //std::map<int,QChannelRunData>::iterator it;
422  //for(it = fmap.begin();it!=fmap.end();it++){
423  // SetChannelRunData(it->first,it->second);
424  //}
425  //R__b>>fSourceRun;
426  //R__b>>fSourceType;
427  // R__b.ReadClassBuffer(QRunData::Class(),this,R__v,R__s,R__c);
428  }else{
429  R__b.ReadClassBuffer(QRunData::Class(),this,R__v,R__s,R__c);
430  }
431  }else{
432  QRunData::Class()->WriteBuffer(R__b,this);
433  }
434 }
435 */
err
Definition: CheckOF.C:114
const int channel
QChannelRunData chanRunData
@ DN_UNKNOWN
#define Q_INT_DEFAULT
Definition: QDiana.hh:26
@ QERR_UNKNOWN_ERR
Definition: QError.hh:108
@ QERR_OUT_OF_RANGE
Definition: QError.hh:28
@ QERR_SUCCESS
Definition: QError.hh:27
QObjectImp(QRunData)
@ RT_UNKNOWN
Definition: QRunType.hh:14
std::string AsString() const
convert to string
QError Set(const int run)
convert from run number
basic channel and run based info. Used in the QRunData object.
double fSamplingFrequency
sampling frequency in Hz
int fADCMin
ADC minimum in ADC units.
bool fIsThermometer
is thermometer
int fNumberOfSamples
number of samples in ADC window
int fADCMax
ADC maximum in ADC units.
double fADC2mV
conversion: mV = ADC * fADC2mV
bool fIsBolometer
is bolometer
error class with error type and description
Definition: QError.hh:115
Basic run based info.
Definition: QRunData.hh:20
std::map< int, QChannelRunData * > fChannelsRunData_ptr
channel based quantities
Definition: QRunData.hh:70
int fNumber
Run Number.
Definition: QRunData.hh:41
time_t fStartDate
StartTime.
Definition: QRunData.hh:62
int fSourceRun
Definition: QRunData.hh:73
RunType fSourceType
Detector name.
Definition: QRunData.hh:76
virtual void Clear()
Clear members.
Definition: QRunData.cc:12
QRunData & operator=(const QRunData &other)
Definition: QRunData.cc:360
virtual void Dump(std::ostream &o) const
dump object to stream
Definition: QRunData.cc:31
std::vector< int > fThermalDetectorChannels
Thermal detector channels: union of fBolometerChannels and fThermometerChannels.
Definition: QRunData.hh:47
RunType fType
Run Type.
Definition: QRunData.hh:45
time_t fStopDate
StopTime.
Definition: QRunData.hh:64
const QChannelRunData & GetChannelRunData(const int channel) const
get channel based run data quantities
Definition: QRunData.cc:339
time_t fDuration
Duration.
Definition: QRunData.hh:66
std::vector< int > fBolometerChannels
Bolometers channels (thermistors glued to a crystal)
Definition: QRunData.hh:49
DetectorName fDetector
Source Run Number.
Definition: QRunData.hh:43
virtual QError ReadFromStream(std::istream &ob)
Read object from stream.
Definition: QRunData.cc:121
void SetChannelRunData(const int channel, const QChannelRunData &chanRunData)
set channel based run data quantities
Definition: QRunData.cc:352
virtual QError WriteOnStream(std::ostream &o) const
Write object on stream.
Definition: QRunData.cc:73
std::vector< int > fThermometerChannels
Thermometers channels (thermistors not glued to a crystal)
Definition: QRunData.hh:51
std::string AsString() const
convert to string
Definition: QRunType.hh:64
QError Set(const std::string &)
convert from string
Definition: QRunType.cc:101