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