ATLAS Offline Software
Loading...
Searching...
No Matches
ZDCDataAnalyzer Class Reference

#include <ZDCDataAnalyzer.h>

Public Types

typedef std::array< std::array< float, 4 >, 2 > ZDCModuleFloatArray
typedef std::array< std::array< bool, 4 >, 2 > ZDCModuleBoolArray
typedef std::array< std::array< int, 4 >, 2 > ZDCModuleIntArray
using JSON = ZDCJSONConfig::JSON

Public Member Functions

 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)
 ZDCDataAnalyzer (ZDCMsg::MessageFunctionPtr messageFunc_p, const JSON &configJSON)
 ~ZDCDataAnalyzer ()
template<typename T>
bool getPulseAnalyzerGlobalPar (const std::string &key, T &value)
template<typename T>
void invokeAll (T functor)
void enableDelayed (float deltaT, const ZDCModuleFloatArray &undelayedDelayedPedestalDiff)
void enableDelayed (const ZDCModuleFloatArray &delayDeltaT, const ZDCModuleFloatArray &undelayedDelayedPedestalDiff)
void enableRepass (const ZDCModuleFloatArray &peak2ndDerivMinRepassHG, const ZDCModuleFloatArray &peak2ndDerivMinRepassLG)
void enablePreExclusion (unsigned int maxSamplesExcl, const ZDCModuleIntArray &HGADCThresh, const ZDCModuleIntArray &LGADCThresh)
void enablePreExclusion (unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh)
void enablePostExclusion (unsigned int maxSamplesExcl, const ZDCModuleIntArray &HGADCThresh, const ZDCModuleIntArray &LGADCThresh)
void enablePostExclusion (unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh)
bool ModuleDisabled (unsigned int side, unsigned int module) const
bool moduleEnabled (unsigned int side, unsigned int module) const
unsigned int GetModuleMask () const
float GetModuleSum (size_t side) const
float GetModuleSumErr (size_t side) const
float GetSideBkgdFrac (size_t side) const
float GetCalibModuleSum (size_t side) const
float GetCalibModuleSumErr (size_t side) const
float GetSideCalibBkgdFrac (size_t side) const
void DoNLcalibModuleSum ()
float GetNLcalibModuleSum (size_t side) const
float GetNLcalibModuleSumErr (size_t side) const
float GetModuleSumPreSample (size_t side) const
float GetAverageTime (size_t side) const
bool SideFailed (size_t side) const
float GetModuleAmplitude (size_t side, size_t module) const
float GetModuleTime (size_t side, size_t module) const
float GetModuleChisq (size_t side, size_t module) const
float GetModuleCalibAmplitude (size_t side, size_t module) const
float GetModuleCalibTime (size_t side, size_t module) const
float GetModuleStatus (size_t side, size_t module) const
float GetdelayedBS (size_t side, size_t module) const
const ZDCPulseAnalyzerGetPulseAnalyzer (size_t side, size_t module) const
ZDCPulseAnalyzerGetPulseAnalyzer (size_t side, size_t module)
bool disableModule (size_t side, size_t module)
void set2ndDerivStep (size_t step)
void setMinimumSignificance (float sigMinHG, float sigMinLG)
void SetGainFactorsHGLG (float gainFactorHG, float gainFactorLG)
void SetGainFactorsHGLG (const ZDCModuleFloatArray &gainFactorsHG, const ZDCModuleFloatArray &gainFactorsLG)
void SetPeak2ndDerivMinTolerances (size_t tolerance)
void SetFitTimeMax (float tmax)
void SetADCOverUnderflowValues (const ZDCModuleFloatArray &HGOverflowADC, const ZDCModuleFloatArray &HGUnderflowADC, const ZDCModuleFloatArray &LGOverflowADC)
void SetNoiseSigmas (const ZDCModuleFloatArray &noiseSigmasHG, const ZDCModuleFloatArray &noiseSigmasLG)
void setPerSampleNoiseSigmas (const std::array< std::array< std::vector< float >, 4 >, 2 > &sampleNoiseVecsHG, const std::array< std::array< std::vector< float >, 4 >, 2 > &sampleNoiseVecsLG)
void SetTauT0Values (const ZDCModuleBoolArray &fxiTau1, const ZDCModuleBoolArray &fxiTau2, const ZDCModuleFloatArray &tau1, const ZDCModuleFloatArray &tau2, const ZDCModuleFloatArray &t0HG, const ZDCModuleFloatArray &t0LG)
void SetFitMinMaxAmpValues (const ZDCModuleFloatArray &minAmpHG, const ZDCModuleFloatArray &minAmpLG, const ZDCModuleFloatArray &maxAmpHG, const ZDCModuleFloatArray &maxAmpLG)
void SetFitMinMaxAmpValues (float minHG, float minLG, float maxHG, float maxLG)
void SetCutValues (const ZDCModuleFloatArray &chisqDivAmpCutHG, const ZDCModuleFloatArray &chisqDivAmpCutLG, const ZDCModuleFloatArray &deltaT0MinHG, const ZDCModuleFloatArray &deltaT0MaxHG, const ZDCModuleFloatArray &deltaT0MinLG, const ZDCModuleFloatArray &deltaT0MaxLG)
void SetTimeCuts (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 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)
void SetNLcalibParams (std::array< std::array< std::vector< float >, 3 >, 2 > &nlcalibParams)
void SetModuleAmpFractionLG (const ZDCDataAnalyzer::ZDCModuleFloatArray &moduleAmpFractionLG)
void enablePostPulseCheck (unsigned int postPulseSampleDelta, float postPulseDerivMinSig, float postPulseAbsDer2ndMinSig, float minMainDer2ndRatio)
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)
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)
void disableFADCCorrections ()
void LoadEnergyCalibrations (std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &&calibSplines)
void LoadT0Calibrations (std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &&T0HGOffsetSplines, std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &&T0LGOffsetSplines)
void StartEvent (int lumiBlock)
void LoadAndAnalyzeData (size_t side, size_t module, const std::vector< float > &HGSamples, const std::vector< float > &LGSamples)
void LoadAndAnalyzeData (size_t side, size_t module, const std::vector< float > &HGSamples, const std::vector< float > &LGSamples, const std::vector< float > &HGSamplesDelayed, const std::vector< float > &LGSamplesDelayed)
bool FinishEvent ()
void saveFitFunc (bool save)
void setQuietFits (bool quiet)

Static Public Attributes

static const ZDCJSONConfig::JSONParamList JSONConfigParams

Private Member Functions

void init ()

Private Attributes

ZDCMsg::MessageFunctionPtr m_msgFunc_p
std::unique_ptr< ZDCJSONConfigm_dataAnalyzerConfig {}
std::unique_ptr< ZDCJSONConfigm_pulseAnalyzerConfig {}
bool m_repassEnabled {false}
std::array< std::array< int, 4 >, 2 > m_delayedOrder {}
ZDCModuleBoolArray m_moduleEnabled {}
std::array< std::array< std::unique_ptr< ZDCPulseAnalyzer >, 4 >, 2 > m_moduleAnalyzers {}
int m_eventCount {0}
ZDCModuleFloatArray m_HGGains {}
ZDCModuleFloatArray m_pedestals {}
bool m_haveECalib {false}
bool m_haveT0Calib {false}
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_LBDepEcalibSplines {}
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0HGOffsetSplines {}
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0LGOffsetSplines {}
bool m_haveIterCalibCorr {false}
std::array< std::vector< std::tuple< unsigned int, float, std::vector< float > > >, 2 > m_iterCalibCorr
int m_currentLB {-1}
ZDCModuleFloatArray m_currentECalibCoeff {}
ZDCModuleFloatArray m_currentT0OffsetsHG {}
ZDCModuleFloatArray m_currentT0OffsetsLG {}
std::array< std::array< bool, 4 >, 2 > m_dataLoaded {}
unsigned int m_moduleMask {0}
std::array< std::array< unsigned int, 4 >, 2 > m_moduleStatus {}
std::array< std::array< float, 4 >, 2 > m_calibAmplitude {}
std::array< std::array< float, 4 >, 2 > m_calibTime {}
std::array< float, 2 > m_moduleSum {}
std::array< float, 2 > m_moduleSumErrSq {}
std::array< float, 2 > m_moduleSumPreSample {}
std::array< float, 2 > m_moduleSumBkgdFrac {}
std::array< float, 2 > m_calibModuleSum {}
std::array< float, 2 > m_calibModuleSumErrSq {}
std::array< float, 2 > m_calibModSumBkgdFrac {}
bool m_haveNLcalib {false}
std::array< std::array< std::vector< float >, 3 >, 2 > m_NLcalibFactors {}
std::array< float, 2 > m_NLcalibModuleSum {}
std::array< float, 2 > m_NLcalibModuleSumErrSq {}
std::array< float, 2 > m_NLcalibModSumBkgdFrac {}
std::array< float, 2 > m_averageTime {}
std::array< bool, 2 > m_fail {}
std::array< std::array< float, 4 >, 2 > m_moduleAmpFractionLG {}

