Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TauSelectionTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Local include(s):
9 
10 // Framework include(s):
12 
13 // ROOT include(s)
14 #include "TEnv.h"
15 #include "THashList.h"
16 
17 // System include(s)
18 #include <atomic>
19 
20 using namespace TauAnalysisTools;
21 
22 //=================================PUBLIC-PART==================================
23 //______________________________________________________________________________
25  : asg::AsgMetadataTool( name )
26  , m_sJetIDWP("JETIDNONE")
27  , m_sEleIDWP("ELEIDNONE")
28  , m_fOutFile(nullptr)
29  , m_aAccept( "TauSelection" )
30 {
31  declareProperty( "CreateControlPlots", m_bCreateControlPlots = false);
32  /*
33  Baseline properties declaration:
34  properties containing 'Region' are a vector of lower and upper bounds
35  other properties named in plural are a list of exact values to cut on
36  other properties are single cuts
37  */
38  declareProperty( "ConfigPath", m_sConfigPath = "TauAnalysisTools/"+std::string(sSharedFilesVersion)+"/Selection/recommended_selection_r22.conf");
39  declareProperty( "SelectionCuts", m_iSelectionCuts = NoCut); // initialize with 'no' cuts
40  declareProperty( "PtRegion", m_vPtRegion = {}); // in GeV
41  declareProperty( "PtMin", m_dPtMin = NAN); // in GeV
42  declareProperty( "PtMax", m_dPtMax = NAN); // in GeV
43  declareProperty( "AbsEtaRegion", m_vAbsEtaRegion = {});
44  declareProperty( "AbsEtaMin", m_dAbsEtaMin = NAN);
45  declareProperty( "AbsEtaMax", m_dAbsEtaMax = NAN);
46  declareProperty( "AbsCharges", m_vAbsCharges = {});
47  declareProperty( "AbsCharge", m_iAbsCharge = NAN);
48  declareProperty( "NTracks", m_vNTracks = {});
49  declareProperty( "NTrack", m_iNTrack = NAN);
50  declareProperty( "JetRNNSigTransRegion", m_vJetRNNSigTransRegion = {});
51  declareProperty( "JetRNNSigTransMin", m_dJetRNNSigTransMin = NAN);
52  declareProperty( "JetRNNSigTransMax", m_dJetRNNSigTransMax = NAN);
53  declareProperty( "GNTauSigTransRegion", m_vGNTauSigTransRegion = {});
54  declareProperty( "GNTauSigTransMin", m_dGNTauSigTransMin = NAN);
55  declareProperty( "GNTauSigTransMax", m_dGNTauSigTransMax = NAN);
56  declareProperty( "JetIDWP", m_iJetIDWP = 0);
57  declareProperty( "EleRNNRegion", m_vEleRNNRegion = {});
58  declareProperty( "EleRNNMin", m_dEleRNNMin = NAN);
59  declareProperty( "EleRNNMax", m_dEleRNNMax = NAN);
60  declareProperty( "EleIDWP", m_iEleIDWP = 0);
61  declareProperty( "EleIDVersion", m_iEleIDVersion = 1);
62  declareProperty( "MuonOLR", m_bMuonOLR = false);
63 }
64 
65 //______________________________________________________________________________
67 {
68  m_cMap.clear();
69 }
70 
71 //______________________________________________________________________________
73 {
74  bool bConfigViaConfigFile = !m_sConfigPath.empty();
75  bool bConfigViaProperties = false;
76  if (!bConfigViaProperties and !m_vPtRegion.empty()) bConfigViaProperties = true;
77  if (!bConfigViaProperties and m_dPtMin == m_dPtMin) bConfigViaProperties = true;
78  if (!bConfigViaProperties and m_dPtMax == m_dPtMax) bConfigViaProperties = true;
79  if (!bConfigViaProperties and !m_vAbsEtaRegion.empty()) bConfigViaProperties = true;
80  if (!bConfigViaProperties and m_dAbsEtaMin == m_dAbsEtaMin) bConfigViaProperties = true;
81  if (!bConfigViaProperties and m_dAbsEtaMax == m_dAbsEtaMax) bConfigViaProperties = true;
82  if (!bConfigViaProperties and !m_vAbsCharges.empty()) bConfigViaProperties = true;
83  if (!bConfigViaProperties and m_iAbsCharge == m_iAbsCharge) bConfigViaProperties = true;
84  if (!bConfigViaProperties and !m_vNTracks.empty()) bConfigViaProperties = true;
85  if (!bConfigViaProperties and m_iNTrack == m_iNTrack) bConfigViaProperties = true;
86  if (!bConfigViaProperties and !m_vJetRNNSigTransRegion.empty()) bConfigViaProperties = true;
87  if (!bConfigViaProperties and m_dJetRNNSigTransMin == m_dJetRNNSigTransMin) bConfigViaProperties = true;
88  if (!bConfigViaProperties and m_dJetRNNSigTransMax == m_dJetRNNSigTransMax) bConfigViaProperties = true;
89  if (!bConfigViaProperties and !m_vGNTauSigTransRegion.empty()) bConfigViaProperties = true;
90  if (!bConfigViaProperties and m_dGNTauSigTransMin == m_dGNTauSigTransMin) bConfigViaProperties = true;
91  if (!bConfigViaProperties and m_dGNTauSigTransMax == m_dGNTauSigTransMax) bConfigViaProperties = true;
92  if (!bConfigViaProperties and m_iJetIDWP != 0) bConfigViaProperties = true;
93  if (!bConfigViaProperties and !m_vEleRNNRegion.empty()) bConfigViaProperties = true;
94  if (!bConfigViaProperties and m_dEleRNNMin == m_dEleRNNMin) bConfigViaProperties = true;
95  if (!bConfigViaProperties and m_dEleRNNMax == m_dEleRNNMax) bConfigViaProperties = true;
96  if (!bConfigViaProperties and m_iEleIDWP != 0) bConfigViaProperties = true;
97  if (!bConfigViaProperties and m_bMuonOLR) bConfigViaProperties = true;
98 
99  if (bConfigViaConfigFile and bConfigViaProperties)
100  {
101  ATH_MSG_WARNING("Configured tool via setProperty and configuration file, which may lead to unexpected configuration.");
102  ATH_MSG_WARNING("In doubt check the configuration that is printed when the tool is initialized and the message level is set to debug");
103  ATH_MSG_WARNING("For further details please refer to the documentation:");
104  ATH_MSG_WARNING("https://gitlab.cern.ch/atlas/athena/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/doc/README-TauSelectionTool.rst");
105  }
106  if (!bConfigViaConfigFile and !bConfigViaProperties)
107  {
108  ATH_MSG_WARNING("No cut configuration provided, the tool will not do anything. For further details please refer to the documentation:");
109  ATH_MSG_WARNING("https://gitlab.cern.ch/atlas/athena/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/doc/README-TauSelectionTool.rst");
110  return StatusCode::SUCCESS;
111  }
112 
113  if (bConfigViaConfigFile)
114  {
115  TEnv rEnv;
116  std::string sInputFilePath = PathResolverFindCalibFile(m_sConfigPath);
117 
118  if (!testFileForEOFContainsCharacters(sInputFilePath))
119  ATH_MSG_WARNING("Config file for TauSelectionTool with path "<<sInputFilePath<<" does not contain an empty last line. The tool might not be properly configured!");
120 
121  rEnv.ReadFile(sInputFilePath.c_str(),
122  kEnvAll);
123 
124  std::vector<std::string> vCuts;
125  // if Cuts are specified in the config file take these ones, if not take all
126  // specified in the config
127  if (rEnv.Defined("SelectionCuts"))
128  TauAnalysisTools::split(rEnv, "SelectionCuts", ' ', vCuts);
129  else
130  {
131  auto lList = rEnv.GetTable();
132  for( Int_t i = 0; i < lList->GetEntries(); ++i )
133  {
134  vCuts.push_back( lList->At( i )->GetName() );
135  }
136  }
137 
138  int iSelectionCuts = 0;
139 
140  for (const std::string& sCut : vCuts)
141  {
142  if (sCut == "PtRegion")
143  {
144  iSelectionCuts = iSelectionCuts | CutPt;
145  if (m_vPtRegion.empty())
146  TauAnalysisTools::split(rEnv,"PtRegion", ';', m_vPtRegion);
147  }
148  else if (sCut == "PtMin")
149  {
150  iSelectionCuts = iSelectionCuts | CutPt;
151  if (m_dPtMin != m_dPtMin)
152  m_dPtMin = rEnv.GetValue("PtMin",NAN);
153  }
154  else if (sCut == "PtMax")
155  {
156  iSelectionCuts = iSelectionCuts | CutPt;
157  if (m_dPtMax != m_dPtMax)
158  m_dPtMax = rEnv.GetValue("PtMax",NAN);
159  }
160  else if (sCut == "AbsEtaRegion")
161  {
162  iSelectionCuts = iSelectionCuts | CutAbsEta;
163  if (m_vAbsEtaRegion.empty())
164  TauAnalysisTools::split(rEnv,"AbsEtaRegion", ';', m_vAbsEtaRegion);
165  }
166  else if (sCut == "AbsEtaMin")
167  {
168  iSelectionCuts = iSelectionCuts | CutAbsEta;
169  if (m_dAbsEtaMin != m_dAbsEtaMin)
170  m_dAbsEtaMin = rEnv.GetValue("AbsEtaMin",NAN);
171  }
172  else if (sCut == "AbsEtaMax")
173  {
174  iSelectionCuts = iSelectionCuts | CutAbsEta;
175  if (m_dAbsEtaMax != m_dAbsEtaMax)
176  m_dAbsEtaMax = rEnv.GetValue("AbsEtaMax",NAN);
177  }
178  else if (sCut == "AbsCharges")
179  {
180  iSelectionCuts = iSelectionCuts | CutAbsCharge;
181  if (m_vAbsCharges.empty())
182  TauAnalysisTools::split(rEnv,"AbsCharges", ';', m_vAbsCharges);
183  }
184  else if (sCut == "AbsCharge")
185  {
186  iSelectionCuts = iSelectionCuts | CutAbsCharge;
187  if (m_iAbsCharge != m_iAbsCharge)
188  m_iAbsCharge = rEnv.GetValue("AbsCharge",NAN);
189  }
190  else if (sCut == "NTracks")
191  {
192  iSelectionCuts = iSelectionCuts | CutNTrack;
193  if (m_vNTracks.empty())
194  TauAnalysisTools::split(rEnv,"NTracks", ';', m_vNTracks);
195  }
196  else if (sCut == "NTrack")
197  {
198  iSelectionCuts = iSelectionCuts | CutNTrack;
199  if (m_iNTrack != m_iNTrack)
200  m_iNTrack = rEnv.GetValue("NTrack",NAN);
201  }
202  else if (sCut == "JetRNNSigTransRegion")
203  {
204  iSelectionCuts = iSelectionCuts | CutJetRNNScoreSigTrans;
205  if (m_vJetRNNSigTransRegion.empty())
206  TauAnalysisTools::split(rEnv,"JetRNNSigTransRegion", ';', m_vJetRNNSigTransRegion);
207  }
208  else if (sCut == "JetRNNSigTransMin")
209  {
210  iSelectionCuts = iSelectionCuts | CutJetRNNScoreSigTrans;
212  m_dJetRNNSigTransMin = rEnv.GetValue("JetRNNSigTransMin",NAN);
213  }
214  else if (sCut == "JetRNNSigTransMax")
215  {
216  iSelectionCuts = iSelectionCuts | CutJetRNNScoreSigTrans;
218  m_dJetRNNSigTransMax = rEnv.GetValue("JetRNNSigTransMax",NAN);
219  }
220  else if (sCut == "GNTauSigTransRegion")
221  {
222  iSelectionCuts = iSelectionCuts | CutGNTauScoreSigTrans;
223  if (m_vGNTauSigTransRegion.empty())
224  TauAnalysisTools::split(rEnv,"GNTauSigTransRegion", ';', m_vGNTauSigTransRegion);
225  }
226  else if (sCut == "GNTauSigTransMin")
227  {
228  iSelectionCuts = iSelectionCuts | CutGNTauScoreSigTrans;
230  m_dGNTauSigTransMin = rEnv.GetValue("GNTauSigTransMin",NAN);
231  }
232  else if (sCut == "GNTauSigTransMax")
233  {
234  iSelectionCuts = iSelectionCuts | CutGNTauScoreSigTrans;
236  m_dGNTauSigTransMax = rEnv.GetValue("GNTauSigTransMax",NAN);
237  }
238  else if (sCut == "EleRNNRegion")
239  {
240  iSelectionCuts = iSelectionCuts | CutEleRNNScore;
241  if (m_vEleRNNRegion.empty())
242  TauAnalysisTools::split(rEnv,"EleRNNRegion", ';', m_vEleRNNRegion);
243  }
244  else if (sCut == "EleRNNMin")
245  {
246  iSelectionCuts = iSelectionCuts | CutEleRNNScore;
247  if (m_dEleRNNMin != m_dEleRNNMin)
248  m_dEleRNNMin = rEnv.GetValue("EleRNNMin",NAN);
249  }
250  else if (sCut == "EleRNNMax")
251  {
252  iSelectionCuts = iSelectionCuts | CutEleRNNScore;
253  if (m_dEleRNNMax != m_dEleRNNMax)
254  m_dEleRNNMax = rEnv.GetValue("EleRNNMax",NAN);
255  }
256  else if (sCut == "JetIDWP")
257  {
258  iSelectionCuts = iSelectionCuts | CutJetIDWP;
260  m_iJetIDWP = convertStrToJetIDWP(rEnv.GetValue("JetIDWP","JETIDNONE"));
261  }
262 
263  // check for possible mis-config in Tau selection
264  for (const std::string& checkCut : vCuts){
265  if (checkCut.find("SigTrans") != std::string::npos) {
266  ATH_MSG_ERROR("Misconfig due to JetIDWP and SigTrans cuts both present in the config file. Please CHECK carefully config file again");
267  return StatusCode::FAILURE;
268  }
269  }
270  }
271  else if (sCut == "EleIDWP")
272  {
273  iSelectionCuts = iSelectionCuts | CutEleIDWP;
275  m_iEleIDWP = convertStrToEleIDWP(rEnv.GetValue("EleIDWP","ELEIDNONE"));
276  }
277  else if (sCut == "MuonOLR")
278  {
279  iSelectionCuts = iSelectionCuts | CutMuonOLR;
280  if (!m_bMuonOLR)
281  m_bMuonOLR = rEnv.GetValue("MuonOLR",false);
282  }
283  else ATH_MSG_WARNING("Cut " << sCut << " is not available");
284  }
285 
286  if (m_iSelectionCuts == NoCut)
287  m_iSelectionCuts = iSelectionCuts;
288  }
289 
292 
293  // initialise the ReadHandleKey of the muon container when the muon veto is applied
295 
296  ATH_CHECK( m_tauContainerKey.initialize() );
297 
298  // initialise the ReadDecorHandleKey if GNTau is applied
300  ATH_CHECK( m_GNTauDecorKey.assign(m_tauContainerKey.key()+".GNTauScoreSigTrans_v0prune"));
301  }
303 
304  // initialise the ReadDecorHandleKey if eVeto is applied
306  ATH_CHECK( m_eVetoDecorKey.assign(m_tauContainerKey.key()+".RNNEleScoreSigTrans_v"+std::to_string(m_iEleIDVersion)) );
307  }
309 
310  // specify all available cut descriptions
311  using map_type = std::map<SelectionCuts, std::unique_ptr<TauAnalysisTools::TauSelectionCut>>;
312  using pair_type = map_type::value_type;
313 
314  pair_type elements[] =
315  {
316  {CutPt, std::make_unique<TauAnalysisTools::TauSelectionCutPt>(this)},
317  {CutAbsEta, std::make_unique<TauAnalysisTools::TauSelectionCutAbsEta>(this)},
318  {CutAbsCharge, std::make_unique<TauAnalysisTools::TauSelectionCutAbsCharge>(this)},
319  {CutNTrack, std::make_unique<TauAnalysisTools::TauSelectionCutNTracks>(this)},
320  {CutJetRNNScoreSigTrans, std::make_unique<TauAnalysisTools::TauSelectionCutRNNJetScoreSigTrans>(this)},
321  {CutGNTauScoreSigTrans, std::make_unique<TauAnalysisTools::TauSelectionCutGNTauScoreSigTrans>(this)},
322  {CutJetIDWP, std::make_unique<TauAnalysisTools::TauSelectionCutJetIDWP>(this)},
323  {CutEleRNNScore, std::make_unique<TauAnalysisTools::TauSelectionCutRNNEleScore>(this)},
324  {CutEleIDWP, std::make_unique<TauAnalysisTools::TauSelectionCutEleIDWP>(this)},
325  {CutMuonOLR, std::make_unique<TauAnalysisTools::TauSelectionCutMuonOLR>(this)}
326  };
327 
328  m_cMap = { std::make_move_iterator( begin(elements) ), std::make_move_iterator( end(elements) ) };
329 
330  ATH_MSG_INFO( "Initializing TauSelectionTool" );
338 
341  PrintConfigValue ("AbsCharge", m_vAbsCharges);
342  PrintConfigValue ("NTrack", m_vNTracks);
343  PrintConfigRegion ("RNNJetScoreSigTrans", m_vJetRNNSigTransRegion);
344  PrintConfigRegion ("GNTauScoreSigTrans", m_vGNTauSigTransRegion);
345  PrintConfigRegion ("RNNEleScore", m_vEleRNNRegion);
346  PrintConfigValue ("JetIDWP", m_sJetIDWP);
347  PrintConfigValue ("JetIDWP ENUM",m_iJetIDWP);
348  PrintConfigValue ("EleIDWP", m_sEleIDWP);
349  PrintConfigValue ("EleIDWP ENUM",m_iEleIDWP);
350  PrintConfigValue ("EleIDVersion",m_iEleIDVersion);
351  PrintConfigValue ("MuonOLR", m_bMuonOLR);
352 
353  std::string sCuts = "";
354  if (m_iSelectionCuts & CutPt) sCuts += "Pt ";
355  if (m_iSelectionCuts & CutAbsEta) sCuts += "AbsEta ";
356  if (m_iSelectionCuts & CutAbsCharge) sCuts += "AbsCharge ";
357  if (m_iSelectionCuts & CutNTrack) sCuts += "NTrack ";
358  if (m_iSelectionCuts & CutJetRNNScoreSigTrans) sCuts += "JetRNNScoreSigTrans ";
359  if (m_iSelectionCuts & CutGNTauScoreSigTrans) sCuts += "GNTauScoreSigTrans ";
360  if (m_iSelectionCuts & CutJetIDWP) sCuts += "JetIDWP ";
361  if (m_iSelectionCuts & CutEleRNNScore) sCuts += "EleRNNScore ";
362  if (m_iSelectionCuts & CutEleIDWP) sCuts += "EleIDWP ";
363  if (m_iSelectionCuts & CutMuonOLR) sCuts += "MuonOLR ";
364 
365  ATH_MSG_DEBUG( "cuts: " << sCuts);
366 
369 
370  for ( const auto& entry : m_cMap ) {
371  if ( m_iSelectionCuts &entry.first ) {
372  entry.second->setAcceptInfo(m_aAccept);
373  }
374  }
375 
376  return StatusCode::SUCCESS;
377 }
378 
379 
380 //______________________________________________________________________________
382 {
383  return StatusCode::SUCCESS;
384 }
385 
386 //______________________________________________________________________________
388 {
389  return m_aAccept;
390 }
391 
392 //______________________________________________________________________________
394 {
395  // Check if this is a tau:
396  if( xP->type() != xAOD::Type::Tau )
397  {
398  ATH_MSG_ERROR( "accept(...) Function received a non-tau" );
399  return asg::AcceptData (&m_aAccept);
400  }
401 
402  // Cast it to a tau:
403  const xAOD::TauJet* xTau = dynamic_cast< const xAOD::TauJet* >( xP );
404  if( ! xTau )
405  {
406  ATH_MSG_FATAL( "accept(...) Failed to cast particle to tau" );
407  return asg::AcceptData (&m_aAccept);
408  }
409 
410  // Let the specific function do the work:
411  return accept( *xTau );
412 }
413 
414 //______________________________________________________________________________
416 {
417  asg::AcceptData acceptData (&m_aAccept);
418 
419  int iNBin = 0;
420 
422  {
423  // fill cutflow 'All' bin
424  m_hCutFlow->Fill(iNBin);
425  // fill main distributions before all cuts
426  for (const auto& entry : m_cMap)
427  entry.second->fillHistogramCutPre(xTau);
428  }
429  try
430  {
431  for (const auto& entry : m_cMap)
432  {
433  if (m_iSelectionCuts & entry.first)
434  {
435  if (!entry.second->accept(xTau, acceptData))
436  return acceptData;
437  else
438  {
440  {
441  // fill cutflow after each passed cut
442  iNBin++;
443  m_hCutFlow->Fill(iNBin);
444  }
445  }
446  }
447  }
448  }
449  catch (const std::runtime_error& error)
450  {
451  // LEGACY: In practical terms this should probably just throw, not
452  // print a warning/error and then continue on. However, I leave
453  // that to the experts who probably had a reason not to let the
454  // exception escape. For now I just downgraded it from error to
455  // warning and limited the number of warnings (04 Jan 22).
456  static std::atomic<uint64_t> warning_count (0u);
457  auto mycount = ++ warning_count;
458  if (mycount < 10u)
459  {
460  ATH_MSG_WARNING(error.what());
461  if (mycount == 9u)
462  ATH_MSG_WARNING ("this is your last warning");
463  }
464  }
465 
466  // fill main distributions after all cuts
468  {
469  for (const auto& entry : m_cMap)
470  entry.second->fillHistogramCut(xTau);
471  }
472 
473  // // Return the result:
474  return acceptData;
475 }
476 
477 //______________________________________________________________________________
478 void TauSelectionTool::setOutFile( TFile* fOutFile )
479 {
480  m_fOutFile = fOutFile;
481 }
482 
483 //______________________________________________________________________________
485 {
487  ATH_MSG_WARNING("CreateControlPlots was set to true, but no valid file pointer was provided");
489  {
491  m_fOutFile->mkdir((this->name()+"_control").c_str());
492  m_fOutFile->cd((this->name()+"_control").c_str());
494  m_hCutFlow->Write();
495 
496  for (const auto& entry : m_cMap)
497  entry.second->writeControlHistograms();
498  }
499 }
500 
501 
502 //=================================PRIVATE-PART=================================
504 {
505  // count number of cuts
506  int iNBins = 0;
507  for (const auto& entry : m_cMap)
508  if (m_iSelectionCuts & entry.first)
509  iNBins++;
510  // create cutflow histogram with iNBins+1 bins, where first bin is 'All' bin
511  m_hCutFlow = std::make_shared<TH1F>("hCutFlow","CutFlow;; events",iNBins+1,0,iNBins+1);
512  m_hCutFlow->GetXaxis()->SetBinLabel(1,"All");
513 
514  // reusing this variable to reduce overhead
515  iNBins = 2;
516  // set bin labels
517  for (const auto& entry : m_cMap)
518  if (m_iSelectionCuts & entry.first)
519  {
520  m_hCutFlow->GetXaxis()->SetBinLabel(iNBins, entry.second->getName().c_str());
521  iNBins++;
522  }
523 }
524 
525 //______________________________________________________________________________
526 template<typename T, typename U>
527 void TauSelectionTool::FillRegionVector(std::vector<T>& vRegion, U tMin, U tMax) const
528 {
529  if (!vRegion.empty())
530  return;
531  if (tMin == tMin) // if tMin is NAN, then this assumption fails and -inf is added to the vector
532  vRegion.push_back(tMin);
533  else
534  vRegion.push_back(-std::numeric_limits<T>::infinity());
535 
536  if (tMax == tMax) // if tMax is NAN, then this assumption fails and inf is added to the vector
537  vRegion.push_back(tMax);
538  else
539  vRegion.push_back(std::numeric_limits<T>::infinity());
540 }
541 
542 //______________________________________________________________________________
543 template<typename T, typename U>
544 void TauSelectionTool::FillValueVector(std::vector<T>& vRegion, U tVal) const
545 {
546  if (!vRegion.empty())
547  return;
548  if (tVal == tVal) // if tMax is NAN, then this assumption fails and nothing is added to the vector
549  vRegion.push_back(tVal);
550 }
551 
552 //______________________________________________________________________________
553 template<typename T>
554 void TauSelectionTool::PrintConfigRegion(const std::string& sCutName, std::vector<T>& vRegion) const
555 {
556  unsigned int iNumRegion = vRegion.size()/2;
557  for( unsigned int iRegion = 0; iRegion < iNumRegion; iRegion++ )
558  {
559  ATH_MSG_DEBUG( sCutName<<": " << vRegion.at(iRegion*2) << " to " << vRegion.at(iRegion*2+1) );
560  }
561 }
562 
563 //______________________________________________________________________________
564 template<typename T>
565 void TauSelectionTool::PrintConfigValue(const std::string& sCutName, std::vector<T>& vRegion) const
566 {
567  for (auto tVal : vRegion)
568  ATH_MSG_DEBUG( sCutName<<": " << tVal );
569 }
570 
571 //______________________________________________________________________________
572 template<typename T>
573 void TauSelectionTool::PrintConfigValue(const std::string& sCutName, T& tVal) const
574 {
575  ATH_MSG_DEBUG( sCutName<<": " << tVal );
576 }
577 
578 //______________________________________________________________________________
579 int TauSelectionTool::convertStrToJetIDWP(const std::string& sJetIDWP) const
580 {
581  if (sJetIDWP == "JETIDNONE") return int(JETIDNONE);
582  else if (sJetIDWP == "JETIDRNNVERYLOOSE") return int(JETIDRNNVERYLOOSE);
583  else if (sJetIDWP == "JETIDRNNLOOSE") return int(JETIDRNNLOOSE);
584  else if (sJetIDWP == "JETIDRNNMEDIUM") return int(JETIDRNNMEDIUM);
585  else if (sJetIDWP == "JETIDRNNTIGHT") return int(JETIDRNNTIGHT);
586  else if (sJetIDWP == "JETIDGNTAUVERYLOOSE") return int(JETIDGNTAUVERYLOOSE);
587  else if (sJetIDWP == "JETIDGNTAULOOSE") return int(JETIDGNTAULOOSE);
588  else if (sJetIDWP == "JETIDGNTAUMEDIUM") return int(JETIDGNTAUMEDIUM);
589  else if (sJetIDWP == "JETIDGNTAUTIGHT") return int(JETIDGNTAUTIGHT);
590 
591  ATH_MSG_ERROR( "jet ID working point "<<sJetIDWP<<" is unknown, the JetIDWP cut will not accept any tau!" );
592  return -1;
593 }
594 
595 //______________________________________________________________________________
596 int TauSelectionTool::convertStrToEleIDWP(const std::string& sEleIDWP) const
597 {
598  if (sEleIDWP == "ELEIDNONE") return int(ELEIDNONE);
599  else if (sEleIDWP == "ELEIDRNNLOOSE") return int(ELEIDRNNLOOSE);
600  else if (sEleIDWP == "ELEIDRNNMEDIUM") return int(ELEIDRNNMEDIUM);
601  else if (sEleIDWP == "ELEIDRNNTIGHT") return int(ELEIDRNNTIGHT);
602 
603  ATH_MSG_ERROR( "electron ID working point " << sEleIDWP << " is unknown, the EleIDWP cut will not accept any tau!" );
604  return -1;
605 }
606 
607 //______________________________________________________________________________
608 std::string TauSelectionTool::convertJetIDWPToStr(int iJetIDWP) const
609 {
610  switch (iJetIDWP)
611  {
613  return "JETIDNONE";
614  case JETIDNONE:
615  return "JETIDNONE";
616  case JETIDRNNVERYLOOSE:
617  return "JETIDRNNVERYLOOSE";
618  case JETIDRNNLOOSE:
619  return "JETIDRNNLOOSE";
620  case JETIDRNNMEDIUM:
621  return "JETIDRNNMEDIUM";
622  case JETIDRNNTIGHT:
623  return "JETIDRNNTIGHT";
624  case JETIDGNTAUVERYLOOSE:
625  return "JETIDGNTAUVERYLOOSE";
626  case JETIDGNTAULOOSE:
627  return "JETIDGNTAULOOSE";
628  case JETIDGNTAUMEDIUM:
629  return "JETIDGNTAUMEDIUM";
630  case JETIDGNTAUTIGHT:
631  return "JETIDGNTAUTIGHT";
632 
633  default:
634  ATH_MSG_WARNING( "JetID working point with enum " << iJetIDWP << " is unknown, the JetIDWP cut will not accept any tau!" );
635  return "";
636  }
637 }
638 
639 //______________________________________________________________________________
640 std::string TauSelectionTool::convertEleIDWPToStr(int iEleIDWP) const
641 {
642  switch (iEleIDWP)
643  {
645  return "ELEIDNONE";
646  case ELEIDNONE:
647  return "ELEIDNONE";
648  case ELEIDRNNLOOSE:
649  return "ELEIDRNNLOOSE";
650  case ELEIDRNNMEDIUM:
651  return "ELEIDRNNMEDIUM";
652  case ELEIDRNNTIGHT:
653  return "ELEIDRNNTIGHT";
654  default:
655  ATH_MSG_WARNING( "EleID working point with enum " << iEleIDWP << " is unknown, the EleIDWP cut will not accept any tau!" );
656  return "";
657  }
658 }
TauAnalysisTools::TauSelectionTool::m_vPtRegion
std::vector< float > m_vPtRegion
Definition: TauSelectionTool.h:119
TauAnalysisTools
Definition: TruthCollectionMakerTau.h:16
TauAnalysisTools::CutAbsEta
@ CutAbsEta
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:43
TauAnalysisTools::TauSelectionTool::convertStrToEleIDWP
int convertStrToEleIDWP(const std::string &sEleIDWP) const
Definition: TauSelectionTool.cxx:596
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TauAnalysisTools::TauSelectionTool::m_dAbsEtaMax
float m_dAbsEtaMax
Definition: TauSelectionTool.h:145
TauAnalysisTools::ELEIDNONEUNCONFIGURED
@ ELEIDNONEUNCONFIGURED
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:31
TauAnalysisTools::TauSelectionTool::m_dEleRNNMin
float m_dEleRNNMin
Definition: TauSelectionTool.h:152
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TauAnalysisTools::CutMuonOLR
@ CutMuonOLR
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:50
TauAnalysisTools::TauSelectionTool::setupCutFlowHistogram
void setupCutFlowHistogram()
Definition: TauSelectionTool.cxx:503
TauAnalysisTools::TauSelectionTool::m_sJetIDWP
std::string m_sJetIDWP
Definition: TauSelectionTool.h:131
TauAnalysisTools::JETIDRNNTIGHT
@ JETIDRNNTIGHT
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:22
TauAnalysisTools::TauSelectionTool::m_hCutFlow
std::shared_ptr< TH1F > m_hCutFlow
Definition: TauSelectionTool.h:157
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TauAnalysisTools::JETIDRNNMEDIUM
@ JETIDRNNMEDIUM
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:21
TauAnalysisTools::TauSelectionTool::m_dPtMin
float m_dPtMin
Definition: TauSelectionTool.h:142
TauAnalysisTools::JETIDGNTAULOOSE
@ JETIDGNTAULOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:24
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
TauAnalysisTools::TauSelectionTool::FillRegionVector
void FillRegionVector(std::vector< T > &vRegion, U tMin, U tMax) const
Definition: TauSelectionTool.cxx:527
asg
Definition: DataHandleTestTool.h:28
TauAnalysisTools::TauSelectionTool::m_vJetRNNSigTransRegion
std::vector< float > m_vJetRNNSigTransRegion
Definition: TauSelectionTool.h:127
TauAnalysisTools::TauSelectionTool::m_sConfigPath
std::string m_sConfigPath
Definition: TauSelectionTool.h:160
TauAnalysisTools::TauSelectionTool::setOutFile
virtual void setOutFile(TFile *fOutFile) override
Set output file for control histograms.
Definition: TauSelectionTool.cxx:478
TauAnalysisTools::TauSelectionTool::m_vGNTauSigTransRegion
std::vector< float > m_vGNTauSigTransRegion
Definition: TauSelectionTool.h:129
TauAnalysisTools::JETIDRNNLOOSE
@ JETIDRNNLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:20
xAOD::IParticle::type
virtual Type::ObjectType type() const =0
The type of the object as a simple enumeration.
TauAnalysisTools::TauSelectionTool::initialize
virtual StatusCode initialize() override
Function initialising the tool.
Definition: TauSelectionTool.cxx:72
TauAnalysisTools::testFileForEOFContainsCharacters
bool testFileForEOFContainsCharacters(const std::string &sFileName)
returns true if last line in file is empty or the line starts with the number sign
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:279
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
TauAnalysisTools::JETIDNONE
@ JETIDNONE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:14
TauAnalysisTools::CutJetIDWP
@ CutJetIDWP
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:47
TauAnalysisTools::TauSelectionTool::m_dJetRNNSigTransMax
float m_dJetRNNSigTransMax
Definition: TauSelectionTool.h:149
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
TauAnalysisTools::TauSelectionTool::PrintConfigValue
void PrintConfigValue(const std::string &sCutName, std::vector< T > &vRegion) const
Definition: TauSelectionTool.cxx:565
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
TauAnalysisTools::ELEIDRNNLOOSE
@ ELEIDRNNLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:33
TauAnalysisTools::TauSelectionTool::m_cMap
std::map< SelectionCuts, std::unique_ptr< TauAnalysisTools::TauSelectionCut > > m_cMap
Definition: TauSelectionTool.h:167
TauAnalysisTools::TauSelectionTool::~TauSelectionTool
virtual ~TauSelectionTool()
Definition: TauSelectionTool.cxx:66
TauAnalysisTools::TauSelectionTool::FillValueVector
void FillValueVector(std::vector< T > &vRegion, U tVal) const
Definition: TauSelectionTool.cxx:544
TauAnalysisTools::TauSelectionTool::m_vEleRNNRegion
std::vector< float > m_vEleRNNRegion
Definition: TauSelectionTool.h:134
TauAnalysisTools::TauSelectionTool::m_dGNTauSigTransMin
float m_dGNTauSigTransMin
Definition: TauSelectionTool.h:150
SharedFilesVersion.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
asg::AcceptInfo
Definition: AcceptInfo.h:28
TauSelectionCuts.h
TauAnalysisTools::JETIDGNTAUVERYLOOSE
@ JETIDGNTAUVERYLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:23
TauAnalysisTools::TauSelectionTool::m_iEleIDWP
int m_iEleIDWP
Definition: TauSelectionTool.h:137
TauAnalysisTools::ELEIDNONE
@ ELEIDNONE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:32
lumiFormat.i
int i
Definition: lumiFormat.py:85
TauAnalysisTools::TauSelectionTool::m_dEleRNNMax
float m_dEleRNNMax
Definition: TauSelectionTool.h:153
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TauAnalysisTools::TauSelectionTool::convertEleIDWPToStr
std::string convertEleIDWPToStr(int iEleIDWP) const
Definition: TauSelectionTool.cxx:640
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
TauAnalysisTools::TauSelectionTool::m_vNTracks
std::vector< unsigned > m_vNTracks
Definition: TauSelectionTool.h:125
TauAnalysisTools::TauSelectionTool::m_fOutFile
TFile * m_fOutFile
Definition: TauSelectionTool.h:156
TauAnalysisTools::TauSelectionTool::beginEvent
virtual StatusCode beginEvent() override
Function called when a new events is loaded.
Definition: TauSelectionTool.cxx:381
TauAnalysisTools::TauSelectionTool::PrintConfigRegion
void PrintConfigRegion(const std::string &sCutName, std::vector< T > &vRegion) const
Definition: TauSelectionTool.cxx:554
TauAnalysisTools::CutGNTauScoreSigTrans
@ CutGNTauScoreSigTrans
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:52
TauAnalysisTools::TauSelectionTool::writeControlHistograms
virtual void writeControlHistograms() override
Write control histograms to output file.
Definition: TauSelectionTool.cxx:484
TauAnalysisTools::TauSelectionTool::m_sEleIDWP
std::string m_sEleIDWP
Definition: TauSelectionTool.h:136
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TauAnalysisTools::ELEIDRNNMEDIUM
@ ELEIDRNNMEDIUM
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:34
TauAnalysisTools::TauSelectionTool::m_dGNTauSigTransMax
float m_dGNTauSigTransMax
Definition: TauSelectionTool.h:151
TauAnalysisTools::TauSelectionTool::m_dAbsEtaMin
float m_dAbsEtaMin
Definition: TauSelectionTool.h:144
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
TauAnalysisTools::TauSelectionTool::m_vAbsCharges
std::vector< int > m_vAbsCharges
Definition: TauSelectionTool.h:123
TauAnalysisTools::TauSelectionTool::m_iSelectionCuts
int m_iSelectionCuts
Definition: TauSelectionTool.h:117
PathResolver.h
TauAnalysisTools::CutNTrack
@ CutNTrack
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:45
TauAnalysisTools::ELEIDRNNTIGHT
@ ELEIDRNNTIGHT
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:35
TauAnalysisTools::TauSelectionTool::m_eVetoDecorKey
SG::ReadDecorHandleKey< xAOD::TauJetContainer > m_eVetoDecorKey
Definition: TauSelectionTool.h:164
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TauAnalysisTools::CutEleRNNScore
@ CutEleRNNScore
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:48
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
TauAnalysisTools::CutJetRNNScoreSigTrans
@ CutJetRNNScoreSigTrans
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:51
TauAnalysisTools::TauSelectionTool::m_bCreateControlPlots
bool m_bCreateControlPlots
Definition: TauSelectionTool.h:176
TauAnalysisTools::TauSelectionTool::accept
virtual asg::AcceptData accept(const xAOD::IParticle *p) const override
Get the decision using a generic IParticle pointer.
Definition: TauSelectionTool.cxx:393
TauAnalysisTools::TauSelectionTool::m_vAbsEtaRegion
std::vector< float > m_vAbsEtaRegion
Definition: TauSelectionTool.h:121
TauSelectionTool.h
TauAnalysisTools::TauSelectionTool::convertStrToJetIDWP
int convertStrToJetIDWP(const std::string &sJetIDWP) const
Definition: TauSelectionTool.cxx:579
TauAnalysisTools::CutEleIDWP
@ CutEleIDWP
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:49
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
TauAnalysisTools::CutAbsCharge
@ CutAbsCharge
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:46
TauAnalysisTools::TauSelectionTool::getAcceptInfo
virtual const asg::AcceptInfo & getAcceptInfo() const override
Get an object describing the "selection steps" of the tool.
Definition: TauSelectionTool.cxx:387
TauAnalysisTools::TauSelectionTool::m_muonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
Definition: TauSelectionTool.h:162
TauAnalysisTools::TauSelectionTool::m_GNTauDecorKey
SG::ReadDecorHandleKey< xAOD::TauJetContainer > m_GNTauDecorKey
Definition: TauSelectionTool.h:165
TauAnalysisTools::TauSelectionTool::TauSelectionTool
TauSelectionTool(const std::string &name)
Constructor for standalone usage.
Definition: TauSelectionTool.cxx:24
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TauAnalysisTools::TauSelectionTool::m_tauContainerKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_tauContainerKey
Definition: TauSelectionTool.h:163
TauAnalysisTools::TauSelectionTool::m_aAccept
asg::AcceptInfo m_aAccept
Object used to store selection information.
Definition: TauSelectionTool.h:179
TauAnalysisTools::TauSelectionTool::m_iJetIDWP
int m_iJetIDWP
Definition: TauSelectionTool.h:132
xAODType::Tau
@ Tau
The object is a tau (jet)
Definition: ObjectType.h:49
TauAnalysisTools::JETIDGNTAUTIGHT
@ JETIDGNTAUTIGHT
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:26
TauAnalysisTools::TauSelectionTool::m_iEleIDVersion
int m_iEleIDVersion
Definition: TauSelectionTool.h:138
TauAnalysisTools::TauSelectionTool::m_dJetRNNSigTransMin
float m_dJetRNNSigTransMin
Definition: TauSelectionTool.h:148
TauAnalysisTools::JETIDGNTAUMEDIUM
@ JETIDGNTAUMEDIUM
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:25
TauAnalysisTools::NoCut
@ NoCut
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:41
TauAnalysisTools::JETIDRNNVERYLOOSE
@ JETIDRNNVERYLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:19
TauAnalysisTools::CutPt
@ CutPt
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:42
TauAnalysisTools::TauSelectionTool::m_iAbsCharge
float m_iAbsCharge
Definition: TauSelectionTool.h:146
TauAnalysisTools::JETIDNONEUNCONFIGURED
@ JETIDNONEUNCONFIGURED
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:13
asg::AcceptData
Definition: AcceptData.h:30
error
Definition: IImpactPoint3dEstimator.h:70
TauAnalysisTools::TauSelectionTool::m_dPtMax
float m_dPtMax
Definition: TauSelectionTool.h:143
TauAnalysisTools::TauSelectionTool::convertJetIDWPToStr
std::string convertJetIDWPToStr(int iJetIDWP) const
Definition: TauSelectionTool.cxx:608
TauAnalysisTools::TauSelectionTool::m_iNTrack
float m_iNTrack
Definition: TauSelectionTool.h:147
TauAnalysisTools::TauSelectionTool::m_bMuonOLR
bool m_bMuonOLR
Definition: TauSelectionTool.h:140
TauAnalysisTools::split
void split(const std::string &sInput, const char cDelim, std::vector< std::string > &vOut)
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:23