ATLAS Offline Software
Loading...
Searching...
No Matches
TElectronEfficiencyCorrectionTool.h
Go to the documentation of this file.
1// Dear emacs, this is -*- c++ -*-
2/*
3 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4*/
5
6#ifndef ELECTRONEFFICIENCYCORRECTION_TELECTRONEFFICIENCYCORRECTIONTOOL_H
7#define ELECTRONEFFICIENCYCORRECTION_TELECTRONEFFICIENCYCORRECTIONTOOL_H
8
18
19// STL includes
20#include <array>
21#include <map>
22#include <memory>
23#include <string>
24#include <vector>
25// ROOT includes
26#include "TH1.h"
27#include "TH2.h"
28#include "TObjArray.h"
29#include "TRandom3.h"
30// Core includes
33
34namespace Root {
36{
37public:
38 //We want to have unique ownership of the Histos
39 using HistArray = std::vector<std::unique_ptr<TH1>>;
40
41 // The Result
42 struct Result {
43 double SF = 0;
44 double Total = 0;
45 double Stat = 0;
46 double UnCorr = 0;
47 std::vector<double> Corr{};
48 std::vector<double> toys{};
49 int histIndex = -1;
50 int histBinNum = -1;
51 };
52
55 const char* name = "TElectronEfficiencyCorrectionTool");
56
59
66 inline void addFileName(const std::string& val) {
67 m_corrFileNameList.push_back(val);
68 }
69
71 inline void bookToyMCScaleFactors(const int nToyMC) {
72 m_doToyMC = true;
73 m_nToyMC = nToyMC;
74 }
75 inline void bookCombToyMCScaleFactors(const int nToyMC) {
76 m_doCombToyMC = true;
77 m_nToyMC = nToyMC;
78 }
79
80 int initialize();
81
96 const unsigned int runnumber,
97 const double cluster_eta,
98 const double et, /* in MeV */
100 const bool onlyTotal = false) const;
101
104 int getNbins(std::map<float, std::vector<float>>& ptEta) const;
105
107 inline int getNSyst() const { return m_nSysMax; }
108
110 inline void setSeed(const unsigned long int seed) { m_seed = seed; }
111
114
115private:
116 // Private methods
118 int getHistograms();
119
120 int setupHistogramsInFolder(const TObjArray& dirNameArray, int lastIdx);
121
122 bool setupUncorrToySyst(std::vector<std::vector<TH1*>>& objs,
123 std::vector<std::vector<TH1*>>& sysObjs,
124 std::vector<std::vector<HistArray>>& uncorrToyMCSyst);
125
126 std::vector<HistArray> buildToyMCTable(
127 const std::vector<TH1*>& sf,
128 const std::vector<TH1*>& eig,
129 const std::vector<TH1*>& stat,
130 const std::vector<TH1*>& uncorr,
131 const std::vector<std::vector<TH1*>>& corr);
132
133 std::vector<TH2*> buildSingleToyMC(const TH1* sf,
134 const TH1* stat,
135 const TH1* uncorr,
136 const std::vector<TH1*>& corr,
137 int& randomCounter);
138
139 TH2* buildSingleCombToyMC(const TH1* sf,
140 const TH1* stat,
141 const TH1* uncorr,
142 const std::vector<TH1*>& corr,
143 const int nSys,
144 int& randomCounter);
145
146 void setupTempMapsHelper(TH1* obj,
147 std::vector<std::vector<TH1*>>& objs,
148 std::vector<std::vector<TH1*>>& sysObjs,
149 int& seenSystematics);
150
153 int setup(const std::vector<TH1*>& hists,
154 std::vector<HistArray>& histList,
155 std::vector<unsigned int>& beginRunNumberList,
156 std::vector<unsigned int>& endRunNumberList,
157 const int runNumBegin,
158 const int runNumEnd) const;
159
160 struct HistEdge {
161 double etaMax = 0;
162 double etaMin = 0;
163 double etMax = 0;
164 double etMin = 0;
165 bool isLowPt = false;
166 };
167
168 static void fillHistEdges(const std::vector<HistArray>& sfPerPeriodHist,
169 std::vector<std::vector<HistEdge>>& sfPerPeriodEdges) ;
170
177 unsigned long int m_seed;
180 // The representation of the prepared toy SF tables
181 std::vector<std::vector<HistArray>> m_uncorrToyMCSystFull;
182 std::vector<std::vector<HistArray>> m_uncorrToyMCSystFast;
184 std::vector<std::string> m_corrFileNameList;
186 std::vector<unsigned int> m_begRunNumberList;
189 std::vector<unsigned int> m_endRunNumberList;
191 std::vector<unsigned int> m_begRunNumberListFastSim;
194 std::vector<unsigned int> m_endRunNumberListFastSim;
196 std::vector<std::vector<HistArray>> m_histList;
197 std::vector<std::vector<HistEdge>> m_histEdges;
198 std::vector<std::vector<HistArray>> m_sysList;
200 std::vector<std::vector<HistArray>> m_fastHistList;
201 std::vector<std::vector<HistEdge>> m_fastHistEdges;
202 std::vector<std::vector<HistArray>> m_fastSysList;
203 // The Random generator class
204 TRandom3 m_Rndm;
205 }; // End: class definition
206} // End: namespace Root
207
208#endif
std::vector< unsigned int > m_begRunNumberList
List of run numbers where histograms become valid for full simulation.
static void fillHistEdges(const std::vector< HistArray > &sfPerPeriodHist, std::vector< std::vector< HistEdge > > &sfPerPeriodEdges)
~TElectronEfficiencyCorrectionTool()=default
Standard destructor.
void setSeed(const unsigned long int seed)
Set the Random Seed.
int setupHistogramsInFolder(const TObjArray &dirNameArray, int lastIdx)
std::vector< std::vector< HistEdge > > m_fastHistEdges
std::vector< std::vector< HistArray > > m_fastSysList
std::vector< std::vector< HistArray > > m_uncorrToyMCSystFull
std::vector< std::string > m_corrFileNameList
The list of file name(s)
bool setupUncorrToySyst(std::vector< std::vector< TH1 * > > &objs, std::vector< std::vector< TH1 * > > &sysObjs, std::vector< std::vector< HistArray > > &uncorrToyMCSyst)
bool uncorrEmpty(const PATCore::ParticleDataType::DataType dataType)
Check if stat+uncorr has input.
void bookToyMCScaleFactors(const int nToyMC)
Running these before the initialize will setup the booking of toys.
TH2 * buildSingleCombToyMC(const TH1 *sf, const TH1 *stat, const TH1 *uncorr, const std::vector< TH1 * > &corr, const int nSys, int &randomCounter)
std::vector< unsigned int > m_begRunNumberListFastSim
List of run numbers where histograms become valid for fast simulation.
std::vector< std::vector< HistArray > > m_fastHistList
List of histograms for fast simulation.
std::vector< HistArray > buildToyMCTable(const std::vector< TH1 * > &sf, const std::vector< TH1 * > &eig, const std::vector< TH1 * > &stat, const std::vector< TH1 * > &uncorr, const std::vector< std::vector< TH1 * > > &corr)
int getNbins(std::map< float, std::vector< float > > &ptEta) const
Helpers to get the binning of the uncertainties in a std::map (pt, eta)
std::vector< unsigned int > m_endRunNumberListFastSim
List of run numbers where histograms stop being valid for fast simulation.
std::vector< std::vector< HistArray > > m_sysList
int calculate(const PATCore::ParticleDataType::DataType dataType, const unsigned int runnumber, const double cluster_eta, const double et, Result &result, const bool onlyTotal=false) const
The main calculate method: dataType PATCore::ParticleDataType::DataType (e.g DATA,...
std::vector< TH2 * > buildSingleToyMC(const TH1 *sf, const TH1 *stat, const TH1 *uncorr, const std::vector< TH1 * > &corr, int &randomCounter)
TElectronEfficiencyCorrectionTool(const char *name="TElectronEfficiencyCorrectionTool")
Standard constructor.
std::vector< unsigned int > m_endRunNumberList
List of run numbers where histograms stop being valid for full simulation.
std::vector< std::vector< HistArray > > m_histList
List of histograms for full Geant4 simulation.
std::vector< std::vector< HistEdge > > m_histEdges
void addFileName(const std::string &val)
This is more of an utility so the initialize is different wrt to an athena component.
std::vector< std::vector< HistArray > > m_uncorrToyMCSystFast
int setup(const std::vector< TH1 * > &hists, std::vector< HistArray > &histList, std::vector< unsigned int > &beginRunNumberList, std::vector< unsigned int > &endRunNumberList, const int runNumBegin, const int runNumEnd) const
Fill and interpret the setup, depending on which histograms are found in the input file(s)
int getHistograms()
Load all histograms from the input file(s)
void setupTempMapsHelper(TH1 *obj, std::vector< std::vector< TH1 * > > &objs, std::vector< std::vector< TH1 * > > &sysObjs, int &seenSystematics)
Class mimicking the AthMessaging class from the offline software.
static std::vector< uint32_t > runnumber
Definition iLumiCalc.h:37
Extra patterns decribing particle interation process.