Detailed Description

Definition at line 23 of file ZDCDataAnalyzer.h.

Member Typedef Documentation

◆ JSON

Definition at line 30 of file ZDCDataAnalyzer.h.

◆ ZDCModuleBoolArray

typedef std::array<std::array<bool, 4>, 2> ZDCDataAnalyzer::ZDCModuleBoolArray

Definition at line 27 of file ZDCDataAnalyzer.h.

◆ ZDCModuleFloatArray

typedef std::array<std::array<float, 4>, 2> ZDCDataAnalyzer::ZDCModuleFloatArray

Definition at line 26 of file ZDCDataAnalyzer.h.

◆ ZDCModuleIntArray

typedef std::array<std::array<int, 4>, 2> ZDCDataAnalyzer::ZDCModuleIntArray

Definition at line 28 of file ZDCDataAnalyzer.h.

Constructor & Destructor Documentation

◆ ZDCDataAnalyzer() [1/2]

ZDCDataAnalyzer::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 )

Definition at line 21 of file ZDCDataAnalyzer.cxx.

25 :
26 m_msgFunc_p(std::move(msgFunc_p))
27{
28 m_moduleEnabled[0] = {{true, true, true, true}};
29 m_moduleEnabled[1] = {{true, true, true, true}};
30
31 m_moduleAnalyzers[0] = {{0, 0, 0, 0}};
32 m_moduleAnalyzers[1] = {{0, 0, 0, 0}};
33
34 m_calibAmplitude[0] = {{0, 0, 0, 0}};
35 m_calibAmplitude[1] = {{0, 0, 0, 0}};
36
37 m_calibTime[0] = {{0, 0, 0, 0}};
38 m_calibTime[1] = {{0, 0, 0, 0}};
39
40 m_dataLoaded[0] = {{false, false, false, false}};
41 m_dataLoaded[1] = {{false, false, false, false}};
42
43 m_delayedOrder[0] = {0, 0, 0, 0};
44 m_delayedOrder[1] = {0, 0, 0, 0};
45
46 // For now we are using hard-coded gain factors and pedestals
47 //
48 m_HGGains[0] = {{10, 10, 10, 10}};
49 m_HGGains[1] = {{10, 10, 10, 10}};
50
51 m_pedestals[0] = {{100, 100, 100, 100}};
52 m_pedestals[1] = {{100, 100, 100, 100}};
53
54 // Construct the per-module pulse analyzers
55 //
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);
59 m_moduleAnalyzers[side][module] = make_unique<ZDCPulseAnalyzer>(m_msgFunc_p, std::move(moduleTag), nSample, deltaTSample, preSampleIdx,
60 m_pedestals[side][module], fitFunction,
61 peak2ndDerivMinSamples[side][module],
62 peak2ndDerivMinThresholdsHG[side][module],
63 peak2ndDerivMinThresholdsLG[side][module]);
64 m_moduleAnalyzers[side][module]->setLGMode(LGMode);
65 }
66 }
67}
ZDCMsg::MessageFunctionPtr m_msgFunc_p
std::array< std::array< std::unique_ptr< ZDCPulseAnalyzer >, 4 >, 2 > m_moduleAnalyzers
ZDCModuleFloatArray m_pedestals
std::array< std::array< float, 4 >, 2 > m_calibAmplitude
ZDCModuleBoolArray m_moduleEnabled
std::array< std::array< bool, 4 >, 2 > m_dataLoaded
std::array< std::array< float, 4 >, 2 > m_calibTime
ZDCModuleFloatArray m_HGGains
std::array< std::array< int, 4 >, 2 > m_delayedOrder

◆ ZDCDataAnalyzer() [2/2]

ZDCDataAnalyzer::ZDCDataAnalyzer ( ZDCMsg::MessageFunctionPtr messageFunc_p,
const JSON & configJSON )

Definition at line 69 of file ZDCDataAnalyzer.cxx.

