ATLAS Offline Software
DiTauDiscriminantTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 using namespace DiTauRecTools;
10 
11 //=================================PUBLIC-PART==================================
12 //______________________________________________________________________________
13 DiTauDiscriminantTool::DiTauDiscriminantTool( const std::string& name )
14  : AsgTool(name) { }
15 
16 //______________________________________________________________________________
17 DiTauDiscriminantTool::~DiTauDiscriminantTool( )
18 = default;
19 
20 //______________________________________________________________________________
22 {
23  ATH_MSG_INFO( "Initializing DiTauDiscriminantTool" );
24  ATH_MSG_DEBUG( "path to weights file: " << m_sWeightsFile );
25 
26  ATH_CHECK(parseWeightsFile());
27 
28  // m_bIsInitialized = true;
29  return StatusCode::SUCCESS;
30 }
31 
33 // Wrapper functions //
36 
37  auto availableVariables = setIDVariables(xDiTau);
38 
39  float bdtScore = m_mvaBDT->getGradBoostMVA(availableVariables);
40 
41  const static SG::Decorator<float> decBDTScore(m_sBDTScoreName);
42  decBDTScore(xDiTau) = bdtScore;
43 
44  ATH_MSG_DEBUG("Jet BDT score: " << bdtScore);
45  return StatusCode::SUCCESS;
46 }
47 
48 //=================================PRIVATE-PART=================================
49 //______________________________________________________________________________
50 
51 StatusCode DiTauDiscriminantTool::parseWeightsFile()
52 {
53  std::string weight_file = PathResolverFindCalibFile(m_sWeightsFile);
54 
55  ATH_MSG_DEBUG("InputWeightsPath: " << weight_file);
56 
57  m_mvaBDT = std::make_unique<tauRecTools::BDTHelper>();
58  ATH_CHECK(m_mvaBDT->initialize(weight_file));
59 
60  return StatusCode::SUCCESS;
61 }
62 
63 // ----------------------------------------------------------------------------
64 std::map<TString, float> DiTauDiscriminantTool::setIDVariables(const xAOD::DiTauJet& xDiTau) const
65 {
66  SG::ConstAccessor<float> f_core_leadAcc("f_core_lead");
67  SG::ConstAccessor<float> f_core_sublAcc("f_core_subl");
68  SG::ConstAccessor<float> f_subjet_sublAcc("f_subjet_subl");
69  SG::ConstAccessor<float> f_subjetsAcc("f_subjets");
70  SG::ConstAccessor<float> R_max_leadAcc("R_max_lead");
71  SG::ConstAccessor<float> R_max_sublAcc("R_max_subl");
72  SG::ConstAccessor<int> n_trackAcc("n_track");
73  SG::ConstAccessor<int> n_tracks_leadAcc("n_tracks_lead");
74  SG::ConstAccessor<float> R_isotrackAcc("R_isotrack");
75  SG::ConstAccessor<float> R_tracks_sublAcc("R_tracks_subl");
76  SG::ConstAccessor<float> M_core_leadAcc("m_core_lead");
77  SG::ConstAccessor<float> M_core_sublAcc("m_core_subl");
78  SG::ConstAccessor<float> M_tracks_leadAcc("m_tracks_lead");
79  SG::ConstAccessor<float> M_tracks_sublAcc("m_tracks_subl");
80  SG::ConstAccessor<float> d0_leadtrack_leadAcc("d0_leadtrack_lead");
81  SG::ConstAccessor<float> d0_leadtrack_sublAcc("d0_leadtrack_subl");
82  SG::ConstAccessor<float> f_isotracksAcc("f_isotracks");
83 
84  std::map<TString, float> availableVariables;
85  availableVariables.emplace("f_core_lead", f_core_leadAcc(xDiTau));
86  availableVariables.emplace("f_core_subl", f_core_sublAcc(xDiTau));
87  availableVariables.emplace("f_subjet_subl", f_subjet_sublAcc(xDiTau));
88  availableVariables.emplace("f_subjets", f_subjetsAcc(xDiTau));
89  availableVariables.emplace("R_max_lead", R_max_leadAcc(xDiTau));
90  availableVariables.emplace("R_max_subl", R_max_sublAcc(xDiTau));
91  availableVariables.emplace("n_track", static_cast<float>(n_trackAcc(xDiTau)));
92  availableVariables.emplace("n_tracks_lead", static_cast<float>(n_tracks_leadAcc(xDiTau)));
93  availableVariables.emplace("R_isotrack", R_isotrackAcc(xDiTau));
94  availableVariables.emplace("R_tracks_subl", R_tracks_sublAcc(xDiTau));
95  availableVariables.emplace("m_core_lead", M_core_leadAcc(xDiTau));
96  availableVariables.emplace("log(m_core_lead)", std::log(M_core_leadAcc(xDiTau)));
97  availableVariables.emplace("m_core_subl", M_core_sublAcc(xDiTau));
98  availableVariables.emplace("log(m_core_subl)", std::log(M_core_sublAcc(xDiTau)));
99  availableVariables.emplace("m_tracks_lead", M_tracks_leadAcc(xDiTau));
100  availableVariables.emplace("log(m_tracks_lead)", std::log(M_tracks_leadAcc(xDiTau)));
101  availableVariables.emplace("m_tracks_subl", M_tracks_sublAcc(xDiTau));
102  availableVariables.emplace("log(m_tracks_subl)", std::log(M_tracks_sublAcc(xDiTau)));
103  availableVariables.emplace("d0_leadtrack_lead", d0_leadtrack_leadAcc(xDiTau));
104  availableVariables.emplace("log(abs(d0_leadtrack_lead))", std::log(std::abs(d0_leadtrack_leadAcc(xDiTau))));
105  availableVariables.emplace("d0_leadtrack_subl", d0_leadtrack_sublAcc(xDiTau));
106  availableVariables.emplace("log(abs(d0_leadtrack_subl))", std::log(std::abs(d0_leadtrack_sublAcc(xDiTau))));
107  availableVariables.emplace("f_isotracks", f_isotracksAcc(xDiTau));
108  availableVariables.emplace("log(f_isotracks)", std::log(f_isotracksAcc(xDiTau)));
109 
110  for (const auto& [var, value]: availableVariables)
111  {
112  ATH_MSG_DEBUG(var << ": " << value);
113  }
114 
115  return availableVariables;
116 }
beamspotnt.var
var
Definition: bin/beamspotnt.py:1393
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
initialize
void initialize()
Definition: run_EoverP.cxx:894
athena.value
value
Definition: athena.py:124
SG::ConstAccessor< float >
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
SG::Decorator< float >
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
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
DiTauRecTools
Implementation of boosted di-tau ID.
Definition: DiTauDiscriminantTool.h:31
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:321
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
DiTauDiscriminantTool.h