Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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  std::array<float, 2> m_averageTime{};
79  std::array<bool, 2> m_fail{};
80 
81  std::array<std::array<float, 4>, 2> m_moduleAmpFractionLG{};
82 
83 public:
84 
85  ZDCDataAnalyzer(ZDCMsg::MessageFunctionPtr messageFunc_p, int nSample, float deltaTSample,
86  size_t preSampleIdx, std::string fitFunction,
87  const ZDCModuleIntArray& peak2ndDerivMinSamples,
88  const ZDCModuleFloatArray& peak2ndDerivMinThresholdsHG,
89  const ZDCModuleFloatArray& peak2ndDerivMinThresholdsLG,
90  unsigned int LGMode = ZDCPulseAnalyzer::LGModeNormal);
91 
92  ~ZDCDataAnalyzer();
93 
94  void enableDelayed(float deltaT, const ZDCModuleFloatArray& undelayedDelayedPedestalDiff);
95  void enableDelayed(const ZDCModuleFloatArray& delayDeltaT, const ZDCModuleFloatArray& undelayedDelayedPedestalDiff);
96 
97  void enableRepass(const ZDCModuleFloatArray& peak2ndDerivMinRepassHG, const ZDCModuleFloatArray& peak2ndDerivMinRepassLG);
98 
99  void enablePreExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray& HGADCThresh, const ZDCModuleIntArray& LGADCThresh);
100  void enablePreExclusion(unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh);
101 
102  void enablePostExclusion(unsigned int maxSamplesExcl, const ZDCModuleIntArray& HGADCThresh, const ZDCModuleIntArray& LGADCThresh);
103  void enablePostExclusion(unsigned int maxSamplesExcl, unsigned int HGADCThresh, unsigned int LGADCThresh);
104 
105  bool ModuleDisabled(unsigned int side, unsigned int module) const {return m_moduleDisabled[side][module];}
106 
107  unsigned int GetModuleMask() const {return m_moduleMask;}
108 
109  float GetModuleSum(size_t side) const {return m_moduleSum.at(side);}
110  float GetModuleSumErr(size_t side) const {return std::sqrt(m_moduleSumErrSq.at(side));}
111  float GetSideBkgdFrac(size_t side) const {return m_moduleSumBkgdFrac.at(side);}
112 
113  float GetCalibModuleSum(size_t side) const {return m_calibModuleSum.at(side);}
114  float GetCalibModuleSumErr(size_t side) const {return std::sqrt(m_calibModuleSumErrSq.at(side));}
115  float GetSideCalibBkgdFrac(size_t side) const {return m_calibModSumBkgdFrac.at(side);}
116 
117  float GetModuleSumPreSample(size_t side) const {return m_moduleSumPreSample.at(side);}
118 
119  float GetAverageTime(size_t side) const {return m_averageTime.at(side);}
120  bool SideFailed(size_t side) const {return m_fail.at(side);}
121 
122  float GetModuleAmplitude(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetAmplitude();}
123  float GetModuleTime(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetT0Corr();}
124  float GetModuleChisq(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetChisq();}
125 
126  float GetModuleCalibAmplitude(size_t side, size_t module) const {return m_calibAmplitude.at(side).at(module);}
127  float GetModuleCalibTime(size_t side, size_t module) const {return m_calibTime.at(side).at(module);}
128  float GetModuleStatus(size_t side, size_t module) const {return m_moduleStatus.at(side).at(module);}
129 
130  float GetdelayedBS(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module)->GetdelayBS();}
131 
132  const ZDCPulseAnalyzer* GetPulseAnalyzer(size_t side, size_t module) const {return m_moduleAnalyzers.at(side).at(module).get();}
133 
134  bool disableModule(size_t side, size_t module);
135 
136  void set2ndDerivStep(size_t step);
137 
138  void SetGainFactorsHGLG(float gainFactorHG, float gainFactorLG);
139 
140  void SetGainFactorsHGLG(const ZDCModuleFloatArray& gainFactorsHG, const ZDCModuleFloatArray& gainFactorsLG);
141 
142  void SetPeak2ndDerivMinTolerances(size_t tolerance);
143 
144  void SetFitTimeMax(float tmax);
145 
146  void SetSaveFitFunc(bool save);
147 
148  void SetADCOverUnderflowValues(const ZDCModuleFloatArray& HGOverflowADC, const ZDCModuleFloatArray& HGUnderflowADC,
149  const ZDCModuleFloatArray& LGOverflowADC);
150 
151  void SetNoiseSigmas(const ZDCModuleFloatArray& noiseSigmasHG, const ZDCModuleFloatArray& noiseSigmasLG);
152 
153  void SetTauT0Values(const ZDCModuleBoolArray& fxiTau1, const ZDCModuleBoolArray& fxiTau2,
154  const ZDCModuleFloatArray& tau1, const ZDCModuleFloatArray& tau2,
155  const ZDCModuleFloatArray& t0HG, const ZDCModuleFloatArray& t0LG);
156 
157  void SetFitMinMaxAmpValues(const ZDCModuleFloatArray& minAmpHG, const ZDCModuleFloatArray& minAmpLG,
158  const ZDCModuleFloatArray& maxAmpHG, const ZDCModuleFloatArray& maxAmpLG);
159 
160  void SetFitMinMaxAmpValues(float minHG, float minLG, float maxHG, float maxLG);
161 
162  void SetCutValues(const ZDCModuleFloatArray& chisqDivAmpCutHG, const ZDCModuleFloatArray& chisqDivAmpCutLG,
163  const ZDCModuleFloatArray& deltaT0MinHG, const ZDCModuleFloatArray& deltaT0MaxHG,
164  const ZDCModuleFloatArray& deltaT0MinLG, const ZDCModuleFloatArray& deltaT0MaxLG);
165 
166 
167  void SetTimingCorrParams(ZDCPulseAnalyzer::TimingCorrMode mode, float refADC, float refScale,
168  const std::array<std::array<std::vector<float>, 4>, 2>& HGParamArr,
169  const std::array<std::array<std::vector<float>, 4>, 2>& LGParamArr);
170 
171  void SetNonlinCorrParams(float refADC, float refScale,
172  const std::array<std::array<std::vector<float>, 4>, 2>& HGNonlinCorrParams,
173  const std::array<std::array<std::vector<float>, 4>, 2>& LHGNonlinCorrParams);
174 
175  void SetModuleAmpFractionLG(const ZDCDataAnalyzer::ZDCModuleFloatArray& moduleAmpFractionLG);
176 
177 
178  void enableTimeSigCut(bool AND, float sigCut, const std::string& TF1String,
179  const std::array<std::array<std::vector<double>, 4>, 2>& parsHGArr,
180  const std::array<std::array<std::vector<double>, 4>, 2>& parsLGArr);
181 
182  void enableFADCCorrections(bool correctPerSample,
183  std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& correHistHG,
184  std::array<std::array<std::unique_ptr<const TH1>, 4>, 2>& correHistLG);
185 
186  void disableFADCCorrections();
187 
188  void LoadEnergyCalibrations(std::array<std::array<std::unique_ptr<TSpline>, 4>, 2>& calibSplines)
189  {
190  (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading energy calibrations");
191 
192  m_LBDepEcalibSplines = std::move (calibSplines);
193  m_haveECalib = true;
194  }
195 
196  void LoadT0Calibrations(std::array<std::array<std::unique_ptr<TSpline>, 4>, 2>& T0HGOffsetSplines,
197  std::array<std::array<std::unique_ptr<TSpline>, 4>, 2>& T0LGOffsetSplines)
198  {
199  (*m_msgFunc_p)(ZDCMsg::Verbose, "Loading timing calibrations");
200 
201  m_T0HGOffsetSplines = std::move (T0HGOffsetSplines);
202  m_T0LGOffsetSplines = std::move (T0LGOffsetSplines);
203 
204  m_haveT0Calib = true;
205  }
206 
207  void StartEvent(int lumiBlock);
208 
209  void LoadAndAnalyzeData(size_t side, size_t module, const std::vector<float>& HGSamples, const std::vector<float>& LGSamples);
210 
211  void LoadAndAnalyzeData(size_t side, size_t module, const std::vector<float>& HGSamples, const std::vector<float>& LGSamples,
212  const std::vector<float>& HGSamplesDelayed, const std::vector<float>& LGSamplesDelayed);
213 
214  bool FinishEvent();
215 
216 };
217 #endif
ZDCDataAnalyzer::GetSideCalibBkgdFrac
float GetSideCalibBkgdFrac(size_t side) const
Definition: ZDCDataAnalyzer.h:115
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:128
ZDCDataAnalyzer::GetModuleSumPreSample
float GetModuleSumPreSample(size_t side) const
Definition: ZDCDataAnalyzer.h:117
ZDCDataAnalyzer::GetModuleTime
float GetModuleTime(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:123
ZDCDataAnalyzer::GetModuleChisq
float GetModuleChisq(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:124
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:120
ZDCDataAnalyzer::GetdelayedBS
float GetdelayedBS(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:130
ZDCDataAnalyzer::ZDCModuleIntArray
std::array< std::array< int, 4 >, 2 > ZDCModuleIntArray
Definition: ZDCDataAnalyzer.h:24
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:122
ZDCDataAnalyzer::m_msgFunc_p
ZDCMsg::MessageFunctionPtr m_msgFunc_p
Definition: ZDCDataAnalyzer.h:27
ZDCDataAnalyzer::GetCalibModuleSumErr
float GetCalibModuleSumErr(size_t side) const
Definition: ZDCDataAnalyzer.h:114
ZDCDataAnalyzer::LoadEnergyCalibrations
void LoadEnergyCalibrations(std::array< std::array< std::unique_ptr< TSpline >, 4 >, 2 > &calibSplines)
Definition: ZDCDataAnalyzer.h:188
ZDCDataAnalyzer::GetModuleCalibTime
float GetModuleCalibTime(size_t side, size_t module) const
Definition: ZDCDataAnalyzer.h:127
TRT::Hit::side
@ side
Definition: HitInfo.h:83
ZDCDataAnalyzer::GetModuleMask
unsigned int GetModuleMask() const
Definition: ZDCDataAnalyzer.h:107
ZDCDataAnalyzer
Definition: ZDCDataAnalyzer.h:20
ZDCDataAnalyzer::GetSideBkgdFrac
float GetSideBkgdFrac(size_t side) const
Definition: ZDCDataAnalyzer.h:111
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:178
ZDCDataAnalyzer::GetModuleSumErr
float GetModuleSumErr(size_t side) const
Definition: ZDCDataAnalyzer.h:110
ZDCDataAnalyzer::GetModuleSum
float GetModuleSum(size_t side) const
Definition: ZDCDataAnalyzer.h:109
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:126
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:196
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:132
ZDCMsg::MessageFunctionPtr
std::shared_ptr< MessageFunction > MessageFunctionPtr
Definition: ZDCMsg.h:14
ZDCDataAnalyzer::GetCalibModuleSum
float GetCalibModuleSum(size_t side) const
Definition: ZDCDataAnalyzer.h:113
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:105
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
checker_macros.h
Define macros for attributes used to control the static checker.
ZDCDataAnalyzer::GetAverageTime
float GetAverageTime(size_t side) const
Definition: ZDCDataAnalyzer.h:119