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