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  std::vector<const xAOD::TauTrack*> tauTracks = pTau.tracks(xAOD::TauJetParameters::TauTrackFlag::classifiedCharged);
66  for( const xAOD::TauTrack* trk : pTau.tracks((xAOD::TauJetParameters::TauTrackFlag) m_isolationTrackType.value()) ) tauTracks.push_back(trk);
67  if (!tauTracks.empty()) {
68 
69  TLorentzVector sumOfTrackVector;
70  double ptSum = 0;
71  double ptSum_altcalc = 0;
72  double innerPtSum = 0;
73  double sumWeightedDR_tautrack = 0;
74  double sumWeightedDR_leadtracktrack = 0;
75  double innerSumWeightedDR = 0;
76  double sumWeightedDR2_tautrack = 0;
77  double sumWeightedDR2_leadtracktrack = 0;
78 
79  for (const xAOD::TauTrack* tauTrk : tauTracks){
80  sumOfTrackVector += tauTrk->p4();
81 
82  double deltaR_tautrack = inTrigger() ? pTau.p4().DeltaR(tauTrk->p4()) : pTau.p4(xAOD::TauJetParameters::IntermediateAxis).DeltaR(tauTrk->p4());
83 
84  ptSum += tauTrk->pt();
85  sumWeightedDR_tautrack += deltaR_tautrack * tauTrk->pt();
86  sumWeightedDR2_tautrack += deltaR_tautrack * deltaR_tautrack * tauTrk->pt();
87 
88  //add calculation of innerTrkAvgDist
90  innerPtSum += tauTrk->pt();
91  innerSumWeightedDR += deltaR_tautrack * tauTrk->pt();
92  }
93 
94  if (tauTracks.size()> 1 && pTau.nTracks()>0) {
95  ptSum_altcalc += tauTrk->pt();
96  double deltaR_leadtracktrack = pTau.track(0)->p4().DeltaR(tauTrk->p4());
97  sumWeightedDR_leadtracktrack += deltaR_leadtracktrack * tauTrk->pt();
98  sumWeightedDR2_leadtracktrack += deltaR_leadtracktrack * deltaR_leadtracktrack * tauTrk->pt();
99  }
100 
101  }
102  // invariant mass of track system
103  pTau.setDetail( xAOD::TauJetParameters::massTrkSys, static_cast<float>( sumOfTrackVector.M() ) );
104 
105  if (ptSum > 0.) {
106  // seedCalo_trkAvgDist
107  pTau.setDetail( xAOD::TauJetParameters::trkAvgDist, static_cast<float>( sumWeightedDR_tautrack / ptSum ) );
108 
109  // seedCalo_trkRmsDist
110  double trkRmsDist2 = sumWeightedDR2_tautrack / ptSum - pow(sumWeightedDR_tautrack/ptSum, 2.);
111  if (trkRmsDist2 > 0.) {
112  pTau.setDetail( xAOD::TauJetParameters::trkRmsDist, static_cast<float>( std::sqrt(trkRmsDist2) ) );
113  }
114  else {
116  }
117 
118  // SumPtTrkFrac
119  pTau.setDetail( xAOD::TauJetParameters::SumPtTrkFrac, static_cast<float>( 1. - innerPtSum/ptSum ) );
120  }
121  else {
124  }
125 
126  if (innerPtSum > 0.) {
127  // InnerTrkAvgDist
128  pTau.setDetail( xAOD::TauJetParameters::innerTrkAvgDist, static_cast<float>( innerSumWeightedDR / innerPtSum ) );
129  }
130  else {
132  }
133 
134  if (tauTracks.size()> 1 && pTau.nTracks()>0) {
135  double trkWidth2 = (ptSum_altcalc!=0.) ? (sumWeightedDR2_leadtracktrack/ptSum_altcalc - std::pow(sumWeightedDR_leadtracktrack/ptSum_altcalc, 2.)) : 0.;
136 
137  if (trkWidth2 > 0.) pTau.setDetail( xAOD::TauJetParameters::trkWidth2, static_cast<float>( trkWidth2 ) );
139  }
140  }
141 
142  return StatusCode::SUCCESS;
143 }
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
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