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)
8 
9 
11  : TauRecToolBase(name) {
12 }
13 
14 
16 
17  const std::string weightFile = find_file(m_sWeightFileName);
18  m_bdtHelper = std::make_unique<tauRecTools::BDTHelper>();
19  ATH_CHECK(m_bdtHelper->initialize(weightFile));
20 
21  if (!m_sWeightFileName0p.empty()) {
22  const std::string weightFile0p = find_file(m_sWeightFileName0p);
23  m_bdtHelper0p = std::make_unique<tauRecTools::BDTHelper>();
24  ATH_CHECK(m_bdtHelper0p->initialize(weightFile0p));
25  }
26 
27  return StatusCode::SUCCESS;
28 }
29 
30 
32 
33  std::map<TString, float*> availableVars;
34  MvaInputVariables vars;
35 
36  // Declare input variables to the reader
37  if (!inTrigger()) {
38  availableVars.insert( std::make_pair("TauJetsAuxDyn.mu", &vars.mu) );
39  availableVars.insert( std::make_pair("TauJetsAuxDyn.nVtxPU", &vars.nVtxPU) );
40  availableVars.insert( std::make_pair("TauJetsAuxDyn.rho", &vars.rho) );
41  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanCenterLambda", &vars.center_lambda) );
42  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanFirstEngDens", &vars.first_eng_dens) );
43  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanSecondLambda", &vars.second_lambda) );
44  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanPresamplerFrac", &vars.presampler_frac) );
45  availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanEMProbability", &vars.eprobability) );
46  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptIntermediateAxisEM/TauJetsAuxDyn.ptIntermediateAxis", &vars.ptEM_D_ptLC) );
47  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptIntermediateAxis/TauJetsAuxDyn.ptCombined", &vars.ptLC_D_ptCombined) );
48  availableVars.insert( std::make_pair("TauJetsAuxDyn.etaPanTauCellBased", &vars.etaConstituent) );
49  if (m_bdtHelper0p && xTau.nTracks()==0) {
50  availableVars.insert( std::make_pair("log(TauJetsAuxDyn.ptCombined)", &vars.logPtCombined) );
51  availableVars.insert( std::make_pair("TauJetsAuxDyn.LeadClusterFrac", &vars.lead_cluster_frac) );
52  availableVars.insert( std::make_pair("TauJetsAuxDyn.centFrac", &vars.centFrac) );
53  availableVars.insert( std::make_pair("TauJetsAuxDyn.UpsilonCluster", &vars.upsilon_cluster) );
54  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptJetSeed/TauJetsAuxDyn.ptCombined", &vars.ptSeed_D_ptCombined) );
55  }
56  else {
57  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptPanTauCellBased/TauJetsAuxDyn.ptCombined", &vars.ptConstituent_D_ptCombined) );
58  availableVars.insert( std::make_pair("TauJetsAuxDyn.ptCombined", &vars.ptCombined) );
59  availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_1p0n_vs_1p1n", &vars.PanTauBDT_1p0n_vs_1p1n) );
60  availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_1p1n_vs_1pXn", &vars.PanTauBDT_1p1n_vs_1pXn) );
61  availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_3p0n_vs_3pXn", &vars.PanTauBDT_3p0n_vs_3pXn) );
62  availableVars.insert( std::make_pair("TauJetsAuxDyn.nTracks", &vars.nTracks) );
63  availableVars.insert( std::make_pair("TauJetsAuxDyn.PFOEngRelDiff", &vars.PFOEngRelDiff) );
64  }
65  }
66  else {
67  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.mu", &vars.mu) );
68  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanCenterLambda", &vars.center_lambda) );
69  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanFirstEngDens", &vars.first_eng_dens) );
70  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanSecondLambda", &vars.second_lambda) );
71  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanPresamplerFrac", &vars.presampler_frac) );
72  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanEMProbability", &vars.eprobability) );
73  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.LeadClusterFrac", &vars.lead_cluster_frac) );
74  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.SecondClusterFrac", &vars.second_cluster_frac) );
75  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ThirdClusterFrac", &vars.third_cluster_frac) );
76  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.UpsilonCluster", &vars.upsilon_cluster) );
77  availableVars.insert( std::make_pair("log(TrigTauJetsAuxDyn.ptDetectorAxis)", &vars.logPtDetectorAxis) );
78  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.etaDetectorAxis", &vars.etaDetectorAxis) );
79  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ptIntermediateAxisEM/TrigTauJetsAuxDyn.ptDetectorAxis", &vars.ptEM_D_ptLC) );
80  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ptDetectorAxis/TrigTauJetsAuxDyn.ptJetSeed", &vars.ptDetectorAxis_D_ptJetSeed) );
81  availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.centFrac", &vars.centFrac) );
82  }
83 
84  // Retrieve average pileup
85  static const SG::ConstAccessor<float> acc_mu("mu");
86  vars.mu = acc_mu(xTau);
87 
88  // Retrieve cluster moments
94 
95  static const SG::ConstAccessor<float> acc_ptIntermediateAxisEM("ptIntermediateAxisEM");
96  float ptEM = acc_ptIntermediateAxisEM(xTau);
97 
98  if (!inTrigger()) {
99  static const SG::ConstAccessor<float> acc_ptCombined("ptCombined");
100  float ptCombined = acc_ptCombined(xTau);
101 
102  if (ptCombined==0.) {
104  // apply MVA calibration as default
105  xTau.setP4(1., xTau.etaPanTauCellBased(), xTau.phiPanTauCellBased(), 0.);
106  return StatusCode::SUCCESS;
107  }
108 
109  static const SG::ConstAccessor<int> acc_nVtxPU("nVtxPU");
110  vars.nVtxPU = acc_nVtxPU(xTau);
111 
112  static const SG::ConstAccessor<float> acc_rho("rho");
113  vars.rho = acc_rho(xTau);
114 
115  float ptLC = xTau.ptIntermediateAxis();
116 
117  float ptConstituent = xTau.ptPanTauCellBased();
118  vars.etaConstituent = xTau.etaPanTauCellBased();
119 
120  vars.ptEM_D_ptLC = (ptLC != 0.) ? ptEM / ptLC : 0.;
121  vars.ptLC_D_ptCombined = ptLC / ptCombined;
122 
123  float ptMVA = 0.;
124 
125  if (m_bdtHelper0p && xTau.nTracks()==0) {
126  vars.logPtCombined = std::log(ptCombined);
127  vars.ptSeed_D_ptCombined = xTau.ptJetSeed() / ptCombined;
128 
129  static const SG::ConstAccessor<float> acc_UpsilonCluster("UpsilonCluster");
130  vars.upsilon_cluster = acc_UpsilonCluster(xTau);
131 
132  static const SG::ConstAccessor<float> acc_LeadClusterFrac("LeadClusterFrac");
133  vars.lead_cluster_frac = acc_LeadClusterFrac(xTau);
134 
136 
137  ptMVA = float( ptCombined * m_bdtHelper0p->getResponse(availableVars) );
138  }
139  else {
140  vars.ptCombined = ptCombined;
141  vars.ptConstituent_D_ptCombined = ptConstituent / ptCombined;
142 
143  // Retrieve substructure info
144  static const SG::ConstAccessor<float> acc_PanTauBDT_1p0n_vs_1p1n("PanTau_BDTValue_1p0n_vs_1p1n");
145  static const SG::ConstAccessor<float> acc_PanTauBDT_1p1n_vs_1pXn("PanTau_BDTValue_1p1n_vs_1pXn");
146  static const SG::ConstAccessor<float> acc_PanTauBDT_3p0n_vs_3pXn("PanTau_BDTValue_3p0n_vs_3pXn");
147  // BDT values are initialised to -1111, while actual scores (when evaluated) are within [-5,1], so take max between BDT score and -5-epsilon
148  vars.PanTauBDT_1p0n_vs_1p1n = std::max(acc_PanTauBDT_1p0n_vs_1p1n(xTau), -5.1f);
149  vars.PanTauBDT_1p1n_vs_1pXn = std::max(acc_PanTauBDT_1p1n_vs_1pXn(xTau), -5.1f);
150  vars.PanTauBDT_3p0n_vs_3pXn = std::max(acc_PanTauBDT_3p0n_vs_3pXn(xTau), -5.1f);
151  vars.nTracks = static_cast<float>(xTau.nTracks());
153 
154  ptMVA = float( ptCombined * m_bdtHelper->getResponse(availableVars) );
155  }
156 
157  if (ptMVA<1.) ptMVA=1.;
159  // apply MVA calibration as default
160  xTau.setP4(ptMVA, vars.etaConstituent, xTau.phiPanTauCellBased(), 0.);
161  }
162  else {
163  // protection but should never happen
164  if (xTau.ptDetectorAxis()==0. || xTau.ptJetSeed()==0.) {
166  xTau.setP4(1., xTau.etaDetectorAxis(), xTau.phiDetectorAxis(), 0.);
167  return StatusCode::SUCCESS;
168  }
169 
171  vars.etaDetectorAxis = xTau.etaDetectorAxis();
172  vars.ptEM_D_ptLC = ptEM / xTau.ptDetectorAxis();
173  vars.ptDetectorAxis_D_ptJetSeed = xTau.ptDetectorAxis() / xTau.ptJetSeed();
174 
175  static const SG::ConstAccessor<float> acc_UpsilonCluster("UpsilonCluster");
176  static const SG::ConstAccessor<float> acc_LeadClusterFrac("LeadClusterFrac");
177  static const SG::ConstAccessor<float> acc_SecondClusterFrac("SecondClusterFrac");
178  static const SG::ConstAccessor<float> acc_ThirdClusterFrac("ThirdClusterFrac");
179 
180  vars.upsilon_cluster = acc_UpsilonCluster(xTau);
181  vars.lead_cluster_frac = acc_LeadClusterFrac(xTau);
182  vars.second_cluster_frac = acc_SecondClusterFrac(xTau);
183  vars.third_cluster_frac = acc_ThirdClusterFrac(xTau);
184 
186 
187  float ptMVA = float( xTau.ptDetectorAxis() * m_bdtHelper->getResponse(availableVars) );
188  if (ptMVA<1.) ptMVA=1.;
189 
191  // apply MVA calibration
192  xTau.setP4(ptMVA, vars.etaDetectorAxis, xTau.phiDetectorAxis(), 0.);
193  }
194 
195  ATH_MSG_DEBUG("final calib:" << xTau.pt() << " " << xTau.eta() << " " << xTau.phi() << " " << xTau.e());
196 
197  return StatusCode::SUCCESS;
198 }
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:10
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:31
MvaTESEvaluator::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: MvaTESEvaluator.cxx:15
MvaTESEvaluator::MvaInputVariables::centFrac
float centFrac
Definition: MvaTESEvaluator.h:55
MvaTESEvaluator::MvaInputVariables::logPtCombined
float logPtCombined
Definition: MvaTESEvaluator.h:56
HelperFunctions.h
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