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 if (!modEnable.is_null()) {
111 if (modEnable.size() != 4) {
112 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCDataAnalyzer JSON config, incorrect size of moduleEnabled");
116 for (
size_t module : {0, 1, 2, 3}) {
120 if (!delayedOrder.is_null()) {
121 if (delayedOrder.size() != 4) {
122 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCDataAnalyzer JSON config, incorrect size of delayedOrder");
126 for (
size_t module : {0, 1, 2, 3}) {
132 for (
size_t side : {0, 1}) {
133 for (
size_t module : {0, 1, 2, 3}) {
137 "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
138 ", module " + std::to_string(module) +
140 ", delayedOrder = " +
149 JSON PAconfig = configJSON[
"PulseAnalyzer"];
150 if (PAconfig.is_null()) {
151 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"JSON configuration object for ZDCPulseAnalyzer not found");
159 (*m_msgFunc_p)(
ZDCMsg::Fatal,
"Error parsing ZDCPulseAnalyzer JSON config, error = " + resultStr2);
165 for (
size_t side : {0, 1}) {
166 for (
size_t module : {0, 1, 2, 3}) {
168 (*m_msgFunc_p)(
ZDCMsg::Info,
"Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
169 ", module " + std::to_string(module));
176 std::ostringstream ostr;
177 ostr <<
"JSON configuration for ZDC pulse analyyzer for side " << std::to_string(side)
178 <<
", module " << std::to_string(module) <<
"\n" << moduleConfig.dump(2);
183 m_moduleAnalyzers[side][module] = std::make_unique<ZDCPulseAnalyzer>(msgFunc_p, moduleConfig);
185 (*m_msgFunc_p)(
ZDCMsg::Info,
"Finished constructing ZDCPulseAnalyzer for side " + std::to_string(side) +
186 ", module " + std::to_string(module));
195 (*m_msgFunc_p)(
ZDCMsg::Info,
"ZDCDataAnalyzer construction complete");
200 for (
size_t side : {0, 1}) {
212 for (
size_t module : {0, 1, 2, 3}) {
230 {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }},
231 {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }} }};
237 if (side < 2 && module < 4) {
254 for (
size_t side : {0, 1}) {
255 for (
size_t module : {0, 1, 2, 3}) {
264 int delayedOrder = deltaT < 0 ? -1 : 1;
265 for (
size_t side : {0, 1}) {
266 for (
size_t module : {0, 1, 2, 3}) {
268 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(deltaT), undelayedDelayedPedestalDiff[side][module]);
275 for (
size_t side : {0, 1}) {
276 for (
size_t module : {0, 1, 2, 3}) {
277 if (delayDeltaTArray[side][module] < 0)
m_delayedOrder[side][module] = -1;
280 (*m_msgFunc_p)(
ZDCMsg::Verbose,
"Enabling use of delayed samples on side, module = " + std::to_string(side) +
", " +
281 std::to_string(module) +
", delta t = " + std::to_string(delayDeltaTArray[side][module]));
283 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(delayDeltaTArray[side][module]), undelayedDelayedPedestalDiff[side][module]);
290 for (
size_t side : {0, 1}) {
291 for (
size_t module : {0, 1, 2, 3}) {
292 m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
299 for (
size_t side : {0, 1}) {
300 for (
size_t module : {0, 1, 2, 3}) {
301 m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
308 for (
size_t side : {0, 1}) {
309 for (
size_t module : {0, 1, 2, 3}) {
310 m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
317 for (
size_t side : {0, 1}) {
318 for (
size_t module : {0, 1, 2, 3}) {
319 m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
328 for (
size_t side : {0, 1}) {
329 for (
size_t module : {0, 1, 2, 3}) {
330 m_moduleAnalyzers[side][module]->enableRepass(peak2ndDerivMinRepassHG[side][module], peak2ndDerivMinRepassLG[side][module]);
337 for (
size_t side : {0, 1}) {
338 for (
size_t module : {0, 1, 2, 3}) {
346 for (
size_t side : {0, 1}) {
347 for (
size_t module : {0, 1, 2, 3}) {
355 for (
size_t side : {0, 1}) {
356 for (
size_t module : {0, 1, 2, 3}) {
364 for (
size_t side : {0, 1}) {
365 for (
size_t module : {0, 1, 2, 3}) {
366 m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorsHG[side][module], gainFactorsLG[side][module]);
372 for (
size_t side : {0, 1}) {
373 for (
size_t module : {0, 1, 2, 3}) {
381 for (
size_t side : {0, 1}) {
382 for (
size_t module : {0, 1, 2, 3}) {
394 for (
size_t side : {0, 1}) {
395 for (
size_t module : {0, 1, 2, 3}) {
396 m_moduleAnalyzers[side][module]->SetTauT0Values(fixTau1[side][module], fixTau2[side][module],
397 tau1[side][module], tau2[side][module], t0HG[side][module], t0LG[side][module]);
404 for (
size_t side : {0, 1}) {
405 for (
size_t module : {0, 1, 2, 3}) {
406 m_moduleAnalyzers[side][module]->SetNoiseSigmas(noiseSigmasHG[side][module], noiseSigmasLG[side][module]);
412 const std::array<std::array<std::vector<float>,4>,2>& sampleNoiseVecsLG)
414 for (
size_t side : {0, 1}) {
415 for (
size_t module : {0, 1, 2, 3}) {
416 m_moduleAnalyzers[side][module]->setPerSampleNoiseSigmas(sampleNoiseVecsHG[side][module], sampleNoiseVecsLG[side][module]);
422 for (
size_t side : {0, 1}) {
423 for (
size_t module : {0, 1, 2, 3}) {
432 for (
size_t side : {0, 1}) {
433 for (
size_t module : {0, 1, 2, 3}) {
434 m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minAmpHG[side][module], minAmpLG[side][module],
435 maxAmpHG[side][module], maxAmpLG[side][module]);
443 for (
size_t side : {0, 1}) {
444 for (
size_t module : {0, 1, 2, 3}) {
453 for (
size_t side : {0, 1}) {
454 for (
size_t module : {0, 1, 2, 3}) {
455 m_moduleAnalyzers[side][module]->SetADCOverUnderflowValues(HGOverflowADC[side][module], HGUnderflowADC[side][module], LGOverflowADC[side][module]);
464 for (
size_t side : {0, 1}) {
465 for (
size_t module : {0, 1, 2, 3}) {
466 m_moduleAnalyzers[side][module]->SetCutValues(chisqDivAmpCutHG[side][module], chisqDivAmpCutLG[side][module],
467 deltaT0MinHG[side][module], deltaT0MaxHG[side][module],
468 deltaT0MinLG[side][module], deltaT0MaxLG[side][module]);
476 for (
size_t side : {0, 1}) {
477 for (
size_t module : {0, 1, 2, 3}) {
478 m_moduleAnalyzers[side][module]->SetTimeCuts(deltaT0MinHG[side][module], deltaT0MaxHG[side][module],
479 deltaT0MinLG[side][module], deltaT0MaxLG[side][module]);
489 for (
size_t side : {0, 1}) {
490 for (
size_t module : {0, 1, 2, 3}) {
491 m_moduleAnalyzers[side][module]->SetChisqCuts(chisqDivAmpCutHG[side][module], chisqDivAmpScaleHG[side][module],
492 chisqDivAmpOffsetHG[side][module], chisqDivAmpPowerHG[side][module],
493 chisqDivAmpCutLG[side][module], chisqDivAmpScaleLG[side][module],
494 chisqDivAmpOffsetLG[side][module], chisqDivAmpPowerLG[side][module]);
500 float postPulseAbsDer2ndMinSig,
float minMainDer2ndRatio)
502 for (
size_t side : {0, 1}) {
503 for (
size_t module : {0, 1, 2, 3}) {
504 m_moduleAnalyzers[side][module]->enablePostPulseCheck(postPulseSampleDelta, postPulseDerivMinSig, postPulseAbsDer2ndMinSig, minMainDer2ndRatio);
510 const std::array<std::array<std::vector<float>, 4>, 2>& HGParamArr,
511 const std::array<std::array<std::vector<float>, 4>, 2>& LGParamArr)
513 for (
size_t side : {0, 1}) {
514 for (
size_t module : {0, 1, 2, 3}) {
516 HGParamArr.at(side).at(module), LGParamArr.at(side).at(module));
523 const std::array<std::array<std::vector<float>, 4>, 2>& HGNonlinCorrParams,
524 const std::array<std::array<std::vector<float>, 4>, 2>& LGNonlinCorrParams)
526 for (
size_t side : {0, 1}) {
527 for (
size_t module : {0, 1, 2, 3}) {
529 HGNonlinCorrParams[side][module],
530 LGNonlinCorrParams[side][module]);
537 for (
size_t side: {0,1})
539 for (
size_t module: {0,1,2})
548 std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& corrHistHG,
549 std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& corrHistLG)
551 if (correctPerSample)
552 (*m_msgFunc_p)(
ZDCMsg::Info,
"ZDCDataAnalyzer::enabling FADC Corrections per sample");
556 for (
size_t side : {0, 1}) {
557 for (
size_t module : {0, 1, 2, 3}) {
558 m_moduleAnalyzers[side][module]->enableFADCCorrections(correctPerSample, corrHistHG[side][module], corrHistLG[side][module]);
565 for (
size_t side : {0, 1}) {
566 for (
size_t module : {0, 1, 2, 3}) {
573 const std::array<std::array<std::vector<double>, 4>, 2>& parsHGArr,
574 const std::array<std::array<std::vector<double>, 4>, 2>& parsLGArr)
576 for (
size_t side : {0, 1}) {
577 for (
size_t module : {0, 1, 2, 3}) {
578 m_moduleAnalyzers[side][module]->enableTimeSigCut(AND, sigCut, TF1String, parsHGArr[side][module], parsLGArr[side][module]);
590 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"Starting new luminosity block " + std::to_string(lumiBlock)));
594 std::to_string(lumiBlock)));
596 for (
size_t side : {0, 1}) {
597 for (
size_t module : {0, 1, 2, 3}) {
601 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
604 else if (lumiBlock < splineLBMin) {
615 (*m_msgFunc_p)(
ZDCMsg::Verbose, (
"Loading timing calibrations for event " + std::to_string(
m_eventCount) +
", lumi block " + std::to_string(lumiBlock)));
617 for (
size_t side : {0, 1}) {
618 for (
size_t module : {0, 1, 2, 3}) {
622 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
626 else if (lumiBlock < splineLBMin) {
641 for (
size_t side : {0, 1}) {
642 for (
size_t module : {0, 1, 2, 3}) {
677 (*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)));
682 (*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)));
685 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples);
688 if (pulseAna_p->failed()) {
689 (*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)));
698 const std::vector<float>& HGSamplesDelayed,
const std::vector<float>& LGSamplesDelayed)
703 (*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)));
709 (*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)));
713 (*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)));
717 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples, HGSamplesDelayed, LGSamplesDelayed);
720 pulseAna_p->LoadAndAnalyzeData(HGSamplesDelayed, LGSamplesDelayed, HGSamples, LGSamples);
724 if (pulseAna_p->failed()) {
725 (*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)));
737 unsigned int sideNPulsesMod[2] = {0, 0};
739 for (
size_t side : {0, 1}) {
740 for (
size_t module : {0, 1, 2, 3}) {
750 for (
size_t side : {0, 1}) {
751 if (sideNPulsesMod[side] == 0)
continue;
753 for (
size_t module : {0, 1, 2, 3}) {
761 (*m_msgFunc_p)(
ZDCMsg::Debug, (
"ZDCPulseAnalyzer:: performing a repass on data for side, module = " + std::to_string(side) +
", " + std::to_string(module)));
771 for (
size_t side : {0, 1}) {
772 float tempFraction = 1.0;
773 double sumAmpTimesBkgdFrac = 0.0;
774 double sumCalibAmpTimesBkgdFrac = 0.0;
776 for (
size_t module : {0, 1, 2, 3}) {
780 int moduleMaskBit = 4 * side + module;
791 float timeCalib = pulseAna_p->
GetT0Corr();
799 sumAmpTimesBkgdFrac += amplitude*bkgdFraction;
807 sumCalibAmpTimesBkgdFrac += amplitude*bkgdFraction;
829 if (tempFraction < 1.0) {
m_moduleSum[side] /= tempFraction;}
842 for (
int iside:{0,1})
854 float EMCorrFact = 0;
861 float Had1CorrFact = 0;
867 float Had2CorrFact = 0;
873 const std::string &dbgmsg = std::format(
"ZDCDataAnalyzer: {} {} {} {}\n",
m_calibModuleSum[iside], EMCorrFact, Had1CorrFact, Had2CorrFact);
875 if ((EMCorrFact == 0.) or (Had1CorrFact == 0.) or (Had2CorrFact == 0.))[[
unlikely]]{
876 (*m_msgFunc_p)(
ZDCMsg::Error,
"ZDCDataAnalyzer::DoNLcalibModuleSum: Denominator is zero");
881 float ECorrEMHad1 = ECorrEM/Had1CorrFact;
882 float ECorrEMHad1Had2 = ECorrEMHad1/Had2CorrFact;
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< 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