ATLAS Offline Software
Loading...
Searching...
No Matches
egamma.h
Go to the documentation of this file.
1// dear emacs, this is really -*- C++ -*-
2
3/*
4 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef EGAMMAEVENT_EGAMMA_H
8#define EGAMMAEVENT_EGAMMA_H 1
16/********************************************************************
17NAME: egamma.h
18PACKAGE: offline/Reconstruction/egammaRec
19CREATED: Nov, 2000
20REWRITTEN Nov, 2006
21UPDATED:
22 Jun 14, 2007 (FD) Doxygen documentation
23 Nov 24, 2009 (FD) add isElectron, isPhoton and use unsigned int
24 Jan 20, 2010 (MS) add enumeration and code for uncombined 4mom
25********************************************************************/
26
27// INCLUDE HEADER FILES:
28
31
32#include "AthLinks/ElementLink.h"
33#include "AthLinks/ElementLinkVector.h"
34
36
37#include "CaloEvent/CaloClusterContainer.h"
42
43#include "egammaEvent/egPID.h"
45
47
48#include <any>
49#include <memory>
50
51class EMErrorDetail;
52class CaloCluster;
54
55class egamma
56 : public ParticleImpl<
57 egammaNavigation, // not really a terminal node: done here
58 P4ImplEEtaPhiM >
59{
60
62 // Public typedefs:
64 public:
65
66 // for readability and lazy people
73
74 public:
75
77 // standard cluster-track combined 4Mom
79 // uncombined cluster 4Mom
81 };
82
83 public:
84
86 egamma();
88 egamma(unsigned int author);
90 virtual ~egamma();
91 egamma(const egamma &rhs, bool copyDetails=true, bool copyMinimal=false);
92 egamma& operator=(const egamma& rhs);
93 egamma& operator=(egamma&& rhs) = default;
94
96 void print() const;
97
99 void setE (double theE);
101 void setEta (double theEta);
103 void setPhi (double thePhi);
105 void setM (double theM);
106
108 void set4Mom (const I4Momentum & theI4Mom );
110 void set4Mom (const I4Momentum * const theI4Mom );
112 void set4Mom (const CLHEP::HepLorentzVector & theHlv );
113
115 void setUncombinedE (double theE);
117 void setUncombinedEta (double theEta);
119 void setUncombinedPhi (double thePhi);
121 void setUncombinedM (double theM);
122
124 void setUncombined4Mom (const I4Momentum & theI4Mom );
126 void setUncombined4Mom (const I4Momentum * const theI4Mom );
128 void setUncombined4Mom (const CLHEP::HepLorentzVector & theHlv );
129
131 const CaloCluster* cluster() const;
133 const CaloRings* rings() const;
135 const Rec::TrackParticle* trackParticle (unsigned int index = 0) const;
136 unsigned int nTrackParticles() const;
138 const Trk::VxCandidate* conversion (unsigned int index = 0) const;
139 unsigned int nConversions() const;
140
142 template <typename T>
143 const T* detail(const std::string& name = "", unsigned int index = 0) const;
144
146 const egDetail* detail (const std::string& className,
147 const std::string& name = "",
148 unsigned int index = 0) const;
150 const egDetail* detail (int i) const;
155 std::string detailName (int i) const;
157 int nDetails() const;
160 const std::string& name = "",
161 unsigned int index = 0) const;
162
173
176 double egammaID(egammaPIDObs::PID, bool *found) const;
177 double egammaID(egammaPIDObs::PID) const;
178 const egPID* pid() const;
179
181 void setDetail(const egDetailContainer*, const egDetail*);
184
187
188
191 bool set_egammaID(egammaPIDObs::PID id, double result);
192
194 bool set_egammaIDint(egammaPIDObs::PID id, unsigned int result);
195
196 // move this in egPID and just provide return of egPID
197 // const std::vector< std::pair<egammaPIDObs::PID,double> > & get_egammaID() const;
198
199 // to save pointers to access the different objects of the e/g data class
200
202 void setCluster(const CaloClusterContainer*, int);
204 void setCluster(const CaloClusterContainer*, const CaloCluster*);
208 void resetCluster();
209
211 void setRings(const CaloRingsContainer*, int);
213 void setRings(const CaloRingsContainer*, const CaloRings*);
217 void resetRings();
218
219
227 void resetTrackParticle(unsigned int index = 0);
228
231
233 void setConversion(const VxContainer *, int) ;
235 void setConversion(const VxContainer*, const Trk::VxCandidate*);
239 void resetConversion(unsigned int index = 0);
240
243
245 unsigned int author() const {return m_author; }
247 bool author(const unsigned int author) const;
249 void addAuthor(unsigned int author) {m_author |= author; }
251 void resetAuthor() {m_author = 0; }
252
253
255 virtual void fillToken( INavigationToken & thisToken ) const;
257 virtual void fillToken( INavigationToken & thisToken, const std::any& ) const;
258
260 bool isElectron(unsigned int mask= egammaPIDObs::ALL,
262 bool *found = nullptr) const;
263 bool isPhoton(unsigned int mask= egammaPIDObs::ALL,
265 bool *found = nullptr) const; // exactly the same as isElectron
266
269
271 bool isSofte(unsigned int mask= egammaPIDObs::ALL, bool *found = nullptr) const;
272
274 unsigned int isem(unsigned int mask= egammaPIDObs::ALL,
276 unsigned int isem(unsigned int mask,
278 bool *found) const;
280 unsigned int isemse(unsigned int mask= egammaPIDObs::ALL) const;
281 unsigned int isemse(unsigned int mask, bool *found) const;
282
284 bool isGoodOQ(unsigned int mask= egammaPIDObs::ALLOQ, bool *found = nullptr) const;
285 unsigned int isgoodoq(unsigned int mask= egammaPIDObs::ALLOQ, bool *found = nullptr) const;
286
287
289 virtual const I4MomentumError* errors() const;
290
293
295 // P4ImplEEtaPhiM& get4Mom() { return m_momentumCluster; }
297
298 private:
299
305
306 unsigned int m_author;
307
308 std::unique_ptr<egPID> m_egPID;
309
310 protected:
311
312 // extra 4 momentum for the cluster based egamma object
313 // P4ImplEEtaPhiM m_momentumCluster;
315
316};
317
318template <typename T>
319const T* egamma::detail(const std::string& key, unsigned int index) const {
320 std::size_t nsize = m_egDetails.size();
321 std::size_t iloop = 0;
322// int nptr = 0;
323 const T* ptr = 0;
324// const T* tmp = 0;
325
326 for (; iloop != nsize; iloop++) {
327 if (key.empty()) {
328 if(!m_egDetails[iloop]) continue;
329 ptr = dynamic_cast<const T*>(*(m_egDetails[iloop]));
330 if (0 != ptr && ptr->linkIndex() == (int)index) {
331// nptr++; //this is potentially highly confusing now with the ElementLinkVectors and the conversion refits, rather return the first match if there are multiple matches
332// ptr = tmp;
333 return ptr;
334 }
335 }
336 else if (m_egDetails[iloop].isValid() &&
337 key == m_egDetails.elementDataID(iloop))
338 {
339 if(!m_egDetails[iloop]) continue;
340 ptr = dynamic_cast<const T*>(*(m_egDetails[iloop]));
341 if (0 != ptr && ptr->linkIndex() == (int)index){
342 return ptr;
343 }
344 }
345 }
346 return ptr;
347// return (nptr==1) ? ptr : 0;
348}
349
350// inline methods
351
353inline
354void
355egamma::setE (double ene)
356{ this->momentumBase().setE (ene); }
357
359inline
360void
362{ this->momentumBase().setEta (eta); }
363
365inline
366void
368{ this->momentumBase().setPhi (phi); }
369
371inline
372void
374{ this->momentumBase().setM (m); }
375
377inline
378void
380{ this->momentumBase().set4Mom (mom); }
381
383inline
384void
385egamma::set4Mom (const I4Momentum * const mom )
386{ this->momentumBase().set4Mom (mom); }
387
389inline
390void
391egamma::set4Mom (const CLHEP::HepLorentzVector & hlv )
392{ this->momentumBase().set4Mom (hlv); }
393
395inline
397{
398 if ( type==egamma::Combined ) return this->momentumBase();
399 else return m_momentumCluster;
400}
401
402
403
404
405#endif
406
Principal data class for CaloCell clusters.
ElementLinkVector implementation for standalone ROOT.
I4Momentum is an abstract base class providing 4-momentum behavior.
Definition I4Momentum.h:31
Dummy type needed fro specialized implementation.
P4ImplEEtaPhiM is a base class for classes with 4-momentum behavior, for which E, eta,...
void set4Mom(const I4Momentum &theI4Mom)
set all 4-mom from another I4Momentum reference
void setEta(const double theEta)
set eta data member
void setE(const double theE)
set energy data member
void setM(const double theM)
set mass data member
void setPhi(const double thePhi)
set phi data member
const momentum_type & momentumBase() const
virtual CLHEP::HepLorentzVector hlv() const
Container for detailed egamma information.
Base class for detailed egamma information.
Definition egDetail.h:29
Class to hold PID vars egamma information.
Definition egPID.h:32
void setTrackParticle(const Rec::TrackParticleContainer *, int)
Set Track Particle.
Definition egamma.cxx:524
egamma()
Default constructor.
Definition egamma.cxx:24
bool passID(egammaPIDObs::egammaIDQuality id) const
does electron/photon pass the given quality
Definition egamma.cxx:684
int nDetails() const
number of details in egamma object
Definition egamma.cxx:883
const momentum_type & get4Mom(egamma::eg4MomType type=egamma::Combined) const
return the combined or additional uncombined cluster 4mom
Definition egamma.h:396
egammaImpl_t::navigable_type navigable_type
Definition egamma.h:70
ElementLinkVector< egDetailContainer > m_egDetails
Definition egamma.h:303
ElementLink< CaloRingsContainer > m_rings
Definition egamma.h:304
unsigned int isemse(unsigned int mask=egammaPIDObs::ALL) const
ID flag with cuts for softe, 0:e, >1:jet.
Definition egamma.cxx:786
unsigned int isem(unsigned int mask=egammaPIDObs::ALL, egammaPIDObs::PID pid=egammaPIDObs::IsEM) const
ID flag with cuts, 0:e, >1:jet.
Definition egamma.cxx:761
void setUncombinedPhi(double thePhi)
set uncombined phi data member
Definition egamma.cxx:927
void setE(double theE)
set energy data member
Definition egamma.h:355
virtual ~egamma()
Destructor.
const ElementLink< CaloRingsContainer > & ringsElementLink() const
element link to rings
Definition egamma.cxx:377
double detailValue(egammaParameters::ParamDef key, const std::string &name="", unsigned int index=0) const
get the float value of key in the container name
Definition egamma.cxx:891
void setUncombinedE(double theE)
set uncombined energy data member
Definition egamma.cxx:915
void setTrackParticleElementLinkVector(const ElementLinkVector< Rec::TrackParticleContainer > &v)
Definition egamma.cxx:548
eg4MomType
Definition egamma.h:76
@ Uncombined
Definition egamma.h:80
@ Combined
Definition egamma.h:78
void setEta(double theEta)
set eta data member
Definition egamma.h:361
std::unique_ptr< egPID > m_egPID
Definition egamma.h:308
void setErrorMatrix(Amg::MatrixX)
Definition egamma.cxx:962
void set4Mom(const I4Momentum &theI4Mom)
set all 4-mom from another I4Momentum reference
Definition egamma.h:379
void setDetailElementLink(const ElementLink< egDetailContainer > &link)
set detailElementLink
Definition egamma.cxx:617
void setConversion(const VxContainer *, int)
Set Conversion.
Definition egamma.cxx:569
const egPID * pid() const
Definition egamma.cxx:640
const Trk::VxCandidate * conversion(unsigned int index=0) const
pointer to Conversion
Definition egamma.cxx:409
void resetAuthor()
set_egamma ID
Definition egamma.h:251
void setUncombined4Mom(const I4Momentum &theI4Mom)
set uncombined all 4-mom from another I4Momentum reference
Definition egamma.cxx:939
double egammaID(egammaPIDObs::PID, bool *found) const
access to PID information, as double to work for IsEM and all possible weights as likelihood
Definition egamma.cxx:306
const Rec::TrackParticle * trackParticle(unsigned int index=0) const
pointer to TrackParticle
Definition egamma.cxx:389
virtual void fillToken(INavigationToken &thisToken) const
fill token
Definition egamma.cxx:116
ParticleImpl< egammaNavigation, P4ImplEEtaPhiM > egammaImpl_t
Definition egamma.h:69
unsigned int nConversions() const
Definition egamma.cxx:419
void setRings(const CaloRingsContainer *, int)
Set rings object.
Definition egamma.cxx:471
unsigned int m_author
Definition egamma.h:306
egamma & operator=(const egamma &rhs)
Definition egamma.cxx:79
void setPhi(double thePhi)
set phi data member
Definition egamma.h:367
unsigned int author() const
Reconstruction Author.
Definition egamma.h:245
void setUncombinedErrorMatrix(Amg::MatrixX)
Definition egamma.cxx:976
ElementLink< CaloClusterContainer > m_cluster
Definition egamma.h:300
const ElementLinkVector< Rec::TrackParticleContainer > & trackParticleElementLinkVector() const
Definition egamma.cxx:442
bool set_egammaIDint(egammaPIDObs::PID id, unsigned int result)
set_egamma ID, for usigned int values
Definition egamma.cxx:338
bool isPhoton(unsigned int mask=egammaPIDObs::ALL, egammaPIDObs::PID pid=egammaPIDObs::IsEM, bool *found=nullptr) const
Definition egamma.cxx:660
void setTrackParticleElementLink(const ElementLink< Rec::TrackParticleContainer > &link)
Set Track Particle Link.
Definition egamma.cxx:541
egamma & operator=(egamma &&rhs)=default
void setCluster(const CaloClusterContainer *, int)
Set cluster.
Definition egamma.cxx:465
void resetConversion(unsigned int index=0)
Reset Conversion.
Definition egamma.cxx:561
void setConversionElementLinkVector(const ElementLinkVector< VxContainer > &link)
Definition egamma.cxx:593
void setUncombinedEta(double theEta)
set uncombined eta data member
Definition egamma.cxx:921
ElementLinkVector< VxContainer > m_conversion
Definition egamma.h:302
void setDetail(const egDetailContainer *, const egDetail *)
set detail
Definition egamma.cxx:607
std::string detailName(int i) const
name of detail i
Definition egamma.cxx:875
egammaImpl_t::momentum_type momentum_type
Definition egamma.h:71
bool isElectron(unsigned int mask=egammaPIDObs::ALL, egammaPIDObs::PID pid=egammaPIDObs::IsEM, bool *found=nullptr) const
ID flag with cuts, true:e/phot, false:bkg.
Definition egamma.cxx:647
egammaImpl_t::particle_type particle_type
Definition egamma.h:72
ElementLinkVector< Rec::TrackParticleContainer > m_trackParticle
Definition egamma.h:301
void setRingsElementLink(const ElementLink< CaloRingsContainer > &link)
Set Rings Element Link.
Definition egamma.cxx:490
virtual const I4MomentumError * errors() const
override standard errors to allow lazy loading (lazy loading NOW DISABLED)
Definition egamma.cxx:956
bool isGoodOQ(unsigned int mask=egammaPIDObs::ALLOQ, bool *found=nullptr) const
OQ flag.
Definition egamma.cxx:809
void setM(double theM)
set mass data member
Definition egamma.h:373
unsigned int isgoodoq(unsigned int mask=egammaPIDObs::ALLOQ, bool *found=nullptr) const
Definition egamma.cxx:815
void print() const
print method
Definition egamma.cxx:104
void setUncombinedM(double theM)
set uncombined mass data member
Definition egamma.cxx:933
void setDetailElementLinkVector(const ElementLinkVector< egDetailContainer > &v)
Definition egamma.cxx:625
const T * detail(const std::string &name="", unsigned int index=0) const
retrieve eg-detail objects:
Definition egamma.h:319
bool set_egammaID(egammaPIDObs::PID id, double result)
set_egamma ID, for doubles and all possible weights as likelihood
Definition egamma.cxx:327
void resetTrackParticle(unsigned int index=0)
Reset Track Particle.
Definition egamma.cxx:516
const ElementLinkVector< egDetailContainer > & detailElementLinkVector() const
Definition egamma.cxx:869
momentum_type m_momentumCluster
Definition egamma.h:314
const CaloRings * rings() const
pointer to CaloRings
Definition egamma.cxx:368
void resetCluster()
Reset Cluster.
Definition egamma.cxx:497
void resetRings()
Reset Cluster.
Definition egamma.cxx:477
ElementLink< egDetailContainer > detailElementLink(int i) const
ElementLink for detail i.
Definition egamma.cxx:861
void setClusterElementLink(const ElementLink< CaloClusterContainer > &link)
Set Cluster Element Link.
Definition egamma.cxx:510
const CaloCluster * cluster() const
pointer to CaloCluster
Definition egamma.cxx:358
const ElementLinkVector< VxContainer > & conversionElementLinkVector() const
Definition egamma.cxx:459
ElementLink< Rec::TrackParticleContainer > trackParticleElementLink(unsigned int index=0) const
element link to trackParticle
Definition egamma.cxx:431
unsigned int nTrackParticles() const
Definition egamma.cxx:403
const ElementLink< CaloClusterContainer > & clusterElementLink() const
element link to cluster
Definition egamma.cxx:425
void addAuthor(unsigned int author)
Add author.
Definition egamma.h:249
void setConversionElementLink(const ElementLink< VxContainer > &link)
Set Conversion.
Definition egamma.cxx:586
bool isSofte(unsigned int mask=egammaPIDObs::ALL, bool *found=nullptr) const
uses special softe cuts
Definition egamma.cxx:673
ElementLink< VxContainer > conversionElementLink(unsigned int index=0) const
element link to conversion
Definition egamma.cxx:448
NavigableTerminalNode egammaNavigation
Definition egamma.h:53
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
@ IsEM
cut-based identification for egamma objects (cluster and track-based)
const unsigned int ALLOQ
const unsigned int ALL
all cuts
Definition index.py:1