69 :
70 m_msgFunc_p(msgFunc_p)
71{
72 init();
73
74 // Construct the object that will extract the data and pulse analyzer
75 // configurations from the input JSON configuration
76 //
77 // For the data anlyzer we use 1 channel since the relevant
78 // configurations will all be per-side
79 //
80 m_dataAnalyzerConfig = std::make_unique<ZDCJSONConfig>(std::vector<std::string>{"C", "A"}, 1);
81 m_pulseAnalyzerConfig = std::make_unique<ZDCJSONConfig>(std::vector<std::string>{"C", "A"}, 4);
82
83
84 // Extract the JSON object for the pulse analyzer(s)
85 //
86 JSON DAconfig = configJSON["DataAnalyzer"];
87 if (DAconfig.is_null()) {
88 (*m_msgFunc_p)(ZDCMsg::Fatal, "JSON configuration object for ZDCDataAnalyzer not found");
89 return;
90 }
91
92 auto [result, resultStr] = m_dataAnalyzerConfig->ParseConfig(DAconfig, ZDCDataAnalyzer::JSONConfigParams);
93 if (!result) {
94 (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCDataAnalyzer JSON config, error = " + resultStr);
95 return;
96 }
97
98 // The data analyzer configuration is simple enough we handle it inline
99 //
100 for (size_t side : {0, 1}) {
101 for (size_t module : {0, 1, 2, 3}) {
102 m_moduleEnabled[side][module] = true;
103 }
104
105 // Now extract information from ZDCDataAnalyzer-specific configuration
106 //
107 JSON sideConfig = m_dataAnalyzerConfig->getChannelConfig(side, 0);
108 JSON modEnable = sideConfig["moduleEnabled"];
109 JSON delayedOrder = sideConfig["delayedOrder"];
110 JSON iterativeCalibCorr = sideConfig["iterativeCalibCorr"];
111
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");
115 return;
116 }
117
118 for (size_t module : {0, 1, 2, 3}) {
119 m_moduleEnabled[side][module] = modEnable[module];
120 }
121 }
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");
125 return;
126 }
127
128 for (size_t module : {0, 1, 2, 3}) {
129 m_delayedOrder[side][module] = delayedOrder[module];
130 }
131 }
132
133
134 // Check for JSON entries for iterative NL correction
135 if (!iterativeCalibCorr.is_null()) {
136
137
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());
141 return;
142 }
143
144 unsigned int module = modIterCalibCorr[0];
145 float refFrac = modIterCalibCorr[1];
146 JSON coeffArray = modIterCalibCorr[2];
147
148 std::vector<float> polyCoeff;
149 for (auto elem : coeffArray) {
150 polyCoeff.push_back(elem);
151 }
152
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");
154
155
156 m_iterCalibCorr[side].push_back(std::make_tuple(module, refFrac, polyCoeff));
157 }
158 }
159
161 }
162
163 for (size_t side : {0, 1}) {
164 for (size_t module : {0, 1, 2, 3}) {
165
166 (*m_msgFunc_p)(
168 "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
169 ", module " + std::to_string(module) +
170 ", enabled = " + std::to_string(m_moduleEnabled[side][module]) +
171 ", delayedOrder = " +
172 std::to_string(m_delayedOrder[side][module]));
173 }
174 }
175
176
177
178 // Extract the JSON object for the pulse analyzer(s)
179 //
180 JSON PAconfig = configJSON["PulseAnalyzer"];
181 if (PAconfig.is_null()) {
182 (*m_msgFunc_p)(ZDCMsg::Fatal, "JSON configuration object for ZDCPulseAnalyzer not found");
183 return;
184 }
185
186 // Do the parsing of the pulse analyzer JSON configuration
187 //
188 auto [result2, resultStr2] = m_pulseAnalyzerConfig->ParseConfig(PAconfig, ZDCPulseAnalyzer::JSONConfigParams);
189 if (!result2) {
190 (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCPulseAnalyzer JSON config, error = " + resultStr2);
191 return;
192 }
193
194 // Now set up each of the pulse analyzers
195 //
196 for (size_t side : {0, 1}) {
197 for (size_t module : {0, 1, 2, 3}) {
198
199 (*m_msgFunc_p)(ZDCMsg::Info, "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
200 ", module " + std::to_string(module));
201
202 //
203 // Get the parsed configuration JSON object for this module
204 //
205 JSON moduleConfig = m_pulseAnalyzerConfig->getChannelConfig(side, module);
206
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);
210 (*m_msgFunc_p)(ZDCMsg::Verbose, ostr.str());
211
212 // Construct the ZDCPulseAnalyzer object
213 //
214 m_moduleAnalyzers[side][module] = std::make_unique<ZDCPulseAnalyzer>(msgFunc_p, moduleConfig);
215
216 (*m_msgFunc_p)(ZDCMsg::Info, "Finished constructing ZDCPulseAnalyzer for side " + std::to_string(side) +
217 ", module " + std::to_string(module));
218
219 }
220 }
221
222 // Check for the enabling of re-pass
223 //
225
226 (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer construction complete");
227}
std::unique_ptr< ZDCJSONConfig > m_dataAnalyzerConfig
std::unique_ptr< ZDCJSONConfig > m_pulseAnalyzerConfig
std::array< std::vector< std::tuple< unsigned int, float, std::vector< float > > >, 2 > m_iterCalibCorr
bool getPulseAnalyzerGlobalPar(const std::string &key, T &value)
ZDCJSONConfig::JSON JSON
static const ZDCJSONConfig::JSONParamList JSONConfigParams
static const ZDCJSONConfig::JSONParamList JSONConfigParams
@ Fatal
Definition ZDCMsg.h:23
@ Debug
Definition ZDCMsg.h:19
@ Verbose
Definition ZDCMsg.h:18
@ Info
Definition ZDCMsg.h:20

◆ ~ZDCDataAnalyzer()

ZDCDataAnalyzer::~ZDCDataAnalyzer ( )
inline

Definition at line 111 of file ZDCDataAnalyzer.h.

111{};

Member Function Documentation

◆ disableFADCCorrections()

void ZDCDataAnalyzer::disableFADCCorrections ( )

Definition at line 594 of file ZDCDataAnalyzer.cxx.

595{
596 for (size_t side : {0, 1}) {
597 for (size_t module : {0, 1, 2, 3}) {
598 m_moduleAnalyzers[side][module]->disableFADCCorrections();
599 }
600 }
601}

◆ disableModule()

bool ZDCDataAnalyzer::disableModule ( size_t side,
size_t module )

Definition at line 266 of file ZDCDataAnalyzer.cxx.

267{
268 if (side < 2 && module < 4) {
269 //
270 // Can't disable in the middle of analysis
271 //
272 if (m_dataLoaded[side][module]) return false;
273 else {
274 m_moduleEnabled[side][module] = false;
275 return true;
276 }
277 }
278 else {
279 return false;
280 }
281}

◆ DoNLcalibModuleSum()

void ZDCDataAnalyzer::DoNLcalibModuleSum ( )

Definition at line 870 of file ZDCDataAnalyzer.cxx.

871{
872 if (!m_haveIterCalibCorr) return;
873
874
875 //loop over both sides; first index in m_iterCalibcorr
876 for (int iside:{0,1}){
877
878 // If the module mask is empty for this side, there's nothing to do
879 if ((m_moduleMask>>(4*iside)&0xf) == 0) continue;
880
881 if (m_calibModuleSum[iside]>0.){ //it's theoretically possible that: one or more modules fired → module mask is nonzero → mask check passes
882 //but their calibrated amplitudes are so small they sum to essentially zero
883
884 //use uncorrected energy first and update in each iteration of the loop over module tuples
885 float totalmoduleE= m_calibModuleSum[iside];
886
887 //loop over module tuples
888 for (auto modtuple : m_iterCalibCorr[iside]){
889 //get and unpack tuple
890 unsigned int modnum = std::get<0>(modtuple);
891 float ftyp = std::get<1>(modtuple);
892 std::vector<float> polyCoeffs = std::get<2>(modtuple);
893
894 //calculate energy fraction using current total energy
895 float f= m_calibAmplitude[iside][modnum]/totalmoduleE;
896
897 //calculate energy correction
898 float CorrFact = 0;
899 for (size_t i=0;i<polyCoeffs.size(); i++){
900 CorrFact += std::pow(f -ftyp,i)*polyCoeffs[i];
901 }
902
903 //check that CorrFact !=0 so we don't divide by 0 [[unlikely]
904 if (CorrFact == 0.){
905 (*m_msgFunc_p)(ZDCMsg::Error,"ZDCDataAnalyzer::DoNLcalibModuleSum: Denominator is zero");
906 return;
907 }
908
909 //apply energy correction
910 totalmoduleE= totalmoduleE/CorrFact;
911 }
912
913 //m_calibModuleSum[iside] = totalmoduleE;
914 m_NLcalibModuleSum[iside] = totalmoduleE;
915 m_NLcalibModuleSumErrSq[iside] = 0.; // no error for now
916 }
917
918 else{
919 (*m_msgFunc_p)(ZDCMsg::Info,"SUM = 0!!");
920 m_NLcalibModuleSum[iside] = 0.;
921 m_NLcalibModuleSumErrSq[iside] = 0.; // no error for now
922 }
923 }
924
925}
unsigned int m_moduleMask
std::array< float, 2 > m_NLcalibModuleSum
std::array< float, 2 > m_calibModuleSum
std::array< float, 2 > m_NLcalibModuleSumErrSq
@ Error
Definition ZDCMsg.h:22

◆ enableDelayed() [1/2]

void ZDCDataAnalyzer::enableDelayed ( const ZDCModuleFloatArray & delayDeltaT,
const ZDCModuleFloatArray & undelayedDelayedPedestalDiff )

Definition at line 304 of file ZDCDataAnalyzer.cxx.

305{
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;
309 else m_delayedOrder[side][module] = 1;
310
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]));
313
314 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(delayDeltaTArray[side][module]), undelayedDelayedPedestalDiff[side][module]);
315 }
316 }
317}

◆ enableDelayed() [2/2]

void ZDCDataAnalyzer::enableDelayed ( float deltaT,
const ZDCModuleFloatArray & undelayedDelayedPedestalDiff )

Definition at line 293 of file ZDCDataAnalyzer.cxx.

294{
295 int delayedOrder = deltaT < 0 ? -1 : 1;
296 for (size_t side : {0, 1}) {
297 for (size_t module : {0, 1, 2, 3}) {
298 m_delayedOrder[side][module] = delayedOrder;
299 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(deltaT), undelayedDelayedPedestalDiff[side][module]);
300 }
301 }
302}

