ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/DataTree/interface/Electron.h
Revision: 1.38
Committed: Mon Nov 2 22:54:03 2009 UTC (15 years, 6 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_013pre1, Mit_012i, Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012
Changes since 1.37: +5 -2 lines
Log Message:
Add ScPix charge

File Contents

# User Rev Content
1 bendavid 1.1 //--------------------------------------------------------------------------------------------------
2 bendavid 1.38 // $Id: Electron.h,v 1.37 2009/10/30 14:16:00 bendavid Exp $
3 bendavid 1.1 //
4 paus 1.3 // Electron
5 bendavid 1.1 //
6 loizides 1.29 // This class holds information about reconstructed electrons from CMSSW.
7 bendavid 1.1 //
8 sixie 1.13 // Authors: C.Loizides, J.Bendavid, S.Xie
9 bendavid 1.1 //--------------------------------------------------------------------------------------------------
10    
11 loizides 1.23 #ifndef MITANA_DATATREE_ELECTRON_H
12     #define MITANA_DATATREE_ELECTRON_H
13 loizides 1.6
14 sixie 1.13 #include "MitAna/DataTree/interface/SuperCluster.h"
15 bendavid 1.11 #include "MitAna/DataTree/interface/ChargedParticle.h"
16 bendavid 1.24 #include "MitAna/DataCont/interface/Ref.h"
17 loizides 1.6
18 bendavid 1.1 namespace mithep
19     {
20 bendavid 1.11 class Electron : public ChargedParticle
21 bendavid 1.1 {
22     public:
23 loizides 1.34 Electron() :
24 bendavid 1.38 fCharge(-99), fScPixCharge(0),
25 loizides 1.34 fESuperClusterOverP(0), fESeedClusterOverPout(0), fDeltaEtaSuperClTrkAtVtx(0),
26     fDeltaEtaSeedClTrkAtCalo(0), fDeltaPhiSuperClTrkAtVtx(0),
27     fDeltaPhiSeedClTrkAtCalo(0), fFBrem(0), fHadronicOverEm(0), fHcalDepth1OverEcal(0),
28 bendavid 1.35 fHcalDepth2OverEcal(0), fNumberOfClusters(0), fE15(0), fE25Max(0),
29     fE55(0), fCovEtaEta(0), fCoviEtaiEta(0),
30 loizides 1.34 fCaloIsolation(0), fHcalJurassicIsolation(0),
31     fHcalDepth1TowerSumEtDr04(0), fHcalDepth2TowerSumEtDr04(0),
32     fEcalJurassicIsolation(0), fTrackIsolationDr04(0), fCaloTowerIsolation(0),
33     fHcalDepth1TowerSumEtDr03(0), fHcalDepth2TowerSumEtDr03(0),
34     fEcalRecHitSumEtDr03(0), fTrackIsolation(0), fPassLooseID(0),
35     fPassTightID(0), fIDLikelihood(0), fPIn(0), fPOut(0), fFracSharedHits(0),
36     fMva(0), fIsEnergyScaleCorrected(0), fIsMomentumCorrected(0),
37     fClassification(0), fIsEB(), fIsEE(0), fIsEBEEGap(0), fIsEBEtaGap(0),
38     fIsEBPhiGap(0), fIsEEDeeGap(0), fIsEERingGap(0),
39     fIsEcalDriven(0), fIsTrackerDriven(0) {}
40 loizides 1.29
41     const Track *BestTrk() const;
42 ceballos 1.36 Double_t CaloIsolation() const { return fCaloIsolation; } // *DEPRECATED*
43 loizides 1.34 Int_t Classification() const { return fClassification; }
44     Double_t CovEtaEta() const { return fCovEtaEta; }
45     Double_t CoviEtaiEta() const { return fCoviEtaiEta; }
46 loizides 1.27 Double_t DeltaEtaSuperClusterTrackAtVtx() const
47     { return fDeltaEtaSuperClTrkAtVtx; }
48     Double_t DeltaEtaSeedClusterTrackAtCalo() const
49     { return fDeltaEtaSeedClTrkAtCalo; }
50     Double_t DeltaPhiSuperClusterTrackAtVtx() const
51     { return fDeltaPhiSuperClTrkAtVtx; }
52     Double_t DeltaPhiSeedClusterTrackAtCalo() const
53     { return fDeltaPhiSeedClTrkAtCalo; }
54 loizides 1.34 Double_t E15() const { return fE15; }
55     Double_t E25Max() const { return fE25Max; }
56     Double_t E55() const { return fE55; }
57 loizides 1.29 Double_t ESuperClusterOverP() const { return fESuperClusterOverP; }
58     Double_t ESeedClusterOverPout() const { return fESeedClusterOverPout; }
59     Double_t ESeedClusterOverPIn() const;
60 bendavid 1.33 Double_t FBrem() const { return fFBrem; }
61     Double_t FBremOld() const { return (PIn() - POut())/PIn(); }
62     Double_t FracSharedHits() const { return fFracSharedHits; }
63 loizides 1.29 const Track *GsfTrk() const { return fGsfTrackRef.Obj(); }
64 loizides 1.30 Double_t HadronicOverEm() const { return fHadronicOverEm; }
65 bendavid 1.33 Double_t HcalDepth1OverEcal() const { return fHcalDepth1OverEcal; }
66     Double_t HcalDepth2OverEcal() const { return fHcalDepth2OverEcal; }
67 loizides 1.29 Bool_t HasGsfTrk() const { return fGsfTrackRef.IsValid(); }
68     Bool_t HasTrackerTrk() const { return fTrackerTrackRef.IsValid(); }
69     Bool_t HasSuperCluster() const { return fSuperClusterRef.IsValid(); }
70 ceballos 1.36 Double_t HcalIsolation() const { return fHcalJurassicIsolation; } // *DEPRECATED*
71 loizides 1.29 Double_t IDLikelihood() const { return fIDLikelihood; }
72     Bool_t IsEnergyScaleCorrected() const { return fIsEnergyScaleCorrected; }
73     Bool_t IsMomentumCorrected() const { return fIsMomentumCorrected; }
74 bendavid 1.33 Bool_t IsEB() const { return fIsEB; }
75     Bool_t IsEE() const { return fIsEE; }
76     Bool_t IsEBEEGap() const { return fIsEBEEGap; }
77     Bool_t IsEBEtaGap() const { return fIsEBEtaGap; }
78     Bool_t IsEBPhiGap() const { return fIsEBPhiGap; }
79     Bool_t IsEEDeeGap() const { return fIsEEDeeGap; }
80     Bool_t IsEERingGap() const { return fIsEERingGap; }
81     Bool_t IsEcalDriven() const { return fIsEcalDriven; }
82     Bool_t IsTrackerDriven() const { return fIsTrackerDriven; }
83     Double_t Mva() const { return fMva; }
84 loizides 1.29 Double_t NumberOfClusters() const { return fNumberOfClusters; }
85     EObjType ObjType() const { return kElectron; }
86     Double_t PassLooseID() const { return fPassLooseID; }
87     Double_t PassTightID() const { return fPassTightID; }
88     Double_t PIn() const { return fPIn; }
89     Double_t POut() const { return fPOut; }
90     const SuperCluster *SCluster() const { return fSuperClusterRef.Obj(); }
91 bendavid 1.38 Double_t ScPixCharge() const { return fScPixCharge; }
92 bendavid 1.33
93     Double_t EcalRecHitIsoDr04() const { return fEcalJurassicIsolation; }
94     Double_t HcalTowerSumEtDr04() const { return HcalDepth1TowerSumEtDr04() +
95     HcalDepth2TowerSumEtDr04(); }
96     Double_t HcalDepth1TowerSumEtDr04() const { return fHcalDepth1TowerSumEtDr04; }
97     Double_t HcalDepth2TowerSumEtDr04() const { return fHcalDepth2TowerSumEtDr04; }
98     Double_t TrackIsolationDr04() const { return fTrackIsolationDr04; }
99     Double_t EcalRecHitIsoDr03() const { return fEcalRecHitSumEtDr03; }
100     Double_t HcalTowerSumEtDr03() const { return fCaloTowerIsolation; }
101     Double_t HcalDepth1TowerSumEtDr03() const { return fHcalDepth1TowerSumEtDr03; }
102     Double_t HcalDepth2TowerSumEtDr03() const { return fHcalDepth2TowerSumEtDr03; }
103     Double_t TrackIsolationDr03() const { return fTrackIsolation; }
104    
105    
106 bendavid 1.37 void SetCharge(Char_t x) { fCharge = x; }
107 bendavid 1.38 void SetScPixCharge(Char_t x) { fScPixCharge = x; }
108 loizides 1.29 void SetClassification(Int_t x) { fClassification = x; }
109     void SetCovEtaEta(Double_t CovEtaEta) { fCovEtaEta = CovEtaEta; }
110     void SetCoviEtaiEta(Double_t CoviEtaiEta) { fCoviEtaiEta = CoviEtaiEta; }
111 loizides 1.27 void SetDeltaEtaSuperClusterTrackAtVtx(Double_t x)
112     { fDeltaEtaSuperClTrkAtVtx = x; }
113     void SetDeltaEtaSeedClusterTrackAtCalo(Double_t x)
114     { fDeltaEtaSeedClTrkAtCalo = x; }
115     void SetDeltaPhiSuperClusterTrackAtVtx(Double_t x)
116     { fDeltaPhiSuperClTrkAtVtx = x; }
117     void SetDeltaPhiSeedClusterTrackAtCalo(Double_t x)
118     { fDeltaPhiSeedClTrkAtCalo = x; }
119 bendavid 1.33 void SetE15(Double_t x) { fE15 = x; }
120     void SetE25Max(Double_t x) { fE25Max = x; }
121     void SetE55(Double_t x) { fE55 = x; }
122 loizides 1.29 void SetESeedClusterOverPout(Double_t x) { fESeedClusterOverPout = x; }
123     void SetESuperClusterOverP(Double_t x) { fESuperClusterOverP = x; }
124 bendavid 1.33 void SetFBrem(Double_t x) { fFBrem = x; }
125     void SetFracSharedHits(Double_t x) { fFracSharedHits = x; }
126 loizides 1.29 void SetGsfTrk(const Track* t)
127 bendavid 1.31 { fGsfTrackRef = t; ClearCharge(); }
128 loizides 1.29 void SetHadronicOverEm(Double_t x) { fHadronicOverEm = x; }
129 bendavid 1.33 void SetHcalDepth1OverEcal(Double_t x) { fHcalDepth1OverEcal = x; }
130     void SetHcalDepth2OverEcal(Double_t x) { fHcalDepth2OverEcal = x; }
131 loizides 1.29 void SetIDLikelihood(Double_t likelihood) { fIDLikelihood = likelihood; }
132     void SetIsEnergyScaleCorrected(Bool_t x) { fIsEnergyScaleCorrected = x; }
133     void SetIsMomentumCorrected(Bool_t x) { fIsMomentumCorrected = x; }
134     void SetNumberOfClusters(Double_t x) { fNumberOfClusters = x; }
135     void SetPIn(Double_t PIn) { fPIn = PIn; }
136     void SetPOut(Double_t POut) { fPOut = POut; }
137     void SetPassLooseID(Double_t passLooseID) { fPassLooseID = passLooseID; }
138     void SetPassTightID(Double_t passTightID) { fPassTightID = passTightID; }
139 bendavid 1.31 void SetPtEtaPhi(Double_t pt, Double_t eta, Double_t phi);
140     void SetSuperCluster(const SuperCluster* sc)
141     { fSuperClusterRef = sc; }
142 loizides 1.29 void SetTrackerTrk(const Track* t)
143 bendavid 1.31 { fTrackerTrackRef = t; ClearCharge(); }
144 bendavid 1.33 void SetEcalRecHitIsoDr04(Double_t x) { fEcalJurassicIsolation = x; }
145     void SetHcalDepth1TowerSumEtDr04(Double_t x) { fHcalDepth1TowerSumEtDr04 = x; }
146     void SetHcalDepth2TowerSumEtDr04(Double_t x) { fHcalDepth2TowerSumEtDr04 = x; }
147     void SetTrackIsolationDr04(Double_t x) { fTrackIsolationDr04 = x; }
148 loizides 1.34 void SetEcalRecHitIsoDr03(Double_t x) { fEcalRecHitSumEtDr03 = x; }
149 bendavid 1.33 void SetHcalTowerSumEtDr03(Double_t x) { fCaloTowerIsolation = x; }
150     void SetHcalDepth1TowerSumEtDr03(Double_t x) { fHcalDepth1TowerSumEtDr03 = x; }
151     void SetHcalDepth2TowerSumEtDr03(Double_t x) { fHcalDepth2TowerSumEtDr03 = x; }
152 loizides 1.34 void SetTrackIsolationDr03(Double_t x) { fTrackIsolation = x; }
153     void SetMva(Double_t x) { fMva = x; }
154     void SetIsEB(Bool_t b) { fIsEB = b; }
155     void SetIsEE(Bool_t b) { fIsEE = b; }
156     void SetIsEBEEGap(Bool_t b) { fIsEBEEGap = b; }
157     void SetIsEBEtaGap(Bool_t b) { fIsEBEtaGap = b; }
158     void SetIsEBPhiGap(Bool_t b) { fIsEBPhiGap = b; }
159     void SetIsEEDeeGap(Bool_t b) { fIsEEDeeGap = b; }
160     void SetIsEERingGap(Bool_t b) { fIsEERingGap = b; }
161     void SetIsEcalDriven(Bool_t b) { fIsEcalDriven = b; }
162     void SetIsTrackerDriven(Bool_t b) { fIsTrackerDriven = b; }
163 bendavid 1.33
164    
165 loizides 1.34 const Track *TrackerTrk() const { return fTrackerTrackRef.Obj(); }
166     const Track *Trk() const { return BestTrk(); }
167 sixie 1.13
168 loizides 1.8 protected:
169 bendavid 1.37 Double_t GetCharge() const;
170 loizides 1.34 Double_t GetMass() const { return 0.51099892e-3; }
171 loizides 1.27 void GetMom() const;
172 loizides 1.25
173 bendavid 1.31 Vect3C fMom; //stored three-momentum
174 bendavid 1.37 Char_t fCharge; //stored charge - filled with -99 when reading old files
175 bendavid 1.38 Char_t fScPixCharge; //charge from supercluster-pixel matching
176 loizides 1.27 Ref<Track> fGsfTrackRef; //gsf track reference
177     Ref<Track> fTrackerTrackRef; //tracker track reference
178     Ref<SuperCluster> fSuperClusterRef; //reference to SuperCluster
179 loizides 1.29 Double32_t fESuperClusterOverP; //[0,0,14]super cluster e over p ratio
180     Double32_t fESeedClusterOverPout; //[0,0,14]seed cluster e over p mom
181     Double32_t fDeltaEtaSuperClTrkAtVtx; //[0,0,14]delta eta of super cluster with trk
182     Double32_t fDeltaEtaSeedClTrkAtCalo; //[0,0,14]delta eta of seeed cluster with trk
183     Double32_t fDeltaPhiSuperClTrkAtVtx; //[0,0,14]delta phi of super cluster with trk
184     Double32_t fDeltaPhiSeedClTrkAtCalo; //[0,0,14]delta phi of seeed cluster with trk
185 bendavid 1.33 Double32_t fFBrem; //[0,0,14]brem fraction
186     Double32_t fHadronicOverEm; //[0,0,14]hadronic over em fraction *DEPRECATED*
187     Double32_t fHcalDepth1OverEcal; //[0,0,14]hadronic over em fraction depth1
188     Double32_t fHcalDepth2OverEcal; //[0,0,14]hadronic over em fraction depth2
189 loizides 1.29 Double32_t fNumberOfClusters; //[0,0,14]number of associated clusters
190 bendavid 1.33 Double32_t fE15; //[0,0,14]1x5 crystal energy
191     Double32_t fE25Max; //[0,0,14]2x5 crystal energy (max of two possible sums)
192 loizides 1.29 Double32_t fE55; //[0,0,14]5x5 crystal energy
193     Double32_t fCovEtaEta; //[0,0,14]variance eta-eta
194     Double32_t fCoviEtaiEta; //[0,0,14]covariance eta-eta (in crystals)
195 bendavid 1.33 Double32_t fCaloIsolation; //[0,0,14](non-jura) ecal isolation based on rechits dR 0.3 *DEPRECATED*
196     Double32_t fHcalJurassicIsolation; //[0,0,14]hcal jura iso dR 0.4 *DEPRECATED*
197     Double32_t fHcalDepth1TowerSumEtDr04; //[0,0,14]hcal depth1 tower based isolation dR 0.4
198     Double32_t fHcalDepth2TowerSumEtDr04; //[0,0,14]hcal depth2 tower based isolation dR 0.4
199     Double32_t fEcalJurassicIsolation; //[0,0,14]ecal jura iso dR 0.4 *RENAMING*
200     Double32_t fTrackIsolationDr04; //[0,0,14]isolation based on tracks dR 0.4
201     Double32_t fCaloTowerIsolation; //[0,0,14]hcal tower based isolation dR 0.3 *DEPRECATED*
202     Double32_t fHcalDepth1TowerSumEtDr03; //[0,0,14]hcal depth1 tower based isolation dR 0.3
203     Double32_t fHcalDepth2TowerSumEtDr03; //[0,0,14]hcal depth2 tower based isolation dR 0.3
204     Double32_t fEcalRecHitSumEtDr03; //[0,0,14]ecal jura iso dR 0.3
205     Double32_t fTrackIsolation; //[0,0,14]isolation based on tracks dR 0.3 *RENAMING*
206 loizides 1.29 Double32_t fPassLooseID; //[0,0,14]pass loose id
207     Double32_t fPassTightID; //[0,0,14]pass tight id
208     Double32_t fIDLikelihood; //[0,0,14]likelihood value
209     Double32_t fPIn; //[0,0,14]momentum at vtx
210     Double32_t fPOut; //[0,0,14]momentum at ecal surface
211 bendavid 1.33 Double32_t fFracSharedHits; //[0,0,14]fraction of shared hits btw gsf and std. track
212     Double32_t fMva; //[0,0,14] pflow mva output
213 loizides 1.29 Bool_t fIsEnergyScaleCorrected; //class dependent escale correction
214     Bool_t fIsMomentumCorrected; //class dependent E-p combination
215     Int_t fClassification; //classification (see GsfElectron.h)
216 bendavid 1.33 Bool_t fIsEB; //is ECAL barrel
217     Bool_t fIsEE; //is ECAL Endcap
218     Bool_t fIsEBEEGap; //is in barrel-endcap gap
219     Bool_t fIsEBEtaGap; //is in EB eta module gap
220     Bool_t fIsEBPhiGap; //is in EB phi module gap
221     Bool_t fIsEEDeeGap; //is in EE dee gap
222     Bool_t fIsEERingGap; //is in EE ring gap
223     Bool_t fIsEcalDriven; //is std. egamma electron
224     Bool_t fIsTrackerDriven; //is pflow track-seeded electron
225 sixie 1.13
226 bendavid 1.37 ClassDef(Electron, 3) // Electron class
227 bendavid 1.1 };
228 loizides 1.4 }
229 loizides 1.8
230 loizides 1.9 //--------------------------------------------------------------------------------------------------
231 loizides 1.10 inline const mithep::Track *mithep::Electron::BestTrk() const
232 loizides 1.9 {
233 loizides 1.10 // Return "best" track.
234    
235 bendavid 1.24 if (HasGsfTrk())
236 loizides 1.10 return GsfTrk();
237 bendavid 1.24 else if (HasTrackerTrk())
238 loizides 1.10 return TrackerTrk();
239 loizides 1.9
240 loizides 1.10 return 0;
241 loizides 1.9 }
242    
243 loizides 1.25 //--------------------------------------------------------------------------------------------------
244 bendavid 1.37 inline Double_t mithep::Electron::GetCharge() const
245     {
246     // Return stored charge, unless it is set to invalid (-99),
247     // in that case get charge from track as before
248    
249     if (fCharge==-99)
250     return mithep::ChargedParticle::GetCharge();
251     else
252     return fCharge;
253    
254     }
255    
256     //--------------------------------------------------------------------------------------------------
257 loizides 1.25 inline void mithep::Electron::GetMom() const
258 sixie 1.14 {
259 bendavid 1.31 // Get momentum of the electron. We use an explicitly stored three vector, with the pdg mass,
260     // since the momentum vector may be computed non-trivially in cmssw
261 sixie 1.14
262 bendavid 1.31 fCachedMom.SetCoordinates(fMom.Rho(),fMom.Eta(),fMom.Phi(),GetMass());
263 bendavid 1.18 }
264    
265     //-------------------------------------------------------------------------------------------------
266 loizides 1.25 inline Double_t mithep::Electron::ESeedClusterOverPIn() const
267 bendavid 1.18 {
268 loizides 1.25 // Return energy of the SuperCluster seed divided by the magnitude
269     // of the track momentum at the vertex.
270    
271     return SCluster()->Seed()->Energy() / PIn();
272 bendavid 1.18 }
273 bendavid 1.31
274     //-------------------------------------------------------------------------------------------------
275     inline void mithep::Electron::SetPtEtaPhi(Double_t pt, Double_t eta, Double_t phi)
276     {
277     // Set three-vector
278    
279     fMom.Set(pt,eta,phi);
280     ClearMom();
281     }
282 loizides 1.8 #endif