ATLAS Offline Software
EfficiencyScaleFactor.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3  */
4 #ifndef MUONEFFICIENCYCORRECITONS_EFFICIENCYSCALEFACTOR_H_
5 #define MUONEFFICIENCYCORRECITONS_EFFICIENCYSCALEFACTOR_H_
6 
7 // EDM include(s):
8 #include "xAODMuon/Muon.h"
10 #include "xAODMuon/MuonContainer.h"
11 
17 
20 #include <ColumnarMuon/MuonDef.h>
22 
23 // further ROOT includes
24 #include <TFile.h>
25 #include <TDirectory.h>
26 
27 // STL includes
28 #include <string>
29 #include <iostream>
30 #include <exception>
31 #include <map>
32 #include <cmath>
33 #include <memory>
34 
35 
36 namespace CP {
37 
38  class SystematicSet;
39  class MuonEfficiencyScaleFactors;
41 
48  public:
52  const std::string &file,
53  const std::string &time_unit);
54 
61  EfficiencyScaleFactor(std::shared_ptr<EfficiencyScaleFactor> nominal,
62  const MuonEfficiencyScaleFactors& ref_tool,
63  const std::string& file,
64  const std::string& time_unit,
65  const std::string& syst_name,
66  int syst_type_bitmap);
70 
71 
74  bool CheckConsistency();
75 
78  int nBins() const;
79 
81  std::string GetBinName(int bin) const;
82 
84  int nOverFlowBins() const;
86  bool isOverFlowBin(int b) const;
87 
88 
90  int FindBinSF(const xAOD::Muon & mu) const;
91 
94  bool SetSystematicBin(int bin);
95 
96  bool separateBinSyst() const;
97  bool IsUpVariation() const;
98 
99 
101 
103  CorrectionCode ScaleFactor(const xAOD::Muon& mu, float & SF) const;
105  CorrectionCode ScaleFactorReplicas(const xAOD::Muon& mu, std::vector<float> & SF);
106 
109  CorrectionCode ApplyScaleFactorReplicas(const xAOD::Muon& mu, int n_replicas);
110 
112  CorrectionCode DataEfficiency(const xAOD::Muon& mu, float & Eff) const;
113  CorrectionCode DataEfficiencyReplicas(const xAOD::Muon& mu, std::vector<float> & eff);
117 
119  CorrectionCode MCEfficiency(const xAOD::Muon& mu, float & Eff) const;
120  CorrectionCode MCEfficiencyReplicas(const xAOD::Muon& mu, std::vector<float> & eff);
123  CorrectionCode ApplyMCEfficiencyReplicas(const xAOD::Muon& mu, int n_replicas);
124 
126  void DebugPrint() const;
127 
128 
132  std::string sysname(bool with_direction = true) const;
133 
136  unsigned int firstRun() const;
138  unsigned int lastRun() const;
139 
141  bool coversRunNumber(unsigned int run) const;
142 
144  void setFirstLastRun(unsigned int first, unsigned int last);
145  private:
146 
147  typedef std::vector<std::unique_ptr<HistHandler>> SFReplicaVec;
148 
150  bool ReadFromFile(const std::string &file, const std::string& time_unit);
151  std::unique_ptr<HistHandler> ReadHistFromFile(columnar::ColumnarTool<>* parent, const std::string& name, TFile* f, const std::string& time_unit);
152 
153  // use some maps for easy histo loading / arithmetics by name
154 
156  CorrectionCode GetContentFromHist(const HistHandler* Hist, const xAOD::Muon& mu, float & SF, bool add_kine_syst) const;
157  CorrectionCode GetContentFromHist(const HistHandler* Hist, columnar::MuonId mu, float & SF, bool add_kine_syst) const;
159  CorrectionCode GetContentReplicasFromHist(EfficiencyScaleFactor::SFReplicaVec &replicas, const xAOD::Muon& mu, std::vector<float> & SF, bool add_kine_syst);
160 
161 
162  // package a TH1 in a HistHandler
163  std::unique_ptr<HistHandler> package_histo(columnar::ColumnarTool<>* parent, TH1* h);
164 
165 
166  // replica generation
167  void GenerateReplicas(int nrep, int seed);
168  void GenerateReplicasFromHist(HistHandler* h, int nrep, int seed, EfficiencyScaleFactor::SFReplicaVec &repVector);
169 
174  std::string m_syst_name;
175 
178  bool m_is_up;
186  std::unique_ptr<HistHandler> m_sf;
187  std::unique_ptr<HistHandler> m_eff;
188  std::unique_ptr<HistHandler> m_mc_eff;
189 
193 
194  std::unique_ptr<FloatDecorator> m_sf_decor;
195  std::unique_ptr<FloatDecorator> m_eff_decor;
196  std::unique_ptr<FloatDecorator> m_mc_eff_decor;
197 
198  std::unique_ptr<FloatVectorDecorator> m_sf_rep_decor;
199  std::unique_ptr<FloatVectorDecorator> m_eff_rep_decor;
200  std::unique_ptr<FloatVectorDecorator> m_mc_eff_rep_decor;
201 
202 
203  // these are for the continuous pt dependent systematic if we have one
204  std::unique_ptr<IKinematicSystHandler> m_sf_KineDepsys;
205 
206 
211 
213  std::shared_ptr<EfficiencyScaleFactor> m_NominalFallBack;
215 
216 
221 
222  mutable std::atomic<unsigned int> m_warnsPrinted;
223  static const unsigned int m_warningLimit;
224 
225  unsigned int m_firstRun;
226  unsigned int m_lastRun;
227 
228  public:
229 
235  };
236 } /* namespace CP */
237 
238 #endif /* EFFICIENCYSCALEFACTOR_H_ */
CP::EfficiencyScaleFactor::m_syst_name
std::string m_syst_name
Definition: EfficiencyScaleFactor.h:174
CP::EfficiencyScaleFactor::m_eff_decor
std::unique_ptr< FloatDecorator > m_eff_decor
Definition: EfficiencyScaleFactor.h:195
CP::EfficiencyScaleFactor::DataEfficiency
CorrectionCode DataEfficiency(const xAOD::Muon &mu, float &Eff) const
... and absolute efficiencies
Definition: EfficiencyScaleFactor.cxx:316
CP::EfficiencyScaleFactor::FloatVectorDecorator
SG::AuxElement::Decorator< std::vector< float > > FloatVectorDecorator
Definition: EfficiencyScaleFactor.h:192
CP::EfficiencyScaleFactor::m_warnsPrinted
std::atomic< unsigned int > m_warnsPrinted
Definition: EfficiencyScaleFactor.h:222
CP::EfficiencyScaleFactor::ScaleFactorReplicas
CorrectionCode ScaleFactorReplicas(const xAOD::Muon &mu, std::vector< float > &SF)
Definition: EfficiencyScaleFactor.cxx:414
CP::EfficiencyScaleFactor::isOverFlowBin
bool isOverFlowBin(int b) const
Check whether the bin is overflow or not.
Definition: EfficiencyScaleFactor.cxx:294
CP::EfficiencyScaleFactor::etaAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > etaAcc
Definition: EfficiencyScaleFactor.h:232
CP::EfficiencyScaleFactor::MCEfficiencyReplicas
CorrectionCode MCEfficiencyReplicas(const xAOD::Muon &mu, std::vector< float > &eff)
Definition: EfficiencyScaleFactor.cxx:420
CP::EfficiencyScaleFactor::GetContentReplicasFromHist
CorrectionCode GetContentReplicasFromHist(EfficiencyScaleFactor::SFReplicaVec &replicas, const xAOD::Muon &mu, std::vector< float > &SF, bool add_kine_syst)
read a vector of replica contents in the correct bin in one of my histos
Definition: EfficiencyScaleFactor.cxx:423
CP::EfficiencyScaleFactor::DebugPrint
void DebugPrint() const
debug method
CP::EfficiencyScaleFactor::m_muons
columnar::MuonAccessor< columnar::ObjectColumn > m_muons
Definition: EfficiencyScaleFactor.h:230
CP::EfficiencyScaleFactor::m_mc_eff
std::unique_ptr< HistHandler > m_mc_eff
Definition: EfficiencyScaleFactor.h:188
CP::EfficiencyScaleFactor::FloatDecorator
SG::AuxElement::Decorator< float > FloatDecorator
Typedef to make the definition of the follow decorators a bit shorted.
Definition: EfficiencyScaleFactor.h:191
Muon.h
CP::EfficiencyScaleFactor::m_firstRun
unsigned int m_firstRun
Definition: EfficiencyScaleFactor.h:225
CP::EfficiencyScaleFactor::m_sf_KineDepsys
std::unique_ptr< IKinematicSystHandler > m_sf_KineDepsys
Definition: EfficiencyScaleFactor.h:204
CP::EfficiencyScaleFactor::IsUpVariation
bool IsUpVariation() const
Definition: EfficiencyScaleFactor.cxx:190
CP::EfficiencyScaleFactor::m_eff
std::unique_ptr< HistHandler > m_eff
Definition: EfficiencyScaleFactor.h:187
CP::EfficiencyScaleFactor::m_is_lowpt
bool m_is_lowpt
states that this SF should respond to low pt systematics rather than high pt ones
Definition: EfficiencyScaleFactor.h:180
CP::EfficiencyScaleFactor::m_NominalFallBack
std::shared_ptr< EfficiencyScaleFactor > m_NominalFallBack
Nominal fall-back scale-factor.
Definition: EfficiencyScaleFactor.h:213
CP::MuonEfficiencyScaleFactors
Definition: MuonEfficiencyScaleFactors.h:29
TRT_PAI_gasdata::SF
const float SF[NF]
Cross sections for Fluor.
Definition: TRT_PAI_gasdata.h:285
bin
Definition: BinsDiffFromStripMedian.h:43
CP::EfficiencyScaleFactor::FindBinSF
int FindBinSF(const xAOD::Muon &mu) const
Finds the bin to which the muon corresponds to.
Definition: EfficiencyScaleFactor.cxx:492
CP::EfficiencyScaleFactor::GetContentFromHist
CorrectionCode GetContentFromHist(const HistHandler *Hist, const xAOD::Muon &mu, float &SF, bool add_kine_syst) const
read the content of the correct bin in one of my histos. MCefficiencies actually do not need a pt-dep...
Definition: EfficiencyScaleFactor.cxx:347
CP::EfficiencyScaleFactor::m_sf_rep_decor
std::unique_ptr< FloatVectorDecorator > m_sf_rep_decor
Definition: EfficiencyScaleFactor.h:198
MuonEfficiencyType.h
CP
Select isolated Photons, Electrons and Muons.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:49
CP::EfficiencyScaleFactor::muonTypeAcc
columnar::MuonAccessor< columnar::RetypeColumn< xAOD::Muon::MuonType, std::uint16_t > > muonTypeAcc
Definition: EfficiencyScaleFactor.h:234
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
CP::EfficiencyScaleFactor::m_warningLimit
static const unsigned int m_warningLimit
Definition: EfficiencyScaleFactor.h:223
ISystematicsTool.h
CP::EfficiencyScaleFactor::ApplyScaleFactor
CorrectionCode ApplyScaleFactor(const xAOD::Muon &mu) const
or you can just decorate the scale-factor to the muon
Definition: EfficiencyScaleFactor.cxx:377
CP::EfficiencyScaleFactor::ReadHistFromFile
std::unique_ptr< HistHandler > ReadHistFromFile(columnar::ColumnarTool<> *parent, const std::string &name, TFile *f, const std::string &time_unit)
Definition: EfficiencyScaleFactor.cxx:257
CP::EfficiencyScaleFactor::DataEfficiencyReplicas
CorrectionCode DataEfficiencyReplicas(const xAOD::Muon &mu, std::vector< float > &eff)
Definition: EfficiencyScaleFactor.cxx:417
CP::EfficiencyScaleFactor::m_measurement
CP::MuonEfficiencyType m_measurement
Section of variables of the tool.
Definition: EfficiencyScaleFactor.h:173
CP::EfficiencyScaleFactor::ptAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > ptAcc
Definition: EfficiencyScaleFactor.h:231
CP::EfficiencyScaleFactor::coversRunNumber
bool coversRunNumber(unsigned int run) const
Check if a run of data-taking is covered by this map.
Definition: EfficiencyScaleFactor.cxx:199
CP::EfficiencyScaleFactor::m_default_eff
float m_default_eff
default efficiency value (in case of OutOfValidityRange)
Definition: EfficiencyScaleFactor.h:218
CP::EfficiencyScaleFactor::SetSystematicBin
bool SetSystematicBin(int bin)
This function will let the world implode since it allows to decorrelate the sysstematics bin by bin.
Definition: EfficiencyScaleFactor.cxx:471
CP::EfficiencyScaleFactor::EfficiencyScaleFactor
EfficiencyScaleFactor(const EfficiencyScaleFactor &)=delete
Do not allow for copy constructors and other assignments of the class.
CP::EfficiencyScaleFactor::m_lastRun
unsigned int m_lastRun
Definition: EfficiencyScaleFactor.h:226
CP::EfficiencyScaleFactor::m_separateBinSyst
bool m_separateBinSyst
Can the systematic be decorrelated.
Definition: EfficiencyScaleFactor.h:184
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:59
CP::EfficiencyScaleFactor::setFirstLastRun
void setFirstLastRun(unsigned int first, unsigned int last)
Set the run-number coverage.
Definition: EfficiencyScaleFactor.cxx:202
ColumnAccessor.h
CP::HistHandler
Definition: HistHandler.h:42
CP::EfficiencyScaleFactor::m_sf_decor
std::unique_ptr< FloatDecorator > m_sf_decor
Definition: EfficiencyScaleFactor.h:194
CP::EfficiencyScaleFactor::m_sf_replicas
SFReplicaVec m_sf_replicas
replicas, in case we use them
Definition: EfficiencyScaleFactor.h:208
file
TFile * file
Definition: tile_monitor.h:29
test_pyathena.parent
parent
Definition: test_pyathena.py:15
CP::EfficiencyScaleFactor::MCEfficiency
CorrectionCode MCEfficiency(const xAOD::Muon &mu, float &Eff) const
... mc efficiency
Definition: EfficiencyScaleFactor.cxx:331
CP::EfficiencyScaleFactor::ReadFromFile
bool ReadFromFile(const std::string &file, const std::string &time_unit)
Read SF histrograms from a given input file.
ObjectColumn.h
ColumnarTool.h
hist_file_dump.f
f
Definition: hist_file_dump.py:140
CP::EfficiencyScaleFactor
Definition: EfficiencyScaleFactor.h:40
run
Definition: run.py:1
CP::EfficiencyScaleFactor::ApplyDataEfficiency
CorrectionCode ApplyDataEfficiency(const xAOD::Muon &mu) const
You can decorate the data efficiecny as well.
Definition: EfficiencyScaleFactor.cxx:390
MuonDef.h
CP::EfficiencyScaleFactor::ApplyDataEfficiencyReplicas
CorrectionCode ApplyDataEfficiencyReplicas(const xAOD::Muon &mu, int n_replicas)
Definition: EfficiencyScaleFactor.cxx:396
CP::EfficiencyScaleFactor::m_default_eff_ttva
float m_default_eff_ttva
default TTVA efficiency value (in case of MuonStandAlone for |eta|>2.5)
Definition: EfficiencyScaleFactor.h:220
CP::EfficiencyScaleFactor::phiAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > phiAcc
Definition: EfficiencyScaleFactor.h:233
CP::EfficiencyScaleFactor::lastRun
unsigned int lastRun() const
Last run to which the map belongs to. The last run number is given exclusvely...
Definition: EfficiencyScaleFactor.cxx:196
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition: ContainerId.h:176
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
CP::EfficiencyScaleFactor::m_mc_eff_replicas
SFReplicaVec m_mc_eff_replicas
Definition: EfficiencyScaleFactor.h:210
CP::EfficiencyScaleFactor::nOverFlowBins
int nOverFlowBins() const
Number of overflow bins in the map.
Definition: EfficiencyScaleFactor.cxx:291
KinematicSystHandler.h
EventInfo.h
MuonContainer.h
CP::EfficiencyScaleFactor::GenerateReplicas
void GenerateReplicas(int nrep, int seed)
Definition: EfficiencyScaleFactor.cxx:451
HistHandler.h
CP::EfficiencyScaleFactor::GenerateReplicasFromHist
void GenerateReplicasFromHist(HistHandler *h, int nrep, int seed, EfficiencyScaleFactor::SFReplicaVec &repVector)
Definition: EfficiencyScaleFactor.cxx:456
h
CP::EfficiencyScaleFactor::ApplyMCEfficiency
CorrectionCode ApplyMCEfficiency(const xAOD::Muon &mu) const
... or decorate them directly
Definition: EfficiencyScaleFactor.cxx:402
CP::MuonEfficiencyType
MuonEfficiencyType
Definition: MuonEfficiencyType.h:12
CP::EfficiencyScaleFactor::ApplyScaleFactorReplicas
CorrectionCode ApplyScaleFactorReplicas(const xAOD::Muon &mu, int n_replicas)
Definition: EfficiencyScaleFactor.cxx:383
CP::EfficiencyScaleFactor::sysname
std::string sysname(bool with_direction=true) const
A string having the full name of the systematic including the measurement.
Definition: EfficiencyScaleFactor.cxx:184
DeMoScan.first
bool first
Definition: DeMoScan.py:534
columnar::ColumnarTool
the base class for all columnar components
Definition: ColumnAccessorDataArray.h:17
CP::CorrectionCode
Return value from object correction CP tools.
Definition: CorrectionCode.h:31
CP::EfficiencyScaleFactor::ScaleFactor
CorrectionCode ScaleFactor(const xAOD::Muon &mu, float &SF) const
the important bits - extract SF info
Definition: EfficiencyScaleFactor.cxx:297
CP::EfficiencyScaleFactor::GetBinName
std::string GetBinName(int bin) const
Returns the name of the bin using the axis title from the scale-factor map.
Definition: EfficiencyScaleFactor.cxx:484
CP::EfficiencyScaleFactor::m_mc_eff_decor
std::unique_ptr< FloatDecorator > m_mc_eff_decor
Definition: EfficiencyScaleFactor.h:196
CP::EfficiencyScaleFactor::m_SystematicBin
int m_SystematicBin
Definition: EfficiencyScaleFactor.h:214
CP::EfficiencyScaleFactor::m_is_up
bool m_is_up
Boolean whether the scale-factor is varying upwards or downwards Only relevant if the systname is not...
Definition: EfficiencyScaleFactor.h:178
CP::EfficiencyScaleFactor::SFReplicaVec
std::vector< std::unique_ptr< HistHandler > > SFReplicaVec
Definition: EfficiencyScaleFactor.h:147
CorrectionCode.h
dqt_zlumi_alleff_HIST.eff
int eff
Definition: dqt_zlumi_alleff_HIST.py:113
CP::EfficiencyScaleFactor::nBins
int nBins() const
How many bins does the scale-factor map have.
Definition: EfficiencyScaleFactor.cxx:288
CP::EfficiencyScaleFactor::ApplyMCEfficiencyReplicas
CorrectionCode ApplyMCEfficiencyReplicas(const xAOD::Muon &mu, int n_replicas)
Definition: EfficiencyScaleFactor.cxx:408
CP::EfficiencyScaleFactor::CheckConsistency
bool CheckConsistency()
check the consistency of the scale-factor map.
Definition: EfficiencyScaleFactor.cxx:206
CP::EfficiencyScaleFactor::package_histo
std::unique_ptr< HistHandler > package_histo(columnar::ColumnarTool<> *parent, TH1 *h)
Definition: EfficiencyScaleFactor.cxx:272
columnar::AccessorTemplate
the raw column accessor template class
Definition: ColumnAccessor.h:81
CP::EfficiencyScaleFactor::EfficiencyScaleFactor
EfficiencyScaleFactor(const MuonEfficiencyScaleFactors &ref_tool, const std::string &file, const std::string &time_unit)
Nominal constructor to use having the measurement (Reco/TTVA/Iso/BadMuon) path to the scale-factor ma...
Definition: EfficiencyScaleFactor.cxx:178
CP::EfficiencyScaleFactor::firstRun
unsigned int firstRun() const
First run to which the map belongs to.
Definition: EfficiencyScaleFactor.cxx:193
CP::EfficiencyScaleFactor::m_respond_to_kineDepSyst
bool m_respond_to_kineDepSyst
steers the pt dependent systematics
Definition: EfficiencyScaleFactor.h:182
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:51
CP::EfficiencyScaleFactor::m_sf
std::unique_ptr< HistHandler > m_sf
the histograms needed to run
Definition: EfficiencyScaleFactor.h:186
CP::EfficiencyScaleFactor::m_mc_eff_rep_decor
std::unique_ptr< FloatVectorDecorator > m_mc_eff_rep_decor
Definition: EfficiencyScaleFactor.h:200
CP::EfficiencyScaleFactor::m_eff_rep_decor
std::unique_ptr< FloatVectorDecorator > m_eff_rep_decor
Definition: EfficiencyScaleFactor.h:199
CP::EfficiencyScaleFactor::operator=
EfficiencyScaleFactor & operator=(const EfficiencyScaleFactor &)=delete
CP::EfficiencyScaleFactor::m_eff_replicas
SFReplicaVec m_eff_replicas
Definition: EfficiencyScaleFactor.h:209
CP::EfficiencyScaleFactor::separateBinSyst
bool separateBinSyst() const
Definition: EfficiencyScaleFactor.cxx:187