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 
6 
7 // Core include(s):
8 #include "AthLinks/ElementLink.h"
9 
10 // EDM include(s):
11 #include "xAODTau/DiTauJet.h"
12 
16 
17 
18 using namespace DiTauRecTools;
19 
20 //=================================PUBLIC-PART==================================
21 //______________________________________________________________________________
22 DiTauDiscriminantTool::DiTauDiscriminantTool( const std::string& name )
23  : AsgTool(name) { }
24 
25 //______________________________________________________________________________
26 DiTauDiscriminantTool::~DiTauDiscriminantTool( )
27 = default;
28 
29 //______________________________________________________________________________
31 {
32  ATH_MSG_INFO( "Initializing DiTauDiscriminantTool" );
33  ATH_MSG_DEBUG( "path to weights file: " << m_sWeightsFile );
34 
35  ATH_CHECK(parseWeightsFile());
36 
37  // m_bIsInitialized = true;
38  return StatusCode::SUCCESS;
39 }
40 
42 // Wrapper functions //
45 
46  auto availableVariables = setIDVariables(xDiTau);
47 
48  float bdtScore = m_mvaBDT->getGradBoostMVA(availableVariables);
49 
50  const static SG::Decorator<float> decBDTScore(m_sBDTScoreName);
51  decBDTScore(xDiTau) = bdtScore;
52 
53  ATH_MSG_DEBUG("Jet BDT score: " << bdtScore);
54  return StatusCode::SUCCESS;
55 }
56 
57 //=================================PRIVATE-PART=================================
58 //______________________________________________________________________________
59 
60 StatusCode DiTauDiscriminantTool::parseWeightsFile()
61 {
62  std::string weight_file = PathResolverFindCalibFile(m_sWeightsFile);
63 
64  ATH_MSG_DEBUG("InputWeightsPath: " << weight_file);
65 
66  m_mvaBDT = std::make_unique<tauRecTools::BDTHelper>();
67  ATH_CHECK(m_mvaBDT->initialize(weight_file));
68 
69  return StatusCode::SUCCESS;
70 }
71 
72 // ----------------------------------------------------------------------------
73 std::map<TString, float> DiTauDiscriminantTool::setIDVariables(const xAOD::DiTauJet& xDiTau) const
74 {
75  SG::ConstAccessor<float> f_core_leadAcc("f_core_lead");
76  SG::ConstAccessor<float> f_core_sublAcc("f_core_subl");
77  SG::ConstAccessor<float> f_subjet_sublAcc("f_subjet_subl");
78  SG::ConstAccessor<float> f_subjetsAcc("f_subjets");
79  SG::ConstAccessor<float> R_max_leadAcc("R_max_lead");
80  SG::ConstAccessor<float> R_max_sublAcc("R_max_subl");
81  SG::ConstAccessor<int> n_trackAcc("n_track");
82  SG::ConstAccessor<int> n_tracks_leadAcc("n_tracks_lead");
83  SG::ConstAccessor<float> R_isotrackAcc("R_isotrack");
84  SG::ConstAccessor<float> R_tracks_sublAcc("R_tracks_subl");
85  SG::ConstAccessor<float> M_core_leadAcc("m_core_lead");
86  SG::ConstAccessor<float> M_core_sublAcc("m_core_subl");
87  SG::ConstAccessor<float> M_tracks_leadAcc("m_tracks_lead");
88  SG::ConstAccessor<float> M_tracks_sublAcc("m_tracks_subl");
89  SG::ConstAccessor<float> d0_leadtrack_leadAcc("d0_leadtrack_lead");
90  SG::ConstAccessor<float> d0_leadtrack_sublAcc("d0_leadtrack_subl");
91  SG::ConstAccessor<float> f_isotracksAcc("f_isotracks");
92 
93  std::map<TString, float> availableVariables;
94  availableVariables.emplace("f_core_lead", f_core_leadAcc(xDiTau));
95  availableVariables.emplace("f_core_subl", f_core_sublAcc(xDiTau));
96  availableVariables.emplace("f_subjet_subl", f_subjet_sublAcc(xDiTau));
97  availableVariables.emplace("f_subjets", f_subjetsAcc(xDiTau));
98  availableVariables.emplace("R_max_lead", R_max_leadAcc(xDiTau));
99  availableVariables.emplace("R_max_subl", R_max_sublAcc(xDiTau));
100  availableVariables.emplace("n_track", static_cast<float>(n_trackAcc(xDiTau)));
101  availableVariables.emplace("n_tracks_lead", static_cast<float>(n_tracks_leadAcc(xDiTau)));
102  availableVariables.emplace("R_isotrack", R_isotrackAcc(xDiTau));
103  availableVariables.emplace("R_tracks_subl", R_tracks_sublAcc(xDiTau));
104  availableVariables.emplace("m_core_lead", M_core_leadAcc(xDiTau));
105  availableVariables.emplace("log(m_core_lead)", std::log(M_core_leadAcc(xDiTau)));
106  availableVariables.emplace("m_core_subl", M_core_sublAcc(xDiTau));
107  availableVariables.emplace("log(m_core_subl)", std::log(M_core_sublAcc(xDiTau)));
108  availableVariables.emplace("m_tracks_lead", M_tracks_leadAcc(xDiTau));
109  availableVariables.emplace("log(m_tracks_lead)", std::log(M_tracks_leadAcc(xDiTau)));
110  availableVariables.emplace("m_tracks_subl", M_tracks_sublAcc(xDiTau));
111  availableVariables.emplace("log(m_tracks_subl)", std::log(M_tracks_sublAcc(xDiTau)));
112  availableVariables.emplace("d0_leadtrack_lead", d0_leadtrack_leadAcc(xDiTau));
113  availableVariables.emplace("log(abs(d0_leadtrack_lead))", std::log(std::abs(d0_leadtrack_leadAcc(xDiTau))));
114  availableVariables.emplace("d0_leadtrack_subl", d0_leadtrack_sublAcc(xDiTau));
115  availableVariables.emplace("log(abs(d0_leadtrack_subl))", std::log(std::abs(d0_leadtrack_sublAcc(xDiTau))));
116  availableVariables.emplace("f_isotracks", f_isotracksAcc(xDiTau));
117  availableVariables.emplace("log(f_isotracks)", std::log(f_isotracksAcc(xDiTau)));
118 
119  for (const auto& [var, value]: availableVariables)
120  {
121  ATH_MSG_DEBUG(var << ": " << value);
122  }
123 
124  return availableVariables;
125 }
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 >
HelperFunctions.h
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
DiTauJet.h
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:283
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