ATLAS Offline Software
DiTauSelectionTool.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 // System include(s)
17 #include <cmath> // for std::isnan
18 
19 using namespace TauAnalysisTools;
20 
21 //=================================PUBLIC-PART==================================
22 //______________________________________________________________________________
23 DiTauSelectionTool::DiTauSelectionTool( const std::string& name )
24  : asg::AsgMetadataTool( name )
25  , m_sOmniIDWP("OMNIIDNONE")
26  , m_fOutFile(nullptr)
27  , m_aAccept( "DiTauSelection" )
28 {}
29 
30 //______________________________________________________________________________
31 DiTauSelectionTool::~DiTauSelectionTool()
32 {
33  m_cMap.clear();
34 }
35 
36 //______________________________________________________________________________
38 {
39 
40  m_vPtRegion = m_vecPtRegion.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_vNSubjetsRegion.empty()) bConfigViaProperties = true;
55  if (!bConfigViaProperties and !std::isnan(m_dNSubjetsMin.value())) bConfigViaProperties = true;
56  if (!bConfigViaProperties and !std::isnan(m_dNSubjetsMax.value())) bConfigViaProperties = true;
57  if (!bConfigViaProperties and !m_vAbsCharges.empty()) bConfigViaProperties = true;
58  if (!bConfigViaProperties and !std::isnan(m_iAbsCharge.value())) bConfigViaProperties = true;
59  if (!bConfigViaProperties and !m_vOmniScoreRegion.empty()) bConfigViaProperties = true;
60  if (!bConfigViaProperties and !std::isnan(m_dOmniScoreMin.value())) bConfigViaProperties = true;
61  if (!bConfigViaProperties and !std::isnan(m_dOmniScoreMax.value())) bConfigViaProperties = true;
62  if (!bConfigViaProperties and m_iOmniIDWP != 0) bConfigViaProperties = true;
63 
64  if (bConfigViaConfigFile and bConfigViaProperties)
65  {
66  ATH_MSG_WARNING("Configured tool via setProperty and configuration file, which may lead to unexpected configuration.");
67  ATH_MSG_WARNING("In doubt check the configuration that is printed when the tool is initialized and the message level is set to debug");
68  ATH_MSG_WARNING("For further details please refer to the documentation:");
69  ATH_MSG_WARNING("https://gitlab.cern.ch/atlas/athena/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/doc/README-DiTauSelectionTool.rst");
70  }
71  if (!bConfigViaConfigFile and !bConfigViaProperties)
72  {
73  ATH_MSG_WARNING("No cut configuration provided, the tool will not do anything. For further details please refer to the documentation:");
74  ATH_MSG_WARNING("https://gitlab.cern.ch/atlas/athena/blob/main/PhysicsAnalysis/TauID/TauAnalysisTools/doc/README-DiTauSelectionTool.rst");
75  }
76 
77  if (bConfigViaConfigFile)
78  {
79  TEnv rEnv;
80  std::string sInputFilePath = PathResolverFindCalibFile(m_sConfigPath);
81 
82  if (!testFileForEOFContainsCharacters(sInputFilePath))
83  ATH_MSG_WARNING("Config file for DiTauSelectionTool with path "<<sInputFilePath<<" does not contain an empty last line. The tool might not be properly configured!");
84 
85  rEnv.ReadFile(sInputFilePath.c_str(),
86  kEnvAll);
87 
88  std::vector<std::string> vCuts;
89  // if Cuts are specified in the config file take these ones, if not take all
90  // specified in the config
91  if (rEnv.Defined("SelectionCuts"))
92  TauAnalysisTools::split(rEnv, "SelectionCuts", ' ', vCuts);
93  else
94  {
95  auto lList = rEnv.GetTable();
96  for( Int_t i = 0; i < lList->GetEntries(); ++i )
97  {
98  vCuts.push_back( lList->At( i )->GetName() );
99  }
100  }
101 
102  int iSelectionCuts = 0;
103 
104  for (const std::string& sCut : vCuts)
105  {
106  if (sCut == "PtRegion")
107  {
108  iSelectionCuts = iSelectionCuts | DiTauCutPt;
109  if (m_vPtRegion.empty())
110  TauAnalysisTools::split(rEnv,"PtRegion", ';', m_vPtRegion);
111  }
112  else if (sCut == "PtMin")
113  {
114  iSelectionCuts = iSelectionCuts | DiTauCutPt;
115  if (std::isnan(m_dPtMin.value()))
116  m_dPtMin = rEnv.GetValue("PtMin",NAN);
117  }
118  else if (sCut == "PtMax")
119  {
120  iSelectionCuts = iSelectionCuts | DiTauCutPt;
121  if (std::isnan(m_dPtMax.value()))
122  m_dPtMax = rEnv.GetValue("PtMax",NAN);
123  }
124  else if (sCut == "AbsEtaRegion")
125  {
126  iSelectionCuts = iSelectionCuts | DiTauCutAbsEta;
127  if (m_vAbsEtaRegion.empty())
128  TauAnalysisTools::split(rEnv,"AbsEtaRegion", ';', m_vAbsEtaRegion);
129  }
130  else if (sCut == "AbsEtaMin")
131  {
132  iSelectionCuts = iSelectionCuts | DiTauCutAbsEta;
133  if (std::isnan(m_dAbsEtaMin.value()))
134  m_dAbsEtaMin = rEnv.GetValue("AbsEtaMin",NAN);
135  }
136  else if (sCut == "AbsEtaMax")
137  {
138  iSelectionCuts = iSelectionCuts | DiTauCutAbsEta;
139  if (std::isnan(m_dAbsEtaMax.value()))
140  m_dAbsEtaMax = rEnv.GetValue("AbsEtaMax",NAN);
141  }
142  else if (sCut == "NSubjetsRegion")
143  {
144  iSelectionCuts = iSelectionCuts | DiTauCutNSubjets;
145  if (m_vNSubjetsRegion.empty())
146  TauAnalysisTools::split(rEnv,"NSubjetsRegion", ';', m_vNSubjetsRegion);
147  }
148  else if (sCut == "NSubjetsMin")
149  {
150  iSelectionCuts = iSelectionCuts | DiTauCutNSubjets;
151  if (std::isnan(m_dNSubjetsMin.value()))
152  m_dNSubjetsMin = rEnv.GetValue("NSubjetsMin",NAN);
153  }
154  else if (sCut == "NSubjetsMax")
155  {
156  iSelectionCuts = iSelectionCuts | DiTauCutNSubjets;
157  if (std::isnan(m_dNSubjetsMax.value()))
158  m_dNSubjetsMax = rEnv.GetValue("NSubjetsMax",NAN);
159  }
160  else if (sCut == "AbsCharges")
161  {
162  iSelectionCuts = iSelectionCuts | DiTauCutAbsCharge;
163  if (m_vAbsCharges.empty())
164  TauAnalysisTools::split(rEnv,"AbsCharges", ';', m_vAbsCharges);
165  }
166  else if (sCut == "AbsCharge")
167  {
168  iSelectionCuts = iSelectionCuts | DiTauCutAbsCharge;
169  if (std::isnan(m_iAbsCharge.value()))
170  m_iAbsCharge = rEnv.GetValue("AbsCharge",NAN);
171  }
172  else if (sCut == "OmniScoreRegion")
173  {
174  iSelectionCuts = iSelectionCuts | DiTauCutOmniScore;
175  if (m_vOmniScoreRegion.empty())
176  TauAnalysisTools::split(rEnv,"OmniScoreRegion", ';', m_vOmniScoreRegion);
177 
178  // check if using OmniScore
179  m_useOmniScore = true;
180  }
181  else if (sCut == "OmniScoreMin")
182  {
183  iSelectionCuts = iSelectionCuts | DiTauCutOmniScore;
184  if (std::isnan(m_dOmniScoreMin.value()))
185  m_dOmniScoreMin = rEnv.GetValue("OmniScoreMin",NAN);
186 
187  // check for possible mis-config in DiTau selection
188  for (const std::string& checkCut : vCuts){
189  if (checkCut.find("OmniScoreRegion") != std::string::npos) {
190  ATH_MSG_ERROR("Misconfig due to OmniScoreRegion and OmniScoreMin cuts both present in the config file. Please CHECK carefully config file again and choose of the two");
191  return StatusCode::FAILURE;
192  }
193  }
194 
195  // check if using OmniScore
196  m_useOmniScore = true;
197  }
198  else if (sCut == "OmniScoreMax")
199  {
200  iSelectionCuts = iSelectionCuts | DiTauCutOmniScore;
201  if (std::isnan(m_dOmniScoreMax.value()))
202  m_dOmniScoreMax = rEnv.GetValue("OmniScoreMax",NAN);
203 
204  // check for possible mis-config in DiTau selection
205  for (const std::string& checkCut : vCuts){
206  if (checkCut.find("OmniScoreRegion") != std::string::npos) {
207  ATH_MSG_ERROR("Misconfig due to OmniScoreRegion and OmniScoreMax cuts both present in the config file. Please CHECK carefully config file again and choose of the two");
208  return StatusCode::FAILURE;
209  }
210  }
211 
212  // check if using OmniScore
213  m_useOmniScore = true;
214  }
215  else if (sCut == "OmniIDWP")
216  {
217  iSelectionCuts = iSelectionCuts | DiTauCutOmniIDWP;
218  if (m_iOmniIDWP == OMNIIDNONE){
219  m_iOmniIDWP = convertStrToOmniIDWP(rEnv.GetValue("OmniIDWP","OMNIIDNONE"));
220  }
221  // check for possible mis-config in Tau selection
222  for (const std::string& checkCut : vCuts){
223  if (checkCut.find("OmniScore") != std::string::npos) {
224  ATH_MSG_ERROR("Misconfig due to OmniIDWP and OmniScore cuts both present in the config file. Please CHECK carefully config file again");
225  return StatusCode::FAILURE;
226  }
227  }
228  }
229  else ATH_MSG_WARNING("Cut " << sCut << " is not available");
230  }
231 
233  m_iSelectionCuts = iSelectionCuts;
234  }
235 
236  // initialise the ReadDecorHandleKey if OmniScore is applied
237  if (m_useOmniScore) {
238  if(m_OmniScoreDecorKey.empty()) {
239  ATH_CHECK( m_OmniScoreDecorKey.assign("DiTauJets.omni_score"));
240  }
241  }
243 
245 
246  // specify all available cut descriptions
247  using map_type = std::map<DiTauSelectionCuts, std::unique_ptr<TauAnalysisTools::DiTauSelectionCut>>;
248  using pair_type = map_type::value_type;
249 
250  pair_type elements[] =
251  {
252  {DiTauCutPt, std::make_unique<TauAnalysisTools::DiTauSelectionCutPt>(this)},
253  {DiTauCutAbsEta, std::make_unique<TauAnalysisTools::DiTauSelectionCutAbsEta>(this)},
254  {DiTauCutNSubjets, std::make_unique<TauAnalysisTools::DiTauSelectionCutNSubjets>(this)},
255  {DiTauCutAbsCharge, std::make_unique<TauAnalysisTools::DiTauSelectionCutAbsCharge>(this)},
256  {DiTauCutOmniScore, std::make_unique<TauAnalysisTools::DiTauSelectionCutOmniScore>(this)},
257  {DiTauCutOmniIDWP, std::make_unique<TauAnalysisTools::DiTauSelectionCutOmniIDWP>(this)},
258  };
259 
260  m_cMap = { std::make_move_iterator( begin(elements) ), std::make_move_iterator( end(elements) ) };
261 
262  ATH_MSG_INFO( "Initializing DiTauSelectionTool" );
263  FillRegionVector(m_vPtRegion, m_dPtMin.value(), m_dPtMax.value());
268 
271  PrintConfigRegion ("NSubjets", m_vNSubjetsRegion);
272  PrintConfigValue ("AbsCharge", m_vAbsCharges);
273  PrintConfigRegion ("OmniScore", m_vOmniScoreRegion);
274  PrintConfigValue ("OmniIDWP", m_sOmniIDWP);
275 
276  std::string sCuts = "";
277  if (m_iSelectionCuts & DiTauCutPt) sCuts += "Pt ";
278  if (m_iSelectionCuts & DiTauCutAbsEta) sCuts += "AbsEta ";
279  if (m_iSelectionCuts & DiTauCutNSubjets) sCuts += "NSubjets ";
280  if (m_iSelectionCuts & DiTauCutAbsCharge) sCuts += "AbsCharge ";
281  if (m_iSelectionCuts & DiTauCutOmniScore) sCuts += "OmniScore ";
282  if (m_iSelectionCuts & DiTauCutOmniIDWP) sCuts += "OmniIDWP ";
283 
284  ATH_MSG_DEBUG( "cuts: " << sCuts);
285 
288 
289  for ( const auto& entry : m_cMap ) {
290  if ( m_iSelectionCuts &entry.first ) {
291  entry.second->setAcceptInfo(m_aAccept);
292  }
293  }
294 
295  return StatusCode::SUCCESS;
296 }
297 
298 
299 //______________________________________________________________________________
301 {
302  return StatusCode::SUCCESS;
303 }
304 
305 //______________________________________________________________________________
307 {
308  return m_aAccept;
309 }
310 
311 //______________________________________________________________________________
313 {
314  // Check if this is a jet:
315  if( xP->type() != xAOD::Type::Jet )
316  {
317  ATH_MSG_ERROR( "accept(...) Function received a non-jet" );
318  return asg::AcceptData (&m_aAccept);
319  }
320 
321  // Cast it to a ditau:
322  const xAOD::DiTauJet* xDiTau = dynamic_cast< const xAOD::DiTauJet* >( xP );
323  if( ! xDiTau )
324  {
325  ATH_MSG_FATAL( "accept(...) Failed to cast particle to tau" );
326  return asg::AcceptData (&m_aAccept);
327  }
328 
329  // Let the specific function do the work:
330  return accept( *xDiTau );
331 }
332 
333 //______________________________________________________________________________
335 {
336  asg::AcceptData acceptData (&m_aAccept);
337 
338  int iNBin = 0;
339 
341  {
342  // fill cutflow 'All' bin
343  m_hCutFlow->Fill(iNBin);
344  // fill main distributions before all cuts
345  for (const auto& entry : m_cMap)
346  entry.second->fillHistogramCutPre(xDiTau);
347  }
348  try
349  {
350  for (const auto& entry : m_cMap)
351  {
352  if (m_iSelectionCuts & entry.first)
353  {
354  if (!entry.second->accept(xDiTau, acceptData))
355  return acceptData;
356  else
357  {
359  {
360  // fill cutflow after each passed cut
361  iNBin++;
362  m_hCutFlow->Fill(iNBin);
363  }
364  }
365  }
366  }
367  }
368  catch (const std::runtime_error& error)
369  {
370  // LEGACY: In practical terms this should probably just throw, not
371  // print a warning/error and then continue on. However, I leave
372  // that to the experts who probably had a reason not to let the
373  // exception escape. For now I just downgraded it from error to
374  // warning and limited the number of warnings (04 Jan 22).
375  static std::atomic<uint64_t> warning_count (0u);
376  auto mycount = ++ warning_count;
377  if (mycount < 10u)
378  {
379  ATH_MSG_WARNING(error.what());
380  if (mycount == 9u)
381  ATH_MSG_WARNING ("this is your last warning");
382  }
383  }
384 
385  // fill main distributions after all cuts
387  {
388  for (const auto& entry : m_cMap)
389  entry.second->fillHistogramCut(xDiTau);
390  }
391 
392  // // Return the result:
393  return acceptData;
394 }
395 
396 //______________________________________________________________________________
397 void DiTauSelectionTool::setOutFile( TFile* fOutFile )
398 {
399  m_fOutFile = fOutFile;
400 }
401 
402 //______________________________________________________________________________
404 {
406  ATH_MSG_WARNING("CreateControlPlots was set to true, but no valid file pointer was provided");
408  {
410  m_fOutFile->mkdir((this->name()+"_control").c_str());
411  m_fOutFile->cd((this->name()+"_control").c_str());
413  m_hCutFlow->Write();
414 
415  for (const auto& entry : m_cMap)
416  entry.second->writeControlHistograms();
417  }
418 }
419 
420 
421 //=================================PRIVATE-PART=================================
423 {
424  // count number of cuts
425  int iNBins = 0;
426  for (const auto& entry : m_cMap)
427  if (m_iSelectionCuts & entry.first)
428  iNBins++;
429  // create cutflow histogram with iNBins+1 bins, where first bin is 'All' bin
430  m_hCutFlow = std::make_shared<TH1F>("hCutFlow","CutFlow;; events",iNBins+1,0,iNBins+1);
431  m_hCutFlow->GetXaxis()->SetBinLabel(1,"All");
432 
433  // reusing this variable to reduce overhead
434  iNBins = 2;
435  // set bin labels
436  for (const auto& entry : m_cMap)
437  if (m_iSelectionCuts & entry.first)
438  {
439  m_hCutFlow->GetXaxis()->SetBinLabel(iNBins, entry.second->getName().c_str());
440  iNBins++;
441  }
442 }
443 
444 //______________________________________________________________________________
445 template<typename T, typename U>
446 void DiTauSelectionTool::FillRegionVector(std::vector<T>& vRegion, U tMin, U tMax) const
447 {
448  if (!vRegion.empty())
449  return;
450  if (!std::isnan(tMin)) // if tMin is NAN, then this assumption fails and -inf is added to the vector
451  vRegion.push_back(tMin);
452  else
453  vRegion.push_back(-std::numeric_limits<T>::infinity());
454 
455  if (!std::isnan(tMax)) // if tMax is NAN, then this assumption fails and inf is added to the vector
456  vRegion.push_back(tMax);
457  else
458  vRegion.push_back(std::numeric_limits<T>::infinity());
459 }
460 
461 //______________________________________________________________________________
462 template<typename T, typename U>
463 void DiTauSelectionTool::FillValueVector(std::vector<T>& vRegion, U tVal) const
464 {
465  if (!vRegion.empty())
466  return;
467  if (tVal == tVal) // if tMax is NAN, then this assumption fails and nothing is added to the vector
468  vRegion.push_back(tVal);
469 }
470 
471 //______________________________________________________________________________
472 template<typename T>
473 void DiTauSelectionTool::PrintConfigRegion(const std::string& sCutName, std::vector<T>& vRegion) const
474 {
475  unsigned int iNumRegion = vRegion.size()/2;
476  for( unsigned int iRegion = 0; iRegion < iNumRegion; iRegion++ )
477  {
478  ATH_MSG_DEBUG( sCutName<<": " << vRegion.at(iRegion*2) << " to " << vRegion.at(iRegion*2+1) );
479  }
480 }
481 
482 //______________________________________________________________________________
483 template<typename T>
484 void DiTauSelectionTool::PrintConfigValue(const std::string& sCutName, std::vector<T>& vRegion) const
485 {
486  for (auto tVal : vRegion)
487  ATH_MSG_DEBUG( sCutName<<": " << tVal );
488 }
489 
490 //______________________________________________________________________________
491 template<typename T>
492 void DiTauSelectionTool::PrintConfigValue(const std::string& sCutName, T& tVal) const
493 {
494  ATH_MSG_DEBUG( sCutName<<": " << tVal );
495 }
496 
497 //______________________________________________________________________________
498 int DiTauSelectionTool::convertStrToOmniIDWP(const std::string& sOmniIDWP) const
499 {
500  if (sOmniIDWP == "OMNIIDNONE") return int(OMNIIDNONE);
501  else if (sOmniIDWP == "OMNIIDVERYLOOSE") return int(OMNIIDVERYLOOSE);
502  else if (sOmniIDWP == "OMNIIDLOOSE") return int(OMNIIDLOOSE);
503  else if (sOmniIDWP == "OMNIIDMEDIUM") return int(OMNIIDMEDIUM);
504  else if (sOmniIDWP == "OMNIIDTIGHT") return int(OMNIIDTIGHT);
505 
506  ATH_MSG_ERROR( "omni ID working point "<<sOmniIDWP<<" is unknown, the OmniIDWP cut will not accept any ditau!" );
507  return -1;
508 }
509 
510 //______________________________________________________________________________
511 std::string DiTauSelectionTool::convertOmniIDWPToStr(int iOmniIDWP) const
512 {
513  switch (iOmniIDWP)
514  {
515  case OMNIIDNONE:
516  return "OMNIIDNONE";
517  case OMNIIDVERYLOOSE:
518  return "OMNIIDVERYLOOSE";
519  case OMNIIDLOOSE:
520  return "OMNIIDLOOSE";
521  case OMNIIDMEDIUM:
522  return "OMNIIDMEDIUM";
523  case OMNIIDTIGHT:
524  return "OMNIIDTIGHT";
525 
526  default:
527  ATH_MSG_WARNING( "OmniID working point with enum " << iOmniIDWP << " is unknown, the OmniIDWP cut will not accept any ditau!" );
528  return "";
529  }
530 }
531 
532 
533 
534 
TauAnalysisTools
Definition: PhysValMET.h:37
TauAnalysisTools::DiTauSelectionTool::m_bCreateControlPlots
Gaudi::Property< bool > m_bCreateControlPlots
Definition: DiTauSelectionTool.h:151
TauAnalysisTools::DiTauSelectionTool::m_vecPtRegion
Gaudi::Property< std::vector< float > > m_vecPtRegion
Definition: DiTauSelectionTool.h:131
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TauAnalysisTools::OMNIIDNONE
@ OMNIIDNONE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:31
TauAnalysisTools::DiTauSelectionTool::m_aAccept
asg::AcceptInfo m_aAccept
Object used to store selection information.
Definition: DiTauSelectionTool.h:155
TauAnalysisTools::DiTauSelectionTool::m_OmniScoreDecorKey
SG::ReadDecorHandleKey< xAOD::DiTauJetContainer > m_OmniScoreDecorKey
Definition: DiTauSelectionTool.h:152
TauAnalysisTools::OMNIIDTIGHT
@ OMNIIDTIGHT
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:35
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
DiTauSelectionTool.h
TauAnalysisTools::DiTauSelectionTool::m_dPtMin
Gaudi::Property< float > m_dPtMin
Definition: DiTauSelectionTool.h:120
TauAnalysisTools::DiTauSelectionTool::initialize
virtual StatusCode initialize() override
Function initialising the tool.
Definition: DiTauSelectionTool.cxx:37
TauAnalysisTools::DiTauSelectionTool::m_dPtMax
Gaudi::Property< float > m_dPtMax
Definition: DiTauSelectionTool.h:121
TauAnalysisTools::DiTauSelectionTool::m_dOmniScoreMax
Gaudi::Property< float > m_dOmniScoreMax
Definition: DiTauSelectionTool.h:128
TauAnalysisTools::DiTauCutOmniScore
@ DiTauCutOmniScore
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:71
TauAnalysisTools::DiTauSelectionTool::m_dAbsEtaMin
Gaudi::Property< float > m_dAbsEtaMin
Definition: DiTauSelectionTool.h:122
asg
Definition: DataHandleTestTool.h:28
TauAnalysisTools::DiTauSelectionTool::getAcceptInfo
virtual const asg::AcceptInfo & getAcceptInfo() const override
Get an object describing the "selection steps" of the tool.
Definition: DiTauSelectionTool.cxx:306
ReadBchFromCrest.begin
begin
Definition: ReadBchFromCrest.py:80
TauAnalysisTools::DiTauSelectionTool::m_dOmniScoreMin
Gaudi::Property< float > m_dOmniScoreMin
Definition: DiTauSelectionTool.h:127
TauAnalysisTools::DiTauCutPt
@ DiTauCutPt
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:67
TauAnalysisTools::DiTauCutAbsCharge
@ DiTauCutAbsCharge
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:70
xAOD::IParticle::type
virtual Type::ObjectType type() const =0
The type of the object as a simple enumeration.
TauAnalysisTools::DiTauCutOmniIDWP
@ DiTauCutOmniIDWP
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:72
TauAnalysisTools::DiTauSelectionTool::writeControlHistograms
virtual void writeControlHistograms() override
Write control histograms to output file.
Definition: DiTauSelectionTool.cxx:403
TauAnalysisTools::DiTauSelectionTool::beginEvent
virtual StatusCode beginEvent() override
Function called when a new events is loaded.
Definition: DiTauSelectionTool.cxx:300
TauAnalysisTools::DiTauSelectionTool::m_sOmniIDWP
std::string m_sOmniIDWP
Definition: DiTauSelectionTool.h:114
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::OMNIIDLOOSE
@ OMNIIDLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:33
TauAnalysisTools::DiTauSelectionTool::m_iAbsCharge
Gaudi::Property< float > m_iAbsCharge
Definition: DiTauSelectionTool.h:126
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
TauAnalysisTools::DiTauSelectionTool::m_vAbsCharges
std::vector< int > m_vAbsCharges
Definition: DiTauSelectionTool.h:110
TauAnalysisTools::DiTauSelectionTool::m_vecAbsEtaRegion
Gaudi::Property< std::vector< float > > m_vecAbsEtaRegion
Definition: DiTauSelectionTool.h:132
TauAnalysisTools::NoDiTauCut
@ NoDiTauCut
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:66
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
asg::AcceptInfo
Definition: AcceptInfo.h:28
TauAnalysisTools::DiTauSelectionTool::m_vAbsEtaRegion
std::vector< float > m_vAbsEtaRegion
Definition: DiTauSelectionTool.h:106
TauAnalysisTools::DiTauSelectionTool::m_sConfigPath
Gaudi::Property< std::string > m_sConfigPath
Definition: DiTauSelectionTool.h:118
lumiFormat.i
int i
Definition: lumiFormat.py:85
TauAnalysisTools::DiTauSelectionTool::m_hCutFlow
std::shared_ptr< TH1F > m_hCutFlow
Definition: DiTauSelectionTool.h:139
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TauAnalysisTools::DiTauCutNSubjets
@ DiTauCutNSubjets
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:69
TauAnalysisTools::DiTauSelectionTool::setupCutFlowHistogram
void setupCutFlowHistogram()
Definition: DiTauSelectionTool.cxx:422
DiTauSelectionCuts.h
TauAnalysisTools::DiTauSelectionTool::PrintConfigValue
void PrintConfigValue(const std::string &sCutName, std::vector< T > &vRegion) const
Definition: DiTauSelectionTool.cxx:484
TauAnalysisTools::DiTauSelectionTool::FillRegionVector
void FillRegionVector(std::vector< T > &vRegion, U tMin, U tMax) const
Definition: DiTauSelectionTool.cxx:446
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
TauAnalysisTools::DiTauSelectionTool::convertOmniIDWPToStr
std::string convertOmniIDWPToStr(int iOmniIDWP) const
Definition: DiTauSelectionTool.cxx:511
TauAnalysisTools::DiTauSelectionTool::m_vPtRegion
std::vector< float > m_vPtRegion
Definition: DiTauSelectionTool.h:104
PathResolver.h
TauAnalysisTools::OMNIIDMEDIUM
@ OMNIIDMEDIUM
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:34
TauAnalysisTools::DiTauSelectionTool::m_iOmniIDWP
Gaudi::Property< int > m_iOmniIDWP
Definition: DiTauSelectionTool.h:129
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TauAnalysisTools::DiTauSelectionTool::m_dAbsEtaMax
Gaudi::Property< float > m_dAbsEtaMax
Definition: DiTauSelectionTool.h:123
TauAnalysisTools::DiTauSelectionTool::m_dNSubjetsMin
Gaudi::Property< float > m_dNSubjetsMin
Definition: DiTauSelectionTool.h:124
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:321
TauAnalysisTools::DiTauSelectionTool::convertStrToOmniIDWP
int convertStrToOmniIDWP(const std::string &sOmniIDWP) const
Definition: DiTauSelectionTool.cxx:498
TauAnalysisTools::DiTauSelectionTool::m_vecAbsCharges
Gaudi::Property< std::vector< int > > m_vecAbsCharges
Definition: DiTauSelectionTool.h:134
TauAnalysisTools::DiTauSelectionTool::setOutFile
virtual void setOutFile(TFile *fOutFile) override
Set output file for control histograms.
Definition: DiTauSelectionTool.cxx:397
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
TauAnalysisTools::DiTauSelectionTool::m_vecOmniScoreRegion
Gaudi::Property< std::vector< float > > m_vecOmniScoreRegion
Definition: DiTauSelectionTool.h:135
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TauAnalysisTools::DiTauSelectionTool::m_useOmniScore
bool m_useOmniScore
Definition: DiTauSelectionTool.h:116
TauAnalysisTools::DiTauSelectionTool::PrintConfigRegion
void PrintConfigRegion(const std::string &sCutName, std::vector< T > &vRegion) const
Definition: DiTauSelectionTool.cxx:473
TauAnalysisTools::DiTauSelectionTool::m_vecNSubjetsRegion
Gaudi::Property< std::vector< float > > m_vecNSubjetsRegion
Definition: DiTauSelectionTool.h:133
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
TauAnalysisTools::DiTauCutAbsEta
@ DiTauCutAbsEta
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:68
TauAnalysisTools::DiTauSelectionTool::m_cMap
std::map< DiTauSelectionCuts, std::unique_ptr< TauAnalysisTools::DiTauSelectionCut > > m_cMap
Definition: DiTauSelectionTool.h:143
TauAnalysisTools::DiTauSelectionTool::m_vNSubjetsRegion
std::vector< float > m_vNSubjetsRegion
Definition: DiTauSelectionTool.h:108
TauAnalysisTools::DiTauSelectionTool::m_vOmniScoreRegion
std::vector< float > m_vOmniScoreRegion
Definition: DiTauSelectionTool.h:112
TauAnalysisTools::DiTauSelectionTool::FillValueVector
void FillValueVector(std::vector< T > &vRegion, U tVal) const
Definition: DiTauSelectionTool.cxx:463
asg::AcceptData
Definition: AcceptData.h:30
TauAnalysisTools::DiTauSelectionTool::m_iSelectionCuts
Gaudi::Property< int > m_iSelectionCuts
Definition: DiTauSelectionTool.h:119
error
Definition: IImpactPoint3dEstimator.h:70
TauAnalysisTools::DiTauSelectionTool::accept
virtual asg::AcceptData accept(const xAOD::IParticle *p) const override
Get the decision using a generic IParticle pointer.
Definition: DiTauSelectionTool.cxx:312
xAOD::Jet
Jet_v1 Jet
Definition of the current "jet version".
Definition: Event/xAOD/xAODJet/xAODJet/Jet.h:17
TauAnalysisTools::DiTauSelectionTool::m_dNSubjetsMax
Gaudi::Property< float > m_dNSubjetsMax
Definition: DiTauSelectionTool.h:125
TauAnalysisTools::OMNIIDVERYLOOSE
@ OMNIIDVERYLOOSE
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:32
TauAnalysisTools::split
void split(const std::string &sInput, const char cDelim, std::vector< std::string > &vOut)
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:23
TauAnalysisTools::DiTauSelectionTool::m_fOutFile
TFile * m_fOutFile
Definition: DiTauSelectionTool.h:138