]>
Commit | Line | Data |
---|---|---|
399bcfee | 1 | /************************************************************************** |
2 | * Contributors are not mentioned at all. * | |
3 | * * | |
4 | * Permission to use, copy, modify and distribute this software and its * | |
5 | * documentation strictly for non-commercial purposes is hereby granted * | |
6 | * without fee, provided that the above copyright noticxse appears in all * | |
7 | * copies and that both the copyright notice and this permission notice * | |
8 | * appear in the supporting documentation. The authors make no claims * | |
9 | * about the suitability of this software for any purpose. It is * | |
10 | * provided "as is" without express or implied warranty. * | |
11 | **************************************************************************/ | |
12 | //----------------------------------------------------------------- | |
13 | // AliAnalysisTaskNucleiv2SP class | |
14 | //----------------------------------------------------------------- | |
15 | ||
16 | class TTree; | |
17 | class TParticle; | |
18 | class TVector3; | |
19 | ||
20 | #include "AliAnalysisManager.h" | |
21 | #include <AliMCEventHandler.h> | |
22 | #include <AliMCEvent.h> | |
23 | #include <AliStack.h> | |
24 | ||
25 | class AliESDVertex; | |
26 | class AliAODVertex; | |
27 | class AliESDv0; | |
28 | class AliAODv0; | |
29 | ||
30 | #include <iostream> | |
31 | ||
32 | #include "TList.h" | |
33 | #include "TH1.h" | |
34 | #include "TH2.h" | |
35 | #include "TH3.h" | |
36 | #include "TNtuple.h" | |
37 | #include "TGraph.h" | |
38 | #include "TF1.h" | |
39 | #include "TCanvas.h" | |
40 | #include "TMath.h" | |
41 | #include "TChain.h" | |
42 | #include "Riostream.h" | |
43 | #include "AliLog.h" | |
44 | #include "AliCascadeVertexer.h" | |
45 | #include "AliESDEvent.h" | |
46 | #include "AliESDtrack.h" | |
47 | #include "AliExternalTrackParam.h" | |
48 | #include "AliAODEvent.h" | |
49 | #include "AliInputEventHandler.h" | |
50 | #include "AliESDcascade.h" | |
51 | #include "AliAODcascade.h" | |
52 | #include "AliAnalysisTaskNucleiv2SP.h" | |
53 | #include "AliESDtrackCuts.h" | |
54 | #include "AliCentrality.h" | |
55 | ||
56 | ||
57 | ClassImp(AliAnalysisTaskNucleiv2SP) | |
58 | ||
59 | using std::cout; | |
60 | using std::endl; | |
61 | ||
62 | //________________________________________________________________________ | |
63 | AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP() | |
862ec7a1 | 64 | : AliAnalysisTaskSE(), |
ba71c751 | 65 | fisPrimCut(kTRUE), |
502416be | 66 | fptc(1), |
67 | fmaxpull(3), | |
68 | fmaxVz(10), | |
862ec7a1 | 69 | fListHist(0), |
70 | fHistEventMultiplicity(0), | |
71 | fHistTrackMultiplicity(0), | |
72 | fHistTrackMultiplicityCentral(0), | |
73 | fHistTrackMultiplicitySemiCentral(0), | |
74 | fHistTrackMultiplicityMB(0), | |
75 | fhBB(0), | |
76 | fhBBDeu(0), | |
77 | fhPtDeu(0), | |
78 | fhTOF(0), | |
79 | fhMassTOF(0), | |
80 | EPVzAvsCentrality(0), | |
81 | EPVzCvsCentrality(0), | |
82 | EPTPCvsCentrality(0), | |
83 | EPVzvsCentrality(0), | |
84 | EPTPCpvsCentrality(0), | |
85 | EPTPCnvsCentrality(0), | |
86 | hEvPlaneTPCvsEvPVz05(0), | |
87 | hEvPlaneTPCvsEvPVz075(0), | |
88 | hEvPlaneTPCvsEvPVz1530(0), | |
89 | hEvPlaneTPCvsEvPVz3050(0), | |
90 | hEvPlaneTPCvsEvPVz2040(0), | |
91 | hEvPlaneTPCvsEvPVz4060(0), | |
92 | hCos2DeltaTPCVzAvsCentrality(0), | |
93 | hCos2DeltaTPCVzCvsCentrality(0), | |
94 | hCos2DeltaVzAVzCvsCentrality(0), | |
95 | hCos2DeltaVzMVzAvsCentrality(0), | |
96 | hCos2DeltaVzMVzCvsCentrality(0), | |
97 | hCos2DeltaVzATPCvsCentrality(0), | |
98 | hCos2DeltaVzCTPCvsCentrality(0), | |
99 | hCos2DeltaVzCVzAvsCentrality(0), | |
100 | hCos2DeltaVzMTPCpvsCentrality(0), | |
101 | hCos2DeltaVzMTPCnvsCentrality(0), | |
102 | hCos2DeltaTPCpTPCnvsCentrality(0), | |
103 | hQVzAQVzCvsCentrality(0), | |
7e6ef27b | 104 | ftree(0), |
105 | tCentrality(0), | |
106 | tpT(0), | |
107 | tMassTOF(0), | |
108 | tuqV0A(0), | |
109 | tuqV0C(0), | |
110 | tCharge(0), | |
111 | tCosdeltaphiTPC(0), | |
112 | tCosdeltaphiV0M(0), | |
113 | tCosdeltaphiV0A(0), | |
114 | tCosdeltaphiV0C(0), | |
115 | timpactXY(0), | |
862ec7a1 | 116 | fESDtrackCuts(0), |
117 | fESDtrackCutsEP(0), | |
118 | fPIDResponse(0) | |
399bcfee | 119 | { |
120 | // Dummy Constructor | |
502416be | 121 | fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts"); |
122 | fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP"); | |
399bcfee | 123 | } |
124 | ||
125 | //________________________________________________________________________ | |
502416be | 126 | AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP(const char *name) |
127 | : AliAnalysisTaskSE(name), | |
ba71c751 | 128 | fisPrimCut(kTRUE), |
502416be | 129 | fptc(1), |
130 | fmaxpull(3), | |
131 | fmaxVz(10), | |
862ec7a1 | 132 | fListHist(0), |
133 | fHistEventMultiplicity(0), | |
134 | fHistTrackMultiplicity(0), | |
135 | fHistTrackMultiplicityCentral(0), | |
136 | fHistTrackMultiplicitySemiCentral(0), | |
137 | fHistTrackMultiplicityMB(0), | |
138 | fhBB(0), | |
139 | fhBBDeu(0), | |
140 | fhPtDeu(0), | |
141 | fhTOF(0), | |
142 | fhMassTOF(0), | |
143 | EPVzAvsCentrality(0), | |
144 | EPVzCvsCentrality(0), | |
145 | EPTPCvsCentrality(0), | |
146 | EPVzvsCentrality(0), | |
147 | EPTPCpvsCentrality(0), | |
148 | EPTPCnvsCentrality(0), | |
149 | hEvPlaneTPCvsEvPVz05(0), | |
150 | hEvPlaneTPCvsEvPVz075(0), | |
151 | hEvPlaneTPCvsEvPVz1530(0), | |
152 | hEvPlaneTPCvsEvPVz3050(0), | |
153 | hEvPlaneTPCvsEvPVz2040(0), | |
154 | hEvPlaneTPCvsEvPVz4060(0), | |
155 | hCos2DeltaTPCVzAvsCentrality(0), | |
156 | hCos2DeltaTPCVzCvsCentrality(0), | |
157 | hCos2DeltaVzAVzCvsCentrality(0), | |
158 | hCos2DeltaVzMVzAvsCentrality(0), | |
159 | hCos2DeltaVzMVzCvsCentrality(0), | |
160 | hCos2DeltaVzATPCvsCentrality(0), | |
161 | hCos2DeltaVzCTPCvsCentrality(0), | |
162 | hCos2DeltaVzCVzAvsCentrality(0), | |
163 | hCos2DeltaVzMTPCpvsCentrality(0), | |
164 | hCos2DeltaVzMTPCnvsCentrality(0), | |
165 | hCos2DeltaTPCpTPCnvsCentrality(0), | |
166 | hQVzAQVzCvsCentrality(0), | |
7e6ef27b | 167 | ftree(0), |
168 | tCentrality(0), | |
169 | tpT(0), | |
170 | tMassTOF(0), | |
171 | tuqV0A(0), | |
172 | tuqV0C(0), | |
173 | tCharge(0), | |
174 | tCosdeltaphiTPC(0), | |
175 | tCosdeltaphiV0M(0), | |
176 | tCosdeltaphiV0A(0), | |
177 | tCosdeltaphiV0C(0), | |
178 | timpactXY(0), | |
862ec7a1 | 179 | fESDtrackCuts(0), |
180 | fESDtrackCutsEP(0), | |
181 | fPIDResponse(0) | |
399bcfee | 182 | { |
183 | // Define input and output slots here | |
184 | // Input slot #0 works with a TChain | |
185 | //DefineInput(0, TChain::Class()); | |
186 | // Output slot #0 writes into a TList container () | |
187 | ||
188 | // | |
189 | // create track cuts | |
190 | // | |
502416be | 191 | fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts"); |
399bcfee | 192 | fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP"); |
193 | // | |
194 | Initialize(); | |
195 | ||
196 | DefineInput(0, TChain::Class()); | |
197 | DefineOutput(1, TList::Class()); | |
7e6ef27b | 198 | DefineOutput(2, TTree::Class()); |
399bcfee | 199 | |
200 | } | |
201 | ||
202 | void AliAnalysisTaskNucleiv2SP::Initialize() | |
203 | { | |
204 | // | |
205 | // updating parameters in case of changes | |
206 | // | |
502416be | 207 | fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(fisPrimCut,kTRUE); |
399bcfee | 208 | fESDtrackCuts->SetMaxDCAToVertexXY(3); |
209 | fESDtrackCuts->SetMaxDCAToVertexZ(2); | |
210 | fESDtrackCuts->SetEtaRange(-0.8,0.8); | |
211 | ||
212 | fESDtrackCutsEP = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); | |
c4fd7e6b | 213 | |
399bcfee | 214 | } |
215 | ||
216 | //________________________________________________________________________ | |
217 | Float_t AliAnalysisTaskNucleiv2SP::GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl){ | |
c4fd7e6b | 218 | |
399bcfee | 219 | // remove autocorrelations |
220 | ||
221 | TArrayF* qx = 0x0; | |
222 | TArrayF* qy = 0x0; | |
223 | TVector2 qcopy; | |
224 | // if(!fEtaGap){ | |
225 | qx = pl->GetQContributionXArray(); | |
226 | qy = pl->GetQContributionYArray(); | |
227 | qcopy = *q; | |
228 | ||
229 | TVector2 q0; | |
230 | if((track0->GetID()) < qx->fN){ | |
231 | q0.Set(qx->At(track0->GetID()),qy->At(track0->GetID())); | |
232 | } | |
233 | ||
234 | qcopy = qcopy - q0; | |
235 | ||
236 | return qcopy.Phi()/2.; | |
237 | ||
238 | } | |
239 | //________________________________________________________________________ | |
240 | Float_t AliAnalysisTaskNucleiv2SP::GetPhi0Pi(Float_t phi){ | |
241 | // Sets the phi angle in the range 0-pi | |
242 | Float_t result=phi; | |
243 | while(result<0){ | |
244 | result=result+TMath::Pi(); | |
245 | } | |
246 | while(result>TMath::Pi()){ | |
247 | result=result-TMath::Pi(); | |
248 | } | |
249 | return result; | |
250 | } | |
251 | ||
252 | //==================DEFINITION OF OUTPUT OBJECTS============================== | |
253 | ||
254 | void AliAnalysisTaskNucleiv2SP::UserCreateOutputObjects() | |
255 | { | |
399bcfee | 256 | //------------------------------------------------------- |
257 | fListHist = new TList(); | |
258 | fListHist->SetOwner(); // IMPORTANT! | |
259 | ||
260 | if(! fHistEventMultiplicity ){ | |
261 | ||
262 | fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 12 , -0.5,11.5); | |
263 | ||
264 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events"); | |
265 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV"); | |
266 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm"); | |
267 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events"); | |
268 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"Semi-Central Events"); | |
269 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events"); | |
270 | //from HF | |
271 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"nEventsAnal"); | |
272 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"nEvSelected"); | |
273 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"nCandidatesSelected"); | |
274 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"out of pt bounds"); | |
275 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"mismatch lab"); | |
276 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"non valid TPC EP"); | |
277 | fListHist->Add(fHistEventMultiplicity); | |
278 | } | |
279 | ||
280 | if(! fHistTrackMultiplicity ){ | |
7e6ef27b | 281 | fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5); |
399bcfee | 282 | fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks"); |
283 | fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile"); | |
284 | fListHist->Add(fHistTrackMultiplicity); | |
285 | } | |
286 | ||
287 | if(! fHistTrackMultiplicityCentral ){ | |
7e6ef27b | 288 | fHistTrackMultiplicityCentral = new TH2F( "fHistTrackMultiplicityCentral", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5); |
399bcfee | 289 | fHistTrackMultiplicityCentral->GetXaxis()->SetTitle("Number of tracks"); |
290 | fHistTrackMultiplicityCentral->GetYaxis()->SetTitle("Percentile"); | |
291 | fListHist->Add(fHistTrackMultiplicityCentral); | |
292 | } | |
293 | if(! fHistTrackMultiplicitySemiCentral ){ | |
7e6ef27b | 294 | fHistTrackMultiplicitySemiCentral = new TH2F( "fHistTrackMultiplicitySemiCentral", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5); |
399bcfee | 295 | fHistTrackMultiplicitySemiCentral->GetXaxis()->SetTitle("Number of tracks"); |
296 | fHistTrackMultiplicitySemiCentral->GetYaxis()->SetTitle("Percentile"); | |
297 | fListHist->Add(fHistTrackMultiplicitySemiCentral); | |
298 | } | |
299 | if(! fHistTrackMultiplicityMB ){ | |
7e6ef27b | 300 | fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5); |
399bcfee | 301 | fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks"); |
302 | fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile"); | |
303 | fListHist->Add(fHistTrackMultiplicityMB); | |
304 | } | |
305 | ||
306 | if(! fhBB ){ | |
7e6ef27b | 307 | fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 240,-6,6,250,0,1000); |
399bcfee | 308 | fListHist->Add(fhBB); |
309 | } | |
310 | ||
311 | if(! fhBBDeu ){ | |
7e6ef27b | 312 | fhBBDeu = new TH2F( "fhBBDeu" , "BetheBlochTPC - Deuteron" , 240,-6,6,250,0,1000); |
399bcfee | 313 | fListHist->Add(fhBBDeu); |
314 | } | |
315 | ||
316 | if(!fhPtDeu ){ | |
317 | fhPtDeu = new TH2F( "fhPtDeu" , "pt corretto vs pt track - Deuteron" , 120,0,6,120,0,6); | |
318 | fListHist->Add(fhPtDeu); | |
319 | } | |
320 | ||
321 | if(! fhTOF ){ | |
7e6ef27b | 322 | fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 240,-6,6,500,0,1.2); |
399bcfee | 323 | fListHist->Add(fhTOF); |
324 | } | |
325 | if(! fhMassTOF){ | |
326 | fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,-5 ,5); | |
327 | fListHist->Add(fhMassTOF); | |
328 | } | |
329 | ||
330 | EPVzAvsCentrality = new TH2D("EPVzAvsCentrality" , "EPVzAvsCentrality" , 80, -2, 2,105,-0.5,105.5); | |
331 | EPVzCvsCentrality = new TH2D("EPVzCvsCentrality" , "EPVzCvsCentrality" , 80, -2, 2,105,-0.5,105.5); | |
332 | EPTPCvsCentrality = new TH2D("EPTPCvsCentrality" , "EPTPCvsCentrality" , 80, -2, 2,105,-0.5,105.5); | |
333 | EPVzvsCentrality = new TH2D("EPVzvsCentrality" , "EPVzvsCentrality" , 80, -2, 2,105,-0.5,105.5); | |
334 | EPTPCpvsCentrality = new TH2D("EPTPCpvsCentrality", "EPTPCpvsCentrality", 80, -2, 2,105,-0.5,105.5); | |
335 | EPTPCnvsCentrality = new TH2D("EPTPCnvsCentrality", "EPTPCnvsCentrality", 80, -2, 2,105,-0.5,105.5); | |
336 | ||
337 | fListHist->Add(EPVzAvsCentrality); | |
338 | fListHist->Add(EPVzCvsCentrality); | |
339 | fListHist->Add(EPTPCvsCentrality); | |
340 | fListHist->Add(EPVzvsCentrality); | |
341 | fListHist->Add(EPTPCpvsCentrality); | |
342 | fListHist->Add(EPTPCnvsCentrality); | |
343 | ||
344 | hEvPlaneTPCvsEvPVz05 = new TH2F("hEvPlaneTPCvsEvPVz05" ,"hEvPlaneTPCvsEvPVz05" ,100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); | |
345 | hEvPlaneTPCvsEvPVz075 = new TH2F("hEvPlaneTPCvsEvPVz075" ,"hEvPlaneTPCvsEvPVz075" ,100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); | |
346 | hEvPlaneTPCvsEvPVz1530 = new TH2F("hEvPlaneTPCvsEvPVz1530","hEvPlaneTPCvsEvPVz1530",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); | |
347 | hEvPlaneTPCvsEvPVz3050 = new TH2F("hEvPlaneTPCvsEvPVz3050","hEvPlaneTPCvsEvPVz3050",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); | |
348 | hEvPlaneTPCvsEvPVz2040 = new TH2F("hEvPlaneTPCvsEvPVz2040","hEvPlaneTPCvsEvPVz2040",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); | |
349 | hEvPlaneTPCvsEvPVz4060 = new TH2F("hEvPlaneTPCvsEvPVz4060","hEvPlaneTPCvsEvPVz4060",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi()); | |
350 | ||
351 | fListHist->Add(hEvPlaneTPCvsEvPVz05); | |
352 | fListHist->Add(hEvPlaneTPCvsEvPVz075); | |
353 | fListHist->Add(hEvPlaneTPCvsEvPVz1530); | |
354 | fListHist->Add(hEvPlaneTPCvsEvPVz3050); | |
355 | fListHist->Add(hEvPlaneTPCvsEvPVz2040); | |
356 | fListHist->Add(hEvPlaneTPCvsEvPVz4060); | |
357 | ||
862ec7a1 | 358 | hCos2DeltaTPCVzAvsCentrality = new TH2F("hCos2DeltaTPCVzAvsCentrality" ,"hCos2DeltaTPCVzAvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); |
359 | hCos2DeltaTPCVzCvsCentrality = new TH2F("hCos2DeltaTPCVzCvsCentrality" ,"hCos2DeltaTPCVzCvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
360 | hCos2DeltaVzAVzCvsCentrality = new TH2F("hCos2DeltaVzAVzCvsCentrality" ,"hCos2DeltaVzAVzCvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
361 | hCos2DeltaVzMVzAvsCentrality = new TH2F("hCos2DeltaVzMVzAvsCentrality" ,"hCos2DeltaVzMVzAvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
362 | hCos2DeltaVzMVzCvsCentrality = new TH2F("hCos2DeltaVzMVzCvsCentrality" ,"hCos2DeltaVzMVzCvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
363 | hCos2DeltaVzATPCvsCentrality = new TH2F("hCos2DeltaVzATPCvsCentrality" ,"hCos2DeltaVzATPCvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
364 | hCos2DeltaVzCTPCvsCentrality = new TH2F("hCos2DeltaVzCTPCvsCentrality" ,"hCos2DeltaVzCTPCvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
365 | hCos2DeltaVzCVzAvsCentrality = new TH2F("hCos2DeltaVzCVzAvsCentrality" ,"hCos2DeltaVzCVzAvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
366 | hCos2DeltaVzMTPCpvsCentrality = new TH2F("hCos2DeltaVzMTPCpvsCentrality" ,"hCos2DeltaVzMTPCpvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
367 | hCos2DeltaVzMTPCnvsCentrality = new TH2F("hCos2DeltaVzMTPCnvsCentrality" ,"hCos2DeltaVzMTPCnvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5); | |
368 | hCos2DeltaTPCpTPCnvsCentrality = new TH2F("hCos2DeltaTPCpTPCnvsCentrality","hCos2DeltaTPCpTPCnvsCentrality",100,-1.1,1.1,105,-0.5,105.5); | |
399bcfee | 369 | |
370 | fListHist->Add(hCos2DeltaTPCVzAvsCentrality); | |
371 | fListHist->Add(hCos2DeltaTPCVzCvsCentrality); | |
372 | fListHist->Add(hCos2DeltaVzAVzCvsCentrality); | |
373 | fListHist->Add(hCos2DeltaVzMVzAvsCentrality); | |
374 | fListHist->Add(hCos2DeltaVzMVzCvsCentrality); | |
375 | fListHist->Add(hCos2DeltaVzATPCvsCentrality); | |
376 | fListHist->Add(hCos2DeltaVzCTPCvsCentrality); | |
377 | fListHist->Add(hCos2DeltaVzCVzAvsCentrality); | |
862ec7a1 | 378 | fListHist->Add(hCos2DeltaVzMTPCpvsCentrality); |
379 | fListHist->Add(hCos2DeltaVzMTPCnvsCentrality); | |
380 | fListHist->Add(hCos2DeltaTPCpTPCnvsCentrality); | |
399bcfee | 381 | |
382 | ||
383 | hQVzAQVzCvsCentrality = new TH2F("hQVzAQVzCvsCentrality","hQVzAQVzCvsCentrality",1000,-5,5,105,-0.5,105.5); | |
384 | fListHist->Add(hQVzAQVzCvsCentrality); | |
399bcfee | 385 | |
7e6ef27b | 386 | |
387 | if(!ftree){ | |
388 | ||
389 | ftree = new TTree("ftree","ftree"); | |
390 | ||
391 | ftree->Branch("tCentrality" ,&tCentrality ,"tCentrality/D" ); | |
392 | ftree->Branch("tpT" ,&tpT ,"tpT/D" ); | |
393 | ftree->Branch("tMassTOF" ,&tMassTOF ,"tMassTOF/D" ); | |
394 | ftree->Branch("tuqV0A" ,&tuqV0A ,"tuqV0A/D" ); | |
395 | ftree->Branch("tuqV0C" ,&tuqV0C ,"tuqV0C/D" ); | |
396 | ftree->Branch("tCharge" ,&tCharge ,"tCharge/D" ); | |
397 | ftree->Branch("tCosdeltaphiTPC" ,&tCosdeltaphiTPC ,"tCosdeltaphiTPC/D"); | |
398 | ftree->Branch("tCosdeltaphiV0M" ,&tCosdeltaphiV0M ,"tCosdeltaphiV0M/D"); | |
399 | ftree->Branch("tCosdeltaphiV0A" ,&tCosdeltaphiV0A ,"tCosdeltaphiV0A/D"); | |
400 | ftree->Branch("tCosdeltaphiV0C" ,&tCosdeltaphiV0C ,"tCosdeltaphiV0C/D"); | |
401 | ftree->Branch("timpactXY" ,&timpactXY ,"timpactXY/D" ); | |
402 | ||
403 | ||
404 | } | |
405 | ||
399bcfee | 406 | PostData(1, fListHist); |
7e6ef27b | 407 | PostData(2, ftree); |
399bcfee | 408 | }// end UserCreateOutputObjects |
409 | ||
410 | ||
411 | //====================== USER EXEC ======================== | |
412 | ||
413 | void AliAnalysisTaskNucleiv2SP::UserExec(Option_t *) | |
414 | { | |
415 | // Main loop | |
416 | // Called for EACH event | |
417 | // cout<<"AliAnalysisTaskNucleiv2SP Starting UserExec"<<endl; | |
418 | ||
419 | Info("AliAnalysisTaskNucleiv2SP","Starting UserExec"); | |
420 | ||
421 | AliVEvent *event = InputEvent(); | |
422 | if (!event) { Printf("ERROR: Could not retrieve event"); return; } | |
423 | ||
424 | ||
425 | AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event); | |
426 | if (!lESDevent) { | |
427 | AliError("Cannot get the ESD event"); | |
428 | return; | |
429 | } | |
430 | ||
431 | fHistEventMultiplicity->Fill(1); | |
432 | fHistEventMultiplicity->Fill(7); | |
433 | ||
434 | //_____________________________________________________ | |
435 | // Centrality | |
436 | ||
437 | AliCentrality *centrality = lESDevent->GetCentrality(); | |
438 | Float_t percentile=centrality->GetCentralityPercentile("V0M"); | |
439 | ||
440 | Int_t TrackNumber = lESDevent->GetNumberOfTracks(); | |
441 | fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento | |
442 | ||
443 | //______________________________________________________ | |
444 | // PID | |
445 | ||
446 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
447 | AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); | |
448 | fPIDResponse=inputHandler->GetPIDResponse(); | |
449 | ||
450 | //================================================================= | |
451 | ||
452 | Float_t impactXY=-999., impactZ=-999.; | |
453 | Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.; | |
454 | ||
455 | ULong_t status=0; | |
456 | Bool_t isTPC=kFALSE; | |
457 | ||
7e6ef27b | 458 | Double_t pmax = 10; |
459 | ||
399bcfee | 460 | // Primary vertex cut |
461 | ||
462 | const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks(); | |
463 | ||
464 | if(vtx->GetNContributors()<1) { | |
465 | ||
466 | // SPD vertex cut | |
467 | vtx = lESDevent->GetPrimaryVertexSPD(); | |
468 | ||
469 | if(vtx->GetNContributors()<1) { | |
470 | Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event"); | |
471 | return; // NO GOOD VERTEX, SKIP EVENT | |
472 | } | |
473 | } | |
474 | ||
475 | fHistEventMultiplicity->Fill(2); // analyzed events with PV | |
476 | ||
502416be | 477 | if(TMath::Abs(vtx->GetZv())>fmaxVz) return; |
399bcfee | 478 | fHistEventMultiplicity->Fill(3); |
479 | ||
480 | Bool_t isSelectedCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral); | |
481 | Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral); | |
482 | Bool_t isSelectedMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB); | |
483 | ||
484 | fHistTrackMultiplicity->Fill(TrackNumber,percentile); | |
485 | ||
486 | Int_t eventtype = -999; | |
487 | ||
488 | // cout<<"ET 1: "<<eventtype<<endl; | |
489 | ||
490 | if(isSelectedCentral){ | |
491 | fHistEventMultiplicity->Fill(4); | |
492 | fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile); | |
493 | eventtype =1; | |
494 | } | |
495 | ||
496 | if(isSelectedSemiCentral){ | |
497 | fHistEventMultiplicity->Fill(5); | |
498 | fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile); | |
499 | eventtype =2; | |
500 | } | |
501 | ||
502 | if(isSelectedMB){ | |
503 | if(percentile<0)return; | |
504 | if(percentile>=80)return; | |
505 | fHistEventMultiplicity->Fill(6); | |
506 | fHistTrackMultiplicityMB->Fill(TrackNumber,percentile); | |
507 | eventtype =3; | |
508 | } | |
509 | ||
510 | // cout<<"ET 2: "<<eventtype<<endl; | |
511 | ||
512 | if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return; | |
513 | ||
399bcfee | 514 | AliEventplane *pl=lESDevent->GetEventplane(); |
515 | ||
516 | ||
517 | if(!pl ){ | |
518 | AliError("AliAnalysisTaskSENucleiv2SP::UserExec:no eventplane! v2 analysis without eventplane not possible!\n"); | |
519 | fHistEventMultiplicity->Fill(12); | |
520 | } | |
521 | ||
522 | //Event plane from FLOW | |
523 | ||
524 | Double_t qxEPa = 0, qyEPa = 0; | |
525 | Double_t qxEPc = 0, qyEPc = 0; | |
502416be | 526 | Double_t qxEP = 0 , qyEP = 0; |
399bcfee | 527 | |
528 | Double_t evPlAngV0A = pl->CalculateVZEROEventPlane(lESDevent, 8, 2, qxEPa, qyEPa); | |
529 | Double_t evPlAngV0C = pl->CalculateVZEROEventPlane(lESDevent, 9, 2, qxEPc, qyEPc); | |
530 | Double_t evPlAngV0 = pl->CalculateVZEROEventPlane(lESDevent,10, 2, qxEP, qyEP); | |
531 | ||
532 | Double_t Qx2 = 0, Qy2 = 0; | |
533 | Double_t Qx2p = 0, Qy2p = 0; | |
534 | Double_t Qx2n = 0, Qy2n = 0; | |
535 | ||
399bcfee | 536 | for (Int_t iT = 0; iT < TrackNumber; iT++){ |
502416be | 537 | |
399bcfee | 538 | AliESDtrack* track = lESDevent->GetTrack(iT); |
539 | ||
540 | if (!track) | |
541 | continue; | |
542 | ||
543 | if ((TMath::Abs(track->Eta()) > 0.8) || (track->Pt() < 0.2) || (track->GetTPCNcls() < 70) || (track->Pt() >= 20.0)) | |
544 | continue; | |
399bcfee | 545 | if(!fESDtrackCutsEP->AcceptTrack(track)) |
546 | continue; | |
399bcfee | 547 | if(track->Eta()>0 && track->Eta()<0.8){ |
548 | ||
549 | Qx2p += TMath::Cos(2*track->Phi()); | |
550 | Qy2p += TMath::Sin(2*track->Phi()); | |
551 | } | |
552 | if(track->Eta()<0 && track->Eta()> -0.8){ | |
553 | ||
554 | Qx2n += TMath::Cos(2*track->Phi()); | |
555 | Qy2n += TMath::Sin(2*track->Phi()); | |
556 | } | |
862ec7a1 | 557 | |
558 | if(track->Eta()>0 && track->Eta()<0.8){ //half TPC | |
559 | Qx2 += TMath::Cos(2*track->Phi()); | |
560 | Qy2 += TMath::Sin(2*track->Phi()); | |
561 | } | |
399bcfee | 562 | } |
563 | ||
502416be | 564 | Double_t evPlAngTPC = TMath::ATan2(Qy2, Qx2) /2.; |
399bcfee | 565 | Double_t evPlAngTPCn = TMath::ATan2(Qy2n, Qx2n)/2.; |
566 | Double_t evPlAngTPCp = TMath::ATan2(Qy2p, Qx2p)/2.; | |
567 | ||
568 | EPVzAvsCentrality ->Fill(evPlAngV0A , percentile); | |
569 | EPVzCvsCentrality ->Fill(evPlAngV0C , percentile); | |
570 | EPVzvsCentrality ->Fill(evPlAngV0 , percentile); | |
571 | EPTPCvsCentrality ->Fill(evPlAngTPC , percentile); | |
572 | EPTPCpvsCentrality ->Fill(evPlAngTPCp , percentile); | |
573 | EPTPCnvsCentrality ->Fill(evPlAngTPCn , percentile); | |
574 | ||
502416be | 575 | if(percentile>=0 && percentile<=5) |
399bcfee | 576 | hEvPlaneTPCvsEvPVz05 ->Fill(evPlAngTPC,evPlAngV0); |
399bcfee | 577 | if(percentile>=0 && percentile<=7.5) |
578 | hEvPlaneTPCvsEvPVz075 ->Fill(evPlAngTPC,evPlAngV0); | |
579 | if(percentile>=15 && percentile<=30) | |
580 | hEvPlaneTPCvsEvPVz1530->Fill(evPlAngTPC,evPlAngV0); | |
581 | if(percentile>=30 && percentile<50) | |
582 | hEvPlaneTPCvsEvPVz3050->Fill(evPlAngTPC,evPlAngV0); | |
583 | if(percentile>=20 && percentile<=40) | |
584 | hEvPlaneTPCvsEvPVz2040->Fill(evPlAngTPC,evPlAngV0); | |
585 | if(percentile>=40 && percentile<=60) | |
586 | hEvPlaneTPCvsEvPVz4060->Fill(evPlAngTPC,evPlAngV0); | |
587 | ||
588 | // For TPC, V0M, V0c and V0A resolution | |
589 | ||
502416be | 590 | hCos2DeltaTPCVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngTPC - evPlAngV0A)) , percentile); |
591 | hCos2DeltaTPCVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngTPC - evPlAngV0C)) , percentile); | |
592 | hCos2DeltaVzAVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0A - evPlAngV0C)) , percentile); | |
593 | hCos2DeltaVzMVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngV0A)) , percentile); | |
594 | hCos2DeltaVzMVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngV0C)) , percentile); | |
595 | hCos2DeltaVzATPCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0A - evPlAngTPC)) , percentile); | |
596 | hCos2DeltaVzCTPCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0C - evPlAngTPC)) , percentile); | |
597 | hCos2DeltaVzCVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0C - evPlAngV0A)) , percentile); | |
598 | hCos2DeltaVzMTPCpvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngTPCp)), percentile); | |
599 | hCos2DeltaVzMTPCnvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngTPCn)), percentile); | |
600 | hCos2DeltaTPCpTPCnvsCentrality->Fill(TMath::Cos(2.*(evPlAngTPCp- evPlAngTPCn)), percentile); | |
399bcfee | 601 | |
602 | //Scalar Product | |
603 | ||
604 | Double_t QV0AQV0C = qxEPa * qxEPc + qyEPa*qyEPc; | |
605 | hQVzAQVzCvsCentrality->Fill(QV0AQV0C,percentile); | |
606 | ||
607 | //==================================================================================================================== | |
608 | ||
609 | // To remove auto-correlation | |
610 | TVector2 *q = 0x0; | |
611 | q = pl->GetQVector(); | |
612 | ||
613 | Int_t isTOF=0; | |
862ec7a1 | 614 | // Int_t isoutTPC=0; |
c4fd7e6b | 615 | Float_t ptcExp = -999; |
399bcfee | 616 | Double_t pullTPC = -999; |
617 | Float_t deltaphiTPC = -3; | |
618 | Float_t deltaphiV0 = -3; | |
619 | Float_t deltaphiV0A = -3; | |
620 | Float_t deltaphiV0C = -3; | |
621 | ||
622 | Float_t uqV0A = -999; | |
623 | Float_t uqV0C = -999; | |
624 | ||
625 | for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks | |
626 | ||
627 | AliESDtrack *esdtrack=lESDevent->GetTrack(j); | |
628 | if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue; | |
629 | ||
630 | status = (ULong_t)esdtrack->GetStatus(); | |
631 | ||
632 | isTPC = (((status) & AliESDtrack::kTPCin) != 0); | |
633 | isTOF = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0)); | |
862ec7a1 | 634 | //isoutTPC = (((status) & AliESDtrack::kTPCout) != 0); |
399bcfee | 635 | |
636 | TPCSignal=esdtrack->GetTPCsignal(); | |
637 | ||
638 | if (TPCSignal<10)continue; | |
639 | if (TPCSignal>1000)continue; | |
640 | if (!isTPC)continue; | |
7e6ef27b | 641 | |
399bcfee | 642 | if(!esdtrack->GetTPCInnerParam())continue; |
643 | AliExternalTrackParam trackIn(*esdtrack->GetInnerParam()); | |
644 | pinTPC= trackIn.GetP(); | |
7e6ef27b | 645 | if(pinTPC<0.2)continue; |
399bcfee | 646 | fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal); |
647 | ||
648 | if(isTOF){ | |
649 | if(!esdtrack->GetOuterParam())continue; | |
650 | AliExternalTrackParam trackOut(*esdtrack->GetOuterParam()); | |
651 | poutTPC = trackOut.GetP(); | |
652 | fhTOF->Fill(poutTPC*esdtrack->GetSign(),(esdtrack->GetIntegratedLength()/esdtrack->GetTOFsignal())/2.99792458e-2); | |
399bcfee | 653 | } |
654 | ||
655 | esdtrack->GetImpactParameters(impactXY, impactZ); | |
656 | ||
c4fd7e6b | 657 | ptcExp = -999; |
658 | if(fptc==1) | |
659 | ptcExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768); | |
660 | if(fptc==2) | |
661 | ptcExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*3),1.45802,27.4992,4.00313e-15,2.48485,8.31768); | |
662 | if(fptc==3) | |
502416be | 663 | ptcExp = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768); |
399bcfee | 664 | |
c4fd7e6b | 665 | pullTPC = (TPCSignal - ptcExp)/(0.07*ptcExp); |
666 | ||
399bcfee | 667 | Double_t p = esdtrack->P(); |
668 | Double_t tof = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p); | |
669 | Double_t tPhi = esdtrack->Phi(); | |
670 | ||
7e6ef27b | 671 | Float_t beta = 0; |
672 | Float_t gamma = 0; | |
673 | Float_t mass = -999; | |
502416be | 674 | Double_t pt = esdtrack->Pt(); |
399bcfee | 675 | |
7e6ef27b | 676 | if(TMath::Abs(pinTPC) < pmax && TMath::Abs(pullTPC) < fmaxpull){ |
502416be | 677 | |
399bcfee | 678 | fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal); |
7e6ef27b | 679 | |
502416be | 680 | if(tof > 0 && pt > 1.){ |
399bcfee | 681 | beta = esdtrack->GetIntegratedLength()/(tof * 2.99792457999999984e-02); |
682 | gamma = 1/TMath::Sqrt(1 - beta*beta); | |
ba71c751 | 683 | mass = poutTPC/TMath::Sqrt(gamma*gamma - 1); |
684 | fhMassTOF->Fill(mass); | |
399bcfee | 685 | } |
ba71c751 | 686 | |
399bcfee | 687 | // Event Plane |
688 | //Remove AutoCorrelation | |
689 | evPlAngTPC = GetEventPlaneForCandidate(esdtrack,q,pl); | |
690 | ||
862ec7a1 | 691 | deltaphiTPC=TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngTPC)); |
692 | deltaphiV0 =TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngV0 )); | |
693 | deltaphiV0A=TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngV0A)); | |
694 | deltaphiV0C=TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngV0C)); | |
399bcfee | 695 | |
696 | // SP | |
697 | ||
698 | uqV0A = TMath::Cos(2*tPhi)*qxEPa+TMath::Sin(2*tPhi)*qyEPa; | |
699 | uqV0C = TMath::Cos(2*tPhi)*qxEPc+TMath::Sin(2*tPhi)*qyEPc; | |
7e6ef27b | 700 | |
701 | tCentrality = percentile; | |
702 | tpT = pt; | |
703 | tMassTOF = mass; | |
704 | tuqV0A = uqV0A; | |
705 | tuqV0C = uqV0C; | |
706 | tCharge = esdtrack->GetSign(); | |
707 | tCosdeltaphiTPC = deltaphiTPC; | |
708 | tCosdeltaphiV0M = deltaphiV0; | |
709 | tCosdeltaphiV0A = deltaphiV0A; | |
710 | tCosdeltaphiV0C = deltaphiV0C; | |
711 | timpactXY = impactXY; | |
399bcfee | 712 | |
7e6ef27b | 713 | ftree->Fill(); |
399bcfee | 714 | } |
715 | } //track | |
716 | ||
399bcfee | 717 | PostData(1, fListHist); |
7e6ef27b | 718 | PostData(2, ftree); |
399bcfee | 719 | } //end userexec |
720 | ||
721 | ||
722 | //________________________________________________________________________ | |
723 | ||
724 | void AliAnalysisTaskNucleiv2SP::Terminate(Option_t *) | |
725 | { | |
726 | // Draw result to the screen | |
727 | // Called once at the end of the query | |
728 | } | |
729 |