ATLAS Offline Software
Loading...
Searching...
No Matches
egamma.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5// INCLUDE HEADER FILES:
6
11#include "CaloEvent/CaloCluster.h"
15
16#include <iomanip>
17#include <iostream>
18
19// END OF HEADER FILES INCLUDE
20
21// ----------------------------
22// Constructor
23// ----------------------------
26 , INavigable()
27 , I4Momentum()
29 , egammaImpl_t()
30 , m_author(egammaParameters::AuthorUnknown)
31 , m_egPID(std::make_unique<egPID>())
33{
34}
35// ==========================================================
36egamma::egamma(unsigned int author) :
38 INavigable (),
39 I4Momentum (),
43 m_egPID(std::make_unique<egPID>()),
45{
46
47}
48
49// --------------------------
50// Destructor
51// --------------------------
52egamma::~egamma() = default;
53
54
55// ==========================================================
56// copy constructor
57egamma::egamma(const egamma &rhs, bool copyDetails, bool copyMinimal):
58 IAthenaBarCode (rhs),
59 INavigable (rhs),
60 I4Momentum (rhs),
62 egammaImpl_t (rhs),
63 m_author (rhs.m_author),
64 m_egPID (std::make_unique<egPID>(*(rhs.m_egPID))),
66{
67 if (!copyMinimal) {
68 m_cluster = rhs.m_cluster;
71 if (copyDetails) {
73 }
74 m_rings = rhs.m_rings;
75 }
76}
77
78// ==========================================================
80{
81 if (this != &rhs) {
82 IAthenaBarCode::operator=(rhs);
83 INavigable::operator=(rhs);
84 I4Momentum::operator=(rhs);
85 INavigable4Momentum::operator=(rhs);
87 m_author = rhs.m_author;
88 m_cluster = rhs.m_cluster;
91 m_egPID = std::make_unique<egPID>(*(rhs.m_egPID));
94 m_rings = rhs.m_rings;
95 }
96 return *this;
97}
98
99
100
101// ----------------------------
102// print egamma object
103// ----------------------------
104void egamma::print() const
105{
106 // loop over egDetails and print later.
107}
108
109// four momentum methods
110
112// Navigation without parameters //
114
115void
117{
118
119 bool checkFlag = false;
120
122 // First check on track //
124
125 const Rec::TrackParticle* aTrack = this->trackParticle();
126 if ( aTrack != nullptr )
127 {
128 // check requested object type with token type
130 dynamic_cast< NavigationToken<Rec::TrackParticle>* >(&theToken);
131 if ( trackToken != nullptr )
132 {
133 // request is honored
134 trackToken->setObject(aTrack);
135 checkFlag = true;
136 }
137
138 // alternative token type may phrase the same request
139 if ( ! checkFlag )
140 {
143 (&theToken);
144 if ( parTrackToken != nullptr )
145 {
146 parTrackToken->setObject(aTrack);
147 checkFlag = true;
148 }
149 }
150 }
151
153 // At this point only a request for Rec::TrackParticle could have been
154 // honored. This is indicated by checkFlag = true. If checkFlag = false,
155 // a test on a request for CaloCluster is performed.
157
158 // bail out if request for Rec::TrackParticle is already honored
159 if ( checkFlag ) return;
160
162 // Check on cluster //
164
165 const CaloCluster* aCluster = this->cluster();
166 if ( aCluster != nullptr )
167 {
168 // check on requested type
170 dynamic_cast< NavigationToken<CaloCluster>* >(&theToken);
171 if ( clusToken != nullptr )
172 {
173 clusToken->setObject(aCluster);
174 checkFlag = true;
175 }
176 // allow for visitor with relational parameter type
177 if ( ! checkFlag )
178 {
180 dynamic_cast< NavigationToken<CaloCluster,double>* >(&theToken);
181 if ( parClusToken != nullptr )
182 {
183 parClusToken->setObject(aCluster);
184 checkFlag = true;
185 }
186 }
187 }
188
189 // concrete type request for CaloCluster honored
190 if ( checkFlag ) return;
191
193 // Pass on the token to composite constituents: ie. CaloCluster! //
195
196 if ( aCluster!= nullptr ) aCluster->fillToken(theToken);
197
199 // At this point no request for concrete egamma constituents has been
200 // submitted if checkFlag = false. Now we need to check if a generic
201 // type has been requested (i.e. a base type for tracks and clusters).
203
204 // try for generic type requests
205 if ( aTrack != nullptr ) theToken.trySetObject(aTrack);
206 if ( aCluster!= nullptr ) theToken.trySetObject(aCluster);
207}
208
210// Navigation with parameters //
212
214 const std::any& theWeight) const
215{
216 bool checkFlag = false;
217
219 // First check on track //
221 const Rec::TrackParticle* aTrack = this->trackParticle();
222 if ( aTrack != nullptr )
223 {
224 // check requested object type with token type
226 dynamic_cast< NavigationToken<Rec::TrackParticle>* >(&theToken);
227 if ( trackToken != nullptr )
228 {
229 // request is honored
230 trackToken->setObject(aTrack);
231 checkFlag = true;
232 }
233
234 // alternative token type may phrase the same request
235 if ( ! checkFlag )
236 {
239 (&theToken);
240 if ( parTrackToken != nullptr )
241 {
242 // no weight change in propagation
243 parTrackToken->setObject(aTrack,
244 std::any_cast<double>(theWeight));
245 checkFlag = true;
246 }
247 }
248 }
249
250 // checks on track successful (see above)
251 if ( checkFlag ) return;
252
254 // Check on cluster //
256
257 const CaloCluster* aCluster = this->cluster();
258 if ( aCluster != nullptr )
259 {
260 // check on requested type
262 dynamic_cast< NavigationToken<CaloCluster>* >(&theToken);
263 if ( clusToken != nullptr )
264 {
265 clusToken->setObject(aCluster);
266 checkFlag = true;
267 }
268 // allow for visitor with relational parameter type
269 if ( ! checkFlag )
270 {
272 dynamic_cast< NavigationToken<CaloCluster,double>* >(&theToken);
273 if ( parClusToken != nullptr )
274 {
275 parClusToken->setObject(aCluster,
276 std::any_cast<double>(theWeight));
277 checkFlag = true;
278 }
279 }
280 }
281
282 // concrete check for CaloCluster honored
283 if ( checkFlag ) return;
284
286 // Pass on the token to composite constituents: ie. CaloCluster! //
288
289 if ( aCluster != nullptr ) aCluster->fillToken(theToken,theWeight);
290
291
293 // At this point no request for concrete egamma constituents has been
294 // submitted if checkFlag = false. Now we need to check if a generic
295 // type has been requested (i.e. a base type for tracks and clusters).
297
298 // try for generic type requests
299 if ( aTrack != nullptr ) theToken.trySetObject(aTrack, theWeight);
300 if ( aCluster != nullptr ) theToken.trySetObject(aCluster,theWeight);
301}
302
303// ==========================================================
304// Don't use a default for the found parameter because PyROOT has
305// problems passing bool* arguments.
306double egamma::egammaID(egammaPIDObs::PID idflag, bool *found) const
307{
308 //
309 // method to retrieve the PID
310 // set as double to work for IsEM but also for all weights as likelihood
311 //
312
313 return m_egPID->egammaID(idflag, found);
314}
315
317{
318 //
319 // method to retrieve the PID
320 // set as double to work for IsEM but also for all weights as likelihood
321 //
322
323 return m_egPID->egammaID(idflag, nullptr);
324}
325
326// ==========================================================
327bool egamma::set_egammaID(egammaPIDObs::PID idflag, double result)
328{
329 //
330 // method to set the PID
331 // set as double to work for IsEM but also for all weights as likelihood
332 //
333
334 return m_egPID->set_egammaID(idflag,result);
335}
336
337// ==========================================================
338bool egamma::set_egammaIDint(egammaPIDObs::PID idflag, unsigned int result)
339{
340 //
341 // method to set the PID for ints directly
342 //
343
344 return m_egPID->set_egammaIDint(idflag,result);
345}
346
347// ==========================================================
348bool egamma::author(const unsigned int author) const
349{
350 //
351 // method to check the author
352 //
353
354 return (m_author & author) != 0;
355}
356
357// ==========================================================
359{
360 //
361 // method to acces the cluster object
362 //
363
364 return (m_cluster.isValid()) ? *m_cluster : nullptr;
365}
366
367
369{
370 //
371 // methods to access RingerRings
372 //
373
374 return (m_rings.isValid()) ? *m_rings : nullptr;
375}
376
378{
379 //
380 // methods to access RingerRings ElementLink
381 //
382 return m_rings;
383}
384
385
386// ==========================================================
387
388// ==========================================================
390{
391 //
392 // method to acces the track object
393 //
394
395 if(index < m_trackParticle.size()){
396 return ((m_trackParticle.at(index)).isValid()) ? *(m_trackParticle.at(index)) : nullptr;
397 }
398 return nullptr;
399
400}
401
402// ==========================================================
403unsigned int egamma::nTrackParticles() const
404{
405 return m_trackParticle.size();
406}
407
408// ==========================================================
409const Trk::VxCandidate* egamma::conversion (unsigned int index) const
410{
411 if(index < m_conversion.size()){
412 return ((m_conversion.at(index)).isValid()) ? *(m_conversion.at(index)) : nullptr;
413 }
414 return nullptr;
415
416}
417
418// ==========================================================
419unsigned int egamma::nConversions() const
420{
421 return m_conversion.size();
422}
423
424// ==========================================================
429
430// ==========================================================
432{
433 if(index < m_trackParticle.size()){
434 return m_trackParticle.at(index);
435 }
436 return {};
437
438}
439
440// ==========================================================
446
447// ==========================================================
449{
450 if(index < m_conversion.size()){
451 return m_conversion.at(index);
452 }
453 return {};
454
455}
456
457// ==========================================================
463
464// ==========================================================
466{
467 m_cluster.toIndexedElement( *pCont, index);
468}
469
470// ==========================================================
472{
473 m_rings.toIndexedElement( *pCont, index);
474}
475
476// ==========================================================
478{
479 m_rings.reset();
480}
481
482// ==========================================================
484{
485 m_rings.toContainedElement(*pCont, cluster);
486}
487
488// ==========================================================
489void
494
495
496// ==========================================================
498{
499 m_cluster.reset();
500}
501
502// ==========================================================
504{
505 m_cluster.toContainedElement(*pCont, cluster);
506}
507
508// ==========================================================
509void
514
515// ==========================================================
517{
518 if(index < m_trackParticle.size()){
519 (m_trackParticle.at(index)).reset();
520 }
521}
522
523// ==========================================================
525{
527 link.toIndexedElement(*pCont, index);
528 m_trackParticle.push_back(link);
529}
530
531// ==========================================================
533{
535 link.toContainedElement(*pCont, track);
536 m_trackParticle.push_back(link);
537}
538
539// ==========================================================
540void
545
546// ==========================================================
547void
552
553// ==========================================================
554void
559
560// ==========================================================
562{
563 if(index < m_conversion.size()){
564 (m_conversion.at(index)).reset();
565 }
566}
567
568// ==========================================================
569void egamma::setConversion (const VxContainer * pCont, int index)
570{
572 link.toIndexedElement(*pCont, index);
573 m_conversion.push_back(link);
574}
575
576// ==========================================================
577void egamma::setConversion (const VxContainer * pCont, const Trk::VxCandidate* conv)
578{
580 link.toContainedElement(*pCont, conv);
581 m_conversion.push_back(link);
582}
583
584// ==========================================================
585void
587{
588 m_conversion.push_back(link);
589}
590
591// ==========================================================
592void
597
598// ==========================================================
599void
604
605// ==========================================================
606// methods to save the pointer to the different data objects in e/g data class
608 const egDetail* ptr)
609{
611 link.toContainedElement( *cont, ptr);
612 m_egDetails.push_back( link );
613}
614
615// ==========================================================
616void
618{
619 m_egDetails.push_back( link );
620}
621
622
623// ==========================================================
624void
629
630
631// ==========================================================
632void
637
638
639// ==========================================================
640const egPID* egamma::pid() const
641{
642 return m_egPID.get();
643}
644
645
646// ==========================================================
647bool egamma::isElectron(unsigned int mask,
649 bool *found) const
650{
651 //
652 // boolean method to define if egamma object is identified
653 // by standard cut-based selection
654 //
655
656 return (m_egPID->isEM(mask, pid, found)==0);
657}
658
659// ==========================================================
660bool egamma::isPhoton(unsigned int mask,
662 bool *found) const
663{
664 //
665 // boolean method to define if egamma object is identified
666 // by standard cut-based selection
667 //
668
669 return (m_egPID->isEM(mask, pid, found)==0);
670}
671
672// ==========================================================
673bool egamma::isSofte(unsigned int mask, bool *found) const
674{
675 //
676 // boolean method to define if egamma object is identified
677 // by cut-based selection optimized for non-isolated objects
678 //
679
680 return (m_egPID->isEMsofte(mask, found)==0);
681}
682
683// ==========================================================
685{
686 //
687 // boolean method to define if egamma object is identified
688 // by standard cut-based selection
689 //
690
691 switch(id) {
698
705
712
719
726
733
742
747
749 return true;
750
751 default:
752 return false;
753 }
754}
755
756
757// ==========================================================
758// Note: We have two separate overloads here (and for isemse) rather
759// than using a default for `found' because PyROOT complains about
760// passing bool* arguments.
761unsigned int egamma::isem(unsigned int mask,
763{
764 //
765 // method which applies a mask to the isEM variable
766 // and returns the corresponding decoded value
767 //
768
769 return m_egPID->isEM(mask, pid, nullptr);
770}
771
772
773unsigned int egamma::isem(unsigned int mask,
775 bool *found) const
776{
777 //
778 // method which applies a mask to the isEM variable
779 // and returns the corresponding decoded value
780 //
781
782 return m_egPID->isEM(mask, pid, found);
783}
784
785// ==========================================================
786unsigned int egamma::isemse(unsigned int mask) const
787{
788 //
789 // method which applies a mask to the isEMsofte variable
790 // and returns the corresponding decoded value
791 //
792
793 return m_egPID->isEMsofte(mask, nullptr);
794}
795
796
797unsigned int egamma::isemse(unsigned int mask, bool *found) const
798{
799 //
800 // method which applies a mask to the isEMsofte variable
801 // and returns the corresponding decoded value
802 //
803
804 return m_egPID->isEMsofte(mask, found);
805}
806
807
808// ==========================================================
809bool egamma::isGoodOQ(unsigned int mask, bool *found) const
810{
811 return (m_egPID->IsGoodOQ(mask, found) == 0);
812}
813
814// ==========================================================
815unsigned int egamma::isgoodoq(unsigned int mask, bool *found) const
816{
817 //
818 // method which applies a mask to theIsGoodOQ variable
819 // and returns the corresponding decoded value
820 //
821
822 return m_egPID->IsGoodOQ(mask, found);
823}
824
825// ==========================================================
826const egDetail* egamma::detail (int i) const
827{
828 if (i < 0 || i >= (int)m_egDetails.size())
829 return nullptr;
830 return *m_egDetails[i];
831}
832
833// ==========================================================
834const egDetail* egamma::detail (const std::string& className,
835 const std::string& name /*= ""*/,
836 unsigned int index) const
837{
838 size_t nsize = m_egDetails.size();
839// const egDetail* ptr = 0;
840 for (size_t i = 0; i < nsize; i++) {
841 if (m_egDetails[i].isValid() &&
842 (*m_egDetails[i])->className() == className)
843 {
844 if (name.empty()) {
845// if (ptr) //this is potentially highly confusing now with the ElementLinkVectors and the conversion refits, rather return the first match if there are multiple matches
846// return 0;
847// else
848 if((*m_egDetails[i])->linkIndex() == (int)index)
849 return *m_egDetails[i];
850// ptr = *m_egDetails[i];
851 }
852 else if (m_egDetails.elementDataID(i) == name && (*m_egDetails[i])->linkIndex() == (int)index)
853 return *m_egDetails[i];
854 }
855 }
856// return ptr;
857 return nullptr;
858}
859
860// ==========================================================
862{
863 if (i < 0 || i >= (int)m_egDetails.size())
864 return {};
865 return m_egDetails[i];
866}
867
868// ==========================================================
873
874// ==========================================================
875std::string egamma::detailName (int i) const
876{
877 if (i < 0 || i >= (int)m_egDetails.size())
878 return "";
879 return m_egDetails.elementDataID(i);
880}
881
882// ==========================================================
884{
885 return m_egDetails.size();
886}
887
888
889// ==========================================================
890double
892 const std::string& name, unsigned int index) const
893{
894 size_t nsize = m_egDetails.size();
895
896 const egDetail* ptr = nullptr;
897 for (size_t i = 0; i < nsize; i++) {
898 if (m_egDetails[i].isValid()) {
899 if (name.empty()) {
900 ptr = *m_egDetails[i];
901 }
902 else if (m_egDetails.elementDataID(i) == name)
903 ptr = *m_egDetails[i];
904 }
905 if ( ptr && ptr->hasParameter(key) && ptr->linkIndex() == (int)index)
906 return ptr->parameter(key);
907 }
908
910}
911
912// ==========================================================
914void
916{ m_momentumCluster.setE (ene); }
917
918// ==========================================================
920void
923
924// ==========================================================
926void
929
930// ==========================================================
932void
935
936// ==========================================================
938void
940{ m_momentumCluster.set4Mom (mom); }
941
942// ==========================================================
944void
946{ m_momentumCluster.set4Mom (mom); }
947
948// ==========================================================
950void
951egamma::setUncombined4Mom (const CLHEP::HepLorentzVector & hlv )
952{ m_momentumCluster.set4Mom (hlv); }
953
954
955// ==========================================================
957{
958 return momentumBase().errors();
959}
960
961// ==========================================================
963{
964 const unsigned int Nrows =thematrix.rows();
965 CLHEP::HepSymMatrix thematrixCLHEP(Nrows,0);
966
967 for (unsigned int i=0; i<Nrows;++i) {
968 for (unsigned int j=0; j<Nrows;++j){
969 thematrixCLHEP[i][j]= thematrix(i,j);
970 }
971 }
972 this->momentumBase().setErrors(thematrixCLHEP);
973}
974
975// ==========================================================
977{
978 //This should be symmetrix in any case
979 const unsigned int Nrows =thematrix.rows();
980 CLHEP::HepSymMatrix thematrixCLHEP(Nrows,0);
981
982for (unsigned int i=0; i<Nrows;++i) {
983 for (unsigned int j=0; j<Nrows;++j){
984 thematrixCLHEP[i][j]= thematrix(i,j);
985 }
986 }
987 m_momentumCluster.setErrors(thematrixCLHEP);
988}
989
990
Provide an interface for finding inheritance information at run time.
#define SG_ADD_BASE(D, B)
Add a new base class B to class D.
#define SG_VIRTUAL(T)
Used to mark virtual derivation.
virtual void fillToken(INavigationToken &iToken) const
fill token for navigation
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
virtual bool trySetObject(const INavigable *child)=0
void setObject(const_child_ptr data)
virtual const I4MomentumError * errors() const
void setErrors(const ErrorMatrixEEtaPhiM &err)
set the errors
const momentum_type & momentumBase() const
virtual CLHEP::HepLorentzVector hlv() const
ParticleImpl & operator=(const ParticleImpl &rhs)
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
elec/gamma data class.
Definition egamma.h:59
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
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
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
std::unique_ptr< egPID > m_egPID
Definition egamma.h:308
void setErrorMatrix(Amg::MatrixX)
Definition egamma.cxx:962
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 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
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
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
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
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
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 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
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
const unsigned int ElectronLooseIso
Loose electron selecton with isolation.
const unsigned int PhotonLooseARIso
Loose photon selection with Ambiguity resolver and Isolation.
const unsigned int ElectronLoosePP
Loose++ electron selection.
const unsigned int PhotonTightAR
Tight photon selection with Ambiguity resolver.
const unsigned int ElectronMediumPPIso
Medium++ electron selecton with isolation.
const unsigned int ElectronLoose
Loose electron selection.
const unsigned int PhotonTightIso
Tight photon selection with isolation.
const unsigned int PhotonTight
Tight photon selection.
const unsigned int ElectronTightIso
Tight electron selection with isolation requirement.
const unsigned int ElectronMedium
Medium electron selecton.
const unsigned int PhotonTightARIso
Tight photon selection with isolation and Ambiguity resolver.
const unsigned int PhotonLoose
Loose photon selection.
const unsigned int frwdElectronTight
forward electron flavours
const unsigned int ElectronMediumPP
Medium++ electron selecton.
const unsigned int PhotonMediumAR
Medium photon selection.
const unsigned int frwdElectronLoose
@ IsEMLoose
cut-based identification for egamma objects (Loose)
@ IsEMTight
cut-based identification for egamma objects (Tight)
@ IsEMMedium
cut-based identification for egamma objects (Medium)
@ IsEM
cut-based identification for egamma objects (cluster and track-based)
const unsigned int ElectronMediumIso
MediumIso electron selecton.
const unsigned int ElectronTightPP
Tight++ electron selecton.
const unsigned int ElectronTight
Tight electron selection.
const unsigned int ElectronTightPPIso
Tight++ electron selecton with isolation.
const unsigned int PhotonLooseIso
Loose photon selection with Isolation.
const unsigned int PhotonMedium
Medium photon selection.
const unsigned int PhotonLooseAR
Loose photon selection with Ambiguity resolver.
const double EgParamUndefined
Definition index.py:1
STL namespace.