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, 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 SetSaveFitFunc (bool save)
void SetADCOverUnderflowValues (const ZDCModuleFloatArray &HGOverflowADC, const ZDCModuleFloatArray &HGUnderflowADC, const ZDCModuleFloatArray &LGOverflowADC)
void SetNoiseSigmas (const ZDCModuleFloatArray &noiseSigmasHG, const ZDCModuleFloatArray &noiseSigmasLG)
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 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::array< float, 6 >, 3 >, 2 > &nlcalibParams)
void SetModuleAmpFractionLG (const ZDCDataAnalyzer::ZDCModuleFloatArray &moduleAmpFractionLG)
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 ()

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 {}
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::array< float, 6 >, 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 22 of file ZDCDataAnalyzer.h.

Member Typedef Documentation

◆ JSON

Definition at line 29 of file ZDCDataAnalyzer.h.

◆ ZDCModuleBoolArray

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

Definition at line 26 of file ZDCDataAnalyzer.h.

◆ ZDCModuleFloatArray

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

Definition at line 25 of file ZDCDataAnalyzer.h.

◆ ZDCModuleIntArray

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

Definition at line 27 of file ZDCDataAnalyzer.h.

Constructor & Destructor Documentation

◆ ZDCDataAnalyzer() [1/2]

ZDCDataAnalyzer::ZDCDataAnalyzer ( ZDCMsg::MessageFunctionPtr messageFunc_p,
int nSample,
float deltaTSample,
size_t preSampleIdx,
std::string fitFunction,
const ZDCModuleIntArray & peak2ndDerivMinSamples,
const ZDCModuleFloatArray & peak2ndDerivMinThresholdsHG,
const ZDCModuleFloatArray & peak2ndDerivMinThresholdsLG,
unsigned int LGMode = ZDCPulseAnalyzer::LGModeNormal )

Definition at line 20 of file ZDCDataAnalyzer.cxx.

24 :
25 m_msgFunc_p(std::move(msgFunc_p))
26{
27 m_moduleEnabled[0] = {{true, true, true, true}};
28 m_moduleEnabled[1] = {{true, true, true, true}};
29
30 m_moduleAnalyzers[0] = {{0, 0, 0, 0}};
31 m_moduleAnalyzers[1] = {{0, 0, 0, 0}};
32
33 m_calibAmplitude[0] = {{0, 0, 0, 0}};
34 m_calibAmplitude[1] = {{0, 0, 0, 0}};
35
36 m_calibTime[0] = {{0, 0, 0, 0}};
37 m_calibTime[1] = {{0, 0, 0, 0}};
38
39 m_dataLoaded[0] = {{false, false, false, false}};
40 m_dataLoaded[1] = {{false, false, false, false}};
41
42 m_delayedOrder[0] = {0, 0, 0, 0};
43 m_delayedOrder[1] = {0, 0, 0, 0};
44
45 // For now we are using hard-coded gain factors and pedestals
46 //
47 m_HGGains[0] = {{10, 10, 10, 10}};
48 m_HGGains[1] = {{10, 10, 10, 10}};
49
50 m_pedestals[0] = {{100, 100, 100, 100}};
51 m_pedestals[1] = {{100, 100, 100, 100}};
52
53 // Construct the per-module pulse analyzers
54 //
55 for (size_t side : {0, 1}) {
56 for (size_t module : {0, 1, 2, 3}) {
57 std::string moduleTag= "_s" + std::to_string(side) + "_m" +std::to_string(module);
58 m_moduleAnalyzers[side][module] = make_unique<ZDCPulseAnalyzer>(m_msgFunc_p, std::move(moduleTag), nSample, deltaTSample, preSampleIdx,
59 m_pedestals[side][module], fitFunction,
60 peak2ndDerivMinSamples[side][module],
61 peak2ndDerivMinThresholdsHG[side][module],
62 peak2ndDerivMinThresholdsLG[side][module]);
63 m_moduleAnalyzers[side][module]->setLGMode(LGMode);
64 }
65 }
66}
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 68 of file ZDCDataAnalyzer.cxx.