◆ enableFADCCorrections()

void ZDCDataAnalyzer::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 )

Definition at line 578 of file ZDCDataAnalyzer.cxx.

581{
582 if (correctPerSample)
583 (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer::enabling FADC Corrections per sample");
584 else
585 (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer::enabling FADC Corrections per amplitude");
586
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]);
590 }
591 }
592}

◆ enablePostExclusion() [1/2]

void ZDCDataAnalyzer::enablePostExclusion ( unsigned int maxSamplesExcl,
const ZDCModuleIntArray & HGADCThresh,
const ZDCModuleIntArray & LGADCThresh )

Definition at line 337 of file ZDCDataAnalyzer.cxx.

338{
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]);
342 }
343 }
344}

◆ enablePostExclusion() [2/2]

void ZDCDataAnalyzer::enablePostExclusion ( unsigned int maxSamplesExcl,
unsigned int HGADCThresh,
unsigned int LGADCThresh )

Definition at line 346 of file ZDCDataAnalyzer.cxx.

347{
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);
351 }
352 }
353}

◆ enablePostPulseCheck()

void ZDCDataAnalyzer::enablePostPulseCheck ( unsigned int postPulseSampleDelta,
float postPulseDerivMinSig,
float postPulseAbsDer2ndMinSig,
float minMainDer2ndRatio )

Definition at line 530 of file ZDCDataAnalyzer.cxx.

532{
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);
536 }
537 }
538}

◆ enablePreExclusion() [1/2]

void ZDCDataAnalyzer::enablePreExclusion ( unsigned int maxSamplesExcl,
const ZDCModuleIntArray & HGADCThresh,
const ZDCModuleIntArray & LGADCThresh )

Definition at line 319 of file ZDCDataAnalyzer.cxx.

320{
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]);
324 }
325 }
326}

◆ enablePreExclusion() [2/2]

void ZDCDataAnalyzer::enablePreExclusion ( unsigned int maxSamplesExcl,
unsigned int HGADCThresh,
unsigned int LGADCThresh )

Definition at line 328 of file ZDCDataAnalyzer.cxx.

329{
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);
333 }
334 }
335}

◆ enableRepass()

void ZDCDataAnalyzer::enableRepass ( const ZDCModuleFloatArray & peak2ndDerivMinRepassHG,
const ZDCModuleFloatArray & peak2ndDerivMinRepassLG )

Definition at line 356 of file ZDCDataAnalyzer.cxx.

357{
358 m_repassEnabled = true;
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]);
362 }
363 }
364}

◆ enableTimeSigCut()

void ZDCDataAnalyzer::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 )

Definition at line 603 of file ZDCDataAnalyzer.cxx.

606{
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]);
610 }
611 }
612}

◆ FinishEvent()

bool ZDCDataAnalyzer::FinishEvent ( )

Definition at line 764 of file ZDCDataAnalyzer.cxx.

765{
766 // First make sure that all data is loaded. while we're at it, count how many modules on each side have a pulse
767 //
768 unsigned int sideNPulsesMod[2] = {0, 0};
769
770 for (size_t side : {0, 1}) {
771 for (size_t module : {0, 1, 2, 3}) {
772 if (!m_dataLoaded[side][module] && m_moduleEnabled[side][module]) {return false;}
773 if (m_moduleAnalyzers[side][module]->armSumInclude()) {sideNPulsesMod[side]++;}
774 }
775 }
776
777 // Are we doing a repass? If so, reanalyze modules for which no pulse was found the first time
778 // as long as we have one module with a pulse on the given side
779 //
780 if (m_repassEnabled) {
781 for (size_t side : {0, 1}) {
782 if (sideNPulsesMod[side] == 0) continue;
783
784 for (size_t module : {0, 1, 2, 3}) {
785 if (!m_moduleEnabled[side][module]) continue;
786
787 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
788
789 // If this module had no pulse the first time, reanalyze it (with a lower 2nd derivative threshold)
790 //
791 if (!pulseAna_p->havePulse()) {
792 (*m_msgFunc_p)(ZDCMsg::Debug, ("ZDCPulseAnalyzer:: performing a repass on data for side, module = " + std::to_string(side) + ", " + std::to_string(module)));
793 pulseAna_p->ReanalyzeData();
794 m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
795 }
796 }
797 }
798 }
799
800 // Now sum up amplitudes etc
801 //
802 for (size_t side : {0, 1}) {
803 float tempFraction = 1.0;
804 double sumAmpTimesBkgdFrac = 0.0;
805 double sumCalibAmpTimesBkgdFrac = 0.0;
806
807 for (size_t module : {0, 1, 2, 3}) {
808 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
809
810 if (pulseAna_p->armSumInclude()) {
811 int moduleMaskBit = 4 * side + module;
812 m_moduleMask |= 1 << moduleMaskBit;
813
814 float amplitude = pulseAna_p->GetAmplitude();
815 float ampError = pulseAna_p->GetAmpError();
816 float bkgdFraction = pulseAna_p->GetBkgdMaxFraction();
817
819
820 float calibAmpError = ampError * m_currentECalibCoeff[side][module];
821
822 float timeCalib = pulseAna_p->GetT0Corr();
823 if (pulseAna_p->useLowGain()) {timeCalib -= m_currentT0OffsetsLG[side][module];}
824 else {timeCalib -= m_currentT0OffsetsHG[side][module];}
825
826 m_calibTime[side][module] = timeCalib;
827
828 m_moduleSum[side] += amplitude;
829 m_moduleSumErrSq[side] += ampError * ampError;
830 sumAmpTimesBkgdFrac += amplitude*bkgdFraction;
831
832 m_moduleSumPreSample[side] += pulseAna_p->GetPreSampleAmp();
833
835 m_calibModuleSumErrSq[side] += calibAmpError * calibAmpError;
836
838 sumCalibAmpTimesBkgdFrac += amplitude*bkgdFraction;
839 }
840
841 // subtract the fraction of LGOverflow events if we have fraction available (<0 means unavailable)
842 if (pulseAna_p->LGOverflow() && m_moduleAmpFractionLG[side][module] > 0) {tempFraction -= m_moduleAmpFractionLG[side][module];}
843 }
844
845 {
847 if (m_moduleSum[side] > 0) m_moduleSumBkgdFrac[side] = sumAmpTimesBkgdFrac/m_moduleSum[side];
848 else m_moduleSumBkgdFrac[side] = 0;
849 }
850
851 if (m_calibModuleSum[side] > 1e-6) {
853 m_calibModSumBkgdFrac[side] = sumCalibAmpTimesBkgdFrac/m_calibModuleSum[side];
854 }
855 else {
856 m_averageTime[side] = 0;
858 }
859
860 if (tempFraction < 1.0) {m_moduleSum[side] /= tempFraction;}
861 }
862
864
865 m_eventCount++;
866 return true;
867}
std::array< float, 2 > m_moduleSumPreSample
std::array< float, 2 > m_calibModSumBkgdFrac
ZDCModuleFloatArray m_currentECalibCoeff
std::array< float, 2 > m_averageTime
std::array< std::array< float, 4 >, 2 > m_moduleAmpFractionLG
std::array< float, 2 > m_moduleSumErrSq
std::array< float, 2 > m_moduleSum
std::array< float, 2 > m_calibModuleSumErrSq
std::array< float, 2 > m_moduleSumBkgdFrac
ZDCModuleFloatArray m_currentT0OffsetsHG
ZDCModuleFloatArray m_currentT0OffsetsLG
std::array< std::array< unsigned int, 4 >, 2 > m_moduleStatus
bool LGOverflow() const
float GetAmpError() const
float GetAmplitude() const
float GetT0Corr() const
bool useLowGain() const
bool havePulse() const
bool armSumInclude() const
unsigned int GetStatusMask() const
float GetPreSampleAmp() const
float GetBkgdMaxFraction() const
#define CXXUTILS_TRAPPING_FP
Definition trapping_fp.h:24

