Diana Software
MPulseBasicParameters.cc
Go to the documentation of this file.
2 #include "QPulseBasicParams.hh"
3 #include "QEvent.hh"
4 #include "QRawEvent.hh"
5 #include "QPulseParameters.hh"
6 #include "QBaselineData.hh"
7 #include "QBaseType.hh"
8 #include "QRunDataHandle.hh"
9 
10 using namespace Diana;
11 
13 
14 
16 {
17  fIsOnline = GetBool("IsOnline",false,false);
18  ev.Add<QPulseParameters>("Parameters");
19  ev.Add<QDouble>("MaxBaseline");
20  ev.Add<QDouble>("MaxBaselineInRMS");
21  ev.Add<QDouble>("MaxBaselineInWindow");
22  ev.Add<QDouble>("MaxMinInWindow");
23  ev.Add<QDouble>("MaxMinInWindowInRMS");
24  ev.Add<QDouble>("RMS");
25  ev.Add<QDouble>("Max");
26  ev.Add<QDouble>("Min");
27  ev.Add<QInt>("MaxPosInWindow");
28  fPulseLabel = GetString("PulseLabel","DAQ@Pulse",false);
29  fBaselineOwner = GetString("BaselineOwner","BaselineModule",false);
30  fTomV = GetBool("ConvertTomV",true,false);
31 }
32 
34 {
35  double MaxBaselineInWindow =0.;
36  double MaxMinInWindow =0.;
37  int MaxPosInWindow = 0;
38 
39  const QVector &pulse = ev.GetByLabel<QPulse>(fPulseLabel).GetSamples();
40  const int run = ev.Get<QHeader>("DAQ","Header").GetRun();
41  const int channel = ev.Get<QPulseInfo>("DAQ","PulseInfo").GetChannelId();
42 
43  int triggerPosition = ev.Get<QPulseInfo>("DAQ","PulseInfo").GetMasterSample().GetSampleIndex();
44  QPulseParameters &prep = ev.Get<QPulseParameters>("Parameters");
45  QDouble& maxBaseline = ev.Get<QDouble>("MaxBaseline");
46  const QBaselineData& bData = ev.Get<QBaselineData>(fBaselineOwner.c_str(),"BaselineData");
47 
49  GlobalData().Get("",&rHandle,"");
50  const QRunData& runData = rHandle.Get();
52 
53  double ADC2mV = 1;
54  if(fTomV) ADC2mV = chanRunData.fADC2mV;
55  const int ADCMax = chanRunData.fADCMax;
56  const int ADCMin = chanRunData.fADCMin;
57  double ADC2Time = 1. / chanRunData.fSamplingFrequency;
58  if(fIsOnline) {
59  QPulseBasicParams bParams(triggerPosition,
60  bData.GetBaseline()/ADC2mV,
61  bData.GetBaselineRMS()/ADC2mV, chanRunData.fSamplingFrequency);
62  bParams.FindMaximumPosition(pulse);
63  bParams.ComputeHeight(pulse);
64  bParams.CheckSaturation(pulse,ADCMax,ADCMin);
65  prep.fMaxPosition=bParams.GetMaxPosition();
66  prep.fIsSaturatedHigh=bParams.GetIsSaturatedHigh();
67  prep.fIsSaturatedLow=bParams.GetIsSaturatedLow();
68 
69  maxBaseline = bParams.GetMaxBaseline()*ADC2mV;
70 
71 
72 
73  } else {
74  QPulseBasicParams bParams(pulse,triggerPosition,
75  bData.GetBaseline()/ADC2mV,
76  bData.GetBaselineRMS()/ADC2mV, ADCMax, ADCMin, chanRunData.fSamplingFrequency);
77 
78  if(bParams.GetMaxBaseline() != Q_DOUBLE_DEFAULT)
79  maxBaseline = bParams.GetMaxBaseline()*ADC2mV;
80  prep.fMaxPosition = bParams.GetMaxPosition();
81  prep.fIsSaturatedHigh = bParams.GetIsSaturatedHigh();
82  prep.fIsSaturatedLow = bParams.GetIsSaturatedLow();
83  prep.fStartPosition = bParams.GetStart();
84  prep.fEndPosition = bParams.GetEnd();
85  prep.fDecayTime = bParams.GetDecay()*ADC2Time;
86  prep.fSlowDecayTime = bParams.GetSlowDecay()*ADC2Time;
87  prep.fRiseTime = bParams.GetRaise()*ADC2Time;
88 
89  }
90  double maxInWindow = ADC2mV*(pulse.GetMax());
91  double minInWindow = ADC2mV*(pulse.GetMin());
92  MaxPosInWindow = pulse.GetMaxIndex();
93 
94  MaxBaselineInWindow = maxInWindow-bData.GetBaseline();
95  MaxMinInWindow = maxInWindow-minInWindow;
96 
97 
98  if(maxBaseline != Q_DOUBLE_DEFAULT)
99  ev.Get<QDouble>("MaxBaselineInRMS") = maxBaseline/bData.GetBaselineRMS();
100  ev.Get<QDouble>("MaxBaselineInWindow") = MaxBaselineInWindow;
101  ev.Get<QDouble>("MaxMinInWindow") = MaxMinInWindow;
102  ev.Get<QDouble>("RMS") = ADC2mV*(pulse.GetRMS());
103  ev.Get<QDouble>("Min") = (ADC2mV*pulse).GetMin();
104  ev.Get<QDouble>("Max") = (ADC2mV*pulse).GetMax();
105  ev.Get<QDouble>("MaxMinInWindowInRMS") = MaxMinInWindow/bData.GetBaselineRMS();
106  ev.Get<QInt>("MaxPosInWindow") = MaxPosInWindow;
107 
108 }
109 
111 {
112  // called at the end of the event loop
113 }
114 
QRunDataHandle rHandle(753)
const int channel
QChannelRunData chanRunData
#define Q_DOUBLE_DEFAULT
Definition: QDiana.hh:24
#define REGISTER_MODULE(clazz)
Definition: QDriver.hh:133
computes basic pulse parameters
void Do(Diana::QEvent &ev)
Do method.
base types wrapped into a QObject. Currently implemented types are QInt QDouble and QFloat....
Definition: QBaseType.hh:17
baseline data
basic channel and run based info. Used in the QRunData object.
double fSamplingFrequency
sampling frequency in Hz
int fADCMin
ADC minimum in ADC units.
int fADCMax
ADC maximum in ADC units.
double fADC2mV
conversion: mV = ADC * fADC2mV
diana event
Definition: QEvent.hh:46
const Q & GetByLabel(const QEventLabel &label) const
Get a QObject in read mode by label.
Definition: QEvent.hh:135
void Get(const char *owner, ReadHandle< Q > &handle) const
Get a QObject Handle in read mode.
Definition: QEvent.hh:74
Raw event: basic information like run number and time.
Definition: QHeader.hh:16
QError FindMaximumPosition(const Diana::QVector &pulse)
QError ComputeHeight(const Diana::QVector &pulse)
double GetStart() const
double GetRaise() const
double GetMaxPosition() const
double GetMaxBaseline() const
QError CheckSaturation(const Diana::QVector &pulse, int ADCMax, int ADCMin)
double GetSlowDecay() const
double GetEnd() const
double GetDecay() const
Raw event: bolometer channel, trigger positions and types.
Definition: QPulseInfo.hh:18
basic pulse informations
bool fIsSaturatedLow
IsSaturatedLow.
bool fIsSaturatedHigh
IsSaturatedHigh.
double fRiseTime
RiseTime.
double fEndPosition
End.
double fStartPosition
Start.
double fMaxPosition
MaxPosition.
double fDecayTime
Decay.
double fSlowDecayTime
SlowDecay.
Raw event: sampled waveform.
Definition: QPulse.hh:22
global handle for QRunData
Basic run based info.
Definition: QRunData.hh:20
const QChannelRunData & GetChannelRunData(const int channel) const
get channel based run data quantities
Definition: QRunData.cc:339
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...