]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/totEt/AliAnalysisEtSelectorEmcal.cxx
Fixing issue in identifying true photons
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisEtSelectorEmcal.cxx
CommitLineData
69fe2599 1//_________________________________________________________________________
2// Utility Class for transverse energy studies
3// Selection class for EMCAL
4//
5//*-- Authors: Oystein Djuvsland (Bergen)
6//_________________________________________________________________________
7
8
9#include "AliAnalysisEtSelectorEmcal.h"
10#include "AliAnalysisEtCuts.h"
f20da103 11#include "AliEMCALTrack.h"
69fe2599 12#include "TParticle.h"
69fe2599 13
7f03b597 14AliAnalysisEtSelectorEmcal::AliAnalysisEtSelectorEmcal(AliAnalysisEtCuts* cuts):AliAnalysisEtSelector(cuts)
69fe2599 15{
16
c31562f7 17}
18AliAnalysisEtSelectorEmcal::AliAnalysisEtSelectorEmcal():AliAnalysisEtSelector()
19{
69fe2599 20}
21
7f03b597 22AliAnalysisEtSelectorEmcal::~AliAnalysisEtSelectorEmcal()
69fe2599 23{
24
25}
26
27void AliAnalysisEtSelectorEmcal::Init()
28{
29 AliAnalysisEtSelector::Init();
30}
31
32Int_t AliAnalysisEtSelectorEmcal::Init(const AliESDEvent* event)
f20da103 33{ // Init
34
69fe2599 35 AliAnalysisEtSelector::Init(event);
36 Printf("Initializing selector for run: %d", event->GetRunNumber());
37 fInitialized = kTRUE;
38 return 0;
39}
40
41TRefArray* AliAnalysisEtSelectorEmcal::GetClusters()
f20da103 42{ // Get clusters
43
44 if(!fClusterArray) fClusterArray = new TRefArray;
45
46 if(fClusterArray)
47 {
48 fEvent->GetEMCALClusters(fClusterArray);
49 }
50 else
51 {
52 Printf("Could not initialize cluster array");
53 }
54 return fClusterArray;
69fe2599 55}
56
86e7d5db 57Bool_t AliAnalysisEtSelectorEmcal::PassMinEnergyCut(const AliESDCaloCluster& cl) const
69fe2599 58{
cfe23ff0 59 Float_t pos[3];
60 cl.GetPosition(pos);
61 TVector3 cp(pos);
62 return TMath::Sin(cp.Theta())*cl.E() > fCuts->GetReconstructedEmcalClusterEnergyCut();
69fe2599 63}
64
86e7d5db 65Bool_t AliAnalysisEtSelectorEmcal::PassMinEnergyCut(const TParticle& p) const
69fe2599 66{
cfe23ff0 67 return TMath::Sin(p.Theta())*p.Energy() > fCuts->GetReconstructedEmcalClusterEnergyCut();
69fe2599 68}
69
86e7d5db 70Bool_t AliAnalysisEtSelectorEmcal::PassDistanceToBadChannelCut(const AliESDCaloCluster& ) const
69fe2599 71{
7f03b597 72 return kTRUE;
69fe2599 73}
74
f20da103 75Bool_t AliAnalysisEtSelectorEmcal::PassTrackMatchingCut(const AliESDCaloCluster& cluster) const
69fe2599 76{
f20da103 77
fe4603e7 78 Int_t nTracksMatched = cluster.GetNTracksMatched();
79 if(nTracksMatched == 0){
80 return kTRUE;
81 }
82
83 Int_t trackMatchedIndex = cluster.GetTrackMatchedIndex();
84 if(trackMatchedIndex < 0){
85 return kTRUE;
86 }
87 //Float_t pos[3];
88
89// //cluster.GetPosition(pos);
90// Int_t trackMatchIdx = cluster.GetTrackMatchedIndex();
91// //Double_t distance = 9999.0;
92// if(trackMatchIdx>-1)
93// {
94// return kTRUE;
95// //distance = CalcTrackClusterDistance(pos, &trackMatchIdx);
96// }
97
98 //Float_t recoE = cluster->E();
99
100 return kFALSE;
101 //return distance > fCuts->GetEmcalTrackDistanceCut();
69fe2599 102}
103
104Bool_t AliAnalysisEtSelectorEmcal::CutGeometricalAcceptance(const TParticle& part) const
105{
f20da103 106 return TMath::Abs(part.Eta()) < fCuts->GetGeometryEmcalEtaAccCut()
107 && part.Phi() < fCuts->GetGeometryEmcalPhiAccMaxCut()*TMath::Pi()/180.
108 && part.Phi() > fCuts->GetGeometryEmcalPhiAccMinCut()*TMath::Pi()/180.;
69fe2599 109}
110
111Bool_t AliAnalysisEtSelectorEmcal::CutGeometricalAcceptance(const AliVTrack& part) const
112{
f20da103 113 return TMath::Abs(part.Eta()) < fCuts->GetGeometryEmcalEtaAccCut()
114 && part.Phi() < fCuts->GetGeometryEmcalPhiAccMaxCut()*TMath::Pi()/180.
115 && part.Phi() > fCuts->GetGeometryEmcalPhiAccMinCut()*TMath::Pi()/180.;
69fe2599 116}
117
118
f20da103 119Double_t
120AliAnalysisEtSelectorEmcal::CalcTrackClusterDistance(const Float_t clsPos[3],Int_t *trkMatchId) const
121{ // calculate distance between cluster and closest track
122
123 Double_t trkPos[3] = {0,0,0};
124
125 Int_t bestTrkMatchId = -1;
126 Double_t distance = 9999; // init to a big number
127
128 Double_t dist = 0;
129 Double_t distX = 0, distY = 0, distZ = 0;
130
131 for (Int_t iTrack = 0; iTrack < fEvent->GetNumberOfTracks(); iTrack++) {
132 AliESDtrack *track = static_cast<AliESDtrack*>( fEvent->GetTrack(iTrack) );
133 if (!track) {
134 AliError(Form("ERROR: Could not get track %d", iTrack));
135 continue;
136 }
137
138 // check for approx. eta and phi range before we propagate..
139 // TBD
140
141 AliEMCALTrack emctrack(*track);
142 if (!emctrack.PropagateToGlobal(clsPos[0],clsPos[1],clsPos[2],0.,0.) ) {
143 continue;
144 }
145 emctrack.GetXYZ(trkPos);
146
147 distX = clsPos[0]-trkPos[0];
148 distY = clsPos[1]-trkPos[1];
149 distZ = clsPos[2]-trkPos[2];
150 dist = TMath::Sqrt(distX*distX + distY*distY + distZ*distZ);
151
152 if (dist < distance) {
153 distance = dist;
154 bestTrkMatchId = iTrack;
155 }
156 } // iTrack
157
158 // printf("CalcTrackClusterDistance: bestTrkMatch %d origTrkMatch %d distance %f\n", bestTrkMatchId, *trkMatchId, distance);
159 *trkMatchId = bestTrkMatchId;
160 return distance;
161}
162
69fe2599 163
164
165
166