68 :
69 m_msgFunc_p(msgFunc_p)
70{
71 init();
72
73 // Construct the object that will extract the data and pulse analyzer
74 // configurations from the input JSON configuration
75 //
76 // For the data anlyzer we use 1 channel since the relevant
77 // configurations will all be per-side
78 //
79 m_dataAnalyzerConfig = std::make_unique<ZDCJSONConfig>(std::vector<std::string>{"C", "A"}, 1);
80 m_pulseAnalyzerConfig = std::make_unique<ZDCJSONConfig>(std::vector<std::string>{"C", "A"}, 4);
81
82
83 // Extract the JSON object for the pulse analyzer(s)
84 //
85 JSON DAconfig = configJSON["DataAnalyzer"];
86 if (DAconfig.is_null()) {
87 (*m_msgFunc_p)(ZDCMsg::Fatal, "JSON configuration object for ZDCDataAnalyzer not found");
88 return;
89 }
90
91 auto [result, resultStr] = m_dataAnalyzerConfig->ParseConfig(DAconfig, ZDCDataAnalyzer::JSONConfigParams);
92 if (!result) {
93 (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCDataAnalyzer JSON config, error = " + resultStr);
94 return;
95 }
96
97 // The data analyzer configuration is simple enough we handle it inline
98 //
99 for (size_t side : {0, 1}) {
100 for (size_t module : {0, 1, 2, 3}) {
101 m_moduleEnabled[side][module] = true;
102 }
103
104 // Now extract information from ZDCDataAnalyzer-specific configuration
105 //
106 JSON sideConfig = m_dataAnalyzerConfig->getChannelConfig(side, 0);
107 JSON modEnable = sideConfig["moduleEnabled"];
108 JSON delayedOrder = sideConfig["delayedOrder"];
109 if (!modEnable.is_null()) {
110 if (modEnable.size() != 4) {
111 (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCDataAnalyzer JSON config, incorrect size of moduleEnabled");
112 return;
113 }
114
115 for (size_t module : {0, 1, 2, 3}) {
116 m_moduleEnabled[side][module] = modEnable[module];
117 }
118 }
119 if (!delayedOrder.is_null()) {
120 if (delayedOrder.size() != 4) {
121 (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCDataAnalyzer JSON config, incorrect size of delayedOrder");
122 return;
123 }
124
125 for (size_t module : {0, 1, 2, 3}) {
126 m_delayedOrder[side][module] = delayedOrder[module];
127 }
128 }
129 }
130
131 for (size_t side : {0, 1}) {
132 for (size_t module : {0, 1, 2, 3}) {
133
134 (*m_msgFunc_p)(
136 "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
137 ", module " + std::to_string(module) +
138 ", enabled = " + std::to_string(m_moduleEnabled[side][module]) +
139 ", delayedOrder = " +
140 std::to_string(m_delayedOrder[side][module]));
141 }
142 }
143
144
145
146 // Extract the JSON object for the pulse analyzer(s)
147 //
148 JSON PAconfig = configJSON["PulseAnalyzer"];
149 if (PAconfig.is_null()) {
150 (*m_msgFunc_p)(ZDCMsg::Fatal, "JSON configuration object for ZDCPulseAnalyzer not found");
151 return;
152 }
153
154 // Do the parsing of the pulse analyzer JSON configuration
155 //
156 auto [result2, resultStr2] = m_pulseAnalyzerConfig->ParseConfig(PAconfig, ZDCPulseAnalyzer::JSONConfigParams);
157 if (!result2) {
158 (*m_msgFunc_p)(ZDCMsg::Fatal, "Error parsing ZDCPulseAnalyzer JSON config, error = " + resultStr2);
159 return;
160 }
161
162 // Now set up each of the pulse analyzers
163 //
164 for (size_t side : {0, 1}) {
165 for (size_t module : {0, 1, 2, 3}) {
166
167 (*m_msgFunc_p)(ZDCMsg::Info, "Setting up ZDCPulseAnalyzer for side " + std::to_string(side) +
168 ", module " + std::to_string(module));
169
170 //
171 // Get the parsed configuration JSON object for this module
172 //
173 JSON moduleConfig = m_pulseAnalyzerConfig->getChannelConfig(side, module);
174
175 std::ostringstream ostr;
176 ostr << "JSON configuration for ZDC pulse analyyzer for side " << std::to_string(side)
177 << ", module " << std::to_string(module) << "\n" << moduleConfig.dump(2);
178 (*m_msgFunc_p)(ZDCMsg::Verbose, ostr.str().c_str());
179
180 // Construct the ZDCPulseAnalyzer object
181 //
182 m_moduleAnalyzers[side][module] = std::make_unique<ZDCPulseAnalyzer>(msgFunc_p, moduleConfig);
183
184 (*m_msgFunc_p)(ZDCMsg::Info, "Finished constructing ZDCPulseAnalyzer for side " + std::to_string(side) +
185 ", module " + std::to_string(module));
186
187 }
188 }
189
190 // Check for the enabling of re-pass
191 //
193
194 (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer construction complete");
195}
std::unique_ptr< ZDCJSONConfig > m_dataAnalyzerConfig
std::unique_ptr< ZDCJSONConfig > m_pulseAnalyzerConfig
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
@ Verbose
Definition ZDCMsg.h:18
@ Info
Definition ZDCMsg.h:20

◆ ~ZDCDataAnalyzer()

ZDCDataAnalyzer::~ZDCDataAnalyzer ( )
inline

Definition at line 104 of file ZDCDataAnalyzer.h.

104{};

Member Function Documentation

◆ disableFADCCorrections()

void ZDCDataAnalyzer::disableFADCCorrections ( )

Definition at line 509 of file ZDCDataAnalyzer.cxx.

510{
511 for (size_t side : {0, 1}) {
512 for (size_t module : {0, 1, 2, 3}) {
513 m_moduleAnalyzers[side][module]->disableFADCCorrections();
514 }
515 }
516}

◆ disableModule()

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

Definition at line 234 of file ZDCDataAnalyzer.cxx.

235{
236 if (side < 2 && module < 4) {
237 //
238 // Can't disable in the middle of analysis
239 //
240 if (m_dataLoaded[side][module]) return false;
241 else {
242 m_moduleEnabled[side][module] = false;
243 return true;
244 }
245 }
246 else {
247 return false;
248 }
249}

◆ DoNLcalibModuleSum()

void ZDCDataAnalyzer::DoNLcalibModuleSum ( )

Definition at line 795 of file ZDCDataAnalyzer.cxx.

796{
797 if (!m_haveNLcalib) return;
798
799 for (int iside:{0,1})
800 {
801 if (m_calibModuleSum[iside]>0.)
802 {
803 float fEM = m_calibAmplitude[iside][0] / m_calibModuleSum[iside];
804 float fHad1 = m_calibAmplitude[iside][1] / m_calibModuleSum[iside];
805 float fHad2 = m_calibAmplitude[iside][2] / m_calibModuleSum[iside];
806
807 float EMCorrFact = 0;
808
809 for (size_t i=0;i<m_NLcalibFactors[iside][0].size()-1;i++)
810 {
811 EMCorrFact += std::pow(fEM - m_NLcalibFactors[iside][0][0],i)*m_NLcalibFactors[iside][0][i+1];
812 }
813
814 float Had1CorrFact = 0;
815 for (size_t i=0;i<m_NLcalibFactors[iside][1].size()-1;i++)
816 {
817 Had1CorrFact += std::pow(fHad1 - m_NLcalibFactors[iside][1][0],i)*m_NLcalibFactors[iside][1][i+1];
818 }
819
820 float Had2CorrFact = 0;
821 for (size_t i=0;i<m_NLcalibFactors[iside][2].size()-1;i++)
822 {
823 Had2CorrFact += std::pow(fHad2 - m_NLcalibFactors[iside][2][0],i)*m_NLcalibFactors[iside][2][i+1];
824 }
825
826 std::ostringstream ostr;
827 ostr << "ZDCDataAnalyzer: " << m_calibModuleSum[iside] << " " << EMCorrFact << " " << Had1CorrFact << " " << Had2CorrFact << std::endl;
828 (*m_msgFunc_p)(ZDCMsg::Debug,ostr.str().c_str());
829
830 float ECorrEM = m_calibModuleSum[iside]/EMCorrFact;
831 float ECorrEMHad1 = ECorrEM/Had1CorrFact;
832 float ECorrEMHad1Had2 = ECorrEMHad1/Had2CorrFact;
833
834
835 m_NLcalibModuleSum[iside] = ECorrEMHad1Had2;
836 m_NLcalibModuleSumErrSq[iside] = 0.; // no error for now
837 }
838 else
839 {
840 (*m_msgFunc_p)(ZDCMsg::Info,"SUM = 0!!");
841 m_NLcalibModuleSum[iside] = 0.;
842 m_NLcalibModuleSumErrSq[iside] = 0.; // no error for now
843 }
844 }
845
846}
std::array< std::array< std::array< float, 6 >, 3 >, 2 > m_NLcalibFactors
std::array< float, 2 > m_NLcalibModuleSum
std::array< float, 2 > m_calibModuleSum
std::array< float, 2 > m_NLcalibModuleSumErrSq
@ Debug
Definition ZDCMsg.h:19

◆ enableDelayed() [1/2]

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

Definition at line 262 of file ZDCDataAnalyzer.cxx.

263{
264 for (size_t side : {0, 1}) {
265 for (size_t module : {0, 1, 2, 3}) {
266 if (delayDeltaTArray[side][module] < 0) m_delayedOrder[side][module] = -1;
267 else m_delayedOrder[side][module] = 1;
268
269 (*m_msgFunc_p)(ZDCMsg::Verbose, "Enabling use of delayed samples on side, module = " + std::to_string(side) + ", " +
270 std::to_string(module) + ", delta t = " + std::to_string(delayDeltaTArray[side][module]));
271
272 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(delayDeltaTArray[side][module]), undelayedDelayedPedestalDiff[side][module]);
273 }
274 }
275}

◆ enableDelayed() [2/2]

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

Definition at line 251 of file ZDCDataAnalyzer.cxx.

252{
253 int delayedOrder = deltaT < 0 ? -1 : 1;
254 for (size_t side : {0, 1}) {
255 for (size_t module : {0, 1, 2, 3}) {
256 m_delayedOrder[side][module] = delayedOrder;
257 m_moduleAnalyzers[side][module]->enableDelayed(std::abs(deltaT), undelayedDelayedPedestalDiff[side][module]);
258 }
259 }
260}

◆ 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 493 of file ZDCDataAnalyzer.cxx.

496{
497 if (correctPerSample)
498 (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer::enabling FADC Corrections per sample");
499 else
500 (*m_msgFunc_p)(ZDCMsg::Info, "ZDCDataAnalyzer::enabling FADC Corrections per amplitude");
501
502 for (size_t side : {0, 1}) {
503 for (size_t module : {0, 1, 2, 3}) {
504 m_moduleAnalyzers[side][module]->enableFADCCorrections(correctPerSample, corrHistHG[side][module], corrHistLG[side][module]);
505 }
506 }
507}

◆ enablePostExclusion() [1/2]

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

Definition at line 295 of file ZDCDataAnalyzer.cxx.

296{
297 for (size_t side : {0, 1}) {
298 for (size_t module : {0, 1, 2, 3}) {
299 m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
300 }
301 }
302}

◆ enablePostExclusion() [2/2]

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

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 m_moduleAnalyzers[side][module]->enablePostExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
309 }
310 }
311}

◆ enablePreExclusion() [1/2]

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

Definition at line 277 of file ZDCDataAnalyzer.cxx.

278{
279 for (size_t side : {0, 1}) {
280 for (size_t module : {0, 1, 2, 3}) {
281 m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh[side][module], LGADCThresh[side][module]);
282 }
283 }
284}

◆ enablePreExclusion() [2/2]

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

Definition at line 286 of file ZDCDataAnalyzer.cxx.

287{
288 for (size_t side : {0, 1}) {
289 for (size_t module : {0, 1, 2, 3}) {
290 m_moduleAnalyzers[side][module]->enablePreExclusion(maxSamplesExcl, HGADCThresh, LGADCThresh);
291 }
292 }
293}

◆ enableRepass()

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

Definition at line 314 of file ZDCDataAnalyzer.cxx.

315{
316 m_repassEnabled = true;
317 for (size_t side : {0, 1}) {
318 for (size_t module : {0, 1, 2, 3}) {
319 m_moduleAnalyzers[side][module]->enableRepass(peak2ndDerivMinRepassHG[side][module], peak2ndDerivMinRepassLG[side][module]);
320 }
321 }
322}

◆ 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 518 of file ZDCDataAnalyzer.cxx.

521{
522 for (size_t side : {0, 1}) {
523 for (size_t module : {0, 1, 2, 3}) {
524 m_moduleAnalyzers[side][module]->enableTimeSigCut(AND, sigCut, TF1String, parsHGArr[side][module], parsLGArr[side][module]);
525 }
526 }
527}

◆ FinishEvent()

bool ZDCDataAnalyzer::FinishEvent ( )

Definition at line 690 of file ZDCDataAnalyzer.cxx.

691{
692 // First make sure that all data is loaded. while we're at it, count how many modules on each side have a pulse
693 //
694 unsigned int sideNPulsesMod[2] = {0, 0};
695
696 for (size_t side : {0, 1}) {
697 for (size_t module : {0, 1, 2, 3}) {
698 if (!m_dataLoaded[side][module] && m_moduleEnabled[side][module]) {return false;}
699 if (m_moduleAnalyzers[side][module]->armSumInclude()) {sideNPulsesMod[side]++;}
700 }
701 }
702
703 // Are we doing a repass? If so, reanalyze modules for which no pulse was found the first time
704 // as long as we have one module with a pulse on the given side
705 //
706 if (m_repassEnabled) {
707 for (size_t side : {0, 1}) {
708 if (sideNPulsesMod[side] == 0) continue;
709
710 for (size_t module : {0, 1, 2, 3}) {
711 if (!m_moduleEnabled[side][module]) continue;
712
713 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
714
715 // If this module had no pulse the first time, reanalyze it (with a lower 2nd derivative threshold)
716 //
717 if (!pulseAna_p->havePulse()) {
718 (*m_msgFunc_p)(ZDCMsg::Debug, ("ZDCPulseAnalyzer:: performing a repass on data for side, module = " + std::to_string(side) + ", " + std::to_string(module)));
719 pulseAna_p->ReanalyzeData();
720 m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
721 }
722 }
723 }
724 }
725
726 // Now sum up amplitudes etc
727 //
728 for (size_t side : {0, 1}) {
729 float tempFraction = 1.0;
730 double sumAmpTimesBkgdFrac = 0.0;
731 double sumCalibAmpTimesBkgdFrac = 0.0;
732
733 for (size_t module : {0, 1, 2, 3}) {
734 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
735
736 if (pulseAna_p->armSumInclude()) {
737 int moduleMaskBit = 4 * side + module;
738 m_moduleMask |= 1 << moduleMaskBit;
739
740 float amplitude = pulseAna_p->GetAmplitude();
741 float ampError = pulseAna_p->GetAmpError();
742 float bkgdFraction = pulseAna_p->GetBkgdMaxFraction();
743
745
746 float calibAmpError = ampError * m_currentECalibCoeff[side][module];
747
748 float timeCalib = pulseAna_p->GetT0Corr();
749 if (pulseAna_p->useLowGain()) {timeCalib -= m_currentT0OffsetsLG[side][module];}
750 else {timeCalib -= m_currentT0OffsetsHG[side][module];}
751
752 m_calibTime[side][module] = timeCalib;
753
754 m_moduleSum[side] += amplitude;
755 m_moduleSumErrSq[side] += ampError * ampError;
756 sumAmpTimesBkgdFrac += amplitude*bkgdFraction;
757
758 m_moduleSumPreSample[side] += pulseAna_p->GetPreSampleAmp();
759
761 m_calibModuleSumErrSq[side] += calibAmpError * calibAmpError;
762
764 sumCalibAmpTimesBkgdFrac += amplitude*bkgdFraction;
765 }
766
767 // subtract the fraction of LGOverflow events if we have fraction available (<0 means unavailable)
768 if (pulseAna_p->LGOverflow() && m_moduleAmpFractionLG[side][module] > 0) {tempFraction -= m_moduleAmpFractionLG[side][module];}
769 }
770
771 {
773 if (m_moduleSum[side] > 0) m_moduleSumBkgdFrac[side] = sumAmpTimesBkgdFrac/m_moduleSum[side];
774 else m_moduleSumBkgdFrac[side] = 0;
775 }
776
777 if (m_calibModuleSum[side] > 1e-6) {
779 m_calibModSumBkgdFrac[side] = sumCalibAmpTimesBkgdFrac/m_calibModuleSum[side];
780 }
781 else {
782 m_averageTime[side] = 0;
784 }
785
786 if (tempFraction < 1.0) {m_moduleSum[side] /= tempFraction;}
787 }
788
790
791 m_eventCount++;
792 return true;
793}
std::array< float, 2 > m_moduleSumPreSample
std::array< float, 2 > m_calibModSumBkgdFrac
ZDCModuleFloatArray m_currentECalibCoeff
std::array< float, 2 > m_averageTime
unsigned int m_moduleMask
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 150 of file ZDCDataAnalyzer.h.

150{return m_averageTime.at(side);}

◆ GetCalibModuleSum()

float ZDCDataAnalyzer::GetCalibModuleSum ( size_t side) const
inline

Definition at line 140 of file ZDCDataAnalyzer.h.

140{return m_calibModuleSum.at(side);}

◆ GetCalibModuleSumErr()

float ZDCDataAnalyzer::GetCalibModuleSumErr ( size_t side) const
inline

Definition at line 141 of file ZDCDataAnalyzer.h.

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

◆ GetdelayedBS()

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

Definition at line 161 of file ZDCDataAnalyzer.h.

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

◆ GetModuleAmplitude()

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

Definition at line 153 of file ZDCDataAnalyzer.h.

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

◆ GetModuleCalibAmplitude()

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

Definition at line 157 of file ZDCDataAnalyzer.h.

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

◆ GetModuleCalibTime()

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

Definition at line 158 of file ZDCDataAnalyzer.h.

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

◆ GetModuleChisq()

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

Definition at line 155 of file ZDCDataAnalyzer.h.

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

◆ GetModuleMask()

unsigned int ZDCDataAnalyzer::GetModuleMask ( ) const
inline

Definition at line 134 of file ZDCDataAnalyzer.h.

134{return m_moduleMask;}

◆ GetModuleStatus()

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

Definition at line 159 of file ZDCDataAnalyzer.h.

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

◆ GetModuleSum()

float ZDCDataAnalyzer::GetModuleSum ( size_t side) const
inline

Definition at line 136 of file ZDCDataAnalyzer.h.

136{return m_moduleSum.at(side);}

◆ GetModuleSumErr()

float ZDCDataAnalyzer::GetModuleSumErr ( size_t side) const
inline

Definition at line 137 of file ZDCDataAnalyzer.h.

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

◆ GetModuleSumPreSample()

float ZDCDataAnalyzer::GetModuleSumPreSample ( size_t side) const
inline

Definition at line 148 of file ZDCDataAnalyzer.h.

148{return m_moduleSumPreSample.at(side);}

◆ GetModuleTime()

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

Definition at line 154 of file ZDCDataAnalyzer.h.

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

◆ GetNLcalibModuleSum()

float ZDCDataAnalyzer::GetNLcalibModuleSum ( size_t side) const
inline

Definition at line 145 of file ZDCDataAnalyzer.h.

145{return m_NLcalibModuleSum.at(side);}

◆ GetNLcalibModuleSumErr()

float ZDCDataAnalyzer::GetNLcalibModuleSumErr ( size_t side) const
inline

Definition at line 146 of file ZDCDataAnalyzer.h.

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

◆ GetPulseAnalyzer() [1/2]

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

Definition at line 164 of file ZDCDataAnalyzer.h.

164{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 163 of file ZDCDataAnalyzer.h.

163{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 106 of file ZDCDataAnalyzer.h.

106 {
107 if (m_pulseAnalyzerConfig.get()) return m_pulseAnalyzerConfig->getGlobalParam(key, value);
108 else return false;
109 }

◆ GetSideBkgdFrac()

float ZDCDataAnalyzer::GetSideBkgdFrac ( size_t side) const
inline

Definition at line 138 of file ZDCDataAnalyzer.h.

138{return m_moduleSumBkgdFrac.at(side);}

◆ GetSideCalibBkgdFrac()

float ZDCDataAnalyzer::GetSideCalibBkgdFrac ( size_t side) const
inline

Definition at line 142 of file ZDCDataAnalyzer.h.

142{return m_calibModSumBkgdFrac.at(side);}

◆ init()

void ZDCDataAnalyzer::init ( )
private

Definition at line 197 of file ZDCDataAnalyzer.cxx.

198{
199 for (size_t side : {0, 1}) {
200 m_moduleSum[side] = 0;
205
208 m_averageTime[side] = 0;
209 m_fail[side] = 0;
210
211 for (size_t module : {0, 1, 2, 3}) {
212 m_moduleEnabled[side][module] = true;
214 m_calibTime[side][module] = 0;
215
216 m_dataLoaded[side][module] = false;
218
219 // Default "calibrations"
220 //
224
225 }
226 }
227
229 {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }},
230 {{ {{0,0,0,0,0,0}},{{0,0,0,0,0,0}},{{0,0,0,0,0,0}} }} }};
231
232}
std::array< bool, 2 > m_fail

◆ invokeAll()

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

Definition at line 111 of file ZDCDataAnalyzer.h.

112 {
113 for (size_t side : {0, 1}) {
114 for (size_t module : {0, 1, 2, 3}) {
115 functor(m_moduleAnalyzers[side][module].get());
116 }
117 }
118 }
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ 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 628 of file ZDCDataAnalyzer.cxx.

629{
630
631 // We immediately return if this module is disabled
632 //
633 if (!m_moduleEnabled[side][module]) {
634 (*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)));
635
636 return;
637 }
638
639 (*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)));
640
641 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
642 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples);
643 m_dataLoaded[side][module] = true;
644
645 if (pulseAna_p->failed()) {
646 (*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)));
647
648 m_fail[side] = true;
649 }
650
651 m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
652}

◆ 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 654 of file ZDCDataAnalyzer.cxx.

656{
657 // We immediately return if this module is disabled
658 //
659 if (!m_moduleEnabled[side][module]) {
660 (*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)));
661
662 return;
663 }
664
665 if (m_delayedOrder[side][module] == 0) {
666 (*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)));
667 return;
668 }
669
670 (*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)));
671
672 ZDCPulseAnalyzer* pulseAna_p = m_moduleAnalyzers[side][module].get();
673 if (m_delayedOrder[side][module] > 0) {
674 pulseAna_p->LoadAndAnalyzeData(HGSamples, LGSamples, HGSamplesDelayed, LGSamplesDelayed);
675 }
676 else {
677 pulseAna_p->LoadAndAnalyzeData(HGSamplesDelayed, LGSamplesDelayed, HGSamples, LGSamples);
678 }
679 m_dataLoaded[side][module] = true;
680
681 if (pulseAna_p->failed()) {
682 (*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)));
683
684 m_fail[side] = true;
685 }
686
687 m_moduleStatus[side][module] = pulseAna_p->GetStatusMask();
688}
@ Error
Definition ZDCMsg.h:22

◆ LoadEnergyCalibrations()

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

Definition at line 224 of file ZDCDataAnalyzer.h.

225 {
226 (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading energy calibrations");
227
228 m_LBDepEcalibSplines = std::move (calibSplines);
229 m_haveECalib = true;
230 }
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 232 of file ZDCDataAnalyzer.h.

234 {
235 (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading timing calibrations");
236
237 m_T0HGOffsetSplines = std::move (T0HGOffsetSplines);
238 m_T0LGOffsetSplines = std::move (T0LGOffsetSplines);
239
240 m_haveT0Calib = true;
241 }
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 131 of file ZDCDataAnalyzer.h.

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

◆ moduleEnabled()

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

Definition at line 132 of file ZDCDataAnalyzer.h.

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

◆ set2ndDerivStep()

void ZDCDataAnalyzer::set2ndDerivStep ( size_t step)

Definition at line 333 of file ZDCDataAnalyzer.cxx.

334{
335 for (size_t side : {0, 1}) {
336 for (size_t module : {0, 1, 2, 3}) {
337 m_moduleAnalyzers[side][module]->set2ndDerivStep(step);
338 }
339 }
340}

◆ SetADCOverUnderflowValues()

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

Definition at line 429 of file ZDCDataAnalyzer.cxx.

431{
432 for (size_t side : {0, 1}) {
433 for (size_t module : {0, 1, 2, 3}) {
434 m_moduleAnalyzers[side][module]->SetADCOverUnderflowValues(HGOverflowADC[side][module], HGUnderflowADC[side][module], LGOverflowADC[side][module]);
435 }
436 }
437}

◆ 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 439 of file ZDCDataAnalyzer.cxx.

442{
443 for (size_t side : {0, 1}) {
444 for (size_t module : {0, 1, 2, 3}) {
445 m_moduleAnalyzers[side][module]->SetCutValues(chisqDivAmpCutHG[side][module], chisqDivAmpCutLG[side][module],
446 deltaT0MinHG[side][module], deltaT0MaxHG[side][module],
447 deltaT0MinLG[side][module], deltaT0MaxLG[side][module]);
448 }
449 }
450}

◆ SetFitMinMaxAmpValues() [1/2]

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

Definition at line 408 of file ZDCDataAnalyzer.cxx.

410{
411 for (size_t side : {0, 1}) {
412 for (size_t module : {0, 1, 2, 3}) {
413 m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minAmpHG[side][module], minAmpLG[side][module],
414 maxAmpHG[side][module], maxAmpLG[side][module]);
415
416 }
417 }
418}

◆ SetFitMinMaxAmpValues() [2/2]

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

Definition at line 420 of file ZDCDataAnalyzer.cxx.

421{
422 for (size_t side : {0, 1}) {
423 for (size_t module : {0, 1, 2, 3}) {
424 m_moduleAnalyzers[side][module]->SetFitMinMaxAmp(minHG, minLG, maxHG, maxLG);
425 }
426 }
427}

◆ SetFitTimeMax()

void ZDCDataAnalyzer::SetFitTimeMax ( float tmax)

Definition at line 369 of file ZDCDataAnalyzer.cxx.

369 {
370 for (size_t side : {0, 1}) {
371 for (size_t module : {0, 1, 2, 3}) {
372 m_moduleAnalyzers[side][module]->SetFitTimeMax(tmax);
373 }
374 }
375}

◆ SetGainFactorsHGLG() [1/2]

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

Definition at line 351 of file ZDCDataAnalyzer.cxx.

352{
353 for (size_t side : {0, 1}) {
354 for (size_t module : {0, 1, 2, 3}) {
355 m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorsHG[side][module], gainFactorsLG[side][module]);
356 }
357 }
358}

◆ SetGainFactorsHGLG() [2/2]

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

Definition at line 342 of file ZDCDataAnalyzer.cxx.

343{
344 for (size_t side : {0, 1}) {
345 for (size_t module : {0, 1, 2, 3}) {
346 m_moduleAnalyzers[side][module]->SetGainFactorsHGLG(gainFactorHG, gainFactorLG);
347 }
348 }
349}

◆ setMinimumSignificance()

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

Definition at line 324 of file ZDCDataAnalyzer.cxx.

325{
326 for (size_t side : {0, 1}) {
327 for (size_t module : {0, 1, 2, 3}) {
328 m_moduleAnalyzers[side][module]->setMinimumSignificance(sigMinHG, sigMinLG);
329 }
330 }
331}

◆ SetModuleAmpFractionLG()

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

Definition at line 400 of file ZDCDataAnalyzer.cxx.

400 {
401 for (size_t side : {0, 1}) {
402 for (size_t module : {0, 1, 2, 3}) {
403 m_moduleAmpFractionLG[side][module] = moduleAmpFractionLG[side][module];
404 }
405 }
406}

◆ SetNLcalibParams()

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

Definition at line 478 of file ZDCDataAnalyzer.cxx.

479{
480 for (size_t side: {0,1})
481 {
482 for (size_t module: {0,1,2})
483 {
484 for (size_t val: {0,1,2,3,4,5})
485 {
486 m_NLcalibFactors[side][module][val] = nlcalibParams[side][module][val];
487 }
488 }
489 }
490 m_haveNLcalib = true;
491}

◆ SetNoiseSigmas()

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

Definition at line 391 of file ZDCDataAnalyzer.cxx.

392{
393 for (size_t side : {0, 1}) {
394 for (size_t module : {0, 1, 2, 3}) {
395 m_moduleAnalyzers[side][module]->SetNoiseSigmas(noiseSigmasHG[side][module], noiseSigmasLG[side][module]);
396 }
397 }
398}

◆ 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 465 of file ZDCDataAnalyzer.cxx.

468{
469 for (size_t side : {0, 1}) {
470 for (size_t module : {0, 1, 2, 3}) {
471 m_moduleAnalyzers[side][module]->SetNonlinCorrParams(refADC, refScale,
472 HGNonlinCorrParams[side][module],
473 LGNonlinCorrParams[side][module]);
474 }
475 }
476}

◆ SetPeak2ndDerivMinTolerances()

void ZDCDataAnalyzer::SetPeak2ndDerivMinTolerances ( size_t tolerance)

Definition at line 360 of file ZDCDataAnalyzer.cxx.

360 {
361 for (size_t side : {0, 1}) {
362 for (size_t module : {0, 1, 2, 3}) {
363 m_moduleAnalyzers[side][module]->SetPeak2ndDerivMinTolerance(tolerance);
364 }
365 }
366}
constexpr double tolerance

◆ SetSaveFitFunc()

void ZDCDataAnalyzer::SetSaveFitFunc ( bool save)

◆ 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 379 of file ZDCDataAnalyzer.cxx.

382{
383 for (size_t side : {0, 1}) {
384 for (size_t module : {0, 1, 2, 3}) {
385 m_moduleAnalyzers[side][module]->SetTauT0Values(fixTau1[side][module], fixTau2[side][module],
386 tau1[side][module], tau2[side][module], t0HG[side][module], t0LG[side][module]);
387 }
388 }
389}

◆ 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 452 of file ZDCDataAnalyzer.cxx.

455{
456 for (size_t side : {0, 1}) {
457 for (size_t module : {0, 1, 2, 3}) {
458 m_moduleAnalyzers[side][module]->SetTimingCorrParams(mode, refADC, refScale,
459 HGParamArr.at(side).at(module), LGParamArr.at(side).at(module));
460 }
461 }
462
463}

◆ SideFailed()

bool ZDCDataAnalyzer::SideFailed ( size_t side) const
inline

Definition at line 151 of file ZDCDataAnalyzer.h.

151{return m_fail.at(side);}

◆ StartEvent()

void ZDCDataAnalyzer::StartEvent ( int lumiBlock)

Definition at line 529 of file ZDCDataAnalyzer.cxx.

530{
531 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Starting new event, event index = " + std::to_string(m_eventCount)));
532
533 // By default we perform quiet pulse fits
534 //
535 /*
536 if ((*m_msgFunc_p)(ZDCMsg::Verbose, "")) {
537 invokeAll([](ZDCPulseAnalyzer* pa){pa->setQuietFits();});
538 }
539 else {
540 invokeAll([](ZDCPulseAnalyzer* pa){pa->setQuietFits();});
541 }
542 */
543
544 // See if we have to load up new calibrations
545 //
546 if (lumiBlock != m_currentLB) {
547 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Starting new luminosity block " + std::to_string(lumiBlock)));
548
549 if (m_haveECalib) {
550 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading energy calibrations for event " + std::to_string(m_eventCount) + ", lumi block " +
551 std::to_string(lumiBlock)));
552
553 for (size_t side : {0, 1}) {
554 for (size_t module : {0, 1, 2, 3}) {
555 float splineLBMin = m_LBDepEcalibSplines[side][module]->GetXmin();
556 float splineLBMax = m_LBDepEcalibSplines[side][module]->GetXmax();
557
558 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
560 }
561 else if (lumiBlock < splineLBMin) {
563 }
564 else {
566 }
567 }
568 }
569 } // end of if (_haveEcalib) {
570
571 if (m_haveT0Calib) {
572 (*m_msgFunc_p)(ZDCMsg::Verbose, ("Loading timing calibrations for event " + std::to_string(m_eventCount) + ", lumi block " + std::to_string(lumiBlock)));
573
574 for (size_t side : {0, 1}) {
575 for (size_t module : {0, 1, 2, 3}) {
576 float splineLBMin = m_T0HGOffsetSplines[side][module]->GetXmin();
577 float splineLBMax = m_T0HGOffsetSplines[side][module]->GetXmax();
578
579 if (lumiBlock >= splineLBMin && lumiBlock <= splineLBMax) {
582 }
583 else if (lumiBlock < splineLBMin) {
586 }
587 else {
590 }
591 }
592 }
593 } // end of if (m_haveT0Calib)
594 }
595
596 // Initialize transient results
597 //
598 for (size_t side : {0, 1}) {
599 for (size_t module : {0, 1, 2, 3}) {
600 m_dataLoaded[side][module] = false;
603 m_calibTime[side][module] = 0;
604 // _moduleFail[side][module] = false;
605 }
606
607 m_moduleSum[side] = 0;
611
615
619
620 m_averageTime[side] = 0;
621 m_fail[side] = false;
622 }
623
624 m_moduleMask = 0;
626}
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 13 of file ZDCDataAnalyzer.h.

◆ m_averageTime

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

Definition at line 86 of file ZDCDataAnalyzer.h.

86{};

◆ m_calibAmplitude

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

Definition at line 67 of file ZDCDataAnalyzer.h.

67{};

◆ m_calibModSumBkgdFrac

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

Definition at line 77 of file ZDCDataAnalyzer.h.

77{};

◆ m_calibModuleSum

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

Definition at line 75 of file ZDCDataAnalyzer.h.

75{};

◆ m_calibModuleSumErrSq

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

Definition at line 76 of file ZDCDataAnalyzer.h.

76{};

◆ m_calibTime

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

Definition at line 68 of file ZDCDataAnalyzer.h.

68{};

◆ m_currentECalibCoeff

ZDCModuleFloatArray ZDCDataAnalyzer::m_currentECalibCoeff {}
private

Definition at line 58 of file ZDCDataAnalyzer.h.

58{};

◆ m_currentLB

int ZDCDataAnalyzer::m_currentLB {-1}
private

Definition at line 57 of file ZDCDataAnalyzer.h.

57{-1};

◆ m_currentT0OffsetsHG

ZDCModuleFloatArray ZDCDataAnalyzer::m_currentT0OffsetsHG {}
private

Definition at line 59 of file ZDCDataAnalyzer.h.

59{};

◆ m_currentT0OffsetsLG

ZDCModuleFloatArray ZDCDataAnalyzer::m_currentT0OffsetsLG {}
private

Definition at line 60 of file ZDCDataAnalyzer.h.

60{};

◆ m_dataAnalyzerConfig

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

Definition at line 34 of file ZDCDataAnalyzer.h.

34{};

◆ m_dataLoaded

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

Definition at line 62 of file ZDCDataAnalyzer.h.

62{};

◆ m_delayedOrder

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

Definition at line 39 of file ZDCDataAnalyzer.h.

39{};

◆ m_eventCount

int ZDCDataAnalyzer::m_eventCount {0}
private

Definition at line 44 of file ZDCDataAnalyzer.h.

44{0};

◆ m_fail

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

Definition at line 87 of file ZDCDataAnalyzer.h.

87{};

◆ m_haveECalib

bool ZDCDataAnalyzer::m_haveECalib {false}
private

Definition at line 49 of file ZDCDataAnalyzer.h.

49{false};

◆ m_haveNLcalib

bool ZDCDataAnalyzer::m_haveNLcalib {false}
private

Definition at line 79 of file ZDCDataAnalyzer.h.

79{false};

◆ m_haveT0Calib

bool ZDCDataAnalyzer::m_haveT0Calib {false}
private

Definition at line 50 of file ZDCDataAnalyzer.h.

50{false};

◆ m_HGGains

ZDCModuleFloatArray ZDCDataAnalyzer::m_HGGains {}
private

Definition at line 46 of file ZDCDataAnalyzer.h.

46{};

◆ m_LBDepEcalibSplines

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

Definition at line 51 of file ZDCDataAnalyzer.h.

51{};

◆ m_moduleAmpFractionLG

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

Definition at line 89 of file ZDCDataAnalyzer.h.

89{};

◆ m_moduleAnalyzers

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

Definition at line 42 of file ZDCDataAnalyzer.h.

42{};

◆ m_moduleEnabled

ZDCModuleBoolArray ZDCDataAnalyzer::m_moduleEnabled {}
private

Definition at line 41 of file ZDCDataAnalyzer.h.

41{};

◆ m_moduleMask

unsigned int ZDCDataAnalyzer::m_moduleMask {0}
private

Definition at line 64 of file ZDCDataAnalyzer.h.

64{0};

◆ m_moduleStatus

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

Definition at line 66 of file ZDCDataAnalyzer.h.

66{};

◆ m_moduleSum

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

Definition at line 70 of file ZDCDataAnalyzer.h.

70{};

◆ m_moduleSumBkgdFrac

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

Definition at line 73 of file ZDCDataAnalyzer.h.

73{};

◆ m_moduleSumErrSq

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

Definition at line 71 of file ZDCDataAnalyzer.h.

71{};

◆ m_moduleSumPreSample

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

Definition at line 72 of file ZDCDataAnalyzer.h.

72{};

◆ m_msgFunc_p

ZDCMsg::MessageFunctionPtr ZDCDataAnalyzer::m_msgFunc_p
private

Definition at line 33 of file ZDCDataAnalyzer.h.

◆ m_NLcalibFactors

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

Definition at line 80 of file ZDCDataAnalyzer.h.

80{}; // 3 POL5s for each side

◆ m_NLcalibModSumBkgdFrac

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

Definition at line 84 of file ZDCDataAnalyzer.h.

84{};

◆ m_NLcalibModuleSum

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

Definition at line 82 of file ZDCDataAnalyzer.h.

82{};

◆ m_NLcalibModuleSumErrSq

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

Definition at line 83 of file ZDCDataAnalyzer.h.

83{};

◆ m_pedestals

ZDCModuleFloatArray ZDCDataAnalyzer::m_pedestals {}
private

Definition at line 47 of file ZDCDataAnalyzer.h.

47{};

◆ m_pulseAnalyzerConfig

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

Definition at line 35 of file ZDCDataAnalyzer.h.

35{};

◆ m_repassEnabled

bool ZDCDataAnalyzer::m_repassEnabled {false}
private

Definition at line 37 of file ZDCDataAnalyzer.h.

37{false};

◆ m_T0HGOffsetSplines

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

Definition at line 52 of file ZDCDataAnalyzer.h.

52{};

◆ m_T0LGOffsetSplines

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

Definition at line 53 of file ZDCDataAnalyzer.h.

53{};

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