ATLAS Offline Software
ZDCTriggerEfficiency.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_ZDCTRIGGEREFFICIENCY_H
6 #define ZDCANALYSIS_ZDCTRIGGEREFFICIENCY_H
7 
8 #include <TSpline.h>
9 #include <vector>
10 #include <array>
11 #include <algorithm> //std::max
12 #include <utility> //std::pair
13 #include <stdexcept> //std::runtime_error
14 
15 class MsgStream;
16 
18 private:
21 
22  unsigned int m_minLB;
23  unsigned int m_maxLB;
24 
25  unsigned int m_currentLB;
26 
27  std::array<std::vector<TSpline3*>, 2> m_effParams;
28  std::array<std::vector<TSpline3*>, 2> m_effParamErrors;
29  std::array<std::vector<TSpline3*>, 2> m_effParamCorrCoeffs;
30 
31  std::array<std::vector<double>, 2> m_currentParams;
32  std::array<std::vector<double>, 2> m_currentParamErrors;
33  std::array<std::vector<double>, 2> m_currentCorrCoefff;
34 
35 public:
36  void UpdatelumiBlock(unsigned int lumiBlock)
37  {
38  if (!m_haveParams) throw std::runtime_error("No params for trigger efficiency.");
39 
40  if (lumiBlock != m_currentLB) {
41  int newLB = std::max(std::min(lumiBlock, m_maxLB), m_minLB);
42  for (int side : {0, 1}) {
43  m_currentParams[side].clear();
44  m_currentParamErrors[side].clear();
45  m_currentCorrCoefff[side].clear();
46 
47  for (size_t ipar = 0; ipar < m_effParams[side].size(); ipar++) {
48  m_currentParams[side].push_back(m_effParams[side][ipar]->Eval(newLB));
49  m_currentParamErrors[side].push_back(m_effParamErrors[side][ipar]->Eval(newLB));
50 
51  if (m_haveCorrCoeffs) {
52  m_currentCorrCoefff[side].push_back(m_effParamCorrCoeffs[side][ipar]->Eval(newLB));
53  }
54  }
56  }
57  }
58  }
59 
60  ZDCTriggerEfficiency() : // in order, alpha-beta, alpha-theta, beta-theta
61  m_haveParams(false), m_haveCorrCoeffs(false),
62  m_minLB(0), m_maxLB(0), m_currentLB(0) {
63 
64  }
65 
66  void SetEffParamsAndErrors(const std::array<std::vector<TSpline3*>, 2>& effParams,
67  const std::array<std::vector<TSpline3*>, 2>& effParamErrors) {
68  for (int side : {0, 1}) {
69  m_effParams[side] = effParams[side];
70  m_effParamErrors[side] = effParamErrors[side];
71  }
72 
73  m_minLB = m_effParams[0][0]->GetXmin();
74  m_maxLB = m_effParams[0][0]->GetXmax();
75  m_haveParams = true;
76  }
77 
78  void SetEffParamCorrCoeffs(const std::array<std::vector<TSpline3*>, 2>& effParamsCorrCoeffs) {
79  for (int side : {0, 1}) {
80  m_effParamCorrCoeffs[side] = effParamsCorrCoeffs[side];
81  }
82 
83  m_haveCorrCoeffs = true;
84  }
85 
86  double GetEfficiency(int side, float ADCSum);
87 
88  std::pair<double, double> GetEfficiencyAndError(MsgStream& msg, int side, float ADCSum);
89 
90 };
91 
92 #endif
ZDCTriggerEfficiency::m_haveCorrCoeffs
bool m_haveCorrCoeffs
Definition: ZDCTriggerEfficiency.h:20
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
ZDCTriggerEfficiency::UpdatelumiBlock
void UpdatelumiBlock(unsigned int lumiBlock)
Definition: ZDCTriggerEfficiency.h:36
ZDCTriggerEfficiency::m_haveParams
bool m_haveParams
Definition: ZDCTriggerEfficiency.h:19
ZDCTriggerEfficiency::m_currentParamErrors
std::array< std::vector< double >, 2 > m_currentParamErrors
Definition: ZDCTriggerEfficiency.h:32
TRT::Hit::side
@ side
Definition: HitInfo.h:83
ZDCTriggerEfficiency::SetEffParamsAndErrors
void SetEffParamsAndErrors(const std::array< std::vector< TSpline3 * >, 2 > &effParams, const std::array< std::vector< TSpline3 * >, 2 > &effParamErrors)
Definition: ZDCTriggerEfficiency.h:66
ZDCTriggerEfficiency::ZDCTriggerEfficiency
ZDCTriggerEfficiency()
Definition: ZDCTriggerEfficiency.h:60
ZDCTriggerEfficiency::m_currentLB
unsigned int m_currentLB
Definition: ZDCTriggerEfficiency.h:25
ZDCTriggerEfficiency::m_effParamCorrCoeffs
std::array< std::vector< TSpline3 * >, 2 > m_effParamCorrCoeffs
Definition: ZDCTriggerEfficiency.h:29
ZDCTriggerEfficiency::m_maxLB
unsigned int m_maxLB
Definition: ZDCTriggerEfficiency.h:23
ZDCTriggerEfficiency::GetEfficiency
double GetEfficiency(int side, float ADCSum)
Definition: ZDCTriggerEfficiency.cxx:9
ZDCTriggerEfficiency::m_currentCorrCoefff
std::array< std::vector< double >, 2 > m_currentCorrCoefff
Definition: ZDCTriggerEfficiency.h:33
ZDCTriggerEfficiency::SetEffParamCorrCoeffs
void SetEffParamCorrCoeffs(const std::array< std::vector< TSpline3 * >, 2 > &effParamsCorrCoeffs)
Definition: ZDCTriggerEfficiency.h:78
lumiFormat.array
array
Definition: lumiFormat.py:91
ZDCTriggerEfficiency
Definition: ZDCTriggerEfficiency.h:17
ZDCTriggerEfficiency::m_effParams
std::array< std::vector< TSpline3 * >, 2 > m_effParams
Definition: ZDCTriggerEfficiency.h:27
ZDCTriggerEfficiency::m_currentParams
std::array< std::vector< double >, 2 > m_currentParams
Definition: ZDCTriggerEfficiency.h:31
ZDCTriggerEfficiency::m_minLB
unsigned int m_minLB
Definition: ZDCTriggerEfficiency.h:22
ZDCTriggerEfficiency::m_effParamErrors
std::array< std::vector< TSpline3 * >, 2 > m_effParamErrors
Definition: ZDCTriggerEfficiency.h:28
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:328
ZDCTriggerEfficiency::GetEfficiencyAndError
std::pair< double, double > GetEfficiencyAndError(MsgStream &msg, int side, float ADCSum)
Definition: ZDCTriggerEfficiency.cxx:23
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7