15 {
"moduleEnabled", {JSON::value_t::array, 4,
true,
false}},
16 {
"iterativeCalibCorr", {JSON::value_t::array, 4,
true,
false}},
17 {
"delayedOrder", {JSON::value_t::array, 4,
true,
false}}
25 unsigned int LGMode) :
56 for (
size_t side : {0, 1}) {
57 for (
size_t module : {0, 1, 2, 3}) {
58 std::string moduleTag=
"_s" + std::to_string(side) +
"_m" +std::to_string(module);
61 peak2ndDerivMinSamples[side][module],
62 peak2ndDerivMinThresholdsHG[side][module],
63 peak2ndDerivMinThresholdsLG[side][module]);
86 JSON DAconfig = configJSON[
"DataAnalyzer"];
87 if (DAconfig.is_null()) {
88 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"JSON configuration object for ZDCDataAnalyzer not found");
94 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCDataAnalyzer JSON config, error = " + resultStr);
100 for (
size_t side : {0, 1}) {
101 for (
size_t module : {0, 1, 2, 3}) {
108 JSON modEnable = sideConfig[
"moduleEnabled"];
109 JSON delayedOrder = sideConfig[
"delayedOrder"];
110 JSON iterativeCalibCorr = sideConfig[
"iterativeCalibCorr"];
112 if (!modEnable.is_null()) {
113 if (modEnable.size() != 4) {
114 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCDataAnalyzer JSON config, incorrect size of moduleEnabled");
118 for (
size_t module : {0, 1, 2, 3}) {
122 if (!delayedOrder.is_null()) {
123 if (delayedOrder.size() != 4) {
124 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCDataAnalyzer JSON config, incorrect size of delayedOrder");
128 for (
size_t module : {0, 1, 2, 3}) {
135 if (!iterativeCalibCorr.is_null()) {
138 for (
const auto & modIterCalibCorr : iterativeCalibCorr) {
139 if (modIterCalibCorr.size() != 3) {
140 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCDataAnalyzer JSON config, incorrect size of iterativeCalibCorr entry " + modIterCalibCorr.dump());
144 unsigned int module = modIterCalibCorr[0];
145 float refFrac = modIterCalibCorr[1];
146 JSON coeffArray = modIterCalibCorr[2];
148 std::vector<float> polyCoeff;
149 for (
auto elem : coeffArray) {
150 polyCoeff.push_back(elem);
153 (*m_msgFunc_p)(
ZDCMsg::Debug,
"Iterative correction using module " + std::to_string(module) +
" with reference energy fraction " + std::to_string(refFrac) +
" and polynomial with " + std::to_string(polyCoeff.size()) +
" terms");
156 m_iterCalibCorr[side].push_back(std::make_tuple(module, refFrac, polyCoeff));
163 for (
size_t side : {0, 1}) {
164 for (
size_t module : {0, 1, 2, 3}) {
168 "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
169 ", module " + std::to_string(module) +
171 ", delayedOrder = " +
180 JSON PAconfig = configJSON[
"PulseAnalyzer"];
181 if (PAconfig.is_null()) {
182 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"JSON configuration object for ZDCPulseAnalyzer not found");
190 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCPulseAnalyzer JSON config, error = " + resultStr2);
196 for (
size_t side : {0, 1}) {
197 for (
size_t module : {0, 1, 2, 3}) {
199 (*m_msgFunc_p)(
ZDCMsg::Info,
"Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
200 ", module " + std::to_string(module));
207 std::ostringstream ostr;
208 ostr <<
"JSON configuration for ZDC pulse analyyzer for side " << std::to_string(side)
209 <<
", module " << std::to_string(module) <<
"\n" << moduleConfig.dump(2);
214 m_moduleAnalyzers[side][module] = std::make_unique<ZDCPulseAnalyzer>(msgFunc_p, moduleConfig);
216 (*m_msgFunc_p)(
ZDCMsg::Info,
"Finished constructing ZDCPulseAnalyzer for side " + std::to_string(side) +
217 ", module " + std::to_string(module));
226 (*m_msgFunc_p)(
ZDCMsg::Info,
"ZDCDataAnalyzer construction complete");
231 for (
size_t side : {0, 1}) {
243 for (
size_t module : {0, 1, 2, 3}) {
261 {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }},
262 {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }} }};
268 if (side < 2 && module < 4) {
285 for (
size_t side : {0, 1}) {
286 for (
size_t module : {0, 1, 2, 3}) {
295 int delayedOrder = deltaT < 0 ? -1 : 1;
296 for (
size_t side : {0, 1}) {
297 for (
size_t module : {0, 1, 2, 3}) {
299 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(deltaT), undelayedDelayedPedestalDiff[side][module]);
306 for (
size_t side : {0, 1}) {
307 for (
size_t module : {0, 1, 2, 3}) {
308 if (delayDeltaTArray[side][module] < 0)
m_delayedOrder[side][module] = -1;
311 (*m_msgFunc_p)(
ZDCMsg::Verbose,
"Enabling use of delayed samples on side, module = " + std::to_string(side) +
", " +
312 std::to_string(module) +
", delta t = " + std::to_string(delayDeltaTArray[side][module]));
314 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(delayDeltaTArray[side][module]), undelayedDelayedPedestalDiff[side][module]);
321 for (
size_t side : {0, 1}) {
322 for (
size_t module : {0, 1, 2, 3}) {
323 m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
330 for (
size_t side : {0, 1}) {
331 for (
size_t module : {0, 1, 2, 3}) {
332 m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
339 for (
size_t side : {0, 1}) {
340 for (
size_t module : {0, 1, 2, 3}) {
341 m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
348 for (
size_t side : {0, 1}) {
349 for (
size_t module : {0, 1, 2, 3}) {
350 m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
359 for (
size_t side : {0, 1}) {
360 for (
size_t module : {0, 1, 2, 3}) {
361 m_moduleAnalyzers[side][module]->enableRepass(peak2ndDerivMinRepassHG[side][module], peak2ndDerivMinRepassLG[side][module]);
368 for (
size_t side : {0, 1}) {
369 for (
size_t module : {0, 1, 2, 3}) {
377 for (
size_t side : {0, 1}) {
378 for (
size_t module : {0, 1, 2, 3}) {
386 for (
size_t side : {0, 1}) {
387 for (
size_t module : {0, 1, 2, 3}) {
395 for (
size_t side : {0, 1}) {
396 for (
size_t module : {0, 1, 2, 3}) {
397 m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorsHG[side][module], gainFactorsLG[side][module]);
403 for (
size_t side : {0, 1}) {
404 for (
size_t module : {0, 1, 2, 3}) {
412 for (
size_t side : {0, 1}) {
413 for (
size_t module : {0, 1, 2, 3}) {
425 for (
size_t side : {0, 1}) {
426 for (
size_t module : {0, 1, 2, 3}) {
427 m_moduleAnalyzers[side][module]->SetTauT0Values(fixTau1[side][module], fixTau2[side][module],
428 tau1[side][module], tau2[side][module], t0HG[side][module], t0LG[side][module]);
435 for (
size_t side : {0, 1}) {
436 for (
size_t module : {0, 1, 2, 3}) {
437 m_moduleAnalyzers[side][module]->SetNoiseSigmas(noiseSigmasHG[side][module], noiseSigmasLG[side][module]);
443 const std::array<std::array<std::vector<float>,4>,2>& sampleNoiseVecsLG)
445 for (
size_t side : {0, 1}) {
446 for (
size_t module : {0, 1, 2, 3}) {
447 m_moduleAnalyzers[side][module]->setPerSampleNoiseSigmas(sampleNoiseVecsHG[side][module], sampleNoiseVecsLG[side][module]);
453 for (
size_t side : {0, 1}) {
454 for (
size_t module : {0, 1, 2, 3}) {
463 for (
size_t side : {0, 1}) {
464 for (
size_t module : {0, 1, 2, 3}) {
465 m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minAmpHG[side][module], minAmpLG[side][module],
466 maxAmpHG[side][module], maxAmpLG[side][module]);
474 for (
size_t side : {0, 1}) {
475 for (
size_t module : {0, 1, 2, 3}) {
484 for (
size_t side : {0, 1}) {
485 for (
size_t module : {0, 1, 2, 3}) {
486 m_moduleAnalyzers[side][module]->SetADCOverUnderflowValues(HGOverflowADC[side][module], HGUnderflowADC[side][module], LGOverflowADC[side][module]);
495 for (
size_t side : {0, 1}) {
496 for (
size_t module : {0, 1, 2, 3}) {
497 m_moduleAnalyzers[side][module]->SetCutValues(chisqDivAmpCutHG[side][module], chisqDivAmpCutLG[side][module],
498 deltaT0MinHG[side][module], deltaT0MaxHG[side][module],
499 deltaT0MinLG[side][module], deltaT0MaxLG[side][module]);
507 for (
size_t side : {0, 1}) {
508 for (
size_t module : {0, 1, 2, 3}) {
509 m_moduleAnalyzers[side][module]->SetTimeCuts(deltaT0MinHG[side][module], deltaT0MaxHG[side][module],
510 deltaT0MinLG[side][module], deltaT0MaxLG[side][module]);
520 for (
size_t side : {0, 1}) {
521 for (
size_t module : {0, 1, 2, 3}) {
522 m_moduleAnalyzers[side][module]->SetChisqCuts(chisqDivAmpCutHG[side][module], chisqDivAmpScaleHG[side][module],
523 chisqDivAmpOffsetHG[side][module], chisqDivAmpPowerHG[side][module],
524 chisqDivAmpCutLG[side][module], chisqDivAmpScaleLG[side][module],
525 chisqDivAmpOffsetLG[side][module], chisqDivAmpPowerLG[side][module]);
531 float postPulseAbsDer2ndMinSig,
float minMainDer2ndRatio)
533 for (
size_t side : {0, 1}) {
534 for (
size_t module : {0, 1, 2, 3}) {
535 m_moduleAnalyzers[side][module]->enablePostPulseCheck(postPulseSampleDelta, postPulseDerivMinSig, postPulseAbsDer2ndMinSig, minMainDer2ndRatio);
541 const std::array<std::array<std::vector<float>, 4>, 2>& HGParamArr,
542 const std::array<std::array<std::vector<float>, 4>, 2>& LGParamArr)
544 for (
size_t side : {0, 1}) {
545 for (
size_t module : {0, 1, 2, 3}) {
547 HGParamArr.at(side).at(module), LGParamArr.at(side).at(module));
554 const std::array<std::array<std::vector<float>, 4>, 2>& HGNonlinCorrParams,
555 const std::array<std::array<std::vector<float>, 4>, 2>& LGNonlinCorrParams)
557 for (
size_t side : {0, 1}) {
558 for (
size_t module : {0, 1, 2, 3}) {
560 HGNonlinCorrParams[side][module],
561 LGNonlinCorrParams[side][module]);
568 for (
size_t side: {0,1})
570 for (
size_t module: {0,1,2})
579 std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& corrHistHG,
580 std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& corrHistLG)
582 if (correctPerSample)
583 (*m_msgFunc_p)(
ZDCMsg::Info,
"ZDCDataAnalyzer::enabling FADC Corrections per sample");
587 for (
size_t side : {0, 1}) {
588 for (
size_t module : {0, 1, 2, 3}) {
589 m_moduleAnalyzers[side][module]->enableFADCCorrections(correctPerSample, corrHistHG[side][module], corrHistLG[side][module]);
596 for (
size_t side : {0, 1}) {
597 for (
size_t module : {0, 1, 2, 3}) {
604 const std::array<std::array<std::vector<double>, 4>, 2>& parsHGArr,
605 const std::array<std::array<std::vector<double>, 4>, 2>& parsLGArr)
607 for (
size_t side : {0, 1}) {
608 for (
size_t module : {0, 1, 2, 3}) {
609 m_moduleAnalyzers[side][module]->enableTimeSigCut(AND, sigCut, TF1String, parsHGArr[side][module], parsLGArr[side][module]);
621 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"Starting new luminosity block " + std::to_string(lumiBlock)));
625 std::to_string(lumiBlock)));
627 for (
size_t side : {0, 1}) {
628 for (
size_t module : {0, 1, 2, 3}) {
632 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
635 else if (lumiBlock < splineLBMin) {
646 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"Loading timing calibrations for event " + std::to_string(
m_eventCount) +
", lumi block " + std::to_string(lumiBlock)));
648 for (
size_t side : {0, 1}) {
649 for (
size_t module : {0, 1, 2, 3}) {
653 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
657 else if (lumiBlock < splineLBMin) {
672 for (
size_t side : {0, 1}) {
673 for (
size_t module : {0, 1, 2, 3}) {
708 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"Skipping analysis of disabled module for event index " + std::to_string(
m_eventCount) +
", side, module = " + std::to_string(side) +
", " + std::to_string(module)));
713 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"/n Loading data for event index " + std::to_string(
m_eventCount) +
", side, module = " + std::to_string(side) +
", " + std::to_string(module)));
716 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples);
719 if (pulseAna_p->failed()) {
720 (*m_msgFunc_p)(
ZDCMsg::Debug, (
"ZDCPulseAnalyzer::LoadData() returned fail for event " + std::to_string(
m_eventCount) +
", side, module = " + std::to_string(side) +
", " + std::to_string(module)));
729 const std::vector<float>& HGSamplesDelayed,
const std::vector<float>& LGSamplesDelayed)
734 (*m_msgFunc_p)(
ZDCMsg::Debug, (
"Skipping analysis of disabled mofule for event index " + std::to_string(
m_eventCount) +
", side, module = " + std::to_string(side) +
", " + std::to_string(module)));
740 (*m_msgFunc_p)(
ZDCMsg::Error, (
"Handling of delayed pulses not enabled, on side, module = " + std::to_string(side) +
", " + std::to_string(module) +
", skipping processing for event index " + std::to_string(
m_eventCount)));
744 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"Loading undelayed and delayed data for event index " + std::to_string(
m_eventCount) +
", side, module = " + std::to_string(side) +
", " + std::to_string(module)));
748 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples, HGSamplesDelayed, LGSamplesDelayed);
751 pulseAna_p->LoadAndAnalyzeData(HGSamplesDelayed, LGSamplesDelayed, HGSamples, LGSamples);
755 if (pulseAna_p->failed()) {
756 (*m_msgFunc_p)(
ZDCMsg::Debug, (
"ZDCPulseAnalyzer::LoadData() returned fail for event " + std::to_string(
m_eventCount) +
", side, module = " + std::to_string(side) +
", " + std::to_string(module)));
768 unsigned int sideNPulsesMod[2] = {0, 0};
770 for (
size_t side : {0, 1}) {
771 for (
size_t module : {0, 1, 2, 3}) {
781 for (
size_t side : {0, 1}) {
782 if (sideNPulsesMod[side] == 0)
continue;
784 for (
size_t module : {0, 1, 2, 3}) {
792 (*m_msgFunc_p)(
ZDCMsg::Debug, (
"ZDCPulseAnalyzer:: performing a repass on data for side, module = " + std::to_string(side) +
", " + std::to_string(module)));
802 for (
size_t side : {0, 1}) {
803 float tempFraction = 1.0;
804 double sumAmpTimesBkgdFrac = 0.0;
805 double sumCalibAmpTimesBkgdFrac = 0.0;
807 for (
size_t module : {0, 1, 2, 3}) {
811 int moduleMaskBit = 4 * side + module;
822 float timeCalib = pulseAna_p->
GetT0Corr();
830 sumAmpTimesBkgdFrac += amplitude*bkgdFraction;
838 sumCalibAmpTimesBkgdFrac += amplitude*bkgdFraction;
860 if (tempFraction < 1.0) {
m_moduleSum[side] /= tempFraction;}
876 for (
int iside:{0,1}){
890 unsigned int modnum = std::get<0>(modtuple);
891 float ftyp = std::get<1>(modtuple);
892 std::vector<float> polyCoeffs = std::get<2>(modtuple);
899 for (
size_t i=0;i<polyCoeffs.size(); i++){
900 CorrFact += std::pow(f -ftyp,i)*polyCoeffs[i];
905 (*m_msgFunc_p)(
ZDCMsg::Error,
"ZDCDataAnalyzer::DoNLcalibModuleSum: Denominator is zero");
910 totalmoduleE= totalmoduleE/CorrFact;
std::array< std::array< std::vector< float >, 3 >, 2 > m_NLcalibFactors
std::unique_ptr< ZDCJSONConfig > m_dataAnalyzerConfig
void enablePreExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray &HGADCThresh, const ZDCModuleIntArray &LGADCThresh)
void SetNoiseSigmas(const ZDCModuleFloatArray &noiseSigmasHG, const ZDCModuleFloatArray &noiseSigmasLG)
void SetCutValues(const ZDCModuleFloatArray &chisqDivAmpCutHG, const ZDCModuleFloatArray &chisqDivAmpCutLG, const ZDCModuleFloatArray &deltaT0MinHG, const ZDCModuleFloatArray &deltaT0MaxHG, const ZDCModuleFloatArray &deltaT0MinLG, const ZDCModuleFloatArray &deltaT0MaxLG)
void SetChisqCuts(const ZDCModuleFloatArray &chisqDivAmpCutHG, const ZDCModuleFloatArray &chisqDivAmpScaleHG, const ZDCModuleFloatArray &chisqDivAmpOffsetHG, const ZDCModuleFloatArray &chisqDivAmpPowerHG, const ZDCModuleFloatArray &chisqDivAmpCutLG, const ZDCModuleFloatArray &chisqDivAmpScaleLG, const ZDCModuleFloatArray &chisqDivAmpOffsetLG, const ZDCModuleFloatArray &chisqDivAmpPowerLG)
void enablePostExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray &HGADCThresh, const ZDCModuleIntArray &LGADCThresh)
void SetFitTimeMax(float tmax)
ZDCMsg::MessageFunctionPtr m_msgFunc_p
void setPerSampleNoiseSigmas(const std::array< std::array< std::vector< float >, 4 >, 2 > &sampleNoiseVecsHG, const std::array< std::array< std::vector< float >, 4 >, 2 > &sampleNoiseVecsLG)
std::array< std::array< std::unique_ptr< ZDCPulseAnalyzer >, 4 >, 2 > m_moduleAnalyzers
void enableFADCCorrections(bool correctPerSample, std::array< std::array< std::unique_ptr< const TH1 >, 4 >, 2 > &correHistHG, std::array< std::array< std::unique_ptr< const TH1 >, 4 >, 2 > &correHistLG)
std::array< float, 2 > m_NLcalibModSumBkgdFrac
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0LGOffsetSplines
std::array< std::array< bool, 4 >, 2 > ZDCModuleBoolArray
void LoadAndAnalyzeData(size_t side, size_t module, const std::vector< float > &HGSamples, const std::vector< float > &LGSamples)
void saveFitFunc(bool save)
ZDCModuleFloatArray m_pedestals
std::array< std::array< float, 4 >, 2 > m_calibAmplitude
std::array< float, 2 > m_moduleSumPreSample
ZDCModuleBoolArray m_moduleEnabled
std::array< std::array< float, 4 >, 2 > ZDCModuleFloatArray
std::array< float, 2 > m_calibModSumBkgdFrac
ZDCModuleFloatArray m_currentECalibCoeff
bool disableModule(size_t side, size_t module)
std::unique_ptr< ZDCJSONConfig > m_pulseAnalyzerConfig
void SetTauT0Values(const ZDCModuleBoolArray &fxiTau1, const ZDCModuleBoolArray &fxiTau2, const ZDCModuleFloatArray &tau1, const ZDCModuleFloatArray &tau2, const ZDCModuleFloatArray &t0HG, const ZDCModuleFloatArray &t0LG)
std::array< float, 2 > m_averageTime
void SetGainFactorsHGLG(float gainFactorHG, float gainFactorLG)
void enablePostPulseCheck(unsigned int postPulseSampleDelta, float postPulseDerivMinSig, float postPulseAbsDer2ndMinSig, float minMainDer2ndRatio)
std::array< std::array< int, 4 >, 2 > ZDCModuleIntArray
void SetTimeCuts(const ZDCModuleFloatArray &deltaT0MinHG, const ZDCModuleFloatArray &deltaT0MaxHG, const ZDCModuleFloatArray &deltaT0MinLG, const ZDCModuleFloatArray &deltaT0MaxLG)
void SetModuleAmpFractionLG(const ZDCDataAnalyzer::ZDCModuleFloatArray &moduleAmpFractionLG)
void setMinimumSignificance(float sigMinHG, float sigMinLG)
std::array< std::array< bool, 4 >, 2 > m_dataLoaded
void enableRepass(const ZDCModuleFloatArray &peak2ndDerivMinRepassHG, const ZDCModuleFloatArray &peak2ndDerivMinRepassLG)
unsigned int m_moduleMask
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_LBDepEcalibSplines
std::array< bool, 2 > m_fail
void enableTimeSigCut(bool AND, float sigCut, const std::string &TF1String, const std::array< std::array< std::vector< double >, 4 >, 2 > &parsHGArr, const std::array< std::array< std::vector< double >, 4 >, 2 > &parsLGArr)
std::array< std::array< float, 4 >, 2 > m_calibTime
void SetNLcalibParams(std::array< std::array< std::vector< float >, 3 >, 2 > &nlcalibParams)
void SetPeak2ndDerivMinTolerances(size_t tolerance)
std::array< std::array< float, 4 >, 2 > m_moduleAmpFractionLG
std::array< float, 2 > m_moduleSumErrSq
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0HGOffsetSplines
ZDCModuleFloatArray m_HGGains
std::array< float, 2 > m_moduleSum
std::array< std::vector< std::tuple< unsigned int, float, std::vector< float > > >, 2 > m_iterCalibCorr
std::array< float, 2 > m_NLcalibModuleSum
std::array< float, 2 > m_calibModuleSumErrSq
std::array< float, 2 > m_calibModuleSum
void DoNLcalibModuleSum()
std::array< std::array< int, 4 >, 2 > m_delayedOrder
void SetADCOverUnderflowValues(const ZDCModuleFloatArray &HGOverflowADC, const ZDCModuleFloatArray &HGUnderflowADC, const ZDCModuleFloatArray &LGOverflowADC)
void enableDelayed(float deltaT, const ZDCModuleFloatArray &undelayedDelayedPedestalDiff)
ZDCDataAnalyzer(ZDCMsg::MessageFunctionPtr messageFunc_p, int nSample, float deltaTSample, size_t preSampleIdx, const std::string &fitFunction, const ZDCModuleIntArray &peak2ndDerivMinSamples, const ZDCModuleFloatArray &peak2ndDerivMinThresholdsHG, const ZDCModuleFloatArray &peak2ndDerivMinThresholdsLG, unsigned int LGMode=ZDCPulseAnalyzer::LGModeNormal)
void set2ndDerivStep(size_t step)
std::array< float, 2 > m_moduleSumBkgdFrac
void disableFADCCorrections()
bool getPulseAnalyzerGlobalPar(const std::string &key, T &value)
std::array< float, 2 > m_NLcalibModuleSumErrSq
ZDCModuleFloatArray m_currentT0OffsetsHG
void StartEvent(int lumiBlock)
static const ZDCJSONConfig::JSONParamList JSONConfigParams
void SetFitMinMaxAmpValues(const ZDCModuleFloatArray &minAmpHG, const ZDCModuleFloatArray &minAmpLG, const ZDCModuleFloatArray &maxAmpHG, const ZDCModuleFloatArray &maxAmpLG)
void SetTimingCorrParams(ZDCPulseAnalyzer::TimingCorrMode mode, float refADC, float refScale, const std::array< std::array< std::vector< float >, 4 >, 2 > &HGParamArr, const std::array< std::array< std::vector< float >, 4 >, 2 > &LGParamArr)
void SetNonlinCorrParams(float refADC, float refScale, const std::array< std::array< std::vector< float >, 4 >, 2 > &HGNonlinCorrParams, const std::array< std::array< std::vector< float >, 4 >, 2 > &LHGNonlinCorrParams)
ZDCModuleFloatArray m_currentT0OffsetsLG
std::array< std::array< unsigned int, 4 >, 2 > m_moduleStatus
std::map< std::string, JSONParamDescr > JSONParamList
float GetAmpError() const
float GetAmplitude() const
bool armSumInclude() const
unsigned int GetStatusMask() const
float GetPreSampleAmp() const
static const ZDCJSONConfig::JSONParamList JSONConfigParams
float GetBkgdMaxFraction() const
std::shared_ptr< MessageFunction > MessageFunctionPtr
Tell the compiler to optimize assuming that FP may trap.
#define CXXUTILS_TRAPPING_FP