◆ GetAverageTime()

float ZDCDataAnalyzer::GetAverageTime ( size_t side) const
inline

Definition at line 158 of file ZDCDataAnalyzer.h.

158{return m_averageTime.at(side);}

◆ GetCalibModuleSum()

float ZDCDataAnalyzer::GetCalibModuleSum ( size_t side) const
inline

Definition at line 148 of file ZDCDataAnalyzer.h.

148{return m_calibModuleSum.at(side);}

◆ GetCalibModuleSumErr()

float ZDCDataAnalyzer::GetCalibModuleSumErr ( size_t side) const
inline

Definition at line 149 of file ZDCDataAnalyzer.h.

149{return std::sqrt(m_calibModuleSumErrSq.at(side));}

◆ GetdelayedBS()

float ZDCDataAnalyzer::GetdelayedBS ( size_t side,
size_t module ) const
inline

Definition at line 169 of file ZDCDataAnalyzer.h.

169{return m_moduleAnalyzers.at(side).at(module)->GetdelayBS();}

◆ GetModuleAmplitude()

float ZDCDataAnalyzer::GetModuleAmplitude ( size_t side,
size_t module ) const
inline

Definition at line 161 of file ZDCDataAnalyzer.h.

161{return m_moduleAnalyzers.at(side).at(module)->GetAmplitude();}

◆ GetModuleCalibAmplitude()

float ZDCDataAnalyzer::GetModuleCalibAmplitude ( size_t side,
size_t module ) const
inline

Definition at line 165 of file ZDCDataAnalyzer.h.

165{return m_calibAmplitude.at(side).at(module);}

◆ GetModuleCalibTime()

float ZDCDataAnalyzer::GetModuleCalibTime ( size_t side,
size_t module ) const
inline

Definition at line 166 of file ZDCDataAnalyzer.h.

166{return m_calibTime.at(side).at(module);}

◆ GetModuleChisq()

float ZDCDataAnalyzer::GetModuleChisq ( size_t side,
size_t module ) const
inline

Definition at line 163 of file ZDCDataAnalyzer.h.

163{return m_moduleAnalyzers.at(side).at(module)->GetChisq();}

◆ GetModuleMask()

unsigned int ZDCDataAnalyzer::GetModuleMask ( ) const
inline

Definition at line 141 of file ZDCDataAnalyzer.h.

141{return m_moduleMask;}

◆ GetModuleStatus()

float ZDCDataAnalyzer::GetModuleStatus ( size_t side,
size_t module ) const
inline

Definition at line 167 of file ZDCDataAnalyzer.h.

167{return m_moduleStatus.at(side).at(module);}

◆ GetModuleSum()

float ZDCDataAnalyzer::GetModuleSum ( size_t side) const
inline

Definition at line 143 of file ZDCDataAnalyzer.h.

143{return m_moduleSum.at(side);}

◆ GetModuleSumErr()

float ZDCDataAnalyzer::GetModuleSumErr ( size_t side) const
inline

Definition at line 144 of file ZDCDataAnalyzer.h.

144{return std::sqrt(m_moduleSumErrSq.at(side));}

◆ GetModuleSumPreSample()

float ZDCDataAnalyzer::GetModuleSumPreSample ( size_t side) const
inline

Definition at line 156 of file ZDCDataAnalyzer.h.

156{return m_moduleSumPreSample.at(side);}

◆ GetModuleTime()

float ZDCDataAnalyzer::GetModuleTime ( size_t side,
size_t module ) const
inline

Definition at line 162 of file ZDCDataAnalyzer.h.

162{return m_moduleAnalyzers.at(side).at(module)->GetT0Corr();}

◆ GetNLcalibModuleSum()

float ZDCDataAnalyzer::GetNLcalibModuleSum ( size_t side) const
inline

Definition at line 153 of file ZDCDataAnalyzer.h.

153{return m_NLcalibModuleSum.at(side);}

◆ GetNLcalibModuleSumErr()

float ZDCDataAnalyzer::GetNLcalibModuleSumErr ( size_t side) const
inline

Definition at line 154 of file ZDCDataAnalyzer.h.

154{return std::sqrt(m_NLcalibModuleSumErrSq.at(side));}

◆ GetPulseAnalyzer() [1/2]

ZDCPulseAnalyzer * ZDCDataAnalyzer::GetPulseAnalyzer ( size_t side,
size_t module )
inline

Definition at line 172 of file ZDCDataAnalyzer.h.

172{return m_moduleAnalyzers.at(side).at(module).get();}

◆ GetPulseAnalyzer() [2/2]

const ZDCPulseAnalyzer * ZDCDataAnalyzer::GetPulseAnalyzer ( size_t side,
size_t module ) const
inline

Definition at line 171 of file ZDCDataAnalyzer.h.

171{return m_moduleAnalyzers.at(side).at(module).get();}

◆ getPulseAnalyzerGlobalPar()

template<typename T>
bool ZDCDataAnalyzer::getPulseAnalyzerGlobalPar ( const std::string & key,
T & value )
inline

Definition at line 113 of file ZDCDataAnalyzer.h.

113 {
114 if (m_pulseAnalyzerConfig.get()) return m_pulseAnalyzerConfig->getGlobalParam(key, value);
115 else return false;
116 }

◆ GetSideBkgdFrac()

float ZDCDataAnalyzer::GetSideBkgdFrac ( size_t side) const
inline

Definition at line 145 of file ZDCDataAnalyzer.h.

145{return m_moduleSumBkgdFrac.at(side);}

◆ GetSideCalibBkgdFrac()

float ZDCDataAnalyzer::GetSideCalibBkgdFrac ( size_t side) const
inline

Definition at line 150 of file ZDCDataAnalyzer.h.

150{return m_calibModSumBkgdFrac.at(side);}

◆ init()

void ZDCDataAnalyzer::init ( )
private

Definition at line 229 of file ZDCDataAnalyzer.cxx.

230{
231 for (size_t side : {0, 1}) {
232 m_moduleSum[side] = 0;
237
240 m_averageTime[side] = 0;
241 m_fail[side] = 0;
242
243 for (size_t module : {0, 1, 2, 3}) {
244 m_moduleEnabled[side][module] = true;
246 m_calibTime[side][module] = 0;
247
248 m_dataLoaded[side][module] = false;
250
251 // Default "calibrations"
252 //
256
257 }
258 }
259
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}} }} }};
263
264}
std::array< std::array< std::vector< float >, 3 >, 2 > m_NLcalibFactors
std::array< bool, 2 > m_fail

◆ invokeAll()

template<typename T>
void ZDCDataAnalyzer::invokeAll ( T functor)
inline

Definition at line 118 of file ZDCDataAnalyzer.h.

119 {
120 for (size_t side : {0, 1}) {
121 for (size_t module : {0, 1, 2, 3}) {
122 functor(m_moduleAnalyzers[side][module].get());
123 }
124 }
125 }
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:132

◆ LoadAndAnalyzeData() [1/2]

void ZDCDataAnalyzer::LoadAndAnalyzeData ( size_t side,
size_t module,
const std::vector< float > & HGSamples,
const std::vector< float > & LGSamples )

Definition at line 702 of file ZDCDataAnalyzer.cxx.

703{
704
705 // We immediately return if this module is disabled
706 //
707 if (!m_moduleEnabled[side][module]) {
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)));
709
710 return;
711 }
712
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)));
714
715 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
716 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples);
717 m_dataLoaded[side][module] = true;
718
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)));
721
722 m_fail[side] = true;
723 }
724
725 m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
726}

◆ LoadAndAnalyzeData() [2/2]

