1 /**************************************************************************
2 * Contributors are not mentioned at all. *
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 //-----------------------------------------------------------------
20 #include "AliAnalysisManager.h"
21 #include <AliMCEventHandler.h>
22 #include <AliMCEvent.h>
42 #include "Riostream.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"
57 ClassImp(AliAnalysisTaskNucleiv2SP)
62 //________________________________________________________________________
63 AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP()
64 : AliAnalysisTaskSE(),
68 fHistEventMultiplicity(0),
69 fHistTrackMultiplicity(0),
70 fHistTrackMultiplicityCentral(0),
71 fHistTrackMultiplicitySemiCentral(0),
72 fHistTrackMultiplicityMB(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),
122 fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
123 fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP");
125 cout<<"Dummy constructor"<<endl;
128 //________________________________________________________________________
129 AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP(const char *name)
130 : AliAnalysisTaskSE(name),
134 fHistEventMultiplicity(0),
135 fHistTrackMultiplicity(0),
136 fHistTrackMultiplicityCentral(0),
137 fHistTrackMultiplicitySemiCentral(0),
138 fHistTrackMultiplicityMB(0),
143 EPVzAvsCentrality(0),
144 EPVzCvsCentrality(0),
145 EPTPCvsCentrality(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),
187 // Define input and output slots here
188 // Input slot #0 works with a TChain
189 //DefineInput(0, TChain::Class());
190 // Output slot #0 writes into a TList container ()
195 fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
196 fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP");
198 cout<<"Real constructor"<<endl;
201 DefineInput(0, TChain::Class());
202 DefineOutput(1, TList::Class());
203 DefineOutput(2, TTree::Class());
207 void AliAnalysisTaskNucleiv2SP::Initialize()
210 // updating parameters in case of changes
212 fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(fisPrimCut,kTRUE);
213 fESDtrackCuts->SetMaxDCAToVertexXY(3);
214 fESDtrackCuts->SetMaxDCAToVertexZ(2);
215 fESDtrackCuts->SetEtaRange(-0.8,0.8);
217 fESDtrackCutsEP = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
221 //________________________________________________________________________
222 Float_t AliAnalysisTaskNucleiv2SP::GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl){
224 // remove autocorrelations
230 qx = pl->GetQContributionXArray();
231 qy = pl->GetQContributionYArray();
235 if((track0->GetID()) < qx->fN){
236 q0.Set(qx->At(track0->GetID()),qy->At(track0->GetID()));
241 return qcopy.Phi()/2.;
244 //________________________________________________________________________
245 Float_t AliAnalysisTaskNucleiv2SP::GetPhi0Pi(Float_t phi){
246 // Sets the phi angle in the range 0-pi
249 result=result+TMath::Pi();
251 while(result>TMath::Pi()){
252 result=result-TMath::Pi();
257 //==================DEFINITION OF OUTPUT OBJECTS==============================
259 void AliAnalysisTaskNucleiv2SP::UserCreateOutputObjects()
261 //-------------------------------------------------------
262 fListHist = new TList();
263 fListHist->SetOwner(); // IMPORTANT!
265 if(! fHistEventMultiplicity ){
267 fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 12 , -0.5,11.5);
269 fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events");
270 fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV");
271 fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm");
272 fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events");
273 fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"Semi-Central Events");
274 fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events");
276 fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"nEventsAnal");
277 fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"nEvSelected");
278 fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"nCandidatesSelected");
279 fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"out of pt bounds");
280 fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"mismatch lab");
281 fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"non valid TPC EP");
282 fListHist->Add(fHistEventMultiplicity);
285 if(! fHistTrackMultiplicity ){
286 fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5);
287 fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
288 fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
289 fListHist->Add(fHistTrackMultiplicity);
292 if(! fHistTrackMultiplicityCentral ){
293 fHistTrackMultiplicityCentral = new TH2F( "fHistTrackMultiplicityCentral", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5);
294 fHistTrackMultiplicityCentral->GetXaxis()->SetTitle("Number of tracks");
295 fHistTrackMultiplicityCentral->GetYaxis()->SetTitle("Percentile");
296 fListHist->Add(fHistTrackMultiplicityCentral);
298 if(! fHistTrackMultiplicitySemiCentral ){
299 fHistTrackMultiplicitySemiCentral = new TH2F( "fHistTrackMultiplicitySemiCentral", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5);
300 fHistTrackMultiplicitySemiCentral->GetXaxis()->SetTitle("Number of tracks");
301 fHistTrackMultiplicitySemiCentral->GetYaxis()->SetTitle("Percentile");
302 fListHist->Add(fHistTrackMultiplicitySemiCentral);
304 if(! fHistTrackMultiplicityMB ){
305 fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB", "Nb of Tracks MB Events |Vz| < 10", 250,0, 25000,105,-0.5,104.5);
306 fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
307 fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
308 fListHist->Add(fHistTrackMultiplicityMB);
312 fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 240,-6,6,250,0,1000);
313 fListHist->Add(fhBB);
317 fhBBDeu = new TH2F( "fhBBDeu" , "BetheBlochTPC - Deuteron" , 240,-6,6,250,0,1000);
318 fListHist->Add(fhBBDeu);
322 fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 240,-6,6,500,0,1.2);
323 fListHist->Add(fhTOF);
326 fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 100,0 ,10);
327 fListHist->Add(fhMassTOF);
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);
337 fListHist->Add(EPVzAvsCentrality);
338 fListHist->Add(EPVzCvsCentrality);
339 fListHist->Add(EPTPCvsCentrality);
340 fListHist->Add(EPVzvsCentrality);
341 fListHist->Add(EPTPCpvsCentrality);
342 fListHist->Add(EPTPCnvsCentrality);
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());
351 fListHist->Add(hEvPlaneTPCvsEvPVz05);
352 fListHist->Add(hEvPlaneTPCvsEvPVz075);
353 fListHist->Add(hEvPlaneTPCvsEvPVz1530);
354 fListHist->Add(hEvPlaneTPCvsEvPVz3050);
355 fListHist->Add(hEvPlaneTPCvsEvPVz2040);
356 fListHist->Add(hEvPlaneTPCvsEvPVz4060);
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);
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);
378 fListHist->Add(hCos2DeltaVzMTPCpvsCentrality);
379 fListHist->Add(hCos2DeltaVzMTPCnvsCentrality);
380 fListHist->Add(hCos2DeltaTPCpTPCnvsCentrality);
383 hQVzAQVzCvsCentrality = new TH2F("hQVzAQVzCvsCentrality","hQVzAQVzCvsCentrality",1000,-5,5,105,-0.5,105.5);
384 fListHist->Add(hQVzAQVzCvsCentrality);
389 ftree = new TTree("ftree","ftree");
391 ftree->Branch("tCentrality" ,&tCentrality ,"tCentrality/D" );
392 ftree->Branch("tType" ,&tType ,"tType/D" );
393 ftree->Branch("tHasTOF" ,&tHasTOF ,"tHasTOF/D" );
394 ftree->Branch("tpT" ,&tpT ,"tpT/D" );
395 ftree->Branch("tMassTOF" ,&tMassTOF ,"tMassTOF/D" );
396 ftree->Branch("tuqV0A" ,&tuqV0A ,"tuqV0A/D" );
397 ftree->Branch("tuqV0C" ,&tuqV0C ,"tuqV0C/D" );
398 ftree->Branch("tCharge" ,&tCharge ,"tCharge/D" );
399 ftree->Branch("tCosdeltaphiTPC" ,&tCosdeltaphiTPC ,"tCosdeltaphiTPC/D");
400 ftree->Branch("tCosdeltaphiV0M" ,&tCosdeltaphiV0M ,"tCosdeltaphiV0M/D");
401 ftree->Branch("tCosdeltaphiV0A" ,&tCosdeltaphiV0A ,"tCosdeltaphiV0A/D");
402 ftree->Branch("tCosdeltaphiV0C" ,&tCosdeltaphiV0C ,"tCosdeltaphiV0C/D");
403 ftree->Branch("timpactXY" ,&timpactXY ,"timpactXY/D" );
404 ftree->Branch("timpactZ" ,&timpactZ ,"timpactZ/D" );
405 ftree->Branch("tpull" ,&tpull ,"tpull/D" );
410 PostData(1, fListHist);
412 }// end UserCreateOutputObjects
415 //====================== USER EXEC ========================
417 void AliAnalysisTaskNucleiv2SP::UserExec(Option_t *)
420 // Called for EACH event
421 // cout<<"AliAnalysisTaskNucleiv2SP Starting UserExec"<<endl;
423 Info("AliAnalysisTaskNucleiv2SP","Starting UserExec");
425 AliVEvent *event = InputEvent();
426 if (!event) { Printf("ERROR: Could not retrieve event"); return; }
429 AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
431 AliError("Cannot get the ESD event");
435 fHistEventMultiplicity->Fill(1);
436 fHistEventMultiplicity->Fill(7);
438 //_____________________________________________________
441 AliCentrality *centrality = lESDevent->GetCentrality();
442 Float_t percentile=centrality->GetCentralityPercentile("V0M");
444 Int_t TrackNumber = lESDevent->GetNumberOfTracks();
445 fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
447 //______________________________________________________
450 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
451 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
452 fPIDResponse=inputHandler->GetPIDResponse();
454 //=================================================================
456 Float_t impactXY=-999., impactZ=-999.;
457 Double_t TPCSignal=0.;
463 // Primary vertex cut
465 const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
467 if(vtx->GetNContributors()<1) {
470 vtx = lESDevent->GetPrimaryVertexSPD();
472 if(vtx->GetNContributors()<1) {
473 Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
474 return; // NO GOOD VERTEX, SKIP EVENT
478 fHistEventMultiplicity->Fill(2); // analyzed events with PV
480 if(TMath::Abs(vtx->GetZv())>10) return;
481 fHistEventMultiplicity->Fill(3);
483 Bool_t isSelectedCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral);
484 Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral);
485 Bool_t isSelectedMB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
487 fHistTrackMultiplicity->Fill(TrackNumber,percentile);
489 Int_t eventtype = -999;
491 // cout<<"ET 1: "<<eventtype<<endl;
493 if(isSelectedCentral){
494 fHistEventMultiplicity->Fill(4);
495 fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile);
499 if(isSelectedSemiCentral){
500 fHistEventMultiplicity->Fill(5);
501 fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile);
506 if(percentile<0)return;
507 if(percentile>=80)return;
508 fHistEventMultiplicity->Fill(6);
509 fHistTrackMultiplicityMB->Fill(TrackNumber,percentile);
513 // cout<<"ET 2: "<<eventtype<<endl;
515 if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return;
517 AliEventplane *pl=lESDevent->GetEventplane();
521 AliError("AliAnalysisTaskSENucleiv2SP::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
522 fHistEventMultiplicity->Fill(12);
525 //Event plane from FLOW
527 Double_t qxEPa = 0, qyEPa = 0;
528 Double_t qxEPc = 0, qyEPc = 0;
529 Double_t qxEP = 0 , qyEP = 0;
531 Double_t evPlAngV0A = pl->CalculateVZEROEventPlane(lESDevent, 8, 2, qxEPa, qyEPa);
532 Double_t evPlAngV0C = pl->CalculateVZEROEventPlane(lESDevent, 9, 2, qxEPc, qyEPc);
533 Double_t evPlAngV0 = pl->CalculateVZEROEventPlane(lESDevent,10, 2, qxEP, qyEP);
535 Double_t Qx2 = 0, Qy2 = 0;
536 Double_t Qx2p = 0, Qy2p = 0;
537 Double_t Qx2n = 0, Qy2n = 0;
539 for (Int_t iT = 0; iT < TrackNumber; iT++){
541 AliESDtrack* track = lESDevent->GetTrack(iT);
546 if ((TMath::Abs(track->Eta()) > 0.8) || (track->Pt() < 0.2) || (track->GetTPCNcls() < 70) || (track->Pt() >= 20.0))
548 if(!fESDtrackCutsEP->AcceptTrack(track))
550 if(track->Eta()>0 && track->Eta()<0.8){
552 Qx2p += TMath::Cos(2*track->Phi());
553 Qy2p += TMath::Sin(2*track->Phi());
555 if(track->Eta()<0 && track->Eta()> -0.8){
557 Qx2n += TMath::Cos(2*track->Phi());
558 Qy2n += TMath::Sin(2*track->Phi());
561 if(track->Eta()>0 && track->Eta()<0.8){ //half TPC
562 Qx2 += TMath::Cos(2*track->Phi());
563 Qy2 += TMath::Sin(2*track->Phi());
567 Double_t evPlAngTPC = TMath::ATan2(Qy2, Qx2) /2.;
568 Double_t evPlAngTPCn = TMath::ATan2(Qy2n, Qx2n)/2.;
569 Double_t evPlAngTPCp = TMath::ATan2(Qy2p, Qx2p)/2.;
571 EPVzAvsCentrality ->Fill(evPlAngV0A , percentile);
572 EPVzCvsCentrality ->Fill(evPlAngV0C , percentile);
573 EPVzvsCentrality ->Fill(evPlAngV0 , percentile);
574 EPTPCvsCentrality ->Fill(evPlAngTPC , percentile);
575 EPTPCpvsCentrality ->Fill(evPlAngTPCp , percentile);
576 EPTPCnvsCentrality ->Fill(evPlAngTPCn , percentile);
578 if(percentile>=0 && percentile<=5)
579 hEvPlaneTPCvsEvPVz05 ->Fill(evPlAngTPC,evPlAngV0);
580 if(percentile>=0 && percentile<=7.5)
581 hEvPlaneTPCvsEvPVz075 ->Fill(evPlAngTPC,evPlAngV0);
582 if(percentile>=15 && percentile<=30)
583 hEvPlaneTPCvsEvPVz1530->Fill(evPlAngTPC,evPlAngV0);
584 if(percentile>=30 && percentile<50)
585 hEvPlaneTPCvsEvPVz3050->Fill(evPlAngTPC,evPlAngV0);
586 if(percentile>=20 && percentile<=40)
587 hEvPlaneTPCvsEvPVz2040->Fill(evPlAngTPC,evPlAngV0);
588 if(percentile>=40 && percentile<=60)
589 hEvPlaneTPCvsEvPVz4060->Fill(evPlAngTPC,evPlAngV0);
591 // For TPC, V0M, V0c and V0A resolution
593 hCos2DeltaTPCVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngTPC - evPlAngV0A)) , percentile);
594 hCos2DeltaTPCVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngTPC - evPlAngV0C)) , percentile);
595 hCos2DeltaVzAVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0A - evPlAngV0C)) , percentile);
596 hCos2DeltaVzMVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngV0A)) , percentile);
597 hCos2DeltaVzMVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngV0C)) , percentile);
598 hCos2DeltaVzATPCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0A - evPlAngTPC)) , percentile);
599 hCos2DeltaVzCTPCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0C - evPlAngTPC)) , percentile);
600 hCos2DeltaVzCVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0C - evPlAngV0A)) , percentile);
601 hCos2DeltaVzMTPCpvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngTPCp)), percentile);
602 hCos2DeltaVzMTPCnvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0 - evPlAngTPCn)), percentile);
603 hCos2DeltaTPCpTPCnvsCentrality->Fill(TMath::Cos(2.*(evPlAngTPCp- evPlAngTPCn)), percentile);
607 Double_t QV0AQV0C = qxEPa * qxEPc + qyEPa*qyEPc;
608 hQVzAQVzCvsCentrality->Fill(QV0AQV0C,percentile);
610 //====================================================================================================================
612 // To remove auto-correlation
614 q = pl->GetQVector();
616 Float_t ptcExp = -999;
617 Double_t pullTPC = -999;
618 Float_t deltaphiTPC = -3;
619 Float_t deltaphiV0 = -3;
620 Float_t deltaphiV0A = -3;
621 Float_t deltaphiV0C = -3;
623 Float_t uqV0A = -999;
624 Float_t uqV0C = -999;
626 for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
628 AliESDtrack *esdtrack=lESDevent->GetTrack(j);
629 if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
631 status = (ULong_t)esdtrack->GetStatus();
633 Bool_t hasTOFout = status&AliESDtrack::kTOFout;
634 Bool_t hasTOF = kFALSE;
635 if (hasTOFout) hasTOF = kTRUE;
636 Float_t length = esdtrack->GetIntegratedLength();
637 if (length < 350.) hasTOF = kFALSE;
639 TPCSignal=esdtrack->GetTPCsignal();
641 if(TPCSignal<10)continue;
642 if(TPCSignal>1000)continue;
643 if(!esdtrack->GetInnerParam()) continue;
645 Double_t ptot = esdtrack->GetInnerParam()->GetP(); // momentum for dEdx determination
647 if(ptot<0.2)continue;
648 fhBB->Fill(ptot*esdtrack->GetSign(),TPCSignal);
649 esdtrack->GetImpactParameters(impactXY, impactZ);
653 ptcExp = AliExternalTrackParam::BetheBlochAleph(ptot/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
655 ptcExp = AliExternalTrackParam::BetheBlochAleph(ptot/(0.938*3),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
657 ptcExp = 4*AliExternalTrackParam::BetheBlochAleph(2*ptot/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768);
659 pullTPC = (TPCSignal - ptcExp)/(0.07*ptcExp);
661 Double_t p = esdtrack->P();
662 Double_t tof = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p);
663 Double_t tPhi = esdtrack->Phi();
668 Double_t pt = esdtrack->Pt();
673 if(TMath::Abs(ptot) < pmax && TMath::Abs(pullTPC) <= 3 && TMath::Abs(pt) < ptmax){
675 fhBBDeu->Fill(ptot*esdtrack->GetSign(),TPCSignal);
678 // Process TOF information
681 beta = length / (2.99792457999999984e-02 * tof);
682 gamma = 1/TMath::Sqrt(1 - beta*beta);
683 mass = ptot/TMath::Sqrt(gamma*gamma - 1); // using inner TPC mom. as approx.
685 fhTOF->Fill(ptot*esdtrack->GetSign(),beta);
687 if(TMath::Abs(mass) > 2.7)continue;
688 if(TMath::Abs(mass) < 1. )continue;
691 if(TMath::Abs(mass) > 5.0)continue;
692 if(TMath::Abs(mass) < 1.8 )continue;
695 if(TMath::Abs(mass) > 5.0)continue;
696 if(TMath::Abs(mass) < 1.8 )continue;
698 fhMassTOF->Fill(mass);
702 // Remove AutoCorrelation
704 evPlAngTPC = GetEventPlaneForCandidate(esdtrack,q,pl);
706 deltaphiTPC=TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngTPC));
707 deltaphiV0 =TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngV0 ));
708 deltaphiV0A=TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngV0A));
709 deltaphiV0C=TMath::Cos(2*GetPhi0Pi(tPhi-evPlAngV0C));
713 uqV0A = TMath::Cos(2*tPhi)*qxEPa+TMath::Sin(2*tPhi)*qyEPa;
714 uqV0C = TMath::Cos(2*tPhi)*qxEPc+TMath::Sin(2*tPhi)*qyEPc;
716 tCentrality = percentile;
723 tCharge = esdtrack->GetSign();
724 tCosdeltaphiTPC = deltaphiTPC;
725 tCosdeltaphiV0M = deltaphiV0;
726 tCosdeltaphiV0A = deltaphiV0A;
727 tCosdeltaphiV0C = deltaphiV0C;
728 timpactXY = impactXY;
736 PostData(1, fListHist);
741 //________________________________________________________________________
743 void AliAnalysisTaskNucleiv2SP::Terminate(Option_t *)
745 // Draw result to the screen
746 // Called once at the end of the query