ATLAS Offline Software
TauIDVarCalculator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 
14 #include "CaloGeoHelpers/CaloSampling.h"
16 
17 #include "TLorentzVector.h"
18 
19 const float TauIDVarCalculator::LOW_NUMBER = -1111.;
20 
23 }
24 
25 
26 
28  static const SG::Accessor<float> acc_absipSigLeadTrk("absipSigLeadTrk");
29  acc_absipSigLeadTrk(tau) = (tau.nTracks()>0) ? std::abs(tau.track(0)->d0SigTJVA()) : 0.;
30 
31  if(inTrigger()) return StatusCode::SUCCESS;
32 
33  //everything below is just for EleBDT!
34  static const SG::Accessor<float> acc_absEtaLead("ABS_ETA_LEAD_TRACK");
35  static const SG::ConstAccessor<float> acc_centFrac("centFrac");
36 
37  // Will: Fixed variables for R21
38  static const SG::Accessor<float> acc_EMFracFixed("EMFracFixed");
39  static const SG::Accessor<float> acc_hadLeakFracFixed("hadLeakFracFixed");
40  static const SG::Accessor<float> acc_etHotShotWin("etHotShotWin");
41  static const SG::Accessor<float> acc_etHotShotWinOverPtLeadTrk("etHotShotWinOverPtLeadTrk");
42 
43 
44  // EMFracFixed and eHad1AtEMScaleFixed (for acc_hadLeakFracFixed)
45  // --------------------------------------------------------------
46  // ECAL Layers: 0, 1, 2. Don't include 3 because it is mismodelled!
47  std::vector<CaloSampling::CaloSample> EMSamps = {
51  // All HCAL Layers
52  std::vector<CaloSampling::CaloSample> HadSamps = {
57  // First HCal Layer
58  std::vector<CaloSampling::CaloSample> Had1Samps = {
60 
61  float eEMAtEMScaleFixed = 0.;
62  float eHadAtEMScaleFixed = 0.;
63  float eHad1AtEMScaleFixed = 0.;
64 
65  TLorentzVector tauAxis = tauRecTools::getTauAxis(tau, m_doVertexCorrection);
66 
67  std::vector<xAOD::CaloVertexedTopoCluster> vertexedClusterList = tau.vertexedClusters();
68  for (const xAOD::CaloVertexedTopoCluster& vertexedCluster : vertexedClusterList){
69  TLorentzVector clusterP4 = vertexedCluster.p4();
70 
71  if( clusterP4.DeltaR(tauAxis) > 0.2 ) continue;
72 
73  const xAOD::CaloCluster& cluster = vertexedCluster.clust();
74  for( auto samp : EMSamps )
75  eEMAtEMScaleFixed += cluster.eSample(samp);
76  for( auto samp : HadSamps )
77  eHadAtEMScaleFixed += cluster.eSample(samp);
78  for( auto samp : Had1Samps )
79  eHad1AtEMScaleFixed += cluster.eSample(samp);
80  }
81  acc_EMFracFixed(tau) = ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) != 0. ?
82  eEMAtEMScaleFixed / ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) : LOW_NUMBER;
83 
84  if(tau.nTracks() > 0){
85  const xAOD::TrackParticle* track = tau.track(0)->track();
86  acc_absEtaLead(tau) = std::abs( track->eta() );
87 
88  // hadLeakFracFixed
89  acc_hadLeakFracFixed(tau) = (track->p4().P() != 0.) ? eHad1AtEMScaleFixed / track->p4().P() : LOW_NUMBER;
90 
91  // HOT SHOTS!!!!!
92  // --------------
93  // Get track position extrapolated to EM1
94  const xAOD::TauTrack* tauTrack = tau.track(0);
95  float etaCalo = -10.0;
96  float phiCalo = -10.0;
97  if( not tauTrack->detail(xAOD::TauJetParameters::CaloSamplingEtaEM, etaCalo))
98  ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO eta");
99  if( not tauTrack->detail(xAOD::TauJetParameters::CaloSamplingPhiEM, phiCalo))
100  ATH_MSG_WARNING("Failed to retrieve extrapolated chargedPFO phi");
101  ATH_MSG_DEBUG("track EM " << ", eta: " << etaCalo << ", phi: " << phiCalo );
102 
103  // Get hottest shot in dR<0.1 and in 0.05 x 0.1 window
104  float etHotShotWin = 0.;
105  for( const auto& shotLink : tau.shotPFOLinks() ){
106  if( not shotLink.isValid() ){
107  ATH_MSG_WARNING("Invalid shotLink");
108  continue;
109  }
110  const xAOD::PFO* shot = *shotLink;
111  float etShot = 0.;
113 
114  // In 0.012 x 0.1 window
115  if(std::abs(shot->eta() - etaCalo) > 0.012 ) continue;
116  if(std::abs(xAOD::P4Helpers::deltaPhi(shot->phi(), phiCalo)) > 0.1 ) continue;
117  if(etShot > etHotShotWin) etHotShotWin = etShot;
118  }
119  acc_etHotShotWin(tau) = etHotShotWin;
120  acc_etHotShotWinOverPtLeadTrk(tau) = (track->pt() != 0.) ? etHotShotWin / track->pt() : LOW_NUMBER;
121 
122  }
123  else{
124  acc_absEtaLead(tau) = LOW_NUMBER;
125  acc_hadLeakFracFixed(tau) = LOW_NUMBER;
126  acc_etHotShotWin(tau) = LOW_NUMBER;
127  acc_etHotShotWinOverPtLeadTrk(tau) = LOW_NUMBER;
128  }
129 
130  return StatusCode::SUCCESS;
131 }
TauIDVarCalculator::execute
virtual StatusCode execute(xAOD::TauJet &) const override
Execute - called for each tau candidate.
Definition: TauIDVarCalculator.cxx:27
CaloCell_ID_FCS::TileExt2
@ TileExt2
Definition: FastCaloSim_CaloCell_ID.h:39
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
xAOD::TauTrack_v1::d0SigTJVA
float d0SigTJVA() const
Definition: TauTrack_v1.cxx:120
SG::Accessor< float >
xAODP4Helpers.h
xAOD::TauJetParameters::CaloSamplingPhiEM
@ CaloSamplingPhiEM
Definition: TauDefs.h:422
tauRecTools::getTauAxis
TLorentzVector getTauAxis(const xAOD::TauJet &tau, bool doVertexCorrection=true)
Return the four momentum of the tau axis The tau axis is widely used to select clusters and cells in ...
Definition: Reconstruction/tauRecTools/Root/HelperFunctions.cxx:33
CaloCell_ID_FCS::TileExt0
@ TileExt0
Definition: FastCaloSim_CaloCell_ID.h:37
CaloCell_ID_FCS::TileBar1
@ TileBar1
Definition: FastCaloSim_CaloCell_ID.h:32
xAOD::PFO_v1::attribute
bool attribute(PFODetails::PFOAttributes AttributeType, T &anAttribute) const
get a PFO Variable via enum
xAOD::PFO_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: PFO_v1.cxx:60
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:488
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
SG::ConstAccessor< float >
xAOD::PFODetails::tauShots_pt3
@ tauShots_pt3
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:145
CaloCell_ID_FCS::HEC2
@ HEC2
Definition: FastCaloSim_CaloCell_ID.h:29
TauRecToolBase::inTrigger
bool inTrigger() const
Definition: TauRecToolBase.h:87
TauIDVarCalculator::TauIDVarCalculator
TauIDVarCalculator(const std::string &name="TauIDVarCalculator")
Definition: TauIDVarCalculator.cxx:21
CaloCell_ID_FCS::TileGap3
@ TileGap3
Definition: FastCaloSim_CaloCell_ID.h:36
xAOD::TauTrack_v1::detail
bool detail(TauJetParameters::TrackDetail detail, float &value) const
Definition: TauTrack_v1.cxx:152
TauIDVarCalculator.h
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
CaloCell_ID_FCS::HEC1
@ HEC1
Definition: FastCaloSim_CaloCell_ID.h:28
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
CaloCell_ID_FCS::TileBar0
@ TileBar0
Definition: FastCaloSim_CaloCell_ID.h:31
xAOD::TauJet_v3::shotPFOLinks
const PFOLinks_t & shotPFOLinks() const
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
CaloCell_ID_FCS::TileGap2
@ TileGap2
Definition: FastCaloSim_CaloCell_ID.h:35
TauIDVarCalculator::m_doVertexCorrection
Gaudi::Property< bool > m_doVertexCorrection
Definition: TauIDVarCalculator.h:34
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
xAOD::TauJet_v3::track
const TauTrack * track(size_t i, TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged, int *container_index=0) const
Get the pointer to a given tauTrack associated with this tau /*container index needed by trackNonCons...
Definition: TauJet_v3.cxx:422
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
xAOD::PFO_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition: PFO_v1.cxx:67
CaloCell_ID_FCS::TileGap1
@ TileGap1
Definition: FastCaloSim_CaloCell_ID.h:34
xAOD::PFO_v1
Class describing a particle flow object.
Definition: PFO_v1.h:35
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
CaloCell_ID_FCS::TileExt1
@ TileExt1
Definition: FastCaloSim_CaloCell_ID.h:38
xAOD::TauJet_v3::vertexedClusters
std::vector< xAOD::CaloVertexedTopoCluster > vertexedClusters() const
Definition: TauJet_v3.cxx:586
TauIDVarCalculator::LOW_NUMBER
static const float LOW_NUMBER
Tau ID input variable calculator tool.
Definition: TauIDVarCalculator.h:30
CaloCell_ID_FCS::HEC0
@ HEC0
Definition: FastCaloSim_CaloCell_ID.h:27
xAOD::CaloCluster_v1::eSample
float eSample(const CaloSample sampling) const
Definition: CaloCluster_v1.cxx:514
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CaloCell_ID_FCS::PreSamplerE
@ PreSamplerE
Definition: FastCaloSim_CaloCell_ID.h:23
xAOD::TauTrack_v1
Definition: TauTrack_v1.h:27
CaloCell_ID_FCS::PreSamplerB
@ PreSamplerB
Definition: FastCaloSim_CaloCell_ID.h:19
HelperFunctions.h
xAOD::TauTrack_v1::track
const TrackParticle * track() const
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:44
xAOD::CaloVertexedTopoCluster
Evaluate cluster kinematics with a different vertex / signal state.
Definition: Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloVertexedTopoCluster.h:38
xAOD::TauJetParameters::CaloSamplingEtaEM
@ CaloSamplingEtaEM
Definition: TauDefs.h:420
CaloCell_ID_FCS::HEC3
@ HEC3
Definition: FastCaloSim_CaloCell_ID.h:30
CaloCell_ID_FCS::TileBar2
@ TileBar2
Definition: FastCaloSim_CaloCell_ID.h:33
constants.EME2
int EME2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:56