Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
EffiCollection.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3  */
4 
9 #include <TTree.h>
10 namespace CP {
11  namespace {
12  static const std::vector<std::string> ToRemove { "GeV", "MeV", "[", "]", "{", "}", "(", ")", "#", " " };
13  typedef std::pair<std::string,std::string> stringpair;
14  static const std::vector<stringpair> ToReplace { stringpair("-","minus"), stringpair(".","p")};
15 
16  }
18  m_ref_tool(ref_tool),
19  m_central_eff(),
20  m_calo_eff(),
21  m_forward_eff(),
22  m_lowpt_central_eff(),
23  m_lowpt_calo_eff(),
24  m_lrt_central_eff(),
25  m_lrt_lowpt_central_eff(),
26  m_syst_set(std::make_unique<SystematicSet>()){
27 
28  ref_tool.addSubtool (*this);
29 
30  m_central_eff = std::make_shared<CollectionContainer>(m_ref_tool, CollectionType::Central);
31  m_central_eff->addSubtoolsTo(*this);
33  m_calo_eff = std::make_shared<CollectionContainer>(m_ref_tool,CollectionType::Calo);
34  m_calo_eff->addSubtoolsTo(*this);
35  } else m_calo_eff = m_central_eff;
36 
38  m_forward_eff = std::make_shared<CollectionContainer>(m_ref_tool,CollectionType::Forward);
39  m_forward_eff->addSubtoolsTo(*this);
41 
43  m_lowpt_central_eff = std::make_shared<CollectionContainer>(m_ref_tool,CollectionType::CentralLowPt);
44  m_lowpt_central_eff->addSubtoolsTo(*this);
46 
48  m_lowpt_calo_eff = std::make_shared<CollectionContainer>(m_ref_tool, CollectionType::CaloLowPt);
49  m_lowpt_calo_eff->addSubtoolsTo(*this);
51 
52  if(m_ref_tool.use_lrt()) {
54  m_lrt_central_eff = std::make_shared<CollectionContainer>(m_ref_tool,CollectionType::Central);
55  }
56  else {
58  }
59  if (m_ref_tool.lowPtTransition() > 0 ) {
62  }
65  }
66  else {
67  m_lrt_lowpt_central_eff = std::make_shared<CollectionContainer>(m_ref_tool,CollectionType::CentralLowPt);
68  }
69  }
70  else {
72  }
73  }
74  }
75 
76  EffiCollection::EffiCollection(const EffiCollection* Nominal, MuonEfficiencyScaleFactors& ref_tool, const std::string& syst, int syst_bit_map, bool is_up):
77  m_ref_tool(ref_tool),
78  m_central_eff(),
79  m_calo_eff(),
80  m_forward_eff(),
81  m_lowpt_central_eff(),
82  m_lowpt_calo_eff(),
83  m_lrt_central_eff(),
84  m_lrt_lowpt_central_eff(),
85  m_syst_set() {
86 
87  ref_tool.addSubtool (*this);
88 
89  if (is_up) syst_bit_map |= EffiCollection::UpVariation;
91  std::function< std::shared_ptr<CollectionContainer>(CollectionType)> make_variation = [this,&ref_tool, Nominal, syst_bit_map, syst](CollectionType type){
92  if (syst_bit_map & type) {
93  return std::make_shared<CollectionContainer>(ref_tool,
94  Nominal->retrieveContainer(type).get(),
95  syst, syst_bit_map); }
97  if (ref_tool.measurement() != MuonEfficiencyType::Reco) return m_central_eff;
98  return Nominal->retrieveContainer(type);
99  };
100  m_central_eff = make_variation(CollectionType::Central);
101  m_central_eff->addSubtoolsTo (*this);
102  m_forward_eff = make_variation(CollectionType::Forward);
103  m_forward_eff->addSubtoolsTo (*this);
104  m_calo_eff = make_variation(CollectionType::Calo);
105  m_calo_eff->addSubtoolsTo (*this);
106  m_lowpt_central_eff = make_variation(CollectionType::CentralLowPt);
107  m_lowpt_central_eff->addSubtoolsTo (*this);
108  m_lowpt_calo_eff = make_variation(CollectionType::CaloLowPt);
109  m_lowpt_calo_eff->addSubtoolsTo (*this);
110 
111  if (m_ref_tool.use_lrt()) {
112  m_lrt_central_eff = make_variation(CollectionType::Central);
113  m_lrt_lowpt_central_eff = make_variation(CollectionType::CentralLowPt);
114  }
115  }
116 
117  std::shared_ptr<CollectionContainer> EffiCollection::retrieveContainer(CollectionType Type) const {
118  if (Type == CollectionType::Central) return m_central_eff;
119  if (Type == CollectionType::Forward) return m_forward_eff;
120  if (Type == CollectionType::Calo) return m_calo_eff;
121  if (Type == CollectionType::CentralLowPt) return m_lowpt_central_eff;
122  if (Type == CollectionType::CaloLowPt) return m_lowpt_calo_eff;
123  return std::shared_ptr<CollectionContainer>();
124  }
126  if (!m_central_eff || !m_central_eff->CheckConsistency()) {
127  Error("EffiCollection()", "Consistency check for central file failed");
128  return false;
129  }
130  if (!m_calo_eff || !m_calo_eff->CheckConsistency()) {
131  Error("EffiCollection()", "Consistency check for calo file failed");
132  return false;
133  }
134  if (!m_forward_eff || !m_forward_eff->CheckConsistency()) {
135  Error("EffiCollection()", "Consistency check for forward file failed");
136  return false;
137  }
138  if (!m_lowpt_central_eff || !m_lowpt_central_eff->CheckConsistency()) {
139  Error("EffiCollection()", "Consistency check for low-pt file failed");
140  return false;
141  }
142  if (!m_lowpt_calo_eff || !m_lowpt_calo_eff->CheckConsistency()) {
143  Error("EffiCollection()", "Consistency check for low-pt calo file failed");
144  return false;
145  }
146  if (m_ref_tool.use_lrt()) {
147  if (!m_lrt_central_eff || !m_lrt_central_eff->CheckConsistency()) {
148  Error("EffiCollection()", "Consistency check for LRT central file failed");
149  return false;
150  }
151  if (!m_lrt_lowpt_central_eff || !m_lrt_lowpt_central_eff->CheckConsistency()) {
152  Error("EffiCollection()", "Consistency check for LRT low-pt file failed");
153  return false;
154  }
155  }
159  unsigned int n = m_central_eff->nBins();
160  std::function<void (CollectionContainer*)> assign_mapping = [this, &n](CollectionContainer* container){
161  if (container != m_central_eff.get() && container->separateBinSyst()){
162  container->SetGlobalOffSet(n);
163  n += container->nBins();
164  };
165  };
166  assign_mapping(m_calo_eff.get());
167  assign_mapping(m_calo_eff.get());
168  assign_mapping(m_lowpt_central_eff.get());
169  assign_mapping(m_lowpt_calo_eff.get());
170 
171  assign_mapping(m_forward_eff.get());
172 
173  if (m_ref_tool.use_lrt()) {
174  assign_mapping(m_lrt_central_eff.get());
175  assign_mapping(m_lrt_lowpt_central_eff.get());
176  }
179  if (!m_syst_set){
180  m_syst_set = std::make_unique<CP::SystematicSet>();
181  size_t glob_sys = m_ref_tool.getPosition(this);
182  if (glob_sys > m_ref_tool.getNCollections()){
183  Error("EffiCollection()", "Invalid position in the list of systematics. It seems that I'm not part of the referring ScaleFactorTool.");
184  return false;
185  }
188 
189  std::shared_ptr<CollectionContainer> container = retrieveContainer(file_type);
190  if (container->isNominal()) continue;
191  if (container->separateBinSyst()){
194  for (unsigned int b = container->nBins() - 1; b > 0 ; --b){
195  unsigned int bin = b + container->globalOffSet();
196  if (container->isOverFlowBin(bin)) continue;
197  m_syst_set->insert(CP::SystematicVariation::makeToyVariation("MUON_EFF_" + container->sysname() + GetBinName(bin) , bin, glob_sys));
198  }
199  } else {
200  m_syst_set->insert( SystematicVariation("MUON_EFF_" + container->sysname(), container->isUpVariation() ? 1 : -1));
201  }
202  }
203  }
204  return true;
205  }
206 
208  if (m_ref_tool.use_lrt()) {
209  if (isLRTmuon.isAvailable(mu)) {
210  if (isLRTmuon(mu)) return FindLRTContainer(mu);
211  }
212  else {
213  static const SG::AuxElement::Accessor<uint64_t> patternAcc("patternRecoInfo");
214  const xAOD::TrackParticle* idtrack = mu.getXAODObject().trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
215  if(idtrack) {
216  if(!patternAcc.isAvailable(*idtrack)) {
217  Error("CollectionContainer", "No information available to tell if the muon is LRT or standard. Either run MuonLRTMergingAlg to decorate with `isLRT` flag, or supply the patternRecoInfo for the original ID track.");
218  }
219  std::bitset<xAOD::NumberOfTrackRecoInfo> patternBitSet(patternAcc(*idtrack));
220  if (patternBitSet.test(xAOD::SiSpacePointsSeedMaker_LargeD0)) return FindLRTContainer(mu);
221  }
222  }
223  }
224  if (ptAcc(mu) < m_ref_tool.lowPtTransition()) {
225  if (std::abs(etaAcc(mu)) >= 2.5) {
226  return m_forward_eff.get();
227  }
228  if (muonTypeAcc(mu) == xAOD::Muon::CaloTagged) {
229  return m_lowpt_calo_eff.get();
230  }
231  return m_lowpt_central_eff.get();
232  }
233  if (muonTypeAcc(mu) == xAOD::Muon::CaloTagged) {
234  return m_calo_eff.get();
235  } else if (std::abs(etaAcc(mu)) < 2.5) {
236  return m_central_eff.get();
237  } else {
238  return m_forward_eff.get();
239  }
240  }
242  if (m_central_eff->isBinInMap(bin)) return m_central_eff.get();
243  if (m_forward_eff->isBinInMap(bin)) return m_forward_eff.get();
244  if (m_calo_eff->isBinInMap(bin)) return m_calo_eff.get();
245  if (m_lowpt_central_eff->isBinInMap(bin)) return m_lowpt_central_eff.get();
246  if (m_lowpt_calo_eff->isBinInMap(bin)) return m_lowpt_calo_eff.get();
247  if (m_ref_tool.use_lrt()) {
248  if (m_lrt_central_eff->isBinInMap(bin)) return m_lrt_central_eff.get();
249  if (m_lrt_lowpt_central_eff->isBinInMap(bin)) return m_lrt_lowpt_central_eff.get();
250  }
251  return nullptr;
252  }
255  else return m_lrt_central_eff.get();
256  }
259  }
262  if (Cont != nullptr) return Cont->retrieve(RunNumber);
263  Warning("EffiCollection::retrieveSF()", "Invalid muon");
264  return nullptr;
265  }
266  unsigned int EffiCollection::nBins() const {
267  unsigned int Nbins = 0;
268  if (m_central_eff) {
269  Nbins += m_central_eff->nBins();
270  }
271  if (m_central_eff != m_calo_eff) {
272  Nbins += m_calo_eff->nBins();
273  }
274  if (m_forward_eff != m_central_eff) {
275  Nbins += m_forward_eff->nBins();
276  }
278  Nbins += m_lowpt_central_eff->nBins();
279  }
281  Nbins += m_lowpt_calo_eff->nBins();
282  }
283  if (m_ref_tool.use_lrt()) {
284  if (m_lrt_central_eff) {
285  Nbins += m_lrt_central_eff->nBins();
286  }
288  Nbins += m_lrt_lowpt_central_eff->nBins();
289  }
290  }
291  return Nbins;
292  }
293  bool EffiCollection::SetSystematicBin(unsigned int Bin) {
294  CollectionContainer* Cont = FindContainer(Bin);
295  if (!Cont) return false;
296  return Cont->SetSystematicBin(Bin);
297  }
298  bool EffiCollection::IsLowPtBin(unsigned int Bin) const {
299  return (m_central_eff != m_lowpt_central_eff && m_lowpt_central_eff->isBinInMap(Bin)) ||
300  (m_central_eff != m_lowpt_calo_eff && m_lowpt_calo_eff->isBinInMap(Bin));
301  }
302  bool EffiCollection::IsForwardBin(unsigned int Bin) const {
303  return m_forward_eff != m_central_eff && m_forward_eff->isBinInMap(Bin);
304  }
305 
307  if (T == CollectionType::Central) return "Central";
308  if (T == CollectionType::Calo) return "Calo";
309  if (T == CollectionType::Forward) return "Forward";
310  if (T == CollectionType::CentralLowPt) return "CentralLowPt";
311  if (T == CollectionType::CaloLowPt) return "CaloLowPt";
312  return "EffiCollection::FileTypeName() - WARNING: Unknown EffiCollection::CollectionType!";
313  }
314 
315  std::string EffiCollection::GetBinName(unsigned int bin) const {
317  if (Cont) {
318  std::string BinName = FileTypeName(Cont->type()) +"_"+ Cont->GetBinName(bin);
319  for (const std::string& R : ToRemove) {
320  BinName = ReplaceExpInString(BinName, R, "");
321  }
322  for (const stringpair& R : ToReplace) {
323  BinName = ReplaceExpInString(BinName, R.first, R.second);
324  }
325  return BinName;
326  }
327  Warning("EffiCollection::GetBinName()", "Unknown bin %u", bin);
328 
329  return "UNKNOWN_BIN";
330  }
332  CollectionContainer* container = FindContainer(mu);
333  if (container) return container->FindBinSF(mu);
334  return -1;
335  }
337  return m_syst_set.get();
338  }
340  return m_syst_set->find(variation) != m_syst_set->end();
341  }
343  if (set.empty()) return m_syst_set->empty();
344  for (const SystematicVariation& variation: set){
345  if (isAffectedBySystematic(variation)) return true;
346  }
347  return false;
348  }
349 
350 
351  //################################################################################
352  // CollectionContainer
353  //################################################################################
355  m_SF(),
356  m_currentSF(nullptr),
357  m_FileType(FileType),
358  m_binOffSet(0){
359 
360  std::map<std::string, std::pair<unsigned int, unsigned int>> map = findPeriods(ref_tool);
361  for (auto& period : map) {
362  m_SF.push_back(std::make_shared<EfficiencyScaleFactor>(ref_tool, fileName(ref_tool), period.first));
363  m_SF.back()->setFirstLastRun(period.second.first, period.second.second);
364  }
365  }
366  CollectionContainer::CollectionContainer(const MuonEfficiencyScaleFactors& ref_tool, CollectionContainer* Nominal, const std::string& syst_name, unsigned int syst_bit_map):
367  m_SF(),
368  m_currentSF(nullptr),
369  m_FileType(Nominal->type()),
370  m_binOffSet(0) {
371  std::map<std::string, std::pair<unsigned int, unsigned int>> map = findPeriods(ref_tool);
372  for (auto& period : map) {
373  std::vector< std::shared_ptr<EfficiencyScaleFactor>>::const_iterator itr = std::find_if( Nominal->m_SF.begin(),
374  Nominal->m_SF.end(),
375  [&period](const std::shared_ptr<EfficiencyScaleFactor>& a){
376  return a->coversRunNumber(period.second.first);
377  });
378  m_SF.push_back(std::make_shared<EfficiencyScaleFactor>(*itr, ref_tool, fileName(ref_tool), period.first, syst_name, syst_bit_map));
379  m_SF.back()->setFirstLastRun(period.second.first, period.second.second);
380  }
381  }
382  std::map<std::string, std::pair<unsigned int, unsigned int>> CollectionContainer::findPeriods(const MuonEfficiencyScaleFactors& ref_tool) const{
383 
384  std::string file_name = fileName(ref_tool);
385  std::map<std::string, std::pair<unsigned int, unsigned int>> map;
386 
387  std::unique_ptr<TFile> fin (TFile::Open(file_name.c_str()));
388  if (!fin || !fin->IsOpen()) {
389  Error("CollectionContainer","Unable to open file %s", file_name.c_str());
390  return map;
391  }
392  TTree* intree = 0;
393  fin->GetObject("LumiData", intree);
394 
395  // if no Lumi tree is found, we assume that the SF are not binned in time
396  if (!intree) {
397  map["All"] = std::pair<unsigned int,unsigned int>(1, 999999);
398  } else {
399  std::string *period = 0;
400  unsigned int firstRun = 0;
401  unsigned int lastRun = 0;
402  intree->SetBranchAddress("Period", &period);
403  intree->SetBranchAddress("FirstRun", &firstRun);
404  intree->SetBranchAddress("LastRun", &lastRun);
405  for (int t = 0; intree->GetEntry(t); t++) {
406  map[*period] = std::pair<unsigned int, unsigned int>(firstRun, lastRun);
407  }
408  }
409  return map;
410  }
411  std::string CollectionContainer::fileName(const MuonEfficiencyScaleFactors& ref_tool) const{
412  if (type() == EffiCollection::CollectionType::Central) return ref_tool.filename_Central();
413  if (type() == EffiCollection::CollectionType::Calo) return ref_tool.filename_Calo();
414  if (type() == EffiCollection::CollectionType::CentralLowPt) return ref_tool.filename_LowPt();
415  if (type() == EffiCollection::CollectionType::CaloLowPt) return ref_tool.filename_LowPtCalo();
416  return ref_tool.filename_HighEta();
417  }
418 
420  if (m_SF.empty()) {
421  Error("CollectionContainer", "Could not retrieve any SFs from the input file");
422  return false;
423  }
425  for (std::vector< std::shared_ptr<EfficiencyScaleFactor>>::const_iterator first_sf = m_SF.begin() ; first_sf != m_SF.end(); ++first_sf) {
426  if (!(*first_sf)->CheckConsistency()) return false;
427  for (std::vector< std::shared_ptr<EfficiencyScaleFactor>>::const_iterator second_sf = m_SF.begin(); second_sf != first_sf; ++second_sf) {
428  if ( (*first_sf)->coversRunNumber( (*second_sf)->firstRun()) || (*first_sf)->coversRunNumber((*second_sf)->lastRun()) ||
429  (*second_sf)->coversRunNumber( (*first_sf)->firstRun()) || (*second_sf)->coversRunNumber((*first_sf)->lastRun())){
430  Error("CollectionContainer", "Overlapping periods observed in file type %s. As run %i is in period %i - %i. Please check your SF file!",
431  EffiCollection::FileTypeName(m_FileType).c_str(), (*first_sf)->firstRun(), (*second_sf)->firstRun(), (*second_sf)->lastRun());
432  return false;
433  }
434  }
435  }
436 
437  std::sort(m_SF.begin(), m_SF.end(), [](const std::shared_ptr<EfficiencyScaleFactor>& a, const std::shared_ptr<EfficiencyScaleFactor>& b){
438  return a->firstRun() < b->firstRun();});
439  return true;
440  }
443  for (auto& period : m_SF) {
444  if (period->coversRunNumber(RunNumber)) {
445  m_currentSF = period.get();
446  return true;
447  }
448  }
449  } else return true;
450  Warning("CollectionContainer", "Could not find any SF period in %s matching the run number %u", EffiCollection::FileTypeName(type()).c_str(), RunNumber);
451  return false;
452  }
454  if (!LoadPeriod(RunNumber)) {
455  return (*m_SF.begin()).get();
456  }
457  return m_currentSF;
458  }
459  bool CollectionContainer::SetSystematicBin(unsigned int Bin) {
460  for ( std::shared_ptr<EfficiencyScaleFactor>& Period : m_SF) {
461  if (!Period->SetSystematicBin(Bin- m_binOffSet)) {
462  return false;
463  }
464  }
465  return true;
466  }
467  unsigned int CollectionContainer::nBins() const {
468  return m_SF.empty() ? 0 : (*m_SF.begin())->nBins();
469  }
470  unsigned int CollectionContainer::nOverFlowBins() const {
471  return m_SF.empty() ? 0 : (*m_SF.begin())->nOverFlowBins();
472  }
474  return m_SF.empty() ? true : (*m_SF.begin())->isOverFlowBin(b-m_binOffSet);
475  }
476  bool CollectionContainer::isBinInMap(unsigned int bin) const{
477  return m_binOffSet <= bin && bin < m_binOffSet + nBins();
478  }
480  return m_FileType;
481  }
482  std::string CollectionContainer::GetBinName(unsigned int Bin) const {
483  return (*m_SF.begin())->GetBinName(Bin- m_binOffSet);
484  }
486  if (m_SF.empty() ) return -1;
487  int bin = (*m_SF.begin())->FindBinSF(mu);
488  return bin > 0 ? m_binOffSet + bin : bin;
489  }
490  void CollectionContainer::SetGlobalOffSet(unsigned int OffSet){
491  m_binOffSet = OffSet;
492  }
493  unsigned int CollectionContainer::globalOffSet() const{
494  return m_binOffSet;
495  }
497  if (m_SF.empty()) return false;
498  return (*m_SF.begin())->sysname(false).empty();
499  }
501  if (m_SF.empty()) return false;
502  return (*m_SF.begin())->IsUpVariation();
503  }
505  if (m_SF.empty()) return false;
506  return (*m_SF.begin())->separateBinSyst();
507  }
508  std::string CollectionContainer::sysname() const{
509  if (m_SF.empty()) return "UNKNOWN SYST";
510  return (*m_SF.begin())->sysname(false);
511  }
513  for (auto& SF : m_SF)
514  parentTool.addSubtool(*SF);
515  }
516 }
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:398
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:367
CP::MuonEfficiencyScaleFactors::filename_LRTLowPt
std::string filename_LRTLowPt() const
Definition: MuonEfficiencyScaleFactors.cxx:420
python.AtlRunQueryAMI.period
period
Definition: AtlRunQueryAMI.py:225
CP::EffiCollection
The EffiCollection class handles the 5 different scale-factor maps binned in time.
Definition: EffiCollection.h:34
CP::EffiCollection::etaAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > etaAcc
Definition: EffiCollection.h:133
CP::EffiCollection::CentralLowPt
@ CentralLowPt
Definition: EffiCollection.h:48
CP::EffiCollection::IsForwardBin
bool IsForwardBin(unsigned int Bin) const
Checks whether the i-th bin belongs to the forward map.
Definition: EffiCollection.cxx:302
CP::MuonEfficiencyScaleFactors::lowPtTransition
float lowPtTransition() const
If the pt of the muon is below that threshold the J/Psi or Upsilon map is used given that it's availa...
Definition: MuonEfficiencyScaleFactors.cxx:88
CP::SystematicVariation::makeToyVariation
static SystematicVariation makeToyVariation(const std::string &basename, unsigned toyIndex, float toyScale)
constructor for toy systematics
Definition: SystematicVariation.cxx:238
CP::CollectionContainer::LoadPeriod
bool LoadPeriod(unsigned int RunNumber)
Definition: EffiCollection.cxx:441
CP::EffiCollection::getSystSet
SystematicSet * getSystSet() const
Returns the systematic set affecting this collection.
Definition: EffiCollection.cxx:336
athena_checkUpload.Period
int Period
--> Execution phase:
Definition: athena_checkUpload.py:179
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
CP::EffiCollection::FindLRTContainer
CollectionContainer * FindLRTContainer(columnar::MuonId mu) const
Definition: EffiCollection.cxx:253
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
MuonEfficiencyScaleFactors.h
CP::EffiCollection::IsLowPtBin
bool IsLowPtBin(unsigned int Bin) const
Checks whether the i-th bin belongs to the low-pt map...
Definition: EffiCollection.cxx:298
CP::EffiCollection::m_lowpt_central_eff
std::shared_ptr< CollectionContainer > m_lowpt_central_eff
Definition: EffiCollection.h:120
CP::EffiCollection::Central
@ Central
The five different scale-factor maps.
Definition: EffiCollection.h:45
CP::CollectionContainer::separateBinSyst
bool separateBinSyst() const
Definition: EffiCollection.cxx:504
CP::MuonEfficiencyScaleFactors
Definition: MuonEfficiencyScaleFactors.h:29
TRT_PAI_gasdata::SF
const float SF[NF]
Cross sections for Fluor.
Definition: TRT_PAI_gasdata.h:285
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
bin
Definition: BinsDiffFromStripMedian.h:43
CP::CollectionContainer::isBinInMap
bool isBinInMap(unsigned int bin) const
Checks if the global bin number belongs to this map.
Definition: EffiCollection.cxx:476
CP::EffiCollection::Calo
@ Calo
Definition: EffiCollection.h:46
CP::CollectionContainer::isNominal
bool isNominal() const
Definition: EffiCollection.cxx:496
CP::CollectionContainer::globalOffSet
unsigned int globalOffSet() const
Global offset of the bin numbers.
Definition: EffiCollection.cxx:493
CP::CollectionContainer::isOverFlowBin
bool isOverFlowBin(int b) const
Check whether the bin is overflow or not.
Definition: EffiCollection.cxx:473
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
CP::CollectionContainer::retrieve
EfficiencyScaleFactor * retrieve(unsigned int RunNumer)
Retrieve the scale-factor map belonging to that particular run of data-taking.
Definition: EffiCollection.cxx:453
CP::SystematicVariation
Definition: SystematicVariation.h:47
CP::CollectionContainer
The collection container manages the time binning of a particular scale-factor map.
Definition: EffiCollection.h:140
CP
Select isolated Photons, Electrons and Muons.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:49
CP::EffiCollection::m_lrt_central_eff
std::shared_ptr< CollectionContainer > m_lrt_central_eff
Definition: EffiCollection.h:122
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
CP::EffiCollection::Forward
@ Forward
Definition: EffiCollection.h:47
CP::MuonEfficiencyScaleFactors::filename_LRTCentral
std::string filename_LRTCentral() const
LRT muons have their own efficiency maps.
Definition: MuonEfficiencyScaleFactors.cxx:381
CP::EffiCollection::EffiCollection
EffiCollection(MuonEfficiencyScaleFactors &ref_tool)
Definition: EffiCollection.cxx:17
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
physics_parameters.file_name
string file_name
Definition: physics_parameters.py:32
CP::EffiCollection::m_lowpt_calo_eff
std::shared_ptr< CollectionContainer > m_lowpt_calo_eff
Definition: EffiCollection.h:121
CP::MuonEfficiencyScaleFactors::getPosition
size_t getPosition(const EffiCollection *coll) const
Returns the position of the collection in the syst set vector.
Definition: MuonEfficiencyScaleFactors.cxx:113
CP::MuonEfficiencyScaleFactors::filename_LowPt
std::string filename_LowPt() const
Returns the scale-factor maps from a complementary scale-factor measurement using the J/Psi or Upsilo...
Definition: MuonEfficiencyScaleFactors.cxx:412
CP::EffiCollection::nBins
unsigned int nBins() const
Get the number of all bins in the scale-factor maps including the overflow & underflow bins.
Definition: EffiCollection.cxx:266
CP::EffiCollection::CollectionType
CollectionType
Definition: EffiCollection.h:43
CP::EffiCollection::retrieveContainer
std::shared_ptr< CollectionContainer > retrieveContainer(CollectionType Type) const
Method to retrieve a container from the class ordered by a collection type This method is mainly used...
Definition: EffiCollection.cxx:117
CP::EffiCollection::UpVariation
@ UpVariation
Definition: EffiCollection.h:62
CP::CollectionContainer::GetBinName
std::string GetBinName(unsigned int Bin) const
Name of the i-th bin.
Definition: EffiCollection.cxx:482
jet::CombMassComp::Calo
@ Calo
Definition: UncertaintyEnum.h:197
beamspotman.n
n
Definition: beamspotman.py:731
CP::CollectionContainer::SetSystematicBin
bool SetSystematicBin(unsigned int Bin)
Activate this bin to run in the uncorrelated systematic mode.
Definition: EffiCollection.cxx:459
CP::Reco
@ Reco
Definition: MuonEfficiencyType.h:14
CP::CollectionContainer::nBins
unsigned int nBins() const
Number of bins of the map itself.
Definition: EffiCollection.cxx:467
EfficiencyScaleFactor.h
CP::EffiCollection::GetBinName
std::string GetBinName(unsigned int bin) const
Returns the global bin name conststucted from the axis titles and the bin borders.
Definition: EffiCollection.cxx:315
CP::CollectionContainer::isUpVariation
bool isUpVariation() const
Definition: EffiCollection.cxx:500
CP::EffiCollection::muonTypeAcc
columnar::MuonAccessor< columnar::RetypeColumn< xAOD::Muon::MuonType, std::uint16_t > > muonTypeAcc
Definition: EffiCollection.h:134
CP::EfficiencyScaleFactor
Definition: EfficiencyScaleFactor.h:40
CP::CollectionContainer::CollectionContainer
CollectionContainer(const MuonEfficiencyScaleFactors &ref_tool, EffiCollection::CollectionType FileType)
Nominal constructor... Only needs to know about it's type and the file to load.
Definition: EffiCollection.cxx:354
xAODType
Definition: ObjectType.h:13
xAOD::SiSpacePointsSeedMaker_LargeD0
@ SiSpacePointsSeedMaker_LargeD0
Definition: TrackingPrimitives.h:184
CP::EffiCollection::isLRTmuon
columnar::MuonAccessor< char > isLRTmuon
Definition: EffiCollection.h:135
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:405
CP::CollectionContainer::FindBinSF
int FindBinSF(const xAOD::Muon &mu) const
Returns the global bin number corresponding to the muon kinematics.
Definition: EffiCollection.cxx:485
CP::EffiCollection::m_ref_tool
const MuonEfficiencyScaleFactors & m_ref_tool
Definition: EffiCollection.h:112
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
CP::EffiCollection::retrieveSF
EfficiencyScaleFactor * retrieveSF(const xAOD::Muon &mu, unsigned int RunNumber) const
return the correct SF type to provide, depending on eta and the author
Definition: EffiCollection.cxx:257
CP::EffiCollection::m_forward_eff
std::shared_ptr< CollectionContainer > m_forward_eff
Definition: EffiCollection.h:119
EventInfoWrite.RunNumber
RunNumber
Definition: EventInfoWrite.py:50
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition: ObjectId.h:18
CP::CollectionContainer::type
EffiCollection::CollectionType type() const
File type of the map.
Definition: EffiCollection.cxx:479
CP::CollectionContainer::sysname
std::string sysname() const
Returns MUON_EFF_<sysname()>
Definition: EffiCollection.cxx:508
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:83
CP::MuonEfficiencyScaleFactors::getNCollections
size_t getNCollections() const
Returns the number of EffiCollections stored in this class.
Definition: MuonEfficiencyScaleFactors.cxx:121
CP::CollectionContainer::addSubtoolsTo
void addSubtoolsTo(columnar::ColumnarTool<> &parentTool)
Definition: EffiCollection.cxx:512
CP::EffiCollection::m_calo_eff
std::shared_ptr< CollectionContainer > m_calo_eff
Definition: EffiCollection.h:118
CP::EffiCollection::FileTypeName
static std::string FileTypeName(EffiCollection::CollectionType T)
Definition: EffiCollection.cxx:306
CP::EffiCollection::CaloLowPt
@ CaloLowPt
Definition: EffiCollection.h:49
UtilFunctions.h
CP::CollectionContainer::SetGlobalOffSet
void SetGlobalOffSet(unsigned int OffSet)
Sets the global offset to align the order in the map into a global numbering scheme.
Definition: EffiCollection.cxx:490
CP::EffiCollection::FindContainer
CollectionContainer * FindContainer(unsigned int bin) const
Definition: EffiCollection.cxx:241
CP::ReplaceExpInString
std::string ReplaceExpInString(std::string str, const std::string &exp, const std::string &rep)
Replaces all expressions an string by something else.
Definition: PhysicsAnalysis/MuonID/MuonIDAnalysis/MuonEfficiencyCorrections/Root/UtilFunctions.cxx:24
a
TList * a
Definition: liststreamerinfos.cxx:10
CP::CollectionContainer::findPeriods
std::map< std::string, std::pair< unsigned int, unsigned int > > findPeriods(const MuonEfficiencyScaleFactors &ref_tool) const
Definition: EffiCollection.cxx:382
CP::EffiCollection::m_lrt_lowpt_central_eff
std::shared_ptr< CollectionContainer > m_lrt_lowpt_central_eff
Definition: EffiCollection.h:123
CP::MuonEfficiencyScaleFactors::use_lrt
bool use_lrt() const
option to set if we want to use LRT muons
Definition: MuonEfficiencyScaleFactors.cxx:124
CP::CollectionContainer::m_SF
std::vector< std::shared_ptr< EfficiencyScaleFactor > > m_SF
Definition: EffiCollection.h:195
CP::CollectionContainer::CheckConsistency
bool CheckConsistency()
Consistency check of all scale-factor maps managed by the container instance.
Definition: EffiCollection.cxx:419
CP::CollectionContainer::nOverFlowBins
unsigned int nOverFlowBins() const
Number of overflow bins in the map.
Definition: EffiCollection.cxx:470
columnar::ColumnarTool<>
ReadBchFromCool.lastRun
lastRun
Definition: ReadBchFromCool.py:278
CP::EffiCollection::CheckConsistency
bool CheckConsistency()
a consistency check of the scale-factor maps.
Definition: EffiCollection.cxx:125
CP::EffiCollection::m_syst_set
std::unique_ptr< SystematicSet > m_syst_set
The systematic set is returned back to the MuonEfficiencyScaleFactors instance to register The known ...
Definition: EffiCollection.h:127
compute_lumi.fin
fin
Definition: compute_lumi.py:19
CP::EffiCollection::isAffectedBySystematic
bool isAffectedBySystematic(const SystematicVariation &variation) const
Returns whether the given set has variations affecting this Collection.
Definition: EffiCollection.cxx:339
CP::CollectionContainer::m_currentSF
EfficiencyScaleFactor * m_currentSF
Definition: EffiCollection.h:196
SG::ConstAccessor< T, AuxAllocator_t< T > >::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
CP::CollectionContainer::m_binOffSet
unsigned int m_binOffSet
Offset to translate between the bin-numbers in the bin numbers of each file against the global bin-nu...
Definition: EffiCollection.h:201
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
CP::MuonEfficiencyScaleFactors::filename_LowPtCalo
std::string filename_LowPtCalo() const
Definition: MuonEfficiencyScaleFactors.cxx:428
CP::EffiCollection::getUnCorrelatedSystBin
int getUnCorrelatedSystBin(const xAOD::Muon &mu) const
Returns the bin number from which the scale-factor of the muon is going to be retrieved....
Definition: EffiCollection.cxx:331
CP::CollectionContainer::m_FileType
EffiCollection::CollectionType m_FileType
Definition: EffiCollection.h:198
CP::CollectionContainer::fileName
std::string fileName(const MuonEfficiencyScaleFactors &ref_tool) const
Definition: EffiCollection.cxx:411
CP::EffiCollection::m_central_eff
std::shared_ptr< CollectionContainer > m_central_eff
Make the collection container shared ptr to allow that a systematic EffiCollection can use the same c...
Definition: EffiCollection.h:117
CP::EffiCollection::SetSystematicBin
bool SetSystematicBin(unsigned int Bin)
If systematic decorrelation is activated then the user needs to loop manually over the syst bins.
Definition: EffiCollection.cxx:293
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
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:92
CP::EffiCollection::ptAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > ptAcc
Definition: EffiCollection.h:132
EffiCollection.h