void ZDCDataAnalyzer::LoadAndAnalyzeData ( size_t side,
size_t module,
const std::vector< float > & HGSamples,
const std::vector< float > & LGSamples,
const std::vector< float > & HGSamplesDelayed,
const std::vector< float > & LGSamplesDelayed )

Definition at line 728 of file ZDCDataAnalyzer.cxx.

730{
731 // We immediately return if this module is disabled
732 //
733 if (!m_moduleEnabled[side][module]) {
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)));
735
736 return;
737 }
738
739 if (m_delayedOrder[side][module] == 0) {
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)));
741 return;
742 }
743
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)));
745
746 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
747 if (m_delayedOrder[side][module] > 0) {
748 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples, HGSamplesDelayed, LGSamplesDelayed);
749 }
750 else {
751 pulseAna_p->LoadAndAnalyzeData(HGSamplesDelayed, LGSamplesDelayed, HGSamples, LGSamples);
752 }
753 m_dataLoaded[side][module] = true;
754
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)));
757
758 m_fail[side] = true;
759 }
760
761 m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
762}

◆ LoadEnergyCalibrations()

void ZDCDataAnalyzer::LoadEnergyCalibrations ( std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > && calibSplines)
inline

Definition at line 241 of file ZDCDataAnalyzer.h.

242 {
243 (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading energy calibrations");
244
245 m_LBDepEcalibSplines = std::move (calibSplines);
246 m_haveECalib = true;
247 }
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_LBDepEcalibSplines

◆ LoadT0Calibrations()

void ZDCDataAnalyzer::LoadT0Calibrations ( std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > && T0HGOffsetSplines,
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > && T0LGOffsetSplines )
inline

Definition at line 249 of file ZDCDataAnalyzer.h.

251 {
252 (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading timing calibrations");
253
254 m_T0HGOffsetSplines = std::move (T0HGOffsetSplines);
255 m_T0LGOffsetSplines = std::move (T0LGOffsetSplines);
256
257 m_haveT0Calib = true;
258 }
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0LGOffsetSplines
std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > m_T0HGOffsetSplines

◆ ModuleDisabled()

bool ZDCDataAnalyzer::ModuleDisabled ( unsigned int side,
unsigned int module ) const
inline

Definition at line 138 of file ZDCDataAnalyzer.h.

138{return !m_moduleEnabled[side][module];}

◆ moduleEnabled()

bool ZDCDataAnalyzer::moduleEnabled ( unsigned int side,
unsigned int module ) const
inline

Definition at line 139 of file ZDCDataAnalyzer.h.

139{return m_moduleEnabled[side][module];}

◆ saveFitFunc()

void ZDCDataAnalyzer::saveFitFunc ( bool save)

Definition at line 283 of file ZDCDataAnalyzer.cxx.

284{
285 for (size_t side : {0, 1}) {
286 for (size_t module : {0, 1, 2, 3}) {
287 m_moduleAnalyzers[side][module]->saveFitFunc(save);
288 }
289 }
290}

◆ set2ndDerivStep()

void ZDCDataAnalyzer::set2ndDerivStep ( size_t step)

Definition at line 375 of file ZDCDataAnalyzer.cxx.

376{
377 for (size_t side : {0, 1}) {
378 for (size_t module : {0, 1, 2, 3}) {
379 m_moduleAnalyzers[side][module]->set2ndDerivStep(step);
380 }
381 }
382}

◆ SetADCOverUnderflowValues()

void ZDCDataAnalyzer::SetADCOverUnderflowValues ( const ZDCModuleFloatArray & HGOverflowADC,
const ZDCModuleFloatArray & HGUnderflowADC,
const ZDCModuleFloatArray & LGOverflowADC )

Definition at line 481 of file ZDCDataAnalyzer.cxx.

483{
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]);
487 }
488 }
489}

◆ SetChisqCuts()

void ZDCDataAnalyzer::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 )

Definition at line 515 of file ZDCDataAnalyzer.cxx.

519{
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]);
526 }
527 }
528}

◆ SetCutValues()

void ZDCDataAnalyzer::SetCutValues ( const ZDCModuleFloatArray & chisqDivAmpCutHG,
const ZDCModuleFloatArray & chisqDivAmpCutLG,
const ZDCModuleFloatArray & deltaT0MinHG,
const ZDCModuleFloatArray & deltaT0MaxHG,
const ZDCModuleFloatArray & deltaT0MinLG,
const ZDCModuleFloatArray & deltaT0MaxLG )

Definition at line 491 of file ZDCDataAnalyzer.cxx.

494{
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]);
500 }
501 }
502}

◆ SetFitMinMaxAmpValues() [1/2]

void ZDCDataAnalyzer::SetFitMinMaxAmpValues ( const ZDCModuleFloatArray & minAmpHG,
const ZDCModuleFloatArray & minAmpLG,
const ZDCModuleFloatArray & maxAmpHG,
const ZDCModuleFloatArray & maxAmpLG )

Definition at line 460 of file ZDCDataAnalyzer.cxx.

462{
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]);
467
468 }
469 }
470}

◆ SetFitMinMaxAmpValues() [2/2]

void ZDCDataAnalyzer::SetFitMinMaxAmpValues ( float minHG,
float minLG,
float maxHG,
float maxLG )

Definition at line 472 of file ZDCDataAnalyzer.cxx.

473{
474 for (size_t side : {0, 1}) {
475 for (size_t module : {0, 1, 2, 3}) {
476 m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minHG, minLG, maxHG, maxLG);
477 }
478 }
479}

◆ SetFitTimeMax()

void ZDCDataAnalyzer::SetFitTimeMax ( float tmax)

Definition at line 411 of file ZDCDataAnalyzer.cxx.

411 {
412 for (size_t side : {0, 1}) {
413 for (size_t module : {0, 1, 2, 3}) {
414 m_moduleAnalyzers[side][module]->SetFitTimeMax(tmax);
415 }
416 }
417}

◆ SetGainFactorsHGLG() [1/2]

void ZDCDataAnalyzer::SetGainFactorsHGLG ( const ZDCModuleFloatArray & gainFactorsHG,
const ZDCModuleFloatArray & gainFactorsLG )

Definition at line 393 of file ZDCDataAnalyzer.cxx.

394{
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]);
398 }
399 }
400}

◆ SetGainFactorsHGLG() [2/2]

void ZDCDataAnalyzer::SetGainFactorsHGLG ( float gainFactorHG,
float gainFactorLG )

Definition at line 384 of file ZDCDataAnalyzer.cxx.

385{
386 for (size_t side : {0, 1}) {
387 for (size_t module : {0, 1, 2, 3}) {
388 m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorHG, gainFactorLG);
389 }
390 }
391}

◆ setMinimumSignificance()

void ZDCDataAnalyzer::setMinimumSignificance ( float sigMinHG,
float sigMinLG )

Definition at line 366 of file ZDCDataAnalyzer.cxx.

367{
368 for (size_t side : {0, 1}) {
369 for (size_t module : {0, 1, 2, 3}) {
370 m_moduleAnalyzers[side][module]->setMinimumSignificance(sigMinHG, sigMinLG);
371 }
372 }
373}

◆ SetModuleAmpFractionLG()

void ZDCDataAnalyzer::SetModuleAmpFractionLG ( const ZDCDataAnalyzer::ZDCModuleFloatArray & moduleAmpFractionLG)

Definition at line 452 of file ZDCDataAnalyzer.cxx.

452 {
453 for (size_t side : {0, 1}) {
454 for (size_t module : {0, 1, 2, 3}) {
455 m_moduleAmpFractionLG[side][module] = moduleAmpFractionLG[side][module];
456 }
457 }
458}

◆ SetNLcalibParams()

void ZDCDataAnalyzer::SetNLcalibParams ( std::array< std::array< std::vector< float >, 3 >, 2 > & nlcalibParams)

Definition at line 566 of file ZDCDataAnalyzer.cxx.

