]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.cxx
Improved messages and protections
[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(),
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 126AliAnalysisTaskNucleiv2SP::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
202void 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//________________________________________________________________________
217Float_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//________________________________________________________________________
240Float_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
254void 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
413void 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
724void AliAnalysisTaskNucleiv2SP::Terminate(Option_t *)
725{
726 // Draw result to the screen
727 // Called once at the end of the query
728}
729