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