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