]>
Commit | Line | Data |
---|---|---|
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 | 14 | AliAnalysisEtSelectorEmcal::AliAnalysisEtSelectorEmcal(AliAnalysisEtCuts* cuts):AliAnalysisEtSelector(cuts) |
69fe2599 | 15 | { |
16 | ||
c31562f7 | 17 | } |
18 | AliAnalysisEtSelectorEmcal::AliAnalysisEtSelectorEmcal():AliAnalysisEtSelector() | |
19 | { | |
69fe2599 | 20 | } |
21 | ||
7f03b597 | 22 | AliAnalysisEtSelectorEmcal::~AliAnalysisEtSelectorEmcal() |
69fe2599 | 23 | { |
24 | ||
25 | } | |
26 | ||
27 | void AliAnalysisEtSelectorEmcal::Init() | |
28 | { | |
29 | AliAnalysisEtSelector::Init(); | |
30 | } | |
31 | ||
32 | Int_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 | ||
41 | TRefArray* 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 | 57 | Bool_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 | 65 | Bool_t AliAnalysisEtSelectorEmcal::PassMinEnergyCut(const TParticle& p) const |
69fe2599 | 66 | { |
cfe23ff0 | 67 | return TMath::Sin(p.Theta())*p.Energy() > fCuts->GetReconstructedEmcalClusterEnergyCut(); |
69fe2599 | 68 | } |
69 | ||
86e7d5db | 70 | Bool_t AliAnalysisEtSelectorEmcal::PassDistanceToBadChannelCut(const AliESDCaloCluster& ) const |
69fe2599 | 71 | { |
7f03b597 | 72 | return kTRUE; |
69fe2599 | 73 | } |
74 | ||
f20da103 | 75 | Bool_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 | ||
104 | Bool_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 | ||
111 | Bool_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 | 119 | Double_t |
120 | AliAnalysisEtSelectorEmcal::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 |