ATLAS Offline Software
TauCommonCalcVars.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 //-----------------------------------------------------------------------------
6 // file: TauCommonCalcVars.cxx
7 // package: Reconstruction/tauRec
8 // authors: Stan Lai
9 // date: 2008-05-18
10 //
11 // This class calculates tau variables after core seed reconstruction
12 //-----------------------------------------------------------------------------
14 #include <vector>
15 
16 //-----------------------------------------------------------------------------
17 // Constructor
18 //-----------------------------------------------------------------------------
19 
22 }
23 
24 //-----------------------------------------------------------------------------
25 // Destructor
26 //-----------------------------------------------------------------------------
27 
29 }
30 
31 //-----------------------------------------------------------------------------
32 // Execution
33 //-----------------------------------------------------------------------------
35 
37  // Calculate variables that are always valid
39 
40  //init some vars
42 
43  // Leading track pT and et/pt(lead track)
44  if (pTau.nTracks() > 0) {
45  pTau.setDetail( xAOD::TauJetParameters::leadTrkPt, static_cast<float>( pTau.track(0)->pt() ) );
46 
47  float emscale_ptEM = 0.;
48  float emscale_ptHad = 0.;
49 
50  if ( !pTau.detail( xAOD::TauJetParameters::etEMAtEMScale, emscale_ptEM ) )
51  {
52  ATH_MSG_DEBUG("retrieval of tau detail failed. stopping calculation of further variables");
53  return StatusCode::SUCCESS;
54  }
55 
56  if ( !pTau.detail( xAOD::TauJetParameters::etHadAtEMScale, emscale_ptHad ) )
57  {
58  ATH_MSG_DEBUG("retrieval of tau detail failed. stopping calculation of further variables");
59  return StatusCode::SUCCESS;
60  }
61 
62  pTau.setDetail( xAOD::TauJetParameters::etOverPtLeadTrk, static_cast<float>( (emscale_ptEM + emscale_ptHad) / pTau.track(0)->pt() ) );
63  }
64 
65  // invariant mass of track system
66  std::vector<const xAOD::TauTrack*> tauTracks = pTau.tracks(xAOD::TauJetParameters::TauTrackFlag::classifiedCharged);
67  for( const xAOD::TauTrack* trk : pTau.tracks((xAOD::TauJetParameters::TauTrackFlag) m_isolationTrackType.value()) ) tauTracks.push_back(trk);
68  if (!tauTracks.empty()) {
69 
70  TLorentzVector sumOfTrackVector;
71 
72  for (const xAOD::TauTrack* tauTrk : tauTracks)
73  {
74  sumOfTrackVector += tauTrk->p4();
75  }
76  pTau.setDetail( xAOD::TauJetParameters::massTrkSys, static_cast<float>( sumOfTrackVector.M() ) );
77  }
78 
79  if (tauTracks.size()> 1 && pTau.nTracks()>0) {
80 
81  double ptSum = 0.;
82  double sumWeightedDR = 0.;
83  double sumWeightedDR2 = 0.;
84 
85  for (const xAOD::TauTrack* tauTrk : tauTracks) {
86 
87  double deltaR = pTau.track(0)->p4().DeltaR(tauTrk->p4());
88 
89  ptSum += tauTrk->pt();
90  sumWeightedDR += deltaR * tauTrk->pt();
91  sumWeightedDR2 += deltaR * deltaR * tauTrk->pt();
92  }
93 
94  double trkWidth2 = (ptSum!=0.) ? (sumWeightedDR2/ptSum - std::pow(sumWeightedDR/ptSum, 2.)) : 0.;
95 
96  if (trkWidth2 > 0.) pTau.setDetail( xAOD::TauJetParameters::trkWidth2, static_cast<float>( trkWidth2 ) );
98  }
99 
100  if (!tauTracks.empty()) {
101 
102  double ptSum = 0;
103  double innerPtSum = 0;
104  double sumWeightedDR = 0;
105  double innerSumWeightedDR = 0;
106  double sumWeightedDR2 = 0;
107 
108  for (const xAOD::TauTrack* tauTrk : tauTracks){
109 
110  double deltaR = inTrigger() ? pTau.p4().DeltaR(tauTrk->p4()) : pTau.p4(xAOD::TauJetParameters::IntermediateAxis).DeltaR(tauTrk->p4());
111 
112  ptSum += tauTrk->pt();
113  sumWeightedDR += deltaR * tauTrk->pt();
114  sumWeightedDR2 += deltaR * deltaR * tauTrk->pt();
115 
116  //add calculation of innerTrkAvgDist
118  innerPtSum += tauTrk->pt();
119  innerSumWeightedDR += deltaR * tauTrk->pt();
120  }
121  }
122 
123  if (ptSum > 0.) {
124  // seedCalo_trkAvgDist
125  pTau.setDetail( xAOD::TauJetParameters::trkAvgDist, static_cast<float>( sumWeightedDR / ptSum ) );
126 
127  // seedCalo_trkRmsDist
128  double trkRmsDist2 = sumWeightedDR2 / ptSum - pow(sumWeightedDR/ptSum, 2.);
129  if (trkRmsDist2 > 0.) {
130  pTau.setDetail( xAOD::TauJetParameters::trkRmsDist, static_cast<float>( std::sqrt(trkRmsDist2) ) );
131  }
132  else {
134  }
135 
136  // SumPtTrkFrac
137  pTau.setDetail( xAOD::TauJetParameters::SumPtTrkFrac, static_cast<float>( 1. - innerPtSum/ptSum ) );
138  }
139  else {
142  }
143 
144  if (innerPtSum > 0.) {
145  // InnerTrkAvgDist
146  pTau.setDetail( xAOD::TauJetParameters::innerTrkAvgDist, static_cast<float>( innerSumWeightedDR / innerPtSum ) );
147  }
148  else {
150  }
151 
152  }
153 
154  return StatusCode::SUCCESS;
155 }
xAOD::TauJetParameters::TauTrackFlag
TauTrackFlag
Enum for tau track flags.
Definition: TauDefs.h:400
xAOD::TauJetParameters::trkRmsDist
@ trkRmsDist
Get the RMS of track distance to calorimeter seed.
Definition: TauDefs.h:216
xAOD::TauJetParameters::trkWidth2
@ trkWidth2
Definition: TauDefs.h:162
xAOD::TauTrack_v1::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauTrack_v1.cxx:33
xAOD::TauJetParameters::IntermediateAxis
@ IntermediateAxis
Definition: TauDefs.h:338
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:488
xAOD::TauJetParameters::classifiedCharged
@ classifiedCharged
Definition: TauDefs.h:406
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
TauRecToolBase::inTrigger
bool inTrigger() const
Definition: TauRecToolBase.h:87
TauCommonCalcVars::~TauCommonCalcVars
~TauCommonCalcVars()
Definition: TauCommonCalcVars.cxx:28
xAOD::TauJetParameters::etHadAtEMScale
@ etHadAtEMScale
Get Hadronic energy at EM scale.
Definition: TauDefs.h:196
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
xAOD::TauJetParameters::trkAvgDist
@ trkAvgDist
Get calibrated EM transverse energy (DEPRECATED since r19)
Definition: TauDefs.h:214
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
xAOD::TauJetParameters::etOverPtLeadTrk
@ etOverPtLeadTrk
Definition: TauDefs.h:158
hist_file_dump.f
f
Definition: hist_file_dump.py:140
xAOD::TauJetParameters::massTrkSys
@ massTrkSys
Definition: TauDefs.h:161
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::TauTrack_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TauCommonCalcVars::execute
virtual StatusCode execute(xAOD::TauJet &pTau) const override
Execute - called for each tau candidate.
Definition: TauCommonCalcVars.cxx:34
TauCommonCalcVars.h
TauCommonCalcVars::m_isolationTrackType
Gaudi::Property< int > m_isolationTrackType
Definition: TauCommonCalcVars.h:33
xAOD::TauJetParameters::innerTrkAvgDist
@ innerTrkAvgDist
Definition: TauDefs.h:287
xAOD::TauTrack_v1
Definition: TauTrack_v1.h:27
xAOD::TauJet_v3::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauJet_v3.cxx:96
TauCommonCalcVars::TauCommonCalcVars
TauCommonCalcVars(const std::string &name="TauCommonCalcVars")
Definition: TauCommonCalcVars.cxx:20
xAOD::TauJet_v3::setDetail
void setDetail(TauJetParameters::Detail detail, int value)
Definition: TauJet_v3.cxx:309
xAOD::TauJetParameters::SumPtTrkFrac
@ SumPtTrkFrac
Definition: TauDefs.h:289
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
makeComparison.deltaR
float deltaR
Definition: makeComparison.py:36
xAOD::TauJet_v3::tracks
std::vector< const TauTrack * > tracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Get the v<const pointer> to a given tauTrack collection associated with this tau.
Definition: TauJet_v3.cxx:461
xAOD::TauJetParameters::etEMAtEMScale
@ etEMAtEMScale
Get EM energy at EM scale.
Definition: TauDefs.h:194
xAOD::TauJetParameters::leadTrkPt
@ leadTrkPt
Definition: TauDefs.h:159