ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/DataTree/interface/Electron.h
Revision: 1.26
Committed: Thu Feb 26 17:06:24 2009 UTC (16 years, 2 months ago) by bendavid
Content type: text/plain
Branch: MAIN
Changes since 1.25: +4 -4 lines
Log Message:
Incorporate updated RefArray (no size template argument anymore) and add necessary caches and cache clear calls

File Contents

# User Rev Content
1 bendavid 1.1 //--------------------------------------------------------------------------------------------------
2 bendavid 1.26 // $Id: Electron.h,v 1.25 2009/02/18 15:38:54 loizides Exp $
3 bendavid 1.1 //
4 paus 1.3 // Electron
5 bendavid 1.1 //
6 loizides 1.22 // Details to be worked out... TODO: Needs description ala Muon class
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.22 Electron() : fESuperClusterOverP(0), fESeedClusterOverPout(0), fDeltaEtaSuperClTrkAtVtx(0),
24     fDeltaEtaSeedClTrkAtCalo(0), fDeltaPhiSuperClTrkAtVtx(0),
25     fDeltaPhiSeedClTrkAtCalo(0), fHadronicOverEm(0), fIsEnergyScaleCorrected(0),
26     fIsMomentumCorrected(0), fNumberOfClusters(0), fClassification(0), fE33(0),
27     fE55(0), fCovEtaEta(0), fCoviEtaiEta(0), fCovEtaPhi(0), fCovPhiPhi(0),
28     fCaloIsolation(0), fCaloTowerIsolation(0), fTrackIsolation(0),
29     fEcalJurassicIsolation(0), fHcalJurassicIsolation(0), fPassLooseID(0),
30     fPassTightID(0), fIDLikelihood(0), fPIn(0), fPOut(0) {}
31 bendavid 1.1
32 sixie 1.14 const Track *BestTrk() const;
33 bendavid 1.24 const Track *GsfTrk() const { return fGsfTrackRef.Obj(); }
34     const Track *TrackerTrk() const { return fTrackerTrackRef.Obj(); }
35     const SuperCluster *SCluster() const { return fSuperClusterRef.Obj(); }
36 sixie 1.14 const Track *Trk() const { return BestTrk(); }
37 loizides 1.22 Double_t CaloIsolation() const { return fCaloIsolation; }
38     Double_t CaloTowerIsolation() const { return fCaloTowerIsolation; }
39     Double_t Classification() const { return fClassification; }
40     Double_t CovEtaEta() const { return fCovEtaEta; }
41     Double_t CovEtaPhi() const { return fCovEtaPhi; }
42     Double_t CovPhiPhi() const { return fCovPhiPhi; }
43     Double_t CoviEtaiEta() const { return fCoviEtaiEta; }
44 sixie 1.13 Double_t DeltaEtaSuperClusterTrackAtVtx() const { return fDeltaEtaSuperClTrkAtVtx; }
45     Double_t DeltaEtaSeedClusterTrackAtCalo() const { return fDeltaEtaSeedClTrkAtCalo; }
46     Double_t DeltaPhiSuperClusterTrackAtVtx() const { return fDeltaPhiSuperClTrkAtVtx; }
47     Double_t DeltaPhiSeedClusterTrackAtCalo() const { return fDeltaPhiSeedClTrkAtCalo; }
48     Double_t E33() const { return fE33; }
49     Double_t E55() const { return fE55; }
50 sixie 1.17 Double_t EcalJurassicIsolation() const { return fEcalJurassicIsolation; }
51 loizides 1.22 Double_t ESuperClusterOverP() const { return fESuperClusterOverP; }
52     Double_t ESeedClusterOverPout() const { return fESeedClusterOverPout; }
53     Double_t ESeedClusterOverPIn() const;
54     Double_t IDLikelihood() const { return fIDLikelihood; }
55     Double_t IsEnergyScaleCorrected() const { return fIsEnergyScaleCorrected; }
56     Double_t IsMomentumCorrected() const { return fIsMomentumCorrected; }
57     Double_t HadronicOverEm() const { return fHadronicOverEm; }
58 bendavid 1.24 Bool_t HasGsfTrk() const { return fGsfTrackRef.IsValid(); }
59     Bool_t HasTrackerTrk() const { return fTrackerTrackRef.IsValid(); }
60     Bool_t HasSuperCluster() const { return fSuperClusterRef.IsValid(); }
61 loizides 1.20 Double_t HcalIsolation() const { return fHcalJurassicIsolation; }
62 loizides 1.22 Double_t NumberOfClusters() const { return fNumberOfClusters; }
63     EObjType ObjType() const { return kElectron; }
64 sixie 1.15 Double_t PassLooseID() const { return fPassLooseID; }
65     Double_t PassTightID() const { return fPassTightID; }
66 loizides 1.22 Double_t PIn() const { return fPIn; }
67     Double_t POut() const { return fPOut; }
68     Double_t TrackIsolation() const { return fTrackIsolation; }
69 bendavid 1.26 void SetGsfTrk(const Track* t) { fGsfTrackRef = t; ClearMom(); ClearCharge(); }
70     void SetTrackerTrk(const Track* t) { fTrackerTrackRef = t; ClearMom(); ClearCharge(); }
71     void SetSuperCluster(const SuperCluster* sc) { fSuperClusterRef = sc; ClearMom(); }
72 loizides 1.22 void SetCaloIsolation(Double_t CaloIsolation) { fCaloIsolation = CaloIsolation; }
73     void SetCaloTowerIsolation(Double_t TowerIso) { fCaloTowerIsolation = TowerIso; }
74     void SetClassification(Double_t x) { fClassification = x; }
75     void SetCovEtaEta(Double_t CovEtaEta) { fCovEtaEta = CovEtaEta; }
76     void SetCovEtaPhi(Double_t CovEtaPhi) { fCovEtaPhi = CovEtaPhi; }
77     void SetCovPhiPhi(Double_t CovPhiPhi) { fCovPhiPhi = CovPhiPhi; }
78     void SetCoviEtaiEta(Double_t CoviEtaiEta) { fCoviEtaiEta = CoviEtaiEta; }
79 sixie 1.13 void SetDeltaEtaSuperClusterTrackAtVtx(Double_t x) { fDeltaEtaSuperClTrkAtVtx = x; }
80     void SetDeltaEtaSeedClusterTrackAtCalo(Double_t x) { fDeltaEtaSeedClTrkAtCalo = x; }
81     void SetDeltaPhiSuperClusterTrackAtVtx(Double_t x) { fDeltaPhiSuperClTrkAtVtx = x; }
82     void SetDeltaPhiSeedClusterTrackAtCalo(Double_t x) { fDeltaPhiSeedClTrkAtCalo = x; }
83 loizides 1.22 void SetE33(Double_t E33) { fE33 = E33; }
84     void SetE55(Double_t E55) { fE55 = E55; }
85     void SetEcalJurassicIsolation(Double_t iso ) { fEcalJurassicIsolation = iso; }
86     void SetESuperClusterOverP(Double_t x) { fESuperClusterOverP = x; }
87     void SetESeedClusterOverPout(Double_t x) { fESeedClusterOverPout = x; }
88 sixie 1.13 void SetHadronicOverEm(Double_t x) { fHadronicOverEm = x; }
89 loizides 1.22 void SetIDLikelihood(Double_t likelihood) { fIDLikelihood = likelihood; }
90 sixie 1.13 void SetIsEnergyScaleCorrected(Double_t x) { fIsEnergyScaleCorrected = x; }
91     void SetIsMomentumCorrected(Double_t x) { fIsMomentumCorrected = x; }
92 loizides 1.22 void SetHcalIsolation(Double_t iso ) { fHcalJurassicIsolation = iso; }
93 sixie 1.13 void SetNumberOfClusters(Double_t x) { fNumberOfClusters = x; }
94 sixie 1.15 void SetPassLooseID(Double_t passLooseID) { fPassLooseID = passLooseID; }
95     void SetPassTightID(Double_t passTightID) { fPassTightID = passTightID; }
96 loizides 1.22 void SetPIn(Double_t PIn) { fPIn = PIn; }
97     void SetPOut(Double_t POut) { fPOut = POut; }
98 loizides 1.25 void SetTrackIsolation(Double_t trkiso) { fTrackIsolation = trkiso; }
99 sixie 1.13
100 loizides 1.8 protected:
101 loizides 1.25 Double_t GetMass() const { return 0.51099892e-3; }
102     void GetMom() const;
103    
104 bendavid 1.24 Ref<Track> fGsfTrackRef; //gsf track reference
105     Ref<Track> fTrackerTrackRef; //tracker track reference
106     Ref<SuperCluster> fSuperClusterRef; //reference to SuperCluster
107 loizides 1.22 Double_t fESuperClusterOverP; //
108     Double_t fESeedClusterOverPout; //
109     Double_t fDeltaEtaSuperClTrkAtVtx; //
110     Double_t fDeltaEtaSeedClTrkAtCalo; //
111     Double_t fDeltaPhiSuperClTrkAtVtx; //
112     Double_t fDeltaPhiSeedClTrkAtCalo; //
113     Double_t fHadronicOverEm; //
114     Double_t fIsEnergyScaleCorrected; //
115     Double_t fIsMomentumCorrected; //
116     Double_t fNumberOfClusters; //
117     Double_t fClassification; //
118     Double_t fE33; //
119     Double_t fE55; //
120     Double_t fCovEtaEta; //
121     Double_t fCoviEtaiEta; //
122     Double_t fCovEtaPhi; //
123     Double_t fCovPhiPhi; //
124     Double_t fCaloIsolation; //
125     Double_t fCaloTowerIsolation; //
126     Double_t fTrackIsolation; //
127     Double_t fEcalJurassicIsolation; //
128     Double_t fHcalJurassicIsolation; //
129     Double_t fPassLooseID; //
130     Double_t fPassTightID; //
131     Double_t fIDLikelihood; //
132     Double_t fPIn; //
133     Double_t fPOut; //
134 sixie 1.13
135 loizides 1.7 ClassDef(Electron, 1) // Electron class
136 bendavid 1.1 };
137 loizides 1.4 }
138 loizides 1.8
139 loizides 1.9 //--------------------------------------------------------------------------------------------------
140 loizides 1.10 inline const mithep::Track *mithep::Electron::BestTrk() const
141 loizides 1.9 {
142 loizides 1.10 // Return "best" track.
143    
144 bendavid 1.24 if (HasGsfTrk())
145 loizides 1.10 return GsfTrk();
146 bendavid 1.24 else if (HasTrackerTrk())
147 loizides 1.10 return TrackerTrk();
148 loizides 1.9
149 loizides 1.10 return 0;
150 loizides 1.9 }
151    
152 loizides 1.25 //--------------------------------------------------------------------------------------------------
153     inline void mithep::Electron::GetMom() const
154 sixie 1.14 {
155 loizides 1.25 // Get momentum of the electron. We use the direction of the
156 loizides 1.22 // track and the energy of the SuperCluster.
157 sixie 1.14
158 loizides 1.25 const mithep::Track *trk = Trk();
159 sixie 1.15
160 loizides 1.25 if (!trk) {
161     fCachedMom.SetCoordinates(0,0,0,0);
162     return;
163     }
164 sixie 1.15
165 loizides 1.25 Double_t p = 0;
166     Double_t mass = GetMass();
167 bendavid 1.18
168     const mithep::SuperCluster *sc = SCluster();
169     if (sc)
170 loizides 1.25 p = TMath::Sqrt(sc->Energy()*sc->Energy() - mass*mass);
171 bendavid 1.18 else
172 loizides 1.25 p = trk->P();
173 loizides 1.22
174 loizides 1.25 Double_t pt = TMath::Abs(p*TMath::Cos(trk->Lambda()));
175     fCachedMom.SetCoordinates(pt,trk->Eta(),trk->Phi(),mass);
176 bendavid 1.18 }
177    
178     //-------------------------------------------------------------------------------------------------
179 loizides 1.25 inline Double_t mithep::Electron::ESeedClusterOverPIn() const
180 bendavid 1.18 {
181 loizides 1.25 // Return energy of the SuperCluster seed divided by the magnitude
182     // of the track momentum at the vertex.
183    
184     return SCluster()->Seed()->Energy() / PIn();
185 bendavid 1.18 }
186 loizides 1.8 #endif