567{
568 for (size_t side: {0,1})
569 {
570 for (size_t module: {0,1,2})
571 {
572 m_NLcalibFactors[side][module] = nlcalibParams[side][module];
573 }
574 }
575 m_haveNLcalib = true;
576}

◆ SetNoiseSigmas()

void ZDCDataAnalyzer::SetNoiseSigmas ( const ZDCModuleFloatArray & noiseSigmasHG,
const ZDCModuleFloatArray & noiseSigmasLG )

Definition at line 433 of file ZDCDataAnalyzer.cxx.

434{
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]);
438 }
439 }
440}

◆ SetNonlinCorrParams()

void ZDCDataAnalyzer::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 )

Definition at line 553 of file ZDCDataAnalyzer.cxx.

556{
557 for (size_t side : {0, 1}) {
558 for (size_t module : {0, 1, 2, 3}) {
559 m_moduleAnalyzers[side][module]->SetNonlinCorrParams(refADC, refScale,
560 HGNonlinCorrParams[side][module],
561 LGNonlinCorrParams[side][module]);
562 }
563 }
564}

◆ SetPeak2ndDerivMinTolerances()

void ZDCDataAnalyzer::SetPeak2ndDerivMinTolerances ( size_t tolerance)

Definition at line 402 of file ZDCDataAnalyzer.cxx.

402 {
403 for (size_t side : {0, 1}) {
404 for (size_t module : {0, 1, 2, 3}) {
405 m_moduleAnalyzers[side][module]->SetPeak2ndDerivMinTolerance(tolerance);
406 }
407 }
408}
constexpr double tolerance

◆ setPerSampleNoiseSigmas()

void ZDCDataAnalyzer::setPerSampleNoiseSigmas ( const std::array< std::array< std::vector< float >, 4 >, 2 > & sampleNoiseVecsHG,
const std::array< std::array< std::vector< float >, 4 >, 2 > & sampleNoiseVecsLG )

Definition at line 442 of file ZDCDataAnalyzer.cxx.

444{
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]);
448 }
449 }
450}

◆ setQuietFits()

void ZDCDataAnalyzer::setQuietFits ( bool quiet)
inline

Definition at line 271 of file ZDCDataAnalyzer.h.

271 {
272 if (quiet) invokeAll([](ZDCPulseAnalyzer* pa){pa->setQuietFits();});
273 else invokeAll([](ZDCPulseAnalyzer* pa){pa->setUnquietFits();});
274 }
void invokeAll(T functor)

◆ SetTauT0Values()

void ZDCDataAnalyzer::SetTauT0Values ( const ZDCModuleBoolArray & fxiTau1,
const ZDCModuleBoolArray & fxiTau2,
const ZDCModuleFloatArray & tau1,
const ZDCModuleFloatArray & tau2,
const ZDCModuleFloatArray & t0HG,
const ZDCModuleFloatArray & t0LG )

Definition at line 421 of file ZDCDataAnalyzer.cxx.

424{
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]);
429 }
430 }
431}

◆ SetTimeCuts()

void ZDCDataAnalyzer::SetTimeCuts ( const ZDCModuleFloatArray & deltaT0MinHG,
const ZDCModuleFloatArray & deltaT0MaxHG,
const ZDCModuleFloatArray & deltaT0MinLG,
const ZDCModuleFloatArray & deltaT0MaxLG )

Definition at line 504 of file ZDCDataAnalyzer.cxx.

506{
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]);
511 }
512 }
513}

◆ SetTimingCorrParams()

void ZDCDataAnalyzer::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 )

Definition at line 540 of file ZDCDataAnalyzer.cxx.

543{
544 for (size_t side : {0, 1}) {
545 for (size_t module : {0, 1, 2, 3}) {
546 m_moduleAnalyzers[side][module]->SetTimingCorrParams(mode, refADC, refScale,
547 HGParamArr.at(side).at(module), LGParamArr.at(side).at(module));
548 }
549 }
550
551}

◆ SideFailed()

bool ZDCDataAnalyzer::SideFailed ( size_t side) const
inline

Definition at line 159 of file ZDCDataAnalyzer.h.

159{return m_fail.at(side);}

◆ StartEvent()

void ZDCDataAnalyzer::StartEvent ( int lumiBlock)

Definition at line 614 of file ZDCDataAnalyzer.cxx.

615{
616 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Starting new event, event index = " + std::to_string(m_eventCount)));
617
618 // See if we have to load up new calibrations
619 //
620 if (lumiBlock != m_currentLB) {
621 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Starting new luminosity block " + std::to_string(lumiBlock)));
622
623 if (m_haveECalib) {
624 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading energy calibrations for event " + std::to_string(m_eventCount) + ", lumi block " +
625 std::to_string(lumiBlock)));
626
627 for (size_t side : {0, 1}) {
628 for (size_t module : {0, 1, 2, 3}) {
629 float splineLBMin = m_LBDepEcalibSplines[side][module]->GetXmin();
630 float splineLBMax = m_LBDepEcalibSplines[side][module]->GetXmax();
631
632 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
634 }
635 else if (lumiBlock < splineLBMin) {
637 }
638 else {
640 }
641 }
642 }
643 } // end of if (_haveEcalib) {
644
645 if (m_haveT0Calib) {
646 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading timing calibrations for event " + std::to_string(m_eventCount) + ", lumi block " + std::to_string(lumiBlock)));
647
648 for (size_t side : {0, 1}) {
649 for (size_t module : {0, 1, 2, 3}) {
650 float splineLBMin = m_T0HGOffsetSplines[side][module]->GetXmin();
651 float splineLBMax = m_T0HGOffsetSplines[side][module]->GetXmax();
652
653 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
656 }
657 else if (lumiBlock < splineLBMin) {
660 }
661 else {
664 }
665 }
666 }
667 } // end of if (m_haveT0Calib)
668 }
669
670 // Initialize transient results
671 //
672 for (size_t side : {0, 1}) {
673 for (size_t module : {0, 1, 2, 3}) {
674 m_dataLoaded[side][module] = false;
677 m_calibTime[side][module] = 0;
678 // _moduleFail[side][module] = false;
679 }
680
681 m_moduleSum[side] = 0;
685
689
693
694 m_averageTime[side] = 0;
695 m_fail[side] = false;
696 }
697
698 m_moduleMask = 0;
700}
std::array< float, 2 > m_NLcalibModSumBkgdFrac
setTeId lumiBlock

Member Data Documentation

◆ JSONConfigParams

const ZDCJSONConfig::JSONParamList ZDCDataAnalyzer::JSONConfigParams
static
Initial value:
= {
{"moduleEnabled", {JSON::value_t::array, 4, true, false}},
{"iterativeCalibCorr", {JSON::value_t::array, 4, true, false}},
{"delayedOrder", {JSON::value_t::array, 4, true, false}}
}

Definition at line 14 of file ZDCDataAnalyzer.h.

◆ m_averageTime

std::array<float, 2> ZDCDataAnalyzer::m_averageTime {}
private

Definition at line 93 of file ZDCDataAnalyzer.h.

93{};

◆ m_calibAmplitude

std::array<std::array<float, 4>, 2> ZDCDataAnalyzer::m_calibAmplitude {}
private

Definition at line 74 of file ZDCDataAnalyzer.h.

74{};

◆ m_calibModSumBkgdFrac

std::array<float, 2> ZDCDataAnalyzer::m_calibModSumBkgdFrac {}
private

Definition at line 84 of file ZDCDataAnalyzer.h.

84{};

◆ m_calibModuleSum

std::array<float, 2> ZDCDataAnalyzer::m_calibModuleSum {}
private

Definition at line 82 of file ZDCDataAnalyzer.h.

82{};

◆ m_calibModuleSumErrSq

std::array<float, 2> ZDCDataAnalyzer::m_calibModuleSumErrSq {}
private

