ATLAS Offline Software
Loading...
Searching...
No Matches
InsituTrackTools.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
8#include <cmath>
9
10namespace Muon {
11 InsituTrackTools::InsituTrackTools(const std::string& t, const std::string& n, const IInterface* p ):
12 AthAlgTool(t,n,p)
13 {
14 declareInterface<IInsituTrackTools>(this);
15
16 declareProperty("InnerTrackContainerName", m_InnerTrackContainerName = "TrackParticleCandidate");
17 declareProperty("ConeJetContainerName", m_ConeJetContainerName = "Cone4H1TowerJets");
18 declareProperty("m_MaximalMassDifferenceToZBoson", m_MaximalMassDifferenceToZBoson = 20000.); // MeV
19 declareProperty("m_MaximalPTofTracksInCone", m_MaximalPTofTracksInCone = 15000.); // MeV
20 declareProperty("m_MaximalNumberofTracksInCone", m_MaximalNumberofTracksInCone = 5);
21 declareProperty("m_MaximalJetEnergyInCone", m_MaximalJetEnergyInCone = 25000.); // MeV
22
23 }
24
26 {
28 if (isCloseTrack(track1, track2)==true) return false;
29
31 if (std::abs(getInvariantMass(track1, track2)-91187.6)>m_MaximalMassDifferenceToZBoson) return false;
32
33 if ((isIsolatedTrack(track1)==true) && (isIsolatedTrack(track2)==true)) return true;
34 return false;
35 }
36
38 {
39 float TrackPTIsolation1 = 0.0;
40 int NIsolation1 = 0;
41 getTrackIsolation(track1, TrackPTIsolation1, NIsolation1);
42
43 if ((TrackPTIsolation1<m_MaximalPTofTracksInCone) && (NIsolation1<m_MaximalNumberofTracksInCone)) return true;
44 return false;
45 }
46
48 {
49 float JetIsolation1 = getJetIsolation(track1);
50 float TrackPTIsolation1 = 0.0;
51 int NIsolation1 = 0;
52 getTrackIsolation(track1, TrackPTIsolation1, NIsolation1);
53
54 if ((JetIsolation1<m_MaximalJetEnergyInCone) && (TrackPTIsolation1<m_MaximalPTofTracksInCone) && (NIsolation1<m_MaximalNumberofTracksInCone)) return true;
55 return false;
56 }
57
59 {
60 TLorentzVector tvec1;
61 TLorentzVector tvec2;
62 tvec1.SetPtEtaPhiM(track1->pt(), track1->eta(), track1->phi(), ParticleConstants::muonMassInMeV);
63 tvec2.SetPtEtaPhiM(track2->pt(), track2->eta(), track2->phi(), ParticleConstants::muonMassInMeV);
64 return (tvec1+tvec2).M();
65 }
66
68 {
69 return true;
70 }
71
73 {
74 return true;
75 }
76
78 {
79 return false;
80 }
81
83 {
84 if (getDistance(track1, track2)<0.4) return true;
85 return false;
86 }
87
89 {
90 double dphi = std::abs(track1->phi()-track2->phi());
91 if (dphi>M_PI) dphi = std::abs(dphi-2.0*M_PI);
92 return std::sqrt(std::pow(track1->eta()-track2->eta(),2)+std::pow(dphi,2));
93 }
94
95 bool InsituTrackTools::getTrackIsolation(const INavigable4Momentum *trackParticle, float &PtIsolation, int &NIsolation)
96 {
97 const Rec::TrackParticleContainer* trackTES=nullptr;
98 StatusCode sc = evtStore()->retrieve(trackTES, m_InnerTrackContainerName);
99 if (sc.isFailure() || !trackTES) return false;
100
101 NIsolation = 0;
102 PtIsolation = 0.0;
103
104 double track_eta = trackParticle->eta();
105 double track_phi = trackParticle->phi();
106
107 double id_eta = 0.0;
108 double id_phi = 0.0;
109 double dr = 0.0;
112 Rec::TrackParticleContainer::const_iterator trackItrE = trackTES->end();
113 for (; trackItr != trackItrE; ++trackItr)
114 {
115
116 id_eta = (*trackItr)->eta();
117 id_phi = (*trackItr)->phi();
118
119 dr = std::sqrt(std::pow(id_eta-track_eta,2)+std::pow(id_phi-track_phi,2));
120 if ((0.01<dr) && (dr<0.4))
121 {
122 NIsolation++;
123 PtIsolation+=(*trackItr)->pt();
124 }
125 }
126
127 return true;
128 }
129
131 {
132 float PtIsolation;
133 int NIsolation;
134 if (getTrackIsolation(trackParticle, PtIsolation, NIsolation)==true) return PtIsolation;
135 return -1.0;
136 }
137
139 {
140 float PtIsolation;
141 int NIsolation;
142 if (getTrackIsolation(trackParticle, PtIsolation, NIsolation)==true) return NIsolation;
143 return -1;
144 }
145
146
148 {
149 const JetCollection* jetTES = nullptr; //ESD Key
150 StatusCode sc = evtStore()->retrieve(jetTES, m_ConeJetContainerName);
151 if (sc.isFailure() || !jetTES) return -1.;
152
153 double track_eta = trackParticle->eta();
154 double track_phi = trackParticle->phi();
155
156 double jet_energy = 0.0;
157 double jet_eta = 0.0;
158 double jet_phi = 0.0;
159 double dr = 0.0;
160
162 JetCollection::const_iterator jetItr = jetTES->begin();
163 JetCollection::const_iterator jetItrE = jetTES->end();
164
165 for(; jetItr != jetItrE; ++jetItr)
166 {
167 jet_eta = (*jetItr)->eta();
168 jet_phi = (*jetItr)->phi();
169
170 dr = std::sqrt(std::pow(jet_eta-track_eta,2)+std::pow(jet_phi-track_phi,2));
171 if ((0.01<dr) && (dr<0.4)) jet_energy+=(*jetItr)->pt();
172 }
173
174 return jet_energy;
175 }
176}//namespace
#define M_PI
static Double_t sc
A number of constexpr particle constants to avoid hardcoding them directly in various places.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ServiceHandle< StoreGateSvc > & evtStore()
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
virtual double phi() const =0
phi in [-pi,pi[
virtual double pt() const =0
transverse momentum
virtual double eta() const =0
pseudo rapidity
virtual bool isIsolatedTrack(const INavigable4Momentum *track1) override
virtual bool isCloseTrack(const INavigable4Momentum *track1, const INavigable4Momentum *track2) override
std::string m_InnerTrackContainerName
member variables for algorithm properties:
virtual float getJetIsolation(const INavigable4Momentum *trackParticle) override
std::string m_ConeJetContainerName
virtual bool isZBosonCandidate(const INavigable4Momentum *track1, const INavigable4Momentum *track2) override
virtual bool isElectronCandidate(const INavigable4Momentum *track1) override
virtual bool getTrackIsolation(const INavigable4Momentum *trackParticle, float &PtIsolation, int &NIsolation) override
InsituTrackTools(const std::string &, const std::string &, const IInterface *)
virtual double getDistance(const INavigable4Momentum *track1, const INavigable4Momentum *track2) override
double m_MaximalMassDifferenceToZBoson
Cut variables.
virtual int getNTrackIsolation(const INavigable4Momentum *trackParticle) override
virtual double getInvariantMass(const INavigable4Momentum *track1, const INavigable4Momentum *track2) override
virtual float getTrackPtIsolation(const INavigable4Momentum *trackParticle) override
virtual bool isTriggeredMuon(const INavigable4Momentum *track1) override
virtual bool isIsolatedMuon(const INavigable4Momentum *track1) override
virtual bool isTriggeredElectron(const INavigable4Momentum *track1) override
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
constexpr double muonMassInMeV
the mass of the muon (in MeV)