7 LOG(error) <<
"WfmProcessor : Filling " << digi->
GetClassName() <<
". waveform too short: accessing "
12 LOG(error) <<
"WfmProcessor : Filling " << digi->
GetClassName() <<
". waveform too short: accessing "
19 LOG(debug4) <<
"WfmProcessor : Filling " << digi->
GetClassName() <<
". Inverting";
20 float myconstant{-1.0};
21 std::transform(wfm.begin(), wfm.end(), wfm.begin(),
22 std::bind(std::multiplies<float>(), myconstant, std::placeholders::_1));
26 LOG(debug4) <<
"WfmProcessor : Filling " << digi->
GetClassName() <<
". ZL calc";
28 std::transform(wfm.begin(), wfm.end(), wfm.begin(), [ZL](
float value) { return value - ZL; });
32 LOG(debug4) <<
"WfmProcessor : Filling " << digi->
GetClassName() <<
". MAX & INT search";
35 digi->
fAmpl = (int)*max_iter;
36 digi->
fTimeMax = (int)std::distance(wfm.begin(), max_iter);
42 LOG(debug4) <<
"WfmProcessor : Filling " << digi->
GetClassName() <<
". Fitting";
52 if (
static_cast<std::size_t
>(SignalBeg) > wfm.size())
54 if (
static_cast<std::size_t
>(SignalBeg +
fSignalLength) > wfm.size())
63 digi->
fFitR2 = (fit_R2 > 2.0) ? 2.0 : fit_R2;
72void WfmProcessor::MeanRMScalc(std::vector<float> wfm,
float* Mean,
float* RMS,
int begin,
int end,
int step)
74 begin = (begin < 0) ? 0 : begin;
80 step = TMath::Abs(step);
83 for (
int n = begin; n <= end; n += step) {
87 *Mean /= (
float)Delta;
88 for (
int n = begin; n <= end; n += step)
89 *RMS += (wfm[n] - *Mean) * (wfm[n] - *Mean);
90 *RMS =
sqrt(*RMS / ((
float)Delta));
98 for (
int i = 0;
i < model_order;
i++)
friend F32vec4 sqrt(const F32vec4 &a)
Data class for Bmn digi container template.
std::vector< float > fFitWfm
std::vector< float > fWfm
Time of maximum in fit of waveform [adc samples].
float fFitTimeMax
Quality of waveform fit [] – good near 0.
float fFitZL
Amplitude from fit of waveform [adc counts].
float fFitR2
Energy deposition from fit of waveform [adc counts].
int fZL
Amplitude from waveform [adc counts].
float fFitIntegral
ZeroLevel from fit of waveform [adc counts].
float fFitAmpl
Time over threshold [adc samples].
int fTimeMax
Energy deposition from waveform [adc counts].
int fIntegral
ZeroLevel from waveform [adc counts].
virtual const char * GetClassName()
Class name (static)
void SetSignalBegin(int SignalBeg)
void CalculateFitAmplitudesFast(int signal_length, std::complex< float > **InvHarmoMatrix)
void SetExternalHarmonics(std::vector< std::complex< float > > harmonics)
float GetRSquare(int gate_beg, int gate_end)
void SetWaveform(std::vector< float > &Wfm, float ZeroLevel)
void SetDebugMode(bool IsDebug)
int CalcSignalBeginStraight()
std::vector< float > GetFitWfm()
void Initialize(int model_order, int exponent_number, int gate_beg, int gate_end)
float GetIntegral(int gate_beg, int gate_end)
std::complex< float > ** fAZik
struct WfmProcessor::digiPars fdigiPars
void ProcessWfm(std::vector< float > &wfm, BmnDigiContainerTemplate *digi)
std::vector< std::complex< float > > harmonics