ATLAS Offline Software
MvaTESEvaluator.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)
7 
8 
10  : TauRecToolBase(name) {
11 }
12 
13 
15 
16  const std::string weightFile = find_file(m_sWeightFileName);
17  m_bdtHelper = std::make_unique<tauRecTools::BDTHelper>();
18  ATH_CHECK(m_bdtHelper->initialize(weightFile));
19 
20  if (!m_sWeightFileName0p.empty()) {
21  const std::string weightFile0p = find_file(m_sWeightFileName0p);
22  m_bdtHelper0p = std::make_unique<tauRecTools::BDTHelper>();
23  ATH_CHECK(m_bdtHelper0p->initialize(weightFile0p));
24  }
25 
26  return StatusCode::SUCCESS;
27 }
28 
29 
31 
32  std::map<TString, float*> availableVars;
33  MvaInputVariables vars;
34 
35  // Declare input variables to the reader
36  if (!inTrigger()) {
37  availableVars.insert( std::make_pair("TauJetsAuxDyn.mu", &vars.mu) );
38  availableVars.insert( std::make_pair("TauJetsAuxDyn.nVtxPU", &vars.nVtxPU) );
39  availableVars.insert( std::make_pair("TauJetsAuxDyn.rho", &vars.rho) );
40  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanCenterLambda", &vars.center_lambda) );
41  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanFirstEngDens", &vars.first_eng_dens) );
42  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanSecondLambda", &vars.second_lambda) );
43  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanPresamplerFrac", &vars.presampler_frac) );
44  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanEMProbability", &vars.eprobability) );
45  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptIntermediateAxisEM/TauJetsAuxDyn.ptIntermediateAxis", &vars.ptEM_D_ptLC) );
46  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptIntermediateAxis/TauJetsAuxDyn.ptCombined", &vars.ptLC_D_ptCombined) );
47  availableVars.insert( std::make_pair("TauJetsAuxDyn.etaPanTauCellBased", &vars.etaConstituent) );
48  if (m_bdtHelper0p && xTau.nTracks()==0) {
49  availableVars.insert( std::make_pair("log(TauJetsAuxDyn.ptCombined)", &vars.logPtCombined) );
50  availableVars.insert( std::make_pair("TauJetsAuxDyn.LeadClusterFrac", &vars.lead_cluster_frac) );
51  availableVars.insert( std::make_pair("TauJetsAuxDyn.centFrac", &vars.centFrac) );
52  availableVars.insert( std::make_pair("TauJetsAuxDyn.UpsilonCluster", &vars.upsilon_cluster) );
53  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptJetSeed/TauJetsAuxDyn.ptCombined", &vars.ptSeed_D_ptCombined) );
54  }
55  else {
56  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptPanTauCellBased/TauJetsAuxDyn.ptCombined", &vars.ptConstituent_D_ptCombined) );
57  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptCombined", &vars.ptCombined) );
58  availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_1p0n_vs_1p1n", &vars.PanTauBDT_1p0n_vs_1p1n) );
59  availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_1p1n_vs_1pXn", &vars.PanTauBDT_1p1n_vs_1pXn) );
60  availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_3p0n_vs_3pXn", &vars.PanTauBDT_3p0n_vs_3pXn) );
61  availableVars.insert( std::make_pair("TauJetsAuxDyn.nTracks", &vars.nTracks) );
62  availableVars.insert( std::make_pair("TauJetsAuxDyn.PFOEngRelDiff", &vars.PFOEngRelDiff) );
63  }
64  }
65  else {
66  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.mu", &vars.mu) );
67  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanCenterLambda", &vars.center_lambda) );
68  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanFirstEngDens", &vars.first_eng_dens) );
69  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanSecondLambda", &vars.second_lambda) );
70  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanPresamplerFrac", &vars.presampler_frac) );
71  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanEMProbability", &vars.eprobability) );
72  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.LeadClusterFrac", &vars.lead_cluster_frac) );
73  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.SecondClusterFrac", &vars.second_cluster_frac) );
74  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ThirdClusterFrac", &vars.third_cluster_frac) );
75  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.UpsilonCluster", &vars.upsilon_cluster) );
76  availableVars.insert( std::make_pair("log(TrigTauJetsAuxDyn.ptDetectorAxis)", &vars.logPtDetectorAxis) );
77  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.etaDetectorAxis", &vars.etaDetectorAxis) );
78  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ptIntermediateAxisEM/TrigTauJetsAuxDyn.ptDetectorAxis", &vars.ptEM_D_ptLC) );
79  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ptDetectorAxis/TrigTauJetsAuxDyn.ptJetSeed", &vars.ptDetectorAxis_D_ptJetSeed) );
80  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.centFrac", &vars.centFrac) );
81  }
82 
83  // Retrieve average pileup
84  static const SG::ConstAccessor<float> acc_mu("mu");
85  vars.mu = acc_mu(xTau);
86 
87  // Retrieve cluster moments
93 
94  static const SG::ConstAccessor<float> acc_ptIntermediateAxisEM("ptIntermediateAxisEM");
95  float ptEM = acc_ptIntermediateAxisEM(xTau);
96 
97  if (!inTrigger()) {
98  static const SG::ConstAccessor<float> acc_ptCombined("ptCombined");
99  float ptCombined = acc_ptCombined(xTau);
100 
101  if (ptCombined==0.) {
103  // apply MVA calibration as default
104  xTau.setP4(1., xTau.etaPanTauCellBased(), xTau.phiPanTauCellBased(), 0.);
105  return StatusCode::SUCCESS;
106  }
107 
108  static const SG::ConstAccessor<int> acc_nVtxPU("nVtxPU");
109  vars.nVtxPU = acc_nVtxPU(xTau);
110 
111  static const SG::ConstAccessor<float> acc_rho("rho");
112  vars.rho = acc_rho(xTau);
113 
114  float ptLC = xTau.ptIntermediateAxis();
115 
116  float ptConstituent = xTau.ptPanTauCellBased();
117  vars.etaConstituent = xTau.etaPanTauCellBased();
118 
119  vars.ptEM_D_ptLC = (ptLC != 0.) ? ptEM / ptLC : 0.;
120  vars.ptLC_D_ptCombined = ptLC / ptCombined;
121 
122  float ptMVA = 0.;
123 
124  if (m_bdtHelper0p && xTau.nTracks()==0) {
125  vars.logPtCombined = std::log(ptCombined);
126  vars.ptSeed_D_ptCombined = xTau.ptJetSeed() / ptCombined;
127 
128  static const SG::ConstAccessor<float> acc_UpsilonCluster("UpsilonCluster");
129  vars.upsilon_cluster = acc_UpsilonCluster(xTau);
130 
131  static const SG::ConstAccessor<float> acc_LeadClusterFrac("LeadClusterFrac");
132  vars.lead_cluster_frac = acc_LeadClusterFrac(xTau);
133 
135 
136  ptMVA = float( ptCombined * m_bdtHelper0p->getResponse(availableVars) );
137  }
138  else {
139  vars.ptCombined = ptCombined;
140  vars.ptConstituent_D_ptCombined = ptConstituent / ptCombined;
141 
142  // Retrieve substructure info
143  static const SG::ConstAccessor<float> acc_PanTauBDT_1p0n_vs_1p1n("PanTau_BDTValue_1p0n_vs_1p1n");
144  static const SG::ConstAccessor<float> acc_PanTauBDT_1p1n_vs_1pXn("PanTau_BDTValue_1p1n_vs_1pXn");
145  static const SG::ConstAccessor<float> acc_PanTauBDT_3p0n_vs_3pXn("PanTau_BDTValue_3p0n_vs_3pXn");
146  // BDT values are initialised to -1111, while actual scores (when evaluated) are within [-5,1], so take max between BDT score and -5-epsilon
147  vars.PanTauBDT_1p0n_vs_1p1n = std::max(acc_PanTauBDT_1p0n_vs_1p1n(xTau), -5.1f);
148  vars.PanTauBDT_1p1n_vs_1pXn = std::max(acc_PanTauBDT_1p1n_vs_1pXn(xTau), -5.1f);
149  vars.PanTauBDT_3p0n_vs_3pXn = std::max(acc_PanTauBDT_3p0n_vs_3pXn(xTau), -5.1f);
150  vars.nTracks = static_cast<float>(xTau.nTracks());
152 
153  ptMVA = float( ptCombined * m_bdtHelper->getResponse(availableVars) );
154  }
155 
156  if (ptMVA<1.) ptMVA=1.;
158  // apply MVA calibration as default
159  xTau.setP4(ptMVA, vars.etaConstituent, xTau.phiPanTauCellBased(), 0.);
160  }
161  else {
162  // protection but should never happen
163  if (xTau.ptDetectorAxis()==0. || xTau.ptJetSeed()==0.) {
165  xTau.setP4(1., xTau.etaDetectorAxis(), xTau.phiDetectorAxis(), 0.);
166  return StatusCode::SUCCESS;
167  }
168 
170  vars.etaDetectorAxis = xTau.etaDetectorAxis();
171  vars.ptEM_D_ptLC = ptEM / xTau.ptDetectorAxis();
172  vars.ptDetectorAxis_D_ptJetSeed = xTau.ptDetectorAxis() / xTau.ptJetSeed();
173 
174  static const SG::ConstAccessor<float> acc_UpsilonCluster("UpsilonCluster");
175  static const SG::ConstAccessor<float> acc_LeadClusterFrac("LeadClusterFrac");
176  static const SG::ConstAccessor<float> acc_SecondClusterFrac("SecondClusterFrac");
177  static const SG::ConstAccessor<float> acc_ThirdClusterFrac("ThirdClusterFrac");
178 
179  vars.upsilon_cluster = acc_UpsilonCluster(xTau);
180  vars.lead_cluster_frac = acc_LeadClusterFrac(xTau);
181  vars.second_cluster_frac = acc_SecondClusterFrac(xTau);
182  vars.third_cluster_frac = acc_ThirdClusterFrac(xTau);
183 
185 
186  float ptMVA = float( xTau.ptDetectorAxis() * m_bdtHelper->getResponse(availableVars) );
187  if (ptMVA<1.) ptMVA=1.;
188 
190  // apply MVA calibration
191  xTau.setP4(ptMVA, vars.etaDetectorAxis, xTau.phiDetectorAxis(), 0.);
192  }
193 
194  ATH_MSG_DEBUG("final calib:" << xTau.pt() << " " << xTau.eta() << " " << xTau.phi() << " " << xTau.e());
195 
196  return StatusCode::SUCCESS;
197 }
xAOD::TauJet_v3::phiDetectorAxis
double phiDetectorAxis() const
MvaTESEvaluator::MvaInputVariables::first_eng_dens
float first_eng_dens
Definition: MvaTESEvaluator.h:37
xAOD::TauJetParameters::PFOEngRelDiff
@ PFOEngRelDiff
Definition: TauDefs.h:318
MvaTESEvaluator::MvaInputVariables::second_lambda
float second_lambda
Definition: MvaTESEvaluator.h:38
MvaTESEvaluator::MvaInputVariables::etaDetectorAxis
float etaDetectorAxis
Definition: MvaTESEvaluator.h:61
xAOD::TauJet_v3::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
xAOD::TauJet_v3::etaDetectorAxis
double etaDetectorAxis() const
xAOD::TauJetParameters::ClustersMeanSecondLambda
@ ClustersMeanSecondLambda
Definition: TauDefs.h:315
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MvaTESEvaluator::m_bdtHelper
std::unique_ptr< tauRecTools::BDTHelper > m_bdtHelper
Definition: MvaTESEvaluator.h:69
MvaTESEvaluator::MvaInputVariables::upsilon_cluster
float upsilon_cluster
Definition: MvaTESEvaluator.h:62
MvaTESEvaluator.h
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:488
MvaTESEvaluator::MvaInputVariables::mu
float mu
Definition: MvaTESEvaluator.h:32
MvaTESEvaluator::m_bdtHelper0p
std::unique_ptr< tauRecTools::BDTHelper > m_bdtHelper0p
Definition: MvaTESEvaluator.h:70
MvaTESEvaluator::MvaInputVariables::PanTauBDT_3p0n_vs_3pXn
float PanTauBDT_3p0n_vs_3pXn
Definition: MvaTESEvaluator.h:50
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
xAOD::TauJetParameters::ClustersMeanPresamplerFrac
@ ClustersMeanPresamplerFrac
Definition: TauDefs.h:316
SG::ConstAccessor< float >
MvaTESEvaluator::MvaInputVariables::third_cluster_frac
float third_cluster_frac
Definition: MvaTESEvaluator.h:65
TauRecToolBase::inTrigger
bool inTrigger() const
Definition: TauRecToolBase.h:87
xAOD::TauJet_v3::ptJetSeed
double ptJetSeed() const
xAOD::TauJet_v3::e
virtual double e() const
The total energy of the particle.
Definition: TauJet_v3.cxx:87
xAOD::TauJet_v3::ptDetectorAxis
double ptDetectorAxis() const
MvaTESEvaluator::MvaInputVariables::ptDetectorAxis_D_ptJetSeed
float ptDetectorAxis_D_ptJetSeed
Definition: MvaTESEvaluator.h:66
xAOD::TauJet_v3::setP4
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
Definition: TauJet_v3.cxx:171
MvaTESEvaluator::MvaInputVariables::eprobability
float eprobability
Definition: MvaTESEvaluator.h:40
xAOD::TauJetParameters::centFrac
@ centFrac
Get centrality fraction.
Definition: TauDefs.h:200
MvaTESEvaluator::MvaInputVariables::ptLC_D_ptCombined
float ptLC_D_ptCombined
Definition: MvaTESEvaluator.h:44
xAOD::TauJet_v3::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
MvaTESEvaluator::MvaInputVariables::etaConstituent
float etaConstituent
Definition: MvaTESEvaluator.h:46
xAOD::TauJet_v3::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
xAOD::TauJet_v3::etaPanTauCellBased
double etaPanTauCellBased() const
MvaTESEvaluator::MvaInputVariables
Definition: MvaTESEvaluator.h:31
MvaTESEvaluator::MvaInputVariables::logPtDetectorAxis
float logPtDetectorAxis
Definition: MvaTESEvaluator.h:60
MvaTESEvaluator::MvaTESEvaluator
MvaTESEvaluator(const std::string &name="MvaTESEvaluator")
Definition: MvaTESEvaluator.cxx:9
MvaTESEvaluator::MvaInputVariables::ptConstituent_D_ptCombined
float ptConstituent_D_ptCombined
Definition: MvaTESEvaluator.h:45
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
MvaTESEvaluator::MvaInputVariables::second_cluster_frac
float second_cluster_frac
Definition: MvaTESEvaluator.h:64
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
hist_file_dump.f
f
Definition: hist_file_dump.py:140
MvaTESEvaluator::MvaInputVariables::nVtxPU
float nVtxPU
Definition: MvaTESEvaluator.h:33
MvaTESEvaluator::MvaInputVariables::PanTauBDT_1p0n_vs_1p1n
float PanTauBDT_1p0n_vs_1p1n
Definition: MvaTESEvaluator.h:48
MvaTESEvaluator::MvaInputVariables::lead_cluster_frac
float lead_cluster_frac
Definition: MvaTESEvaluator.h:63
MvaTESEvaluator::MvaInputVariables::ptCombined
float ptCombined
Definition: MvaTESEvaluator.h:43
MvaTESEvaluator::MvaInputVariables::PFOEngRelDiff
float PFOEngRelDiff
Definition: MvaTESEvaluator.h:52
xAOD::TauJet_v3::detail
bool detail(TauJetParameters::Detail detail, int &value) const
Get and set values of common details variables via enum.
Definition: TauJet_v3.cxx:264
xAOD::TauJet_v3::phiPanTauCellBased
double phiPanTauCellBased() const
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MvaTESEvaluator::MvaInputVariables::presampler_frac
float presampler_frac
Definition: MvaTESEvaluator.h:39
xAOD::TauJetParameters::ClustersMeanEMProbability
@ ClustersMeanEMProbability
Definition: TauDefs.h:313
TauRecToolBase::find_file
std::string find_file(const std::string &fname) const
Definition: TauRecToolBase.cxx:19
xAOD::TauJetParameters::ClustersMeanCenterLambda
@ ClustersMeanCenterLambda
Definition: TauDefs.h:312
MvaTESEvaluator::execute
virtual StatusCode execute(xAOD::TauJet &xTau) const override
Execute - called for each tau candidate.
Definition: MvaTESEvaluator.cxx:30
MvaTESEvaluator::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: MvaTESEvaluator.cxx:14
MvaTESEvaluator::MvaInputVariables::centFrac
float centFrac
Definition: MvaTESEvaluator.h:55
MvaTESEvaluator::MvaInputVariables::logPtCombined
float logPtCombined
Definition: MvaTESEvaluator.h:56
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
xAOD::TauJetParameters::ClustersMeanFirstEngDens
@ ClustersMeanFirstEngDens
Definition: TauDefs.h:314
MvaTESEvaluator::MvaInputVariables::PanTauBDT_1p1n_vs_1pXn
float PanTauBDT_1p1n_vs_1pXn
Definition: MvaTESEvaluator.h:49
MvaTESEvaluator::MvaInputVariables::ptSeed_D_ptCombined
float ptSeed_D_ptCombined
Definition: MvaTESEvaluator.h:57
xAOD::TauJet_v3::ptIntermediateAxis
double ptIntermediateAxis() const
MvaTESEvaluator::MvaInputVariables::center_lambda
float center_lambda
Definition: MvaTESEvaluator.h:36
MvaTESEvaluator::MvaInputVariables::ptEM_D_ptLC
float ptEM_D_ptLC
Definition: MvaTESEvaluator.h:42
xAOD::TauJetParameters::FinalCalib
@ FinalCalib
Definition: TauDefs.h:346
xAOD::TauJet_v3::ptPanTauCellBased
double ptPanTauCellBased() const
MvaTESEvaluator::m_sWeightFileName
Gaudi::Property< std::string > m_sWeightFileName
Definition: MvaTESEvaluator.h:73
MvaTESEvaluator::MvaInputVariables::nTracks
float nTracks
Definition: MvaTESEvaluator.h:51
MvaTESEvaluator::m_sWeightFileName0p
Gaudi::Property< std::string > m_sWeightFileName0p
Definition: MvaTESEvaluator.h:74
MvaTESEvaluator::MvaInputVariables::rho
float rho
Definition: MvaTESEvaluator.h:34
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65