ATLAS Offline Software
Loading...
Searching...
No Matches
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
15class MsgStream;
16
18private:
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
35public:
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 }
55 m_currentLB = lumiBlock;
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
void SetEffParamCorrCoeffs(const std::array< std::vector< TSpline3 * >, 2 > &effParamsCorrCoeffs)
std::pair< double, double > GetEfficiencyAndError(MsgStream &msg, int side, float ADCSum)
std::array< std::vector< double >, 2 > m_currentCorrCoefff
void SetEffParamsAndErrors(const std::array< std::vector< TSpline3 * >, 2 > &effParams, const std::array< std::vector< TSpline3 * >, 2 > &effParamErrors)
std::array< std::vector< TSpline3 * >, 2 > m_effParams
std::array< std::vector< double >, 2 > m_currentParams
double GetEfficiency(int side, float ADCSum)
std::array< std::vector< TSpline3 * >, 2 > m_effParamErrors
std::array< std::vector< double >, 2 > m_currentParamErrors
std::array< std::vector< TSpline3 * >, 2 > m_effParamCorrCoeffs
void UpdatelumiBlock(unsigned int lumiBlock)
MsgStream & msg
Definition testRead.cxx:32