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