20 #include <gsl/gsl_fit.h>
22 using namespace Diana;
30 fNumberOfBaselinePoints = GetInt(
"NumPoints",0,
false);
33 ev.Require<
QHeader>(
"DAQ",
"Header");
34 fPulseLabel = GetString(
"PulseLabel",
"DAQ@Pulse",
false);
35 fTomV = GetBool(
"ConvertTomV",
true,
false);
36 ev.RequireByLabel<
QPulse>(fPulseLabel);
45 const int run = ev.
Get<
QHeader>(
"DAQ",
"Header").GetRun();
49 size_t nSamples = samples.Size();
50 const double* SampleArray = samples.GetConstArray();
52 if(fNumberOfBaselinePoints < 0.)
54 else if(fNumberOfBaselinePoints == 0) {
57 nPoints = fNumberOfBaselinePoints;
59 if(nPoints > nSamples) {
60 Warn(
"Number of points (%d) exceeds number of samples (%d): setting it to %d",
61 nPoints, nSamples, nSamples);
64 Double_t* TimeArray =
new Double_t[nPoints];
65 for(
size_t i = 0; i < nPoints; i++)
66 TimeArray[i] = (Double_t)i;
68 fBaseline = samples.Sum(nPoints,0);
70 fRightBaseline = samples.Sum(nPoints,samples.Size()-1-nPoints)/nPoints;
71 fRightLeftBaseline = fRightBaseline - fBaseline;
73 double cov00, cov01, cov11;
74 gsl_fit_linear (TimeArray, 1, SampleArray, 1, nPoints,
75 &fBaselineIntercept, &fBaselineSlope, &cov00, &cov01, &cov11, &fBaselineRMS);
78 fBaselineRMS = sqrt(fBaselineRMS/nPoints);
79 double baselineFlatRMS = samples.GetRMS(nPoints,0);
81 fBaselineSlopeRMSWindow = fBaselineSlope/fBaselineRMS*(double)nSamples;
82 fRightBaselineInRMS = fRightBaseline/fBaselineRMS;
83 fRightLeftBaselineInRMS = fRightLeftBaseline/fBaselineRMS;
86 GlobalData().Get(
"",&
rHandle,
"");
104 Debug(
"Mean is %f, Intercept is %f, Slope is %f, RMS is %f",fBaseline, fBaselineIntercept,fBaselineSlope, fBaselineRMS);
QRunDataHandle rHandle(753)
QChannelRunData chanRunData
#define REGISTER_MODULE(clazz)
Module to calculate baseline parameters.
void Do(Diana::QEvent &ev)
void SetRightBaselineInRMS(double b)
void SetBaselineRMS(double b)
void SetRightBaseline(double b)
void SetRightLeftBaseline(double b)
void SetRightLeftBaselineInRMS(double b)
void SetBaselineSlopeRMSWindow(double b)
void SetBaselineSlope(double b)
void SetBaseline(double b)
void SetBaselineIntercept(double b)
void SetBaselineFlatRMS(double b)
basic channel and run based info. Used in the QRunData object.
double fADC2mV
conversion: mV = ADC * fADC2mV
const Q & GetByLabel(const QEventLabel &label) const
Get a QObject in read mode by label.
void Get(const char *owner, ReadHandle< Q > &handle) const
Get a QObject Handle in read mode.
Raw event: bolometer channel, trigger positions and types.
const QSampleInfo & GetMasterSample() const
Get MasterSample.
Raw event: sampled waveform.
global handle for QRunData
const QChannelRunData & GetChannelRunData(const int channel) const
get channel based run data quantities
Int_t GetSampleIndex() const
Get SampleIndex from the beginning of the waveform.
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...