3 |
|
// |
4 |
|
// Electron |
5 |
|
// |
6 |
< |
// Details to be worked out... |
6 |
> |
// This class holds information about reconstructed electrons from CMSSW. |
7 |
|
// |
8 |
< |
// Authors: C.Loizides, J. Bendavid |
8 |
> |
// Authors: C.Loizides, J.Bendavid, S.Xie |
9 |
|
//-------------------------------------------------------------------------------------------------- |
10 |
|
|
11 |
< |
#ifndef DATATREE_ELECTRON_H |
12 |
< |
#define DATATREE_ELECTRON_H |
11 |
> |
#ifndef MITANA_DATATREE_ELECTRON_H |
12 |
> |
#define MITANA_DATATREE_ELECTRON_H |
13 |
|
|
14 |
< |
#include "MitAna/DataTree/interface/Lepton.h" |
14 |
> |
#include "MitAna/DataTree/interface/SuperCluster.h" |
15 |
> |
#include "MitAna/DataTree/interface/ChargedParticle.h" |
16 |
> |
#include "MitAna/DataCont/interface/Ref.h" |
17 |
|
|
18 |
|
namespace mithep |
19 |
|
{ |
20 |
< |
class Electron : public Lepton |
20 |
> |
class Electron : public ChargedParticle |
21 |
|
{ |
22 |
|
public: |
23 |
< |
Electron() {} |
24 |
< |
~Electron() {} |
25 |
< |
|
26 |
< |
Track* GetGsfTrack() const { return (Track*)fGsfTrackRef.GetObject(); } |
27 |
< |
Track* GetTrackerTrack() const { return (Track*)fTrackerTrackRef.GetObject(); } |
28 |
< |
|
29 |
< |
Track* GetTrack() const {return 0;} |
30 |
< |
|
31 |
< |
Double_t Mass() const { return 0.51099892e-3; } |
32 |
< |
|
33 |
< |
void SetGsfTrack(Track* gsfTrack) { fGsfTrackRef = gsfTrack; } |
34 |
< |
void SetTrackerTrack(Track* trackerTrack) { fTrackerTrackRef = trackerTrack; } |
35 |
< |
|
23 |
> |
Electron() : fESuperClusterOverP(0), fESeedClusterOverPout(0), fDeltaEtaSuperClTrkAtVtx(0), |
24 |
> |
fDeltaEtaSeedClTrkAtCalo(0), fDeltaPhiSuperClTrkAtVtx(0), |
25 |
> |
fDeltaPhiSeedClTrkAtCalo(0), fHadronicOverEm(0), fNumberOfClusters(0), fE33(0), |
26 |
> |
fE55(0), fCovEtaEta(0), fCoviEtaiEta(0), fCovEtaPhi(0), fCovPhiPhi(0), |
27 |
> |
fCaloIsolation(0), fCaloTowerIsolation(0), fTrackIsolation(0), |
28 |
> |
fEcalJurassicIsolation(0), fHcalJurassicIsolation(0), fPassLooseID(0), |
29 |
> |
fPassTightID(0), fIDLikelihood(0), fPIn(0), fPOut(0), |
30 |
> |
fIsEnergyScaleCorrected(0), fIsMomentumCorrected(0), fClassification(0) {} |
31 |
> |
|
32 |
> |
const Track *BestTrk() const; |
33 |
> |
Double_t CaloIsolation() const { return fCaloIsolation; } |
34 |
> |
Double_t CaloTowerIsolation() const { return fCaloTowerIsolation; } |
35 |
> |
Int_t Classification() const { return fClassification; } |
36 |
> |
Double_t CovEtaEta() const { return fCovEtaEta; } |
37 |
> |
Double_t CovEtaPhi() const { return fCovEtaPhi; } |
38 |
> |
Double_t CovPhiPhi() const { return fCovPhiPhi; } |
39 |
> |
Double_t CoviEtaiEta() const { return fCoviEtaiEta; } |
40 |
> |
Double_t DeltaEtaSuperClusterTrackAtVtx() const |
41 |
> |
{ return fDeltaEtaSuperClTrkAtVtx; } |
42 |
> |
Double_t DeltaEtaSeedClusterTrackAtCalo() const |
43 |
> |
{ return fDeltaEtaSeedClTrkAtCalo; } |
44 |
> |
Double_t DeltaPhiSuperClusterTrackAtVtx() const |
45 |
> |
{ return fDeltaPhiSuperClTrkAtVtx; } |
46 |
> |
Double_t DeltaPhiSeedClusterTrackAtCalo() const |
47 |
> |
{ return fDeltaPhiSeedClTrkAtCalo; } |
48 |
> |
Double_t E33() const { return fE33; } |
49 |
> |
Double_t E55() const { return fE55; } |
50 |
> |
Double_t EcalJurassicIsolation() const { return fEcalJurassicIsolation; } |
51 |
> |
Double_t ESuperClusterOverP() const { return fESuperClusterOverP; } |
52 |
> |
Double_t ESeedClusterOverPout() const { return fESeedClusterOverPout; } |
53 |
> |
Double_t ESeedClusterOverPIn() const; |
54 |
> |
Double_t FBrem() const { return (PIn() - POut())/PIn(); } |
55 |
> |
const Track *GsfTrk() const { return fGsfTrackRef.Obj(); } |
56 |
> |
Double_t HadronicOverEm() const { return fHadronicOverEm; } |
57 |
> |
Bool_t HasGsfTrk() const { return fGsfTrackRef.IsValid(); } |
58 |
> |
Bool_t HasTrackerTrk() const { return fTrackerTrackRef.IsValid(); } |
59 |
> |
Bool_t HasSuperCluster() const { return fSuperClusterRef.IsValid(); } |
60 |
> |
Double_t HcalIsolation() const { return fHcalJurassicIsolation; } |
61 |
> |
Double_t IDLikelihood() const { return fIDLikelihood; } |
62 |
> |
Bool_t IsEnergyScaleCorrected() const { return fIsEnergyScaleCorrected; } |
63 |
> |
Bool_t IsMomentumCorrected() const { return fIsMomentumCorrected; } |
64 |
> |
Double_t NumberOfClusters() const { return fNumberOfClusters; } |
65 |
> |
EObjType ObjType() const { return kElectron; } |
66 |
> |
Double_t PassLooseID() const { return fPassLooseID; } |
67 |
> |
Double_t PassTightID() const { return fPassTightID; } |
68 |
> |
Double_t PIn() const { return fPIn; } |
69 |
> |
Double_t POut() const { return fPOut; } |
70 |
> |
const SuperCluster *SCluster() const { return fSuperClusterRef.Obj(); } |
71 |
> |
void SetCaloIsolation(Double_t caloiso) { fCaloIsolation = caloiso; } |
72 |
> |
void SetCaloTowerIsolation(Double_t tiso) { fCaloTowerIsolation = tiso; } |
73 |
> |
void SetClassification(Int_t x) { fClassification = x; } |
74 |
> |
void SetCovEtaEta(Double_t CovEtaEta) { fCovEtaEta = CovEtaEta; } |
75 |
> |
void SetCovEtaPhi(Double_t CovEtaPhi) { fCovEtaPhi = CovEtaPhi; } |
76 |
> |
void SetCovPhiPhi(Double_t CovPhiPhi) { fCovPhiPhi = CovPhiPhi; } |
77 |
> |
void SetCoviEtaiEta(Double_t CoviEtaiEta) { fCoviEtaiEta = CoviEtaiEta; } |
78 |
> |
void SetDeltaEtaSuperClusterTrackAtVtx(Double_t x) |
79 |
> |
{ fDeltaEtaSuperClTrkAtVtx = x; } |
80 |
> |
void SetDeltaEtaSeedClusterTrackAtCalo(Double_t x) |
81 |
> |
{ fDeltaEtaSeedClTrkAtCalo = x; } |
82 |
> |
void SetDeltaPhiSuperClusterTrackAtVtx(Double_t x) |
83 |
> |
{ fDeltaPhiSuperClTrkAtVtx = x; } |
84 |
> |
void SetDeltaPhiSeedClusterTrackAtCalo(Double_t x) |
85 |
> |
{ fDeltaPhiSeedClTrkAtCalo = x; } |
86 |
> |
void SetE33(Double_t E33) { fE33 = E33; } |
87 |
> |
void SetE55(Double_t E55) { fE55 = E55; } |
88 |
> |
void SetESeedClusterOverPout(Double_t x) { fESeedClusterOverPout = x; } |
89 |
> |
void SetESuperClusterOverP(Double_t x) { fESuperClusterOverP = x; } |
90 |
> |
void SetEcalJurassicIso(Double_t iso ) { fEcalJurassicIsolation = iso; } |
91 |
> |
void SetGsfTrk(const Track* t) |
92 |
> |
{ fGsfTrackRef = t; ClearCharge(); } |
93 |
> |
void SetHadronicOverEm(Double_t x) { fHadronicOverEm = x; } |
94 |
> |
void SetHcalIsolation(Double_t iso ) { fHcalJurassicIsolation = iso; } |
95 |
> |
void SetIDLikelihood(Double_t likelihood) { fIDLikelihood = likelihood; } |
96 |
> |
void SetIsEnergyScaleCorrected(Bool_t x) { fIsEnergyScaleCorrected = x; } |
97 |
> |
void SetIsMomentumCorrected(Bool_t x) { fIsMomentumCorrected = x; } |
98 |
> |
void SetNumberOfClusters(Double_t x) { fNumberOfClusters = x; } |
99 |
> |
void SetPIn(Double_t PIn) { fPIn = PIn; } |
100 |
> |
void SetPOut(Double_t POut) { fPOut = POut; } |
101 |
> |
void SetPassLooseID(Double_t passLooseID) { fPassLooseID = passLooseID; } |
102 |
> |
void SetPassTightID(Double_t passTightID) { fPassTightID = passTightID; } |
103 |
> |
void SetPtEtaPhi(Double_t pt, Double_t eta, Double_t phi); |
104 |
> |
void SetSuperCluster(const SuperCluster* sc) |
105 |
> |
{ fSuperClusterRef = sc; } |
106 |
> |
void SetTrackerTrk(const Track* t) |
107 |
> |
{ fTrackerTrackRef = t; ClearCharge(); } |
108 |
> |
void SetTrackIsolation(Double_t trkiso) { fTrackIsolation = trkiso; } |
109 |
> |
const Track *TrackerTrk() const { return fTrackerTrackRef.Obj(); } |
110 |
> |
Double_t TrackIsolation() const { return fTrackIsolation; } |
111 |
> |
const Track *Trk() const { return BestTrk(); } |
112 |
> |
|
113 |
|
protected: |
114 |
< |
TRef fGsfTrackRef; |
115 |
< |
TRef fTrackerTrackRef; |
116 |
< |
|
114 |
> |
Double_t GetMass() const { return 0.51099892e-3; } |
115 |
> |
void GetMom() const; |
116 |
> |
|
117 |
> |
Vect3C fMom; //stored three-momentum |
118 |
> |
Ref<Track> fGsfTrackRef; //gsf track reference |
119 |
> |
Ref<Track> fTrackerTrackRef; //tracker track reference |
120 |
> |
Ref<SuperCluster> fSuperClusterRef; //reference to SuperCluster |
121 |
> |
Double32_t fESuperClusterOverP; //[0,0,14]super cluster e over p ratio |
122 |
> |
Double32_t fESeedClusterOverPout; //[0,0,14]seed cluster e over p mom |
123 |
> |
Double32_t fDeltaEtaSuperClTrkAtVtx; //[0,0,14]delta eta of super cluster with trk |
124 |
> |
Double32_t fDeltaEtaSeedClTrkAtCalo; //[0,0,14]delta eta of seeed cluster with trk |
125 |
> |
Double32_t fDeltaPhiSuperClTrkAtVtx; //[0,0,14]delta phi of super cluster with trk |
126 |
> |
Double32_t fDeltaPhiSeedClTrkAtCalo; //[0,0,14]delta phi of seeed cluster with trk |
127 |
> |
Double32_t fHadronicOverEm; //[0,0,14]hadronic over em fraction |
128 |
> |
Double32_t fNumberOfClusters; //[0,0,14]number of associated clusters |
129 |
> |
Double32_t fE33; //[0,0,14]3x3 crystal energy |
130 |
> |
Double32_t fE55; //[0,0,14]5x5 crystal energy |
131 |
> |
Double32_t fCovEtaEta; //[0,0,14]variance eta-eta |
132 |
> |
Double32_t fCoviEtaiEta; //[0,0,14]covariance eta-eta (in crystals) |
133 |
> |
Double32_t fCovEtaPhi; //[0,0,14]covariance eta-phi |
134 |
> |
Double32_t fCovPhiPhi; //[0,0,14]covariance phi-phi |
135 |
> |
Double32_t fCaloIsolation; //[0,0,14]isolation based on rechits |
136 |
> |
Double32_t fCaloTowerIsolation; //[0,0,14]isolation based on calo towers |
137 |
> |
Double32_t fTrackIsolation; //[0,0,14]isolation based on tracks |
138 |
> |
Double32_t fEcalJurassicIsolation; //[0,0,14]ecal jura iso |
139 |
> |
Double32_t fHcalJurassicIsolation; //[0,0,14]hcal jura iso |
140 |
> |
Double32_t fPassLooseID; //[0,0,14]pass loose id |
141 |
> |
Double32_t fPassTightID; //[0,0,14]pass tight id |
142 |
> |
Double32_t fIDLikelihood; //[0,0,14]likelihood value |
143 |
> |
Double32_t fPIn; //[0,0,14]momentum at vtx |
144 |
> |
Double32_t fPOut; //[0,0,14]momentum at ecal surface |
145 |
> |
Bool_t fIsEnergyScaleCorrected; //class dependent escale correction |
146 |
> |
Bool_t fIsMomentumCorrected; //class dependent E-p combination |
147 |
> |
Int_t fClassification; //classification (see GsfElectron.h) |
148 |
> |
|
149 |
|
ClassDef(Electron, 1) // Electron class |
150 |
|
}; |
151 |
|
} |
41 |
– |
#endif |
152 |
|
|
153 |
< |
#if 0 |
154 |
< |
> Track* Electron::GetTrack() const { |
155 |
< |
> if (GetGsfTrack()) |
156 |
< |
> return GetGsfTrack(); |
157 |
< |
> else if (GetTrackerTrack()) |
158 |
< |
> return GetTrackerTrack(); |
159 |
< |
> else return (Track*)0; |
160 |
< |
> } |
153 |
> |
//-------------------------------------------------------------------------------------------------- |
154 |
> |
inline const mithep::Track *mithep::Electron::BestTrk() const |
155 |
> |
{ |
156 |
> |
// Return "best" track. |
157 |
> |
|
158 |
> |
if (HasGsfTrk()) |
159 |
> |
return GsfTrk(); |
160 |
> |
else if (HasTrackerTrk()) |
161 |
> |
return TrackerTrk(); |
162 |
> |
|
163 |
> |
return 0; |
164 |
> |
} |
165 |
> |
|
166 |
> |
//-------------------------------------------------------------------------------------------------- |
167 |
> |
inline void mithep::Electron::GetMom() const |
168 |
> |
{ |
169 |
> |
// Get momentum of the electron. We use an explicitly stored three vector, with the pdg mass, |
170 |
> |
// since the momentum vector may be computed non-trivially in cmssw |
171 |
> |
|
172 |
> |
fCachedMom.SetCoordinates(fMom.Rho(),fMom.Eta(),fMom.Phi(),GetMass()); |
173 |
> |
} |
174 |
> |
|
175 |
> |
//------------------------------------------------------------------------------------------------- |
176 |
> |
inline Double_t mithep::Electron::ESeedClusterOverPIn() const |
177 |
> |
{ |
178 |
> |
// Return energy of the SuperCluster seed divided by the magnitude |
179 |
> |
// of the track momentum at the vertex. |
180 |
> |
|
181 |
> |
return SCluster()->Seed()->Energy() / PIn(); |
182 |
> |
} |
183 |
> |
|
184 |
> |
//------------------------------------------------------------------------------------------------- |
185 |
> |
inline void mithep::Electron::SetPtEtaPhi(Double_t pt, Double_t eta, Double_t phi) |
186 |
> |
{ |
187 |
> |
// Set three-vector |
188 |
> |
|
189 |
> |
fMom.Set(pt,eta,phi); |
190 |
> |
ClearMom(); |
191 |
> |
} |
192 |
|
#endif |