]>
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 | } | |
ea3ce170 | 87 | AliVParticle *track = fEvent->GetTrack(trackMatchedIndex); |
88 | if(track->Pt()<0.5) return kTRUE;//Track matches below about 500 MeV are mostly random. It takes ~460 MeV to reach the EMCal | |
89 | ||
90 | //Float_t recoE = cluster.E(); | |
fe4603e7 | 91 | //Float_t pos[3]; |
92 | ||
93 | // //cluster.GetPosition(pos); | |
94 | // Int_t trackMatchIdx = cluster.GetTrackMatchedIndex(); | |
95 | // //Double_t distance = 9999.0; | |
96 | // if(trackMatchIdx>-1) | |
97 | // { | |
98 | // return kTRUE; | |
99 | // //distance = CalcTrackClusterDistance(pos, &trackMatchIdx); | |
100 | // } | |
101 | ||
fe4603e7 | 102 | |
103 | return kFALSE; | |
104 | //return distance > fCuts->GetEmcalTrackDistanceCut(); | |
69fe2599 | 105 | } |
106 | ||
43dd5a38 | 107 | Bool_t AliAnalysisEtSelectorEmcal::CutGeometricalAcceptance(const TParticle& part) |
69fe2599 | 108 | { |
43dd5a38 | 109 | float myphi = part.Phi(); |
110 | myphi = AliAnalysisEtSelector::ShiftAngle(myphi); | |
f20da103 | 111 | return TMath::Abs(part.Eta()) < fCuts->GetGeometryEmcalEtaAccCut() |
43dd5a38 | 112 | && myphi < fCuts->GetGeometryEmcalPhiAccMaxCut()*TMath::Pi()/180. |
113 | && myphi > fCuts->GetGeometryEmcalPhiAccMinCut()*TMath::Pi()/180.; | |
69fe2599 | 114 | } |
115 | ||
43dd5a38 | 116 | Bool_t AliAnalysisEtSelectorEmcal::CutGeometricalAcceptance(const AliVTrack& part) |
69fe2599 | 117 | { |
43dd5a38 | 118 | float myphi = part.Phi(); |
119 | myphi = AliAnalysisEtSelector::ShiftAngle(myphi); | |
120 | return TMath::Abs(part.Eta()) < fCuts->GetGeometryEmcalEtaAccCut() | |
121 | && myphi < fCuts->GetGeometryEmcalPhiAccMaxCut()*TMath::Pi()/180. | |
122 | && myphi > fCuts->GetGeometryEmcalPhiAccMinCut()*TMath::Pi()/180.; | |
69fe2599 | 123 | } |
124 | ||
43dd5a38 | 125 | Bool_t AliAnalysisEtSelectorEmcal::CutGeometricalAcceptance(const AliESDCaloCluster& cluster) |
31c813d5 | 126 | { |
127 | Float_t pos[3]; | |
128 | cluster.GetPosition(pos); | |
129 | TVector3 cp(pos); | |
43dd5a38 | 130 | float myphi = cp.Phi(); |
131 | myphi = AliAnalysisEtSelector::ShiftAngle(myphi); | |
31c813d5 | 132 | return TMath::Abs(cp.Eta()) < fCuts->GetGeometryEmcalEtaAccCut() |
43dd5a38 | 133 | && myphi < fCuts->GetGeometryEmcalPhiAccMaxCut()*TMath::Pi()/180. |
134 | && myphi > fCuts->GetGeometryEmcalPhiAccMinCut()*TMath::Pi()/180.; | |
31c813d5 | 135 | } |
136 | ||
69fe2599 | 137 | |
f20da103 | 138 | Double_t |
139 | AliAnalysisEtSelectorEmcal::CalcTrackClusterDistance(const Float_t clsPos[3],Int_t *trkMatchId) const | |
140 | { // calculate distance between cluster and closest track | |
141 | ||
142 | Double_t trkPos[3] = {0,0,0}; | |
143 | ||
144 | Int_t bestTrkMatchId = -1; | |
145 | Double_t distance = 9999; // init to a big number | |
146 | ||
147 | Double_t dist = 0; | |
148 | Double_t distX = 0, distY = 0, distZ = 0; | |
149 | ||
150 | for (Int_t iTrack = 0; iTrack < fEvent->GetNumberOfTracks(); iTrack++) { | |
151 | AliESDtrack *track = static_cast<AliESDtrack*>( fEvent->GetTrack(iTrack) ); | |
152 | if (!track) { | |
153 | AliError(Form("ERROR: Could not get track %d", iTrack)); | |
154 | continue; | |
155 | } | |
156 | ||
157 | // check for approx. eta and phi range before we propagate.. | |
158 | // TBD | |
159 | ||
160 | AliEMCALTrack emctrack(*track); | |
161 | if (!emctrack.PropagateToGlobal(clsPos[0],clsPos[1],clsPos[2],0.,0.) ) { | |
162 | continue; | |
163 | } | |
164 | emctrack.GetXYZ(trkPos); | |
165 | ||
166 | distX = clsPos[0]-trkPos[0]; | |
167 | distY = clsPos[1]-trkPos[1]; | |
168 | distZ = clsPos[2]-trkPos[2]; | |
169 | dist = TMath::Sqrt(distX*distX + distY*distY + distZ*distZ); | |
170 | ||
171 | if (dist < distance) { | |
172 | distance = dist; | |
173 | bestTrkMatchId = iTrack; | |
174 | } | |
175 | } // iTrack | |
176 | ||
177 | // printf("CalcTrackClusterDistance: bestTrkMatch %d origTrkMatch %d distance %f\n", bestTrkMatchId, *trkMatchId, distance); | |
178 | *trkMatchId = bestTrkMatchId; | |
179 | return distance; | |
180 | } | |
181 | ||
69fe2599 | 182 | |
183 | ||
184 | ||
185 |