ATLAS Offline Software
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):
13 #include "DiTauJetAccessors_v1.h"
14 #include <stdexcept>
15 
16 namespace xAOD {
17 
19  : IParticle() {
20  }
21 
22 
27 
28 
30  FourMom_t p4;
31  p4.SetPtEtaPhiM( pt(), eta(), phi(), m());
32  return p4;
33  }
34 
36  return GenVecFourMom_t(pt(), eta(), phi(), m());
37  }
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 
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 
81  void DiTauJet_v1::setJet( const xAOD::JetContainer *cont, const xAOD::Jet *jet) {
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 
131  float DiTauJet_v1::nSubjets() const
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 
218  static const SG::Accessor< DiTauJet_v1::TrackParticleLinks_t > trackAcc( "trackLinks" );
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) {
230  ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
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 
260  void DiTauJet_v1::addIsoTrack( const xAOD::TrackParticleContainer* pTrackParticleCont,
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 
288  size_t DiTauJet_v1::nOtherTracks() const {
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:
313  const Accessor< int >* acc = xAODDiTau::detailsAccessorV1<int>( detail );
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:
327  const Accessor< float >* acc = xAODDiTau::detailsAccessorV1<float>( detail );
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  //-------------------------------------------------------------------------
340  const SG::Accessor< int >* acc = xAODDiTau::detailsAccessorV1<int>( detail );
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  //-------------------------------------------------------------------------
351  const SG::Accessor< float >* acc = xAODDiTau::detailsAccessorV1<float>( detail );
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
python.CaloBCIDAvgAlgConfig.acc3
def acc3
Definition: CaloBCIDAvgAlgConfig.py:69
xAOD::DiTauJet_v1::m
virtual double m() const
The invariant mass of the particle.
xAOD::DiTauJet_v1::setVertex
void setVertex(const xAOD::VertexContainer *cont, const xAOD::Vertex *vertex)
Definition: DiTauJet_v1.cxx:203
xAOD::DiTauJet_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
xAOD::DiTauJet_v1::TrackParticleLinks_t
std::vector< ElementLink< xAOD::TrackParticleContainer > > TrackParticleLinks_t
Definition: DiTauJet_v1.h:101
xAOD::DiTauJet_v1::clearTrackLinks
void clearTrackLinks()
Definition: DiTauJet_v1.cxx:238
xAOD::DiTauJet_v1::fCore
float fCore(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:167
xAOD::DiTauJet_v1::setJet
void setJet(const xAOD::JetContainer *cont, const xAOD::Jet *jet)
Definition: DiTauJet_v1.cxx:81
xAOD::DiTauJet_v1::GenVecFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > GenVecFourMom_t
Base 4 Momentum type for taus.
Definition: DiTauJet_v1.h:50
xAOD::DiTauJet_v1::clearIsoTrackLinks
void clearIsoTrackLinks()
Definition: DiTauJet_v1.cxx:270
xAOD::DiTauJet_v1::addOtherTrack
void addOtherTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
Definition: DiTauJet_v1.cxx:292
SG::Accessor< float >
AuxStoreAccessorMacros.h
xAOD::DiTauJet_v1::setDetail
void setDetail(DiTauJetParameters::Detail detail, int value)
Definition: DiTauJet_v1.cxx:339
xAOD::DiTauJet_v1::DiTauJet_v1
DiTauJet_v1()
Default constructor.
Definition: DiTauJet_v1.cxx:18
xAOD::DiTauJet_v1::subjetPhi
float subjetPhi(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:111
athena.value
value
Definition: athena.py:124
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
detail
Definition: extract_histogram_tag.cxx:14
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
xAOD::pt
setRcore setEtHad setFside pt
Definition: TrigPhoton_v1.cxx:106
xAOD::DiTauJet_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
xAOD::DiTauJet_v1::setP4
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
Definition: DiTauJet_v1.cxx:39
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
xAOD::DiTauJet_v1::nOtherTracks
size_t nOtherTracks() const
Definition: DiTauJet_v1.cxx:288
xAOD::DiTauJet_v1::clearOtherTrackLinks
void clearOtherTrackLinks()
Definition: DiTauJet_v1.cxx:302
xAOD::DiTauJet_v1::nSubjets
float nSubjets() const
Definition: DiTauJet_v1.cxx:131
xAOD::DiTauJet_v1::genvecP4
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : internal taus type.
Definition: DiTauJet_v1.cxx:35
xAOD::DiTauJet_v1::addTrack
void addTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
Definition: DiTauJet_v1.cxx:228
xAOD::DiTauJet_v1::subjetE
float subjetE(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:121
xAOD::IParticle::FourMom_t
TLorentzVector FourMom_t
Definition of the 4-momentum type.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:69
xAOD::phi
setEt phi
Definition: TrigEMCluster_v1.cxx:29
xAOD::DiTauJet_v1::addIsoTrack
void addIsoTrack(const xAOD::TrackParticleContainer *, const xAOD::TrackParticle *)
Definition: DiTauJet_v1.cxx:260
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
xAOD::DiTauJet_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
lumiFormat.i
int i
Definition: lumiFormat.py:85
xAOD::DiTauJet_v1::track
const TrackParticle * track(size_t i) const
xAOD::e
setPy e
Definition: CompositeParticle_v1.cxx:166
python.CaloBCIDAvgAlgConfig.acc1
def acc1
Definition: CaloBCIDAvgAlgConfig.py:49
xAOD::AUXSTORE_PRIMITIVE_GETTER_WITH_CAST
AUXSTORE_PRIMITIVE_GETTER_WITH_CAST(Muon_v1, uint8_t, Muon_v1::EnergyLossType, energyLossType) AUXSTORE_PRIMITIVE_SETTER_WITH_CAST(Muon_v1
xAOD::DiTauJet_v1::jet
const Jet * jet() const
xAOD::DiTauJet_v1::type
virtual Type::ObjectType type() const
The type of the object as a simple enumeration.
Definition: DiTauJet_v1.cxx:51
python.CaloBCIDAvgAlgConfig.acc2
def acc2
Definition: CaloBCIDAvgAlgConfig.py:59
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
python.LArRecUtilsConfig.acc4
def acc4
Definition: LArRecUtilsConfig.py:196
xAOD::DiTauJet_v1::setfCore
void setfCore(unsigned int numSubjet, float fCore)
Definition: DiTauJet_v1.cxx:177
xAOD::DiTauJet_v1::subjetEta
float subjetEta(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:101
xAOD::DiTauJet_v1::nIsoTracks
size_t nIsoTracks() const
Definition: DiTauJet_v1.cxx:256
xAOD::DiTauJet_v1::nTracks
size_t nTracks() const
Definition: DiTauJet_v1.cxx:224
xAOD::DiTauJet_v1::setSubjetPtEtaPhiE
void setSubjetPtEtaPhiE(unsigned int numSubjet, float pt, float eta, float phi, float e)
Definition: DiTauJet_v1.cxx:138
xAOD::DiTauJetParameters::Detail
Detail
Definition: DiTauDefs.h:38
xAOD::DiTauJet_v1::detail
bool detail(DiTauJetParameters::Detail detail, int &value) const
Get and set values of common details variables via enum.
Definition: DiTauJet_v1.cxx:311
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
xAOD::DiTauJet_v1::subjetPt
float subjetPt(unsigned int numSubjet) const
Definition: DiTauJet_v1.cxx:91
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
xAODType::ObjectType
ObjectType
Type of objects that have a representation in the xAOD EDM.
Definition: ObjectType.h:32
xAOD::DiTauJet_v1::otherTrack
const TrackParticle * otherTrack(size_t i) const
xAOD::DiTauJet_v1::rapidity
virtual double rapidity() const
The true rapidity (y) of the particle.
Definition: DiTauJet_v1.cxx:56
xAOD::Jet
Jet_v1 Jet
Definition of the current "jet version".
Definition: Event/xAOD/xAODJet/xAODJet/Jet.h:17
xAOD::DiTauJet_v1::isoTrack
const TrackParticle * isoTrack(size_t i) const
xAOD::DiTauJet_v1::vertex
const Vertex * vertex() const
xAOD::DiTauJet_v1::e
virtual double e() const
The total energy of the particle.
Definition: DiTauJet_v1.cxx:61
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
DiTauJet_v1.h
xAOD::AUXSTORE_OBJECT_SETTER_AND_GETTER
AUXSTORE_OBJECT_SETTER_AND_GETTER(CaloRings_v1, RingSetLinks, ringSetLinks, setRingSetLinks) unsigned CaloRings_v1
Definition: CaloRings_v1.cxx:27
DiTauJetAccessors_v1.h