ATLAS Offline Software
EfficiencyScaleFactor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
4 
8 #include <TRandom3.h>
9 #include <TClass.h>
10 namespace CP {
11  const unsigned int EfficiencyScaleFactor::m_warningLimit = 10;
12  EfficiencyScaleFactor::EfficiencyScaleFactor(std::shared_ptr<EfficiencyScaleFactor> nominal,
13  const MuonEfficiencyScaleFactors& ref_tool,
14  const std::string& file,
15  const std::string& time_unit,
16  const std::string& syst_name,
17  int syst_type_bitmap):
18  m_measurement(ref_tool.measurement()),
19  m_syst_name(syst_name),
20  m_is_up(syst_type_bitmap & EffiCollection::UpVariation),
21  m_is_lowpt(syst_type_bitmap & EffiCollection::JPsiAnalysis),
22  m_respond_to_kineDepSyst(syst_type_bitmap & EffiCollection::PtDependent),
23  m_separateBinSyst(syst_type_bitmap & EffiCollection::UnCorrelated),
24  m_sf(),
25  m_eff(),
26  m_mc_eff(),
27 
28  m_sf_decor(std::make_unique<FloatDecorator>(ref_tool.sf_decoration()+ (m_syst_name.empty()? "" :"_"+ m_syst_name + (m_is_up? "_1UP": "_1DN")))),
29  m_eff_decor(std::make_unique<FloatDecorator>(ref_tool.data_effi_decoration()+ (m_syst_name.empty()? "" :"_"+ m_syst_name + (m_is_up? "_1UP": "_1DN")))),
30  m_mc_eff_decor(std::make_unique<FloatDecorator>(ref_tool.mc_effi_decoration()+ (m_syst_name.empty()? "" :"_"+ m_syst_name + (m_is_up? "_1UP": "_1DN")))),
31  m_sf_rep_decor(std::make_unique<FloatVectorDecorator>(ref_tool.sf_replica_decoration()+ (m_syst_name.empty()? "" :"_"+ m_syst_name + (m_is_up? "_1UP": "_1DN")))),
32  m_eff_rep_decor(std::make_unique<FloatVectorDecorator>(ref_tool.data_effi_replica_decoration()+ (m_syst_name.empty()? "" :"_"+ m_syst_name + (m_is_up? "_1UP": "_1DN")))),
33  m_mc_eff_rep_decor(std::make_unique<FloatVectorDecorator>(ref_tool.mc_effi_replica_deocration()+ (m_syst_name.empty()? "" :"_"+ m_syst_name + (m_is_up? "_1UP": "_1DN")))),
34 
35  m_sf_KineDepsys(),
36  m_sf_replicas(),
37  m_eff_replicas(),
38  m_mc_eff_replicas(),
39  m_NominalFallBack(nominal),
40  m_SystematicBin(-1),
41  m_default_eff(1.),
42  m_default_eff_ttva(1.),
43  m_warnsPrinted(0),
44  m_firstRun(1),
45  m_lastRun(999999){
46 
47  if (ref_tool.measurement() == CP::MuonEfficiencyType::Iso){
50  }
51  // open the file
52  std::unique_ptr<TFile> f (TFile::Open(file.c_str(), "READ"));
53  if (!f || !f->IsOpen()) {
54  Error("EfficiencyScaleFactor", "Unable to open file %s", file.c_str());
55  return;
56  }
57  // now we can read our three mean histograms Histos
58  m_eff = ReadHistFromFile(this, "Eff", f.get(), time_unit);
59  m_mc_eff = ReadHistFromFile(this, "MC_Eff", f.get(), time_unit);
60  m_sf = ReadHistFromFile(this, "SF", f.get(), time_unit);
62  if (syst_name.empty()) return;
63 
64 
65  if (IsUpVariation()){
66  m_default_eff = 2.;
67  m_default_eff_ttva = 1. + 1.e-9;
68  } else {
69  m_default_eff = 0.;
70  m_default_eff_ttva = 1. - 1.e-9;
71  }
72  std::function<void(std::unique_ptr<HistHandler>&, const std::string& )> syst_loader = [this, &f, &time_unit, &syst_type_bitmap] (std::unique_ptr<HistHandler>& nominal, const std::string& hist_type) {
73  if(!nominal) return;
74  std::unique_ptr<HistHandler> sys = ReadHistFromFile(this, Form("%s_%s_%s", hist_type.c_str() ,
75  m_syst_name.c_str(),
76  (syst_type_bitmap & EffiCollection::Symmetric ? "SYM" : (m_is_up ? "1UP" : "1DN")) ),
77  f.get(), time_unit);
78  if (sys) {
79  for (int i = 1; i <= nominal->nBins(); ++i) {
80  double content = nominal->GetBinContent(i);
81  double variation = (IsUpVariation() ? 1. : -1.)*sys->GetBinContent(i);
82  nominal->SetBinContent(i,content + variation);
83  }
84  return;
85  }
89  if (m_syst_name == "SYS"){
90  std::unique_ptr<HistHandler> old_sys = ReadHistFromFile(this, hist_type +"_sys", f.get(), time_unit);
92  if (!old_sys){
93  nominal.reset();
94  return;
95  }
96 
97  for (int i = 1; i<= nominal->nBins(); ++i) {
98  nominal->SetBinContent(i, nominal->GetBinContent(i) + (IsUpVariation() ? 1. : -1.)*old_sys->GetBinContent(i));
99  }
100  }
102  else if (m_syst_name == "STAT") {
103  for (int i = 1; i<= nominal->nBins(); ++i) {
104  nominal->SetBinContent(i, nominal->GetBinContent(i) + (IsUpVariation() ? 1. : -1.)*nominal->GetBinError(i));
105  }
106  }
108  else if (m_syst_name == "PTDEPENDENCY"){
109  return;
110  }
112  else{
113  Error("EfficiencyScaleFactor()", "Failed to load sytstematic variation %s for measurement %s and histo-type %s", sysname(true).c_str(),
114  EfficiencyTypeName(m_measurement).c_str(),
115  hist_type.c_str());
116  nominal.reset();
117  }
118  };
120  syst_loader(m_sf,"SF");
121  syst_loader(m_eff,"Eff");
122  syst_loader(m_mc_eff,"MC_Eff");
123 
125  if (m_is_lowpt || (file == ref_tool.filename_HighEta() && ref_tool.filename_HighEta() != ref_tool.filename_Central()) ||
126  (file == ref_tool.filename_Calo() && ref_tool.filename_Calo() != ref_tool.filename_Central())) m_respond_to_kineDepSyst =false;
128 
131  return;
132  }
133  // Load the systematic of the bad veto
135  TDirectory* SystDir = nullptr;
136  f->GetObject(("KinematicSystHandler_" + time_unit).c_str(), SystDir);
138  if (SystDir) {
139  m_sf_KineDepsys = std::make_unique<BadMuonVetoSystHandler>(SystDir);
140  } else {
142  f->GetObject("BadMuonVetoSyst_3Stations", SystDir);
143  TDirectory* SystDir_2Stat = nullptr;
144  f->GetObject("BadMuonVetoSyst_2Stations", SystDir_2Stat);
145  m_sf_KineDepsys = std::make_unique<BadMuonVetoSystHandler>(SystDir, SystDir_2Stat);
146  }
147  m_sf_KineDepsys->SetSystematicWeight( IsUpVariation() ? 1 : -1);
148  if (!m_sf_KineDepsys->initialize()){
149  Error("EfficiencyScaleFactor()", "Pt dependent systematic could not be loaded");
150  m_sf_KineDepsys.reset();
151  }
152  if (m_sf_KineDepsys)
153  addSubtool (*m_sf_KineDepsys);
154  return;
156  m_sf_KineDepsys = std::make_unique<TTVAClosureSysHandler>(ReadHistFromFile(this,"SF_NonClosure_sys",f.get(),time_unit));
157  if (!m_sf_KineDepsys->initialize()){
158  Error("EfficiencyScaleFactor()", "TTVA non closure systematic could not be loaded.");
159  m_sf_KineDepsys.reset();
160  }
161  else
162  m_sf_KineDepsys->SetSystematicWeight( IsUpVariation() ? 1 : -1);
163  if (m_sf_KineDepsys)
164  addSubtool (*m_sf_KineDepsys);
165  return;
166 
167  }
169  m_sf_KineDepsys = std::make_unique<PtKinematicSystHandler>(ReadHistFromFile(this, Form("SF_PtFlatness_1%s", m_is_up?"UP" :"DN"), f.get(), time_unit), ReadHistFromFile(this, "SF_PtDep_sys", f.get(), time_unit));
170 
172  if(!m_sf_KineDepsys->initialize()){
173  m_sf_KineDepsys = std::make_unique<PrimodialPtSystematic>(ReadHistFromFile(this, "SF_PtDep_sys", f.get(), time_unit));
174  }
175  m_sf_KineDepsys->SetSystematicWeight( IsUpVariation() ? 1 : -1);
176  addSubtool (*m_sf_KineDepsys);
177  }
179  const std::string &file,
180  const std::string &time_unit):
181  EfficiencyScaleFactor(std::shared_ptr<EfficiencyScaleFactor>(),
182  ref_tool,file, time_unit, "",0){}
183 
184  std::string EfficiencyScaleFactor::sysname(bool with_direction) const {
185  return m_syst_name.empty() ? "" : EfficiencyTypeName(m_measurement) + "_" + m_syst_name +(m_is_lowpt ? "_LOWPT" : "") + (with_direction ? (m_is_up ?"__1UP" : "__1DN") :"");
186  }
188  return m_separateBinSyst;
189  }
191  return m_is_up;
192  }
193  unsigned int EfficiencyScaleFactor::firstRun() const{
194  return m_firstRun;
195  }
196  unsigned int EfficiencyScaleFactor::lastRun() const{
197  return m_lastRun;
198  }
199  bool EfficiencyScaleFactor::coversRunNumber(unsigned int run) const{
200  return m_firstRun <= run && run <= m_lastRun;
201  }
202  void EfficiencyScaleFactor::setFirstLastRun(unsigned int first, unsigned int last){
203  m_firstRun = first;
204  m_lastRun = last;
205  }
207  //Check whether the SFs could be successfully loaded
208  if (!m_sf) {
209  Error("EfficiencyScaleFactor()", "Could not load the SF for measurement %s and systematic %s",EfficiencyTypeName(m_measurement).c_str(), sysname().c_str());
210  return false;
211  }
212  if (m_respond_to_kineDepSyst && !m_sf_KineDepsys->initialize()) {
213  Error("EfficiencyScaleFactor()", "Could not load the SF pt-dependent systematic for %s and systematic %s", EfficiencyTypeName(m_measurement).c_str(), sysname().c_str() );
214  return false;
215  }
216  if (m_NominalFallBack.get() == this) {
217  Error("EfficiencyScaleFactor()", "The EfficiencyScaleFactor %s has itself as Nominal Fall back.", EfficiencyTypeName(m_measurement).c_str());
218  m_NominalFallBack.reset();
219  return false;
220  }
221  if (m_NominalFallBack) {
222  if (!m_NominalFallBack->sysname().empty() || sysname().empty()){
223  Error("EfficiencyScaleFactor()", "Either nominal is assigned with a fall back (%s) or the nominal fall back is invald(%s).", sysname().c_str(), m_NominalFallBack->sysname().c_str() );
224  return false;
225  }
226  }
227  if (firstRun() > lastRun()){
228  Error("EfficiencyScaleFactor()", "Invalid run number range. Since the map is ranging from %u to %u.", firstRun(), lastRun());
229  return false;
230  }
231  std::function<bool(const std::unique_ptr<HistHandler>&)> consistent_histo = [](const std::unique_ptr<HistHandler>& histo)->bool{
234  if (!histo) return true;
235  for ( int i = 1; i <= histo->nBins(); ++i){
236  if (std::isnan(histo->GetBinContent(i)) || std::isinf(histo->GetBinContent(i))){
237  Error("EfficiencyScaleFactor()", "The %d-th bin %s has not a number (%f)",i, histo->GetBinName(i).c_str(), histo->GetBinContent(i));
238  return false;
239  }
240  }
241  return true;
242  };
243  if (!consistent_histo(m_sf)){
244  Error("EfficiencyScaleFactor()", "Invalid scalefactor in %s", sysname().c_str());
245  return false;
246  }
247  if (!consistent_histo(m_eff)){
248  Error("EfficiencyScaleFactor()", "Invalid data-efficiency in %s", sysname().c_str());
249  return false;
250  }
251  if (!consistent_histo(m_mc_eff)){
252  Error("EfficiencyScaleFactor()", "Invalid MC-efficiency in %s", sysname().c_str());
253  return false;
254  }
255  return true;
256  }
257  std::unique_ptr<HistHandler> EfficiencyScaleFactor::ReadHistFromFile(columnar::ColumnarTool<>* parent, const std::string& name, TFile* f, const std::string& time_unit) {
258 
259  TH1* hist_from_file = nullptr;
260 
261  f->GetObject((name + std::string("_") + time_unit).c_str(), hist_from_file);
262  // if no period weighting, the histo may also not have a time period in the name at all
263 
264  if (!hist_from_file && time_unit == "All") {
265  f->GetObject(name.c_str(), hist_from_file);
266  }
267  if (!hist_from_file) {
268  return std::unique_ptr<HistHandler>();
269  }
270  return package_histo(parent, hist_from_file);
271  }
273  // make sure that the correct type of histo is used
274  // Dynamic cast for TH2 Poly otherwise we can rely on the GetDimension() ,ethod
275  if (!h) return std::unique_ptr<HistHandler>();
276  if (dynamic_cast<TH2Poly*>(h)) {
277  return std::make_unique<HistHandler_TH2Poly>(parent, dynamic_cast<TH2Poly*>(h));
278  }else if (h->GetDimension() == 3) {
279  return std::make_unique<HistHandler_TH3>(parent, h);
280  }else if (h->GetDimension() == 2) {
281  return std::make_unique<HistHandler_TH2>(parent, h);
282  } else if (h->GetDimension() == 1) {
283  return std::make_unique<HistHandler_TH1>(parent, h);
284  }
285  Error("EfficiencyScaleFactor", "Unable to package histo %s (%s) in a known HistHandler", h->GetName(), h->IsA()->GetName());
286  return std::unique_ptr<HistHandler>();
287  }
289  return m_sf ? m_sf->nBins() : -1;
290  }
292  return m_sf ? m_sf->nOverFlowBins() : -1;
293  }
295  return m_sf ? m_sf->isOverFlowBin(b) : true;
296  }
298  return ScaleFactor (columnar::MuonId (mu), SF);
299  }
302  int bin = -1;
303  CorrectionCode cc = m_sf->FindBin(mu, bin);
304  if (cc == CP::CorrectionCode::Error) {
305  return cc;
306  }
307  if (bin != m_SystematicBin) {
308  return m_NominalFallBack->ScaleFactor(mu, SF);
309  }
310  }
311  CorrectionCode cc = GetContentFromHist(m_sf.get(), mu, SF, true);
312  if (cc == CorrectionCode::Error) Error("EfficiencyScaleFactor", "Could not apply the scale factor");
313  return cc;
314  }
315 
318  int bin = -1;
319  CorrectionCode cc = m_eff->FindBin(mu, bin);
320  if (cc == CP::CorrectionCode::Error) {
321  return cc;
322  }
323  if (bin != m_SystematicBin) {
324  return m_NominalFallBack->DataEfficiency(mu, Eff);
325  }
326  }
327  CorrectionCode cc = GetContentFromHist(m_eff.get(), mu, Eff, true);
328  if (cc == CorrectionCode::Error) Error("EfficiencyScaleFactor", "Could not apply the data efficiency");
329  return cc;
330  }
333  int bin = -1;
334  CorrectionCode cc = m_mc_eff->FindBin(mu, bin);
335  if (cc == CP::CorrectionCode::Error) {
336  return cc;
337  }
338  if (bin != m_SystematicBin) {
339  return m_NominalFallBack->MCEfficiency(mu, Eff);
340  }
341  }
342  CorrectionCode cc = GetContentFromHist(m_mc_eff.get(), mu, Eff, false);
343  if (cc == CorrectionCode::Error) Error("EfficiencyScaleFactor", "Could not apply the Monte Carlo efficiency");
344  return cc;
345  }
346 
347  CorrectionCode EfficiencyScaleFactor::GetContentFromHist(const HistHandler* Hist, const xAOD::Muon& mu, float & Eff, bool add_kine_syst) const {
348  return GetContentFromHist (Hist, columnar::MuonId (mu), Eff, add_kine_syst);
349  }
350  CorrectionCode EfficiencyScaleFactor::GetContentFromHist(const HistHandler* Hist, columnar::MuonId mu, float & Eff, bool add_kine_syst) const {
351  Eff = m_default_eff;
352  if (!Hist) {
354  Warning("EfficiencyScaleFactor", "Could not find histogram for variation %s and muon with pt=%.4f, eta=%.2f and phi=%.2f, returning %.1f", sysname().c_str(), ptAcc(mu), etaAcc(mu), phiAcc(mu), m_default_eff);
355  ++m_warnsPrinted;
356  }
358  }
359  if (m_measurement == CP::MuonEfficiencyType::TTVA && std::abs(etaAcc(mu)) > 2.5 && std::abs(etaAcc(mu)) <= 2.7 && muonTypeAcc(mu) == xAOD::Muon::MuonType::MuonStandAlone) {
361  Info("EfficiencyScaleFactor", "No TTVA sf/efficiency provided for standalone muons with 2.5<|eta|<2.7 for variation %s and muon with pt=%.4f, eta=%.2f and phi=%.2f, returning %.1f", sysname().c_str(), ptAcc(mu), etaAcc(mu), phiAcc(mu), m_default_eff_ttva);
362  ++m_warnsPrinted;
363  }
364  Eff = m_default_eff_ttva;
365  return CorrectionCode::Ok;
366  }
367  int bin = -1;
368  CorrectionCode cc = Hist->FindBin(mu, bin);
369  if (cc != CorrectionCode::Ok) return cc;
370  else Eff = Hist->GetBinContent(bin);
371 
372  if (add_kine_syst && m_respond_to_kineDepSyst) {
373  return m_sf_KineDepsys->GetKineDependent(mu, Eff);
374  }
375  return CorrectionCode::Ok;
376  }
378  float sf = 0;
380  (*m_sf_decor)(mu) = sf;
381  return result;
382  }
384  std::vector<float> replicas(n_replicas);
386  (*m_sf_rep_decor)(mu)= replicas;
387  return result;
388  }
389 
391  float effi = 0;
393  (*m_eff_decor)(mu) = effi;
394  return result;
395  }
397  std::vector<float> replicas(n_replicas);
399  (*m_eff_rep_decor)(mu) = replicas;
400  return result;
401  }
403  float effi = 0;
405  (*m_mc_eff_decor)(mu) = effi;
406  return result;
407  }
409  std::vector<float> replicas(n_replicas);
411  (*m_mc_eff_rep_decor)(mu) = replicas;
412  return result;
413  }
416  }
419  }
422  }
424  if (replicas.size() != SF.size()) GenerateReplicas(SF.size(), 1000. * mu.phi() + mu.eta());
425  if (replicas.empty()) return CorrectionCode::OutOfValidityRange;
426  if (m_measurement == CP::MuonEfficiencyType::TTVA && std::abs(mu.eta()) > 2.5 && std::abs(mu.eta()) <= 2.7 && mu.muonType() == xAOD::Muon::MuonType::MuonStandAlone) {
428  Info("EfficiencyScaleFactor", "No TTVA sf/efficiency provided for standalone muons with 2.5<|eta|<2.7 for variation %s and muon with pt=%.4f, eta=%.2f and phi=%.2f, returning %.1f", sysname().c_str(), mu.pt(), mu.eta(), mu.phi(), m_default_eff_ttva);
429  ++m_warnsPrinted;
430  }
431  for (auto& r : SF)
433  return CorrectionCode::Ok;
434  }
435  int bin = -1;
436  float extra_sys = 1;
437  if (add_kine_syst && m_respond_to_kineDepSyst) {
438  CorrectionCode cc = m_sf_KineDepsys->GetKineDependent(mu, extra_sys);
439  if (cc != CorrectionCode::Ok) {}
440  }
441 
442  CorrectionCode res = (*replicas.begin())->FindBin(mu, bin);
443  if (res != CorrectionCode::Ok) return res;
444  else {
445  for (size_t k = 0; k < SF.size(); k++) {
446  SF[k] = replicas.at(k)->GetBinContent(bin) * extra_sys;
447  }
448  }
449  return res;
450  }
451  void EfficiencyScaleFactor::GenerateReplicas(int nrep, int seed) {
452  GenerateReplicasFromHist(m_eff.get(), nrep, seed, m_eff_replicas);
453  GenerateReplicasFromHist(m_sf.get(), nrep, seed, m_sf_replicas);
455  }
457  if (!h) return;
458  TRandom3 Rndm(seed);
459  replicas.clear();
460  replicas.reserve(nrep);
461  int nBins = h->nBins();
462  for (int t = 0; t < nrep; t++) {
463  replicas.push_back(package_histo(this, h->GetHist()));
464  HistHandler* replica = replicas.back().get();
465  for (int bin = 0; bin < nBins; bin++) {
466  replica->SetBinContent(bin, Rndm.Gaus(h->GetBinContent(bin), h->GetBinError(bin)));
467  }
468  }
469  }
470 
472  if (m_syst_name.empty()) return true;
473  if (!m_NominalFallBack) {
474  Error("EfficiencyScaleFactor::SetSystematicBin()", "No fallback has been given for %s", sysname().c_str());
475  return false;
476  }
478  Error("EfficiencyScaleFactor::SetSystematicBin()", "The current bin %i is out of the maximum range %u ", bin, nBins());
479  return false;
480  }
482  return true;
483  }
484  std::string EfficiencyScaleFactor::GetBinName(int bin) const {
485  if (bin < 1 || bin > nBins()) {
486  Error("EfficiencyScaleFactor::GetBinName()", "The current bin %i is out of the maximum range %u ", bin, nBins());
487  return "Out of range";
488  }
489  return m_sf->GetBinName(bin);
490  }
491 
493  int bin = -1;
494  CorrectionCode cc = m_sf->FindBin(mu, bin);
495  if (cc == CP::CorrectionCode::Error) {
496  return -1;
497  }
498  return bin;
499  }
500 
501 } /* namespace CP */
CP::MuonEfficiencyScaleFactors::filename_Calo
std::string filename_Calo() const
Reconstruction scale-factors have a dedicated map for calo-tag muons around |\eta|<0....
Definition: MuonEfficiencyScaleFactors.cxx:416
CP::EfficiencyScaleFactor::m_syst_name
std::string m_syst_name
Definition: EfficiencyScaleFactor.h:174
CP::MuonEfficiencyScaleFactors::filename_Central
std::string filename_Central() const
The following methods are meant to propagate information from the central tool to the subtool managin...
Definition: MuonEfficiencyScaleFactors.cxx:385
beamspotman.r
def r
Definition: beamspotman.py:674
CP::EfficiencyScaleFactor::DataEfficiency
CorrectionCode DataEfficiency(const xAOD::Muon &mu, float &Eff) const
... and absolute efficiencies
Definition: EfficiencyScaleFactor.cxx:316
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::EffiCollection
The EffiCollection class handles the 5 different scale-factor maps binned in time.
Definition: EffiCollection.h:34
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
get_generator_info.result
result
Definition: get_generator_info.py:21
CP::EfficiencyScaleFactor::m_mc_eff
std::unique_ptr< HistHandler > m_mc_eff
Definition: EfficiencyScaleFactor.h:188
CP::EfficiencyScaleFactor::m_firstRun
unsigned int m_firstRun
Definition: EfficiencyScaleFactor.h:225
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
CP::BadMuonVeto
@ BadMuonVeto
Definition: MuonEfficiencyType.h:17
MuonEfficiencyScaleFactors.h
RootHelpers::FindBin
Int_t FindBin(const TAxis *axis, const double x)
Definition: RootHelpers.cxx:14
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::HistHandler::FindBin
virtual CorrectionCode FindBin(columnar::MuonId muon, int &bin) const =0
Function that changes from Implementation to implementation.
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
CP::HistHandler::GetBinContent
double GetBinContent(int bin) const
Definition: HistHandler.h:51
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
mapkey::sys
@ sys
Definition: TElectronEfficiencyCorrectionTool.cxx:42
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
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
sTgcDigitEffiDump.effi
list effi
Definition: sTgcDigitEffiDump.py:38
grepfile.content
string content
Definition: grepfile.py:56
CP::CorrectionCode::OutOfValidityRange
@ OutOfValidityRange
Input object is out of validity range.
Definition: CorrectionCode.h:37
CP::CorrectionCode::Error
@ Error
Some error happened during the object correction.
Definition: CorrectionCode.h:36
CP::EfficiencyScaleFactor::m_lastRun
unsigned int m_lastRun
Definition: EfficiencyScaleFactor.h:226
CP::Iso
@ Iso
Definition: MuonEfficiencyType.h:16
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
lumiFormat.i
int i
Definition: lumiFormat.py:85
CP::EfficiencyScaleFactor::setFirstLastRun
void setFirstLastRun(unsigned int first, unsigned int last)
Set the run-number coverage.
Definition: EfficiencyScaleFactor.cxx:202
CP::HistHandler::SetBinContent
void SetBinContent(int bin, float val)
Definition: HistHandler.cxx:140
CP::HistHandler
Definition: HistHandler.h:42
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:11
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
EfficiencyScaleFactor.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
CP::dRJetAxisHandler::set_use_2D_sf
static void set_use_2D_sf(const bool)
Definition: HistHandler.cxx:73
CP::EfficiencyScaleFactor::ApplyDataEfficiencyReplicas
CorrectionCode ApplyDataEfficiencyReplicas(const xAOD::Muon &mu, int n_replicas)
Definition: EfficiencyScaleFactor.cxx:396
CP::MuonEfficiencyScaleFactors::filename_HighEta
std::string filename_HighEta() const
High-eta reconstruction scale-factors are not obtained by the means of are not obtained by the means ...
Definition: MuonEfficiencyScaleFactors.cxx:423
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
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
CP::TTVA
@ TTVA
Definition: MuonEfficiencyType.h:15
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
CP::EffiCollection::Symmetric
@ Symmetric
Definition: EffiCollection.h:59
CP::EfficiencyScaleFactor::GenerateReplicas
void GenerateReplicas(int nrep, int seed)
Definition: EfficiencyScaleFactor.cxx:451
CP::EfficiencyScaleFactor::GenerateReplicasFromHist
void GenerateReplicasFromHist(HistHandler *h, int nrep, int seed, EfficiencyScaleFactor::SFReplicaVec &repVector)
Definition: EfficiencyScaleFactor.cxx:456
CP::CorrectionCode::Ok
@ Ok
The correction was done successfully.
Definition: CorrectionCode.h:38
h
CP::EfficiencyScaleFactor::ApplyMCEfficiency
CorrectionCode ApplyMCEfficiency(const xAOD::Muon &mu) const
... or decorate them directly
Definition: EfficiencyScaleFactor.cxx:402
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
CP::EfficiencyScaleFactor::ApplyScaleFactorReplicas
CorrectionCode ApplyScaleFactorReplicas(const xAOD::Muon &mu, int n_replicas)
Definition: EfficiencyScaleFactor.cxx:383
CP::dRJetAxisHandler::set_close_jet_decorator
static void set_close_jet_decorator(const std::string &decor_name)
Definition: HistHandler.cxx:69
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<>
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_SystematicBin
int m_SystematicBin
Definition: EfficiencyScaleFactor.h:214
CP::MuonEfficiencyScaleFactors::close_by_jet_decoration
const std::string & close_by_jet_decoration() const
Returns the string telling the tool in which float AuxElement the information of the separation to th...
Definition: MuonEfficiencyScaleFactors.cxx:99
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
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
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::MuonEfficiencyScaleFactors::use_2D_iso_corrections
bool use_2D_iso_corrections() const
option to set if we want to use 1D or 2D isolation SFs
Definition: MuonEfficiencyScaleFactors.cxx:102
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
plotBeamSpotCompare.histo
histo
Definition: plotBeamSpotCompare.py:414
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:51
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
CP::EfficiencyScaleFactor::m_sf
std::unique_ptr< HistHandler > m_sf
the histograms needed to run
Definition: EfficiencyScaleFactor.h:186
CP::MuonEfficiencyScaleFactors::measurement
CP::MuonEfficiencyType measurement() const
Returns the type of the measurement to be carried out... E.g. Reco/TTVA/Iso.
Definition: MuonEfficiencyScaleFactors.cxx:109
fitman.k
k
Definition: fitman.py:528
python.handimod.cc
int cc
Definition: handimod.py:522
EffiCollection.h
CP::EfficiencyScaleFactor::m_eff_replicas
SFReplicaVec m_eff_replicas
Definition: EfficiencyScaleFactor.h:209
CP::EfficiencyScaleFactor::separateBinSyst
bool separateBinSyst() const
Definition: EfficiencyScaleFactor.cxx:187