2 |
|
|
3 |
|
#include "MitAna/DataTree/interface/Electron.h" |
4 |
|
|
5 |
+ |
Double_t mithep::Electron::ComputeTrackIsolation( Double_t extRadius, Double_t intRadius, |
6 |
+ |
Double_t ptLow, Double_t maxVtxZDist, Collection<Track> *tracks) { |
7 |
+ |
|
8 |
+ |
//Computes the Track Isolation: Summed Transverse Momentum of all tracks inside an |
9 |
+ |
//annulus around the electron seed track. |
10 |
+ |
|
11 |
+ |
int counter; |
12 |
+ |
double ptSum =0.; |
13 |
+ |
|
14 |
+ |
const Track *electronTrack = this->Trk() ; |
15 |
+ |
ThreeVector *electronTrackMomentum = new ThreeVector(electronTrack->Mom().X(),electronTrack->Mom().Y(),electronTrack->Mom().Z()); |
16 |
+ |
|
17 |
+ |
for (UInt_t i=0; i<tracks->GetEntries();i++) { |
18 |
+ |
ThreeVector *tmpTrackMomentum = new ThreeVector(tracks->At(i)->Mom().X(),tracks->At(i)->Mom().Y(),tracks->At(i)->Mom().Z()); |
19 |
+ |
double tmpPt = tracks->At(i)->Pt(); |
20 |
+ |
double deltaZ = fabs(electronTrack->Z0() - tracks->At(i)->Z0()); |
21 |
+ |
|
22 |
+ |
//ignore the track if it is below the pt threshold |
23 |
+ |
if (tmpPt < ptLow) |
24 |
+ |
continue; |
25 |
+ |
//ingore the track if it is too far away in Z |
26 |
+ |
if (deltaZ > maxVtxZDist) |
27 |
+ |
continue; |
28 |
+ |
|
29 |
+ |
double dphi = (fabs(tmpTrackMomentum->Phi() - electronTrackMomentum->Phi()) > TMath::Pi())?(fabs(tmpTrackMomentum->Phi() - electronTrackMomentum->Phi()) - 2*TMath::Pi()):(fabs(tmpTrackMomentum->Phi() - electronTrackMomentum->Phi())); |
30 |
+ |
double deta = fabs(tmpTrackMomentum->Eta() - electronTrackMomentum->Eta()); |
31 |
+ |
double dr = TMath::Sqrt(dphi*dphi + deta*deta); |
32 |
+ |
|
33 |
+ |
//add the track pt if it is inside the annulus |
34 |
+ |
if ( dr < extRadius && |
35 |
+ |
dr >= intRadius ) { |
36 |
+ |
++counter ; |
37 |
+ |
ptSum += tmpPt; |
38 |
+ |
} |
39 |
+ |
} |
40 |
+ |
return ptSum; |
41 |
+ |
} |
42 |
+ |
|
43 |
+ |
Double_t mithep::Electron::ComputeEcalIsolation( Double_t coneSize, Double_t etLow, Collection<BasicCluster> *basicClusters) { |
44 |
+ |
|
45 |
+ |
//Computes the Ecal Isolation: Summed Transverse Energy of all Basic Clusters inside a |
46 |
+ |
//cone around the electron, excluding those that are inside the electron super cluster. |
47 |
+ |
|
48 |
+ |
double ecalIsol=0.; |
49 |
+ |
ThreeVector *SClusterPosition = new ThreeVector (this->SCluster()->X(),this->SCluster()->Y(),this->SCluster()->Z()); |
50 |
+ |
|
51 |
+ |
const BasicCluster *basicCluster= 0; |
52 |
+ |
for (UInt_t i=0; i<basicClusters->GetEntries();i++) { |
53 |
+ |
basicCluster = basicClusters->At(i); |
54 |
+ |
double basicClusterChi2 = basicCluster->ChiSq(); |
55 |
+ |
double basicClusterEnergy = basicCluster->Energy(); |
56 |
+ |
double basicClusterEta = basicCluster->Eta(); |
57 |
+ |
double basicClusterEt = basicClusterEnergy*sin(2*atan(exp(basicClusterEta))); |
58 |
+ |
|
59 |
+ |
if (basicClusterEt > etLow && basicClusterChi2 < 30.) { |
60 |
+ |
bool inSuperCluster = false; |
61 |
+ |
|
62 |
+ |
// loop over the basic clusters of the supercluster |
63 |
+ |
// to make sure that the basic cluster is not inside |
64 |
+ |
// the super cluster. We exclude those. |
65 |
+ |
for (UInt_t j=0; j<this->SCluster()->ClusterSize(); j++) { |
66 |
+ |
const BasicCluster *tempBasicClusterInSuperCluster = this->SCluster()->Cluster(j); |
67 |
+ |
if (tempBasicClusterInSuperCluster == basicCluster) { |
68 |
+ |
inSuperCluster = true; |
69 |
+ |
} |
70 |
+ |
} |
71 |
+ |
|
72 |
+ |
if (!inSuperCluster) { |
73 |
+ |
ThreeVector *basicClusterPosition = new ThreeVector(basicCluster->X(), |
74 |
+ |
basicCluster->Y(), |
75 |
+ |
basicCluster->Z()); |
76 |
+ |
double dphi = (fabs(SClusterPosition->Phi() - basicClusterPosition->Phi()) > TMath::Pi())?(fabs(SClusterPosition->Phi() - basicClusterPosition->Phi()) - 2*TMath::Pi()):(fabs(SClusterPosition->Phi() - basicClusterPosition->Phi())); |
77 |
+ |
double deta = fabs(SClusterPosition->Eta() - basicClusterPosition->Eta()); |
78 |
+ |
double dr = TMath::Sqrt(dphi*dphi + deta*deta); |
79 |
+ |
if(dr < coneSize) { |
80 |
+ |
ecalIsol += basicClusterEt; |
81 |
+ |
} |
82 |
+ |
} |
83 |
+ |
} |
84 |
+ |
} |
85 |
+ |
return ecalIsol; |
86 |
+ |
} |
87 |
+ |
|
88 |
|
ClassImp(mithep::Electron) |
89 |
+ |
|
90 |
+ |
|