ATLAS Offline Software
Loading...
Searching...
No Matches
DiTauJet_v1.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// $Id: DiTauJet_v1.cxx 631921 2015-09-23 23:30:59Z dkirchme $
6
7
8// EDM include(s):
10
11// Local include(s):
14#include <stdexcept>
15
16namespace xAOD {
17
21
22
27
28
31 p4.SetPtEtaPhiM( pt(), eta(), phi(), m());
32 return p4;
33 }
34
38
39 void DiTauJet_v1::setP4(double pt, double eta, double phi, double m) {
40 static const Accessor< float > acc1( "pt" );
41 static const Accessor< float > acc2( "eta" );
42 static const Accessor< float > acc3( "phi" );
43 static const Accessor< float > acc4( "m" );
44 acc1( *this ) = pt;
45 acc2( *this ) = eta;
46 acc3( *this ) = phi;
47 acc4( *this ) = m;
48 }
49
50
51 Type::ObjectType DiTauJet_v1::type() const {
52 return Type::Jet;
53 }
54
55
56 double DiTauJet_v1::rapidity() const {
57 return genvecP4().Rapidity();
58 }
59
60
61 double DiTauJet_v1::e() const {
62 return genvecP4().E();
63 }
64
65
66 // ----------------------------------------------------------------------------
67 // setter and getter for the seed jet link
68 // ----------------------------------------------------------------------------
71 jetLink,
72 setJetLink )
73
74 static const SG::Accessor< DiTauJet_v1::JetLink_t > jetAcc( "jetLink" );
75
76 const Jet* DiTauJet_v1::jet() const {
77 return ( *jetAcc( *this ) );
78 }
79
80
82 if( jetAcc( *this ).isValid() )
83 jetAcc( *this ).reset();
84 jetAcc( *this ).toContainedElement( *cont, jet );
85 }
86
87 // ----------------------------------------------------------------------------
88 // getter and setter for subjet 4-mom
89 // ----------------------------------------------------------------------------
90
91 float DiTauJet_v1::subjetPt(unsigned int numSubjet) const
92 {
93 static const Accessor< std::vector <float > > subjetPtAcc("subjet_pt");
94 const std::vector<float>& vPt = subjetPtAcc(*this);
95 if (vPt.size()<numSubjet+1)
96 return -999.0;
97 else
98 return vPt[numSubjet];
99 }
100
101 float DiTauJet_v1::subjetEta(unsigned int numSubjet) const
102 {
103 static const Accessor< std::vector <float > > subjetEtaAcc("subjet_eta");
104 const std::vector<float>& vEta = subjetEtaAcc(*this);
105 if (vEta.size()<numSubjet+1)
106 return -999.0;
107 else
108 return vEta[numSubjet];
109 }
110
111 float DiTauJet_v1::subjetPhi(unsigned int numSubjet) const
112 {
113 static const Accessor< std::vector <float > > subjetPhiAcc("subjet_phi");
114 const std::vector<float>& vPhi = subjetPhiAcc(*this);
115 if (vPhi.size()<numSubjet+1)
116 return -999.0;
117 else
118 return vPhi[numSubjet];
119 }
120
121 float DiTauJet_v1::subjetE(unsigned int numSubjet) const
122 {
123 static const Accessor< std::vector <float > > subjetEAcc("subjet_e");
124 const std::vector<float>& vE = subjetEAcc(*this);
125 if (vE.size()<numSubjet+1)
126 return -999.0;
127 else
128 return vE[numSubjet];
129 }
130
132 {
133 static const Accessor < std::vector <float> > subjetPtAcc("subjet_pt");
134 const std::vector<float>& vPt = subjetPtAcc(*this);
135 return vPt.size();
136 }
137
138 void DiTauJet_v1::setSubjetPtEtaPhiE(unsigned int numSubjet,
139 float pt, float eta, float phi, float e)
140 {
141 static const Accessor< std::vector <float > > subjetPtAcc("subjet_pt");
142 static const Accessor< std::vector <float > > subjetEtaAcc("subjet_eta");
143 static const Accessor< std::vector <float > > subjetPhiAcc("subjet_phi");
144 static const Accessor< std::vector <float > > subjetEAcc("subjet_e");
145 std::vector<float>& vPt = subjetPtAcc(*this);
146 std::vector<float>& vEta = subjetEtaAcc(*this);
147 std::vector<float>& vPhi = subjetPhiAcc(*this);
148 std::vector<float>& vE = subjetEAcc(*this);
149 if (vPt.size()<numSubjet+1)
150 vPt.resize(numSubjet+1);
151 if (vEta.size()<numSubjet+1)
152 vEta.resize(numSubjet+1);
153 if (vPhi.size()<numSubjet+1)
154 vPhi.resize(numSubjet+1);
155 if (vE.size()<numSubjet+1)
156 vE.resize(numSubjet+1);
157
158 vPt[numSubjet] = pt;
159 vEta[numSubjet] = eta;
160 vPhi[numSubjet] = phi;
161 vE[numSubjet] = e;
162 }
163
164 // ----------------------------------------------------------------------------
165 // f_core getter and setter
166 // ----------------------------------------------------------------------------
167 float DiTauJet_v1::fCore(unsigned int numSubjet) const
168 {
169 static const Accessor< std::vector <float > > fCoreAcc("subjet_f_core");
170 const std::vector<float>& vec = fCoreAcc(*this);
171 if (vec.size()<numSubjet+1)
172 return -999.0;
173 else
174 return vec[numSubjet];
175 }
176
177 void DiTauJet_v1::setfCore(unsigned int numSubjet, float fCore)
178 {
179 static const Accessor< std::vector <float > > fCoreAcc("subjet_f_core");
180 std::vector<float>& vec = fCoreAcc(*this);
181 if (vec.size()<numSubjet+1)
182 vec.resize(numSubjet+1);
183
184 vec[numSubjet] = fCore;
185 }
186
187
188 // ----------------------------------------------------------------------------
189 // setter and getter for the primary vertex link
190 // ----------------------------------------------------------------------------
193 vertexLink,
194 setVertexLink )
195
196 static const SG::Accessor< DiTauJet_v1::VertexLink_t > vertexAcc( "vertexLink" );
197
198 const Vertex* DiTauJet_v1::vertex() const {
199 return ( *vertexAcc( *this ) );
200 }
201
202
204 if( vertexAcc( *this ).isValid() )
205 vertexAcc( *this ).reset();
206 vertexAcc( *this ).toContainedElement( *cont, vertex );
207 }
208
209 // ----------------------------------------------------------------------------
210 // setters and getters for the track links
211 // ----------------------------------------------------------------------------
212 // tracks inside subjets
215 trackLinks,
216 setTrackLinks )
217
219
220 const TrackParticle* DiTauJet_v1::track( size_t i ) const {
221 return ( *trackAcc( *this )[ i ] );
222 }
223
224 size_t DiTauJet_v1::nTracks() const {
225 return trackAcc( *this ).size();
226 }
227
228 void DiTauJet_v1::addTrack( const xAOD::TrackParticleContainer* pTrackParticleCont,
229 const xAOD::TrackParticle* pTrackParticle) {
231 linkToTrackParticle.toContainedElement(*pTrackParticleCont, pTrackParticle);
232
233 trackAcc( *this ).push_back( linkToTrackParticle );
234
235 return;
236 }
237
239 trackAcc( *this ).clear();
240 return;
241 }
242
243
244 // tracks inside isolation region
247 isoTrackLinks,
248 setIsoTrackLinks )
249
250 static const SG::Accessor< DiTauJet_v1::TrackParticleLinks_t > isoTrackAcc( "isoTrackLinks" );
251
252 const TrackParticle* DiTauJet_v1::isoTrack( size_t i ) const {
253 return ( *isoTrackAcc( *this )[ i ] );
254 }
255
256 size_t DiTauJet_v1::nIsoTracks() const {
257 return isoTrackAcc( *this ).size();
258 }
259
261 const xAOD::TrackParticle* pTrackParticle) {
262 ElementLink<xAOD::TrackParticleContainer> linkToIsoTrackParticle;
263 linkToIsoTrackParticle.toContainedElement(*pTrackParticleCont, pTrackParticle);
264
265 isoTrackAcc( *this ).push_back( linkToIsoTrackParticle );
266
267 return;
268 }
269
271 isoTrackAcc( *this ).clear();
272 return;
273 }
274
275
276 // tracks in seed jet that do not fulfill quality cuts
279 otherTrackLinks,
280 setOtherTrackLinks )
281
282 static const SG::Accessor< DiTauJet_v1::TrackParticleLinks_t > otherTrackAcc( "otherTrackLinks" );
283
284 const TrackParticle* DiTauJet_v1::otherTrack( size_t i ) const {
285 return ( *otherTrackAcc( *this )[ i ] );
286 }
287
289 return otherTrackAcc( *this ).size();
290 }
291
293 const xAOD::TrackParticle* pTrackParticle) {
294 ElementLink<xAOD::TrackParticleContainer> linkToOtherTrackParticle;
295 linkToOtherTrackParticle.toContainedElement(*pTrackParticleCont, pTrackParticle);
296
297 otherTrackAcc( *this ).push_back( linkToOtherTrackParticle );
298
299 return;
300 }
301
303 otherTrackAcc( *this ).clear();
304 return;
305 }
306
307
308 //-------------------------------------------------------------------------
309 // Get int detail via enum
310 //-------------------------------------------------------------------------
312 // Get the detail accessor:
314 if( ! acc ) return false;
315 if( ! acc->isAvailable( *this ) ) return false;
316
317 // Retrieve the detail value:
318 value = ( *acc )( *this );
319 return true;
320 }
321
322 //-------------------------------------------------------------------------
323 // Get float detail via enum
324 //-------------------------------------------------------------------------
326 // Get the detail accessor:
328 if( ! acc ) return false;
329 if( ! acc->isAvailable( *this ) ) return false;
330
331 // Retrieve the detail value:
332 value = ( *acc )( *this );
333 return true;
334 }
335
336 //-------------------------------------------------------------------------
337 // Set int detail via enum
338 //-------------------------------------------------------------------------
341 if (!acc) {
342 throw std::runtime_error ("DiTauJet_v1::setDetail: bad detail code");
343 }
344 (*acc)(*this) = value;
345 }
346
347 //-------------------------------------------------------------------------
348 // Set float detail via enum
349 //-------------------------------------------------------------------------
352 if (!acc) {
353 throw std::runtime_error ("DiTauJet_v1::setDetail: bad detail code");
354 }
355 (*acc)(*this) = value;
356 ( *( xAODDiTau::detailsAccessorV1<float>( detail ) ) )( *this ) = value;
357 }
358
359
360
361} // namespace xAOD
Scalar eta() const
pseudorapidity method
#define AUXSTORE_PRIMITIVE_GETTER_WITH_CAST(CL, PERSTYPE, TRANSTYPE, NAME)
Macro creating a getter function with a type conversion.
#define AUXSTORE_OBJECT_SETTER_AND_GETTER(CL, TYPE, NAME, SETTER)
Macro creating the accessors of complex auxiliary properties.
std::vector< size_t > vec
Helper class to provide type-safe access to aux data.
size_t nOtherTracks() const
ElementLink< xAOD::VertexContainer > VertexLink_t
Definition DiTauJet_v1.h:90
const TrackParticle * track(size_t i) const
virtual FourMom_t p4() const
The full 4-momentum of the particle.
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
virtual double e() const
The total energy of the particle.
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double m() const
The invariant mass of the particle.
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > GenVecFourMom_t
Base 4 Momentum type for taus.
Definition DiTauJet_v1.h:50
void setDetail(DiTauJetParameters::Detail detail, int value)
virtual double rapidity() const
The true rapidity (y) of the particle.
float fCore(unsigned int numSubjet) const
float subjetEta(unsigned int numSubjet) const
bool detail(DiTauJetParameters::Detail detail, int &value) const
Get and set values of common details variables via enum.
virtual double pt() const
The transverse momentum ( ) of the particle.
const TrackParticle * isoTrack(size_t i) const
const TrackParticle * otherTrack(size_t i) const
size_t nTracks() const
ElementLink< xAOD::JetContainer > JetLink_t
Definition DiTauJet_v1.h:62
float subjetE(unsigned int numSubjet) const
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : internal taus type.
void setSubjetPtEtaPhiE(unsigned int numSubjet, float pt, float eta, float phi, float e)
virtual Type::ObjectType type() const
The type of the object as a simple enumeration.
float subjetPt(unsigned int numSubjet) const
void addOtherTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
void setJet(const xAOD::JetContainer *cont, const xAOD::Jet *jet)
float subjetPhi(unsigned int numSubjet) const
std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t
virtual double phi() const
The azimuthal angle ( ) of the particle.
const Jet * jet() const
DiTauJet_v1()
Default constructor.
const Vertex * vertex() const
void setfCore(unsigned int numSubjet, float fCore)
float nSubjets() const
void addTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
size_t nIsoTracks() const
void addIsoTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
void setVertex(const xAOD::VertexContainer *cont, const xAOD::Vertex *vertex)
IParticle()=default
TLorentzVector FourMom_t
Definition of the 4-momentum type.
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
void reset()
Function making sure that the object is ready for persistification.
Definition Jet_v1.cxx:231
const SG::Accessor< float > * detailsAccessorV1< float >(xAOD::DiTauJetParameters::Detail detail)
const SG::Accessor< int > * detailsAccessorV1< int >(xAOD::DiTauJetParameters::Detail detail)
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Jet_v1 Jet
Definition of the current "jet version".
static const SG::AuxElement::Accessor< Vertex_v1::TrackParticleLinks_t > trackAcc("trackParticleLinks")
Accessor for the track links.
setRcore setEtHad setFside pt
TrackParticle_v1 TrackParticle
Reference the current persistent version:
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
static const SG::AuxElement::Accessor< ElementLink< IParticleContainer > > acc("originalObjectLink")
Object used for setting/getting the dynamic decoration in question.
JetContainer_v1 JetContainer
Definition of the current "jet container version".