Definition at line 83 of file ZDCDataAnalyzer.h.

83{};

◆ m_calibTime

std::array<std::array<float, 4>, 2> ZDCDataAnalyzer::m_calibTime {}
private

Definition at line 75 of file ZDCDataAnalyzer.h.

75{};

◆ m_currentECalibCoeff

ZDCModuleFloatArray ZDCDataAnalyzer::m_currentECalibCoeff {}
private

Definition at line 65 of file ZDCDataAnalyzer.h.

65{};

◆ m_currentLB

int ZDCDataAnalyzer::m_currentLB {-1}
private

Definition at line 64 of file ZDCDataAnalyzer.h.

64{-1};

◆ m_currentT0OffsetsHG

ZDCModuleFloatArray ZDCDataAnalyzer::m_currentT0OffsetsHG {}
private

Definition at line 66 of file ZDCDataAnalyzer.h.

66{};

◆ m_currentT0OffsetsLG

ZDCModuleFloatArray ZDCDataAnalyzer::m_currentT0OffsetsLG {}
private

Definition at line 67 of file ZDCDataAnalyzer.h.

67{};

◆ m_dataAnalyzerConfig

std::unique_ptr<ZDCJSONConfig> ZDCDataAnalyzer::m_dataAnalyzerConfig {}
private

Definition at line 35 of file ZDCDataAnalyzer.h.

35{};

◆ m_dataLoaded

std::array<std::array<bool, 4>, 2> ZDCDataAnalyzer::m_dataLoaded {}
private

Definition at line 69 of file ZDCDataAnalyzer.h.

69{};

◆ m_delayedOrder

std::array<std::array<int, 4>, 2> ZDCDataAnalyzer::m_delayedOrder {}
private

Definition at line 40 of file ZDCDataAnalyzer.h.

40{};

◆ m_eventCount

int ZDCDataAnalyzer::m_eventCount {0}
private

Definition at line 45 of file ZDCDataAnalyzer.h.

45{0};

◆ m_fail

std::array<bool, 2> ZDCDataAnalyzer::m_fail {}
private

Definition at line 94 of file ZDCDataAnalyzer.h.

94{};

◆ m_haveECalib

bool ZDCDataAnalyzer::m_haveECalib {false}
private

Definition at line 50 of file ZDCDataAnalyzer.h.

50{false};

◆ m_haveIterCalibCorr

bool ZDCDataAnalyzer::m_haveIterCalibCorr {false}
private

Definition at line 56 of file ZDCDataAnalyzer.h.

56{false};

◆ m_haveNLcalib

bool ZDCDataAnalyzer::m_haveNLcalib {false}
private

Definition at line 86 of file ZDCDataAnalyzer.h.

86{false};

◆ m_haveT0Calib

bool ZDCDataAnalyzer::m_haveT0Calib {false}
private

Definition at line 51 of file ZDCDataAnalyzer.h.

51{false};

◆ m_HGGains

ZDCModuleFloatArray ZDCDataAnalyzer::m_HGGains {}
private

Definition at line 47 of file ZDCDataAnalyzer.h.

47{};

◆ m_iterCalibCorr

std::array<std::vector<std::tuple<unsigned int, float, std::vector<float> > >, 2> ZDCDataAnalyzer::m_iterCalibCorr
private

Definition at line 60 of file ZDCDataAnalyzer.h.

◆ m_LBDepEcalibSplines

std::array<std::array<std::unique_ptr<TSpline>, 4>, 2> ZDCDataAnalyzer::m_LBDepEcalibSplines {}
private

Definition at line 52 of file ZDCDataAnalyzer.h.

52{};

◆ m_moduleAmpFractionLG

std::array<std::array<float, 4>, 2> ZDCDataAnalyzer::m_moduleAmpFractionLG {}
private

Definition at line 96 of file ZDCDataAnalyzer.h.

96{};

◆ m_moduleAnalyzers

std::array<std::array<std::unique_ptr<ZDCPulseAnalyzer>, 4>, 2> ZDCDataAnalyzer::m_moduleAnalyzers {}
private

Definition at line 43 of file ZDCDataAnalyzer.h.

43{};

◆ m_moduleEnabled

ZDCModuleBoolArray ZDCDataAnalyzer::m_moduleEnabled {}
private

Definition at line 42 of file ZDCDataAnalyzer.h.

42{};

◆ m_moduleMask

unsigned int ZDCDataAnalyzer::m_moduleMask {0}
private

Definition at line 71 of file ZDCDataAnalyzer.h.

71{0};

◆ m_moduleStatus

std::array<std::array<unsigned int, 4>, 2> ZDCDataAnalyzer::m_moduleStatus {}
private

Definition at line 73 of file ZDCDataAnalyzer.h.

73{};

◆ m_moduleSum

std::array<float, 2> ZDCDataAnalyzer::m_moduleSum {}
private

Definition at line 77 of file ZDCDataAnalyzer.h.

77{};

◆ m_moduleSumBkgdFrac

std::array<float, 2> ZDCDataAnalyzer::m_moduleSumBkgdFrac {}
private

Definition at line 80 of file ZDCDataAnalyzer.h.

80{};

◆ m_moduleSumErrSq

std::array<float, 2> ZDCDataAnalyzer::m_moduleSumErrSq {}
private

Definition at line 78 of file ZDCDataAnalyzer.h.

78{};

◆ m_moduleSumPreSample

std::array<float, 2> ZDCDataAnalyzer::m_moduleSumPreSample {}
private

Definition at line 79 of file ZDCDataAnalyzer.h.

79{};

◆ m_msgFunc_p

ZDCMsg::MessageFunctionPtr ZDCDataAnalyzer::m_msgFunc_p
private

Definition at line 34 of file ZDCDataAnalyzer.h.

◆ m_NLcalibFactors

std::array< std::array< std::vector<float>, 3>, 2> ZDCDataAnalyzer::m_NLcalibFactors {}
private

Definition at line 87 of file ZDCDataAnalyzer.h.

87{}; // 3 POL5s for each side

◆ m_NLcalibModSumBkgdFrac

std::array<float, 2> ZDCDataAnalyzer::m_NLcalibModSumBkgdFrac {}
private

Definition at line 91 of file ZDCDataAnalyzer.h.

91{};

◆ m_NLcalibModuleSum

std::array<float, 2> ZDCDataAnalyzer::m_NLcalibModuleSum {}
private

Definition at line 89 of file ZDCDataAnalyzer.h.

89{};

◆ m_NLcalibModuleSumErrSq

std::array<float, 2> ZDCDataAnalyzer::m_NLcalibModuleSumErrSq {}
private

Definition at line 90 of file ZDCDataAnalyzer.h.

90{};

◆ m_pedestals

ZDCModuleFloatArray ZDCDataAnalyzer::m_pedestals {}
private

Definition at line 48 of file ZDCDataAnalyzer.h.

48{};

◆ m_pulseAnalyzerConfig

std::unique_ptr<ZDCJSONConfig> ZDCDataAnalyzer::m_pulseAnalyzerConfig {}
private

Definition at line 36 of file ZDCDataAnalyzer.h.

36{};

◆ m_repassEnabled

bool ZDCDataAnalyzer::m_repassEnabled {false}
private

Definition at line 38 of file ZDCDataAnalyzer.h.

38{false};

◆ m_T0HGOffsetSplines

std::array<std::array<std::unique_ptr<TSpline>, 4>, 2> ZDCDataAnalyzer::m_T0HGOffsetSplines {}
private

Definition at line 53 of file ZDCDataAnalyzer.h.

53{};

◆ m_T0LGOffsetSplines

std::array<std::array<std::unique_ptr<TSpline>, 4>, 2> ZDCDataAnalyzer::m_T0LGOffsetSplines {}
private

Definition at line 54 of file ZDCDataAnalyzer.h.

54{};

The documentation for this class was generated from the following files: