ATLAS Offline Software
ZDCDataAnalyzer.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ZDCANALYSIS_ZDCDataAnalyzer_h
6 #define ZDCANALYSIS_ZDCDataAnalyzer_h
7 
9 #include "ZdcAnalysis/ZDCMsg.h"
10 #include "TSpline.h"
11 
12 #include <array>
13 #include <string>
14 #include <memory>
15 
17 
18 
20 {
21 public:
22  typedef std::array<std::array<float, 4>, 2> ZDCModuleFloatArray;
23  typedef std::array<std::array<bool, 4>, 2> ZDCModuleBoolArray;
24  typedef std::array<std::array<int, 4>, 2> ZDCModuleIntArray;
25 
26 private:
28  size_t m_nSample{};
29  float m_deltaTSample{};
30  size_t m_preSampleIdx{};
31  std::string m_fitFunction;
32  unsigned int m_LGMode{};
33 
34  bool m_repassEnabled{};
35 
36  std::array<std::array<int, 4>, 2> m_delayedOrder{};
37 
38  ZDCModuleBoolArray m_moduleDisabled{};
39  std::array<std::array<std::unique_ptr<ZDCPulseAnalyzer>, 4>, 2> m_moduleAnalyzers{};
40 
41  int m_eventCount{};
42 
43  ZDCModuleFloatArray m_HGGains{};
44  ZDCModuleFloatArray m_pedestals{};
45 
46  bool m_haveECalib{};
47  std::array<std::array<std::unique_ptr<TSpline>, 4>, 2> m_LBDepEcalibSplines{};
48 
49  bool m_haveT0Calib{};
50  std::array<std::array<std::unique_ptr<TSpline>, 4>, 2> m_T0HGOffsetSplines{};
51  std::array<std::array<std::unique_ptr<TSpline>, 4>, 2> m_T0LGOffsetSplines{};
52 
53  // Transient data that is updated each LB or each event
54  //
55  int m_currentLB{};
56  ZDCModuleFloatArray m_currentECalibCoeff{};
57  ZDCModuleFloatArray m_currentT0OffsetsHG{};
58  ZDCModuleFloatArray m_currentT0OffsetsLG{};
59 
60  std::array<std::array<bool, 4>, 2> m_dataLoaded{};
61  // std::array<std::array<bool, 4>, 2> _moduleFail;
62 
63  unsigned int m_moduleMask;
64 
65  std::array<std::array<unsigned int, 4>, 2> m_moduleStatus{};
66  std::array<std::array<float, 4>, 2> m_calibAmplitude{};
67  std::array<std::array<float, 4>, 2> m_calibTime{};
68 
69  std::array<float, 2> m_moduleSum{};
70  std::array<float, 2> m_moduleSumErrSq{};
71  std::array<float, 2> m_moduleSumPreSample{};
72  std::array<float, 2> m_moduleSumBkgdFrac{};
73 
74  std::array<float, 2> m_calibModuleSum{};
75  std::array<float, 2> m_calibModuleSumErrSq{};
76  std::array<float, 2> m_calibModSumBkgdFrac{};
77 
78  bool m_haveNLcalib{};
79  std::array< std::array< std::array<float,6>, 3>, 2> m_NLcalibFactors{}; // 3 POL5s for each side
80 
81  std::array<float, 2> m_NLcalibModuleSum{};
82  std::array<float, 2> m_NLcalibModuleSumErrSq{};
83  std::array<float, 2> m_NLcalibModSumBkgdFrac{};
84 
85  std::array<float, 2> m_averageTime{};
86  std::array<bool, 2> m_fail{};
87 
88  std::array<std::array<float, 4>, 2> m_moduleAmpFractionLG{};
89 
90 public:
91 
92  ZDCDataAnalyzer(ZDCMsg::MessageFunctionPtr messageFunc_p, int nSample, float deltaTSample,
93  size_t preSampleIdx, std::string fitFunction,
94  const ZDCModuleIntArray& peak2ndDerivMinSamples,
95  const ZDCModuleFloatArray& peak2ndDerivMinThresholdsHG,
96  const ZDCModuleFloatArray& peak2ndDerivMinThresholdsLG,
97  unsigned int LGMode = ZDCPulseAnalyzer::LGModeNormal);
98 
99  ~ZDCDataAnalyzer();
100 
101  void enableDelayed(float deltaT, const ZDCModuleFloatArray& undelayedDelayedPedestalDiff);
102  void enableDelayed(const ZDCModuleFloatArray& delayDeltaT, const ZDCModuleFloatArray& undelayedDelayedPedestalDiff);
103 
104  void enableRepass(const ZDCModuleFloatArray& peak2ndDerivMinRepassHG, const ZDCModuleFloatArray& peak2ndDerivMinRepassLG);
105 
106  void enablePreExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray& HGADCThresh, const ZDCModuleIntArray& LGADCThresh);
107  void enablePreExclusion(unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh);
108 
109  void enablePostExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray& HGADCThresh, const ZDCModuleIntArray& LGADCThresh);
110  void enablePostExclusion(unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh);
111 
112  bool ModuleDisabled(unsigned int side, unsigned int module) const {return m_moduleDisabled[side][module];}
113 
114  unsigned int GetModuleMask() const {return m_moduleMask;}
115 
116  float GetModuleSum(size_t side) const {return m_moduleSum.at(side);}
117  float GetModuleSumErr(size_t side) const {return std::sqrt(m_moduleSumErrSq.at(side));}
118  float GetSideBkgdFrac(size_t side) const {return m_moduleSumBkgdFrac.at(side);}
119 
120  float GetCalibModuleSum(size_t side) const {return m_calibModuleSum.at(side);}
121  float GetCalibModuleSumErr(size_t side) const {return std::sqrt(m_calibModuleSumErrSq.at(side));}
122  float GetSideCalibBkgdFrac(size_t side) const {return m_calibModSumBkgdFrac.at(side);}
123 
124  void DoNLcalibModuleSum();
125  float GetNLcalibModuleSum(size_t side) const {return m_NLcalibModuleSum.at(side);}
126  float GetNLcalibModuleSumErr(size_t side) const {return std::sqrt(m_NLcalibModuleSumErrSq.at(side));}
127 
128  float GetModuleSumPreSample(size_t side) const {return m_moduleSumPreSample.at(side);}
129 
130  float GetAverageTime(size_t side) const {return m_averageTime.at(side);}
131  bool SideFailed(size_t side) const {return m_fail.at(side);}
132 
133  float GetModuleAmplitude(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetAmplitude();}
134  float GetModuleTime(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetT0Corr();}
135  float GetModuleChisq(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetChisq();}
136 
137  float GetModuleCalibAmplitude(size_t side, size_t module) const {return m_calibAmplitude.at(side).at(module);}
138  float GetModuleCalibTime(size_t side, size_t module) const {return m_calibTime.at(side).at(module);}
139  float GetModuleStatus(size_t side, size_t module) const {return m_moduleStatus.at(side).at(module);}
140 
141  float GetdelayedBS(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetdelayBS();}
142 
143  const ZDCPulseAnalyzer* GetPulseAnalyzer(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module).get();}
144 
145  bool disableModule(size_t side, size_t module);
146 
147  void set2ndDerivStep(size_t step);
148 
149  void SetGainFactorsHGLG(float gainFactorHG, float gainFactorLG);
150 
151  void SetGainFactorsHGLG(const ZDCModuleFloatArray& gainFactorsHG, const ZDCModuleFloatArray& gainFactorsLG);
152 
153  void SetPeak2ndDerivMinTolerances(size_t tolerance);
154 
155  void SetFitTimeMax(float tmax);
156 
157  void SetSaveFitFunc(bool save);
158 
159  void SetADCOverUnderflowValues(const ZDCModuleFloatArray& HGOverflowADC, const ZDCModuleFloatArray& HGUnderflowADC,
160  const ZDCModuleFloatArray& LGOverflowADC);
161 
162  void SetNoiseSigmas(const ZDCModuleFloatArray& noiseSigmasHG, const ZDCModuleFloatArray& noiseSigmasLG);
163 
164  void SetTauT0Values(const ZDCModuleBoolArray& fxiTau1, const ZDCModuleBoolArray& fxiTau2,
165  const ZDCModuleFloatArray& tau1, const ZDCModuleFloatArray& tau2,
166  const ZDCModuleFloatArray& t0HG, const ZDCModuleFloatArray& t0LG);
167 
168  void SetFitMinMaxAmpValues(const ZDCModuleFloatArray& minAmpHG, const ZDCModuleFloatArray& minAmpLG,
169  const ZDCModuleFloatArray& maxAmpHG, const ZDCModuleFloatArray& maxAmpLG);
170 
171  void SetFitMinMaxAmpValues(float minHG, float minLG, float maxHG, float maxLG);
172 
173  void SetCutValues(const ZDCModuleFloatArray& chisqDivAmpCutHG, const ZDCModuleFloatArray& chisqDivAmpCutLG,
174  const ZDCModuleFloatArray& deltaT0MinHG, const ZDCModuleFloatArray& deltaT0MaxHG,
175  const ZDCModuleFloatArray& deltaT0MinLG, const ZDCModuleFloatArray& deltaT0MaxLG);
176 
177 
178  void SetTimingCorrParams(ZDCPulseAnalyzer::TimingCorrMode mode, float refADC, float refScale,
179  const std::array<std::array<std::vector<float>, 4>, 2>& HGParamArr,
180  const std::array<std::array<std::vector<float>, 4>, 2>& LGParamArr);
181 
182  void SetNonlinCorrParams(float refADC, float refScale,
183  const std::array<std::array<std::vector<float>, 4>, 2>& HGNonlinCorrParams,
184  const std::array<std::array<std::vector<float>, 4>, 2>& LHGNonlinCorrParams);
185 
186  void SetNLcalibParams(std::array< std::array< std::array<float,6>, 3>, 2>& nlcalibParams);
187 
188  void SetModuleAmpFractionLG(const ZDCDataAnalyzer::ZDCModuleFloatArray& moduleAmpFractionLG);
189 
190 
191  void enableTimeSigCut(bool AND, float sigCut, const std::string& TF1String,
192  const std::array<std::array<std::vector<double>, 4>, 2>& parsHGArr,
193  const std::array<std::array<std::vector<double>, 4>, 2>& parsLGArr);
194 
195  void enableFADCCorrections(bool correctPerSample,
196  std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& correHistHG,
197  std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& correHistLG);
198 
199  void disableFADCCorrections();
200 
201  void LoadEnergyCalibrations(std::array<std::array<std::unique_ptr<TSpline>, 4>, 2>& calibSplines)
202  {
203  (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading energy calibrations");
204 
205  m_LBDepEcalibSplines = std::move (calibSplines);
206  m_haveECalib = true;
207  }
208 
209  void LoadT0Calibrations(std::array<std::array<std::unique_ptr<TSpline>, 4>, 2>& T0HGOffsetSplines,
210  std::array<std::array<std::unique_ptr<TSpline>, 4>, 2>& T0LGOffsetSplines)
211  {
212  (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading timing calibrations");
213 
214  m_T0HGOffsetSplines = std::move (T0HGOffsetSplines);
215  m_T0LGOffsetSplines = std::move (T0LGOffsetSplines);
216 
217  m_haveT0Calib = true;
218  }
219 
220  void StartEvent(int lumiBlock);
221 
222  void LoadAndAnalyzeData(size_t side, size_t module, const std::vector<float>& HGSamples, const std::vector<float>& LGSamples);
223 
224  void LoadAndAnalyzeData(size_t side, size_t module, const std::vector<float>& HGSamples, const std::vector<float>& LGSamples,
225  const std::vector<float>& HGSamplesDelayed, const std::vector<float>& LGSamplesDelayed);
226 
227  bool FinishEvent();
228 
229 };
230 #endif
ZDCDataAnalyzer::GetSideCalibBkgdFrac
float GetSideCalibBkgdFrac(size_t side) const
Definition: ZDCDataAnalyzer.h:122
ZDCDataAnalyzer::m_moduleMask
unsigned int m_moduleMask
Definition: ZDCDataAnalyzer.h:63
ZDCDataAnalyzer::GetModuleStatus
float GetModuleStatus(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:139
ZDCDataAnalyzer::GetModuleSumPreSample
float GetModuleSumPreSample(size_t side) const
Definition: ZDCDataAnalyzer.h:128
ZDCDataAnalyzer::GetModuleTime
float GetModuleTime(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:134
ZDCDataAnalyzer::GetModuleChisq
float GetModuleChisq(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:135
ATLAS_NOT_THREAD_SAFE
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
Definition: checker_macros.h:212
ZDCPulseAnalyzer.h
ZDCDataAnalyzer::ZDCModuleFloatArray
std::array< std::array< float, 4 >, 2 > ZDCModuleFloatArray
Definition: ZDCDataAnalyzer.h:22
ZDCDataAnalyzer::SideFailed
bool SideFailed(size_t side) const
Definition: ZDCDataAnalyzer.h:131
ZDCDataAnalyzer::GetdelayedBS
float GetdelayedBS(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:141
ZDCDataAnalyzer::ZDCModuleIntArray
std::array< std::array< int, 4 >, 2 > ZDCModuleIntArray
Definition: ZDCDataAnalyzer.h:24
ZDCDataAnalyzer::GetNLcalibModuleSumErr
float GetNLcalibModuleSumErr(size_t side) const
Definition: ZDCDataAnalyzer.h:126
Root::AND
@ AND
Definition: TGRLCollection.h:32
ZDCPulseAnalyzer
Definition: ZDCPulseAnalyzer.h:22
ZDCDataAnalyzer::GetModuleAmplitude
float GetModuleAmplitude(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:133
ZDCDataAnalyzer::m_msgFunc_p
ZDCMsg::MessageFunctionPtr m_msgFunc_p
Definition: ZDCDataAnalyzer.h:27
ZDCDataAnalyzer::GetCalibModuleSumErr
float GetCalibModuleSumErr(size_t side) const
Definition: ZDCDataAnalyzer.h:121
ZDCDataAnalyzer::LoadEnergyCalibrations
void LoadEnergyCalibrations(std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &calibSplines)
Definition: ZDCDataAnalyzer.h:201
ZDCDataAnalyzer::GetModuleCalibTime
float GetModuleCalibTime(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:138
TRT::Hit::side
@ side
Definition: HitInfo.h:83
ZDCDataAnalyzer::GetModuleMask
unsigned int GetModuleMask() const
Definition: ZDCDataAnalyzer.h:114
ZDCDataAnalyzer
Definition: ZDCDataAnalyzer.h:20
ZDCDataAnalyzer::GetSideBkgdFrac
float GetSideBkgdFrac(size_t side) const
Definition: ZDCDataAnalyzer.h:118
python.PyAthena.module
module
Definition: PyAthena.py:131
ZDCMsg::Verbose
@ Verbose
Definition: ZDCMsg.h:18
checkTP.save
def save(self, fileName="./columbo.out")
Definition: checkTP.py:176
ZDCDataAnalyzer::GetModuleSumErr
float GetModuleSumErr(size_t side) const
Definition: ZDCDataAnalyzer.h:117
ZDCDataAnalyzer::GetModuleSum
float GetModuleSum(size_t side) const
Definition: ZDCDataAnalyzer.h:116
ZDCDataAnalyzer::m_fitFunction
std::string m_fitFunction
Definition: ZDCDataAnalyzer.h:31
ZDCDataAnalyzer::GetModuleCalibAmplitude
float GetModuleCalibAmplitude(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:137
Preparation.mode
mode
Definition: Preparation.py:107
ZDCDataAnalyzer::LoadT0Calibrations
void LoadT0Calibrations(std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &T0HGOffsetSplines, std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &T0LGOffsetSplines)
Definition: ZDCDataAnalyzer.h:209
ZDCPulseAnalyzer::TimingCorrMode
TimingCorrMode
Definition: ZDCPulseAnalyzer.h:57
ZDCMsg.h
lumiFormat.array
array
Definition: lumiFormat.py:91
tolerance
Definition: suep_shower.h:17
ZDCDataAnalyzer::GetPulseAnalyzer
const ZDCPulseAnalyzer * GetPulseAnalyzer(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:143
ZDCMsg::MessageFunctionPtr
std::shared_ptr< MessageFunction > MessageFunctionPtr
Definition: ZDCMsg.h:14
ZDCDataAnalyzer::GetCalibModuleSum
float GetCalibModuleSum(size_t side) const
Definition: ZDCDataAnalyzer.h:120
ZDCDataAnalyzer::ZDCModuleBoolArray
std::array< std::array< bool, 4 >, 2 > ZDCModuleBoolArray
Definition: ZDCDataAnalyzer.h:23
ZDCPulseAnalyzer::LGModeNormal
@ LGModeNormal
Definition: ZDCPulseAnalyzer.h:52
LArCellBinning.step
step
Definition: LArCellBinning.py:158
ZDCDataAnalyzer::ModuleDisabled
bool ModuleDisabled(unsigned int side, unsigned int module) const
Definition: ZDCDataAnalyzer.h:112
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:328
checker_macros.h
Define macros for attributes used to control the static checker.
ZDCDataAnalyzer::GetNLcalibModuleSum
float GetNLcalibModuleSum(size_t side) const
Definition: ZDCDataAnalyzer.h:125
ZDCDataAnalyzer::GetAverageTime
float GetAverageTime(size_t side) const
Definition: ZDCDataAnalyzer.h:130