]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2SP.cxx
Merge branch 'master' into TPCdev
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Hypernuclei / AliAnalysisTaskNucleiv2SP.cxx
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() 
64 : AliAnalysisTaskSE(), 
65   fisPrimCut(kFALSE),
66   fptc(3),     
67   fListHist(0), 
68   fHistEventMultiplicity(0), 
69   fHistTrackMultiplicity(0),
70   fHistTrackMultiplicityCentral(0),    
71   fHistTrackMultiplicitySemiCentral(0),
72   fHistTrackMultiplicityMB(0),
73   fhBB(0),
74   fhBBDeu(0),
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),
101   ftree(0),           
102   tCentrality(0),     
103   tType(0),  
104   tHasTOF(0),    
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),
115   timpactZ(0),
116   tpull(0),
117   fESDtrackCuts(0),
118   fESDtrackCutsEP(0),
119   fPIDResponse(0)
120 {
121   // Dummy Constructor 
122   fESDtrackCuts   = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
123   fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP");
124   Initialize();
125   cout<<"Dummy constructor"<<endl;
126 }
127
128 //________________________________________________________________________
129 AliAnalysisTaskNucleiv2SP::AliAnalysisTaskNucleiv2SP(const char *name) 
130 : AliAnalysisTaskSE(name), 
131   fisPrimCut(kFALSE),
132   fptc(3),     
133   fListHist(0), 
134   fHistEventMultiplicity(0), 
135   fHistTrackMultiplicity(0),
136   fHistTrackMultiplicityCentral(0),    
137   fHistTrackMultiplicitySemiCentral(0),
138   fHistTrackMultiplicityMB(0),
139   fhBB(0),
140   fhBBDeu(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),
167   ftree(0),           
168   tCentrality(0),     
169   tType(0),  
170   tHasTOF(0),    
171   tpT(0),  
172   tMassTOF(0),
173   tuqV0A(0),
174   tuqV0C(0),
175   tCharge(0),
176   tCosdeltaphiTPC(0),
177   tCosdeltaphiV0M(0),
178   tCosdeltaphiV0A(0),
179   tCosdeltaphiV0C(0),
180   timpactXY(0),
181   timpactZ(0),
182   tpull(0),
183   fESDtrackCuts(0),
184   fESDtrackCutsEP(0),
185   fPIDResponse(0)
186 {
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 ()
191
192   //
193   // create track cuts
194   //
195   fESDtrackCuts   = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
196   fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP");
197   //
198   cout<<"Real constructor"<<endl;
199   Initialize();
200
201   DefineInput(0, TChain::Class());
202   DefineOutput(1, TList::Class());
203   DefineOutput(2, TTree::Class());
204   
205 }
206
207 void AliAnalysisTaskNucleiv2SP::Initialize()
208 {
209   //
210   // updating parameters in case of changes
211   //
212   fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(fisPrimCut,kTRUE);
213   fESDtrackCuts->SetMaxDCAToVertexXY(3);
214   fESDtrackCuts->SetMaxDCAToVertexZ(2);
215   fESDtrackCuts->SetEtaRange(-0.8,0.8);
216   
217   fESDtrackCutsEP = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); 
218
219 }
220
221 //________________________________________________________________________
222 Float_t AliAnalysisTaskNucleiv2SP::GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl){
223   
224   // remove autocorrelations 
225   
226   TArrayF* qx = 0x0;
227   TArrayF* qy = 0x0;
228   TVector2 qcopy; 
229   // if(!fEtaGap){
230   qx = pl->GetQContributionXArray();
231   qy = pl->GetQContributionYArray();
232   qcopy = *q;
233   
234   TVector2 q0;
235   if((track0->GetID()) < qx->fN){
236     q0.Set(qx->At(track0->GetID()),qy->At(track0->GetID()));
237   }
238   
239   qcopy = qcopy - q0;
240   
241   return qcopy.Phi()/2.;
242   
243 }
244 //________________________________________________________________________
245 Float_t AliAnalysisTaskNucleiv2SP::GetPhi0Pi(Float_t phi){
246   // Sets the phi angle in the range 0-pi
247   Float_t result=phi;
248   while(result<0){
249     result=result+TMath::Pi();
250   }
251   while(result>TMath::Pi()){
252     result=result-TMath::Pi();
253   }
254    return result;
255 }
256
257 //==================DEFINITION OF OUTPUT OBJECTS==============================
258
259 void AliAnalysisTaskNucleiv2SP::UserCreateOutputObjects()
260 {
261   //-------------------------------------------------------
262   fListHist = new TList();
263   fListHist->SetOwner();  // IMPORTANT!
264   
265   if(! fHistEventMultiplicity ){
266
267     fHistEventMultiplicity   = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 12 , -0.5,11.5);
268
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");
275     //from HF
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);
283   }
284
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);
290   } 
291
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);
297   } 
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);
303   } 
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);
309   } 
310  
311   if(! fhBB ){
312     fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 240,-6,6,250,0,1000);
313     fListHist->Add(fhBB);
314   }
315   
316   if(! fhBBDeu ){
317     fhBBDeu = new TH2F( "fhBBDeu" , "BetheBlochTPC - Deuteron" , 240,-6,6,250,0,1000);
318     fListHist->Add(fhBBDeu);
319   }
320  
321   if(! fhTOF ){
322     fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 240,-6,6,500,0,1.2);
323     fListHist->Add(fhTOF);
324   }
325   if(! fhMassTOF){
326     fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 100,0 ,10);
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
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);
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);
378   fListHist->Add(hCos2DeltaVzMTPCpvsCentrality);  
379   fListHist->Add(hCos2DeltaVzMTPCnvsCentrality); 
380   fListHist->Add(hCos2DeltaTPCpTPCnvsCentrality);
381
382  
383   hQVzAQVzCvsCentrality = new TH2F("hQVzAQVzCvsCentrality","hQVzAQVzCvsCentrality",1000,-5,5,105,-0.5,105.5);
384   fListHist->Add(hQVzAQVzCvsCentrality);
385  
386
387   if(!ftree){
388    
389     ftree = new TTree("ftree","ftree");
390  
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"          );
406
407
408   }
409
410   PostData(1,  fListHist);
411   PostData(2,  ftree);
412 }// end UserCreateOutputObjects
413
414
415 //====================== USER EXEC ========================
416
417 void AliAnalysisTaskNucleiv2SP::UserExec(Option_t *) 
418 {
419   // Main loop
420   // Called for EACH event
421   //  cout<<"AliAnalysisTaskNucleiv2SP Starting UserExec"<<endl;
422
423   Info("AliAnalysisTaskNucleiv2SP","Starting UserExec");  
424   
425   AliVEvent *event = InputEvent();
426   if (!event) { Printf("ERROR: Could not retrieve event"); return; }
427   
428  
429   AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
430   if (!lESDevent) {
431     AliError("Cannot get the ESD event");
432     return;
433   }  
434   
435   fHistEventMultiplicity->Fill(1);
436   fHistEventMultiplicity->Fill(7);
437   
438   //_____________________________________________________
439   //   Centrality  
440   
441   AliCentrality *centrality = lESDevent->GetCentrality();
442   Float_t percentile=centrality->GetCentralityPercentile("V0M");
443   
444   Int_t TrackNumber = lESDevent->GetNumberOfTracks();
445   fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
446   
447   //______________________________________________________
448   // PID
449   
450   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
451   AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
452   fPIDResponse=inputHandler->GetPIDResponse(); 
453   
454   //=================================================================
455   
456   Float_t  impactXY=-999., impactZ=-999.;
457   Double_t TPCSignal=0.;
458   
459   ULong_t  status=0;
460  
461   Double_t pmax  = 10;
462   Double_t ptmax = 10;
463   // Primary vertex cut
464   
465   const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
466     
467   if(vtx->GetNContributors()<1) {
468     
469     // SPD vertex cut
470     vtx = lESDevent->GetPrimaryVertexSPD();
471     
472     if(vtx->GetNContributors()<1) {
473       Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
474       return; // NO GOOD VERTEX, SKIP EVENT 
475     }
476   }
477   
478   fHistEventMultiplicity->Fill(2); // analyzed events with PV
479   
480   if(TMath::Abs(vtx->GetZv())>10) return;
481   fHistEventMultiplicity->Fill(3);
482
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);
486     
487   fHistTrackMultiplicity->Fill(TrackNumber,percentile); 
488     
489   Int_t eventtype = -999;
490   
491   //  cout<<"ET 1: "<<eventtype<<endl;
492   
493   if(isSelectedCentral){
494     fHistEventMultiplicity->Fill(4);
495     fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile); 
496     eventtype =1;
497   }
498   
499   if(isSelectedSemiCentral){
500     fHistEventMultiplicity->Fill(5);
501     fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile); 
502     eventtype =2;
503   }
504   
505   if(isSelectedMB){
506     if(percentile<0)return;
507     if(percentile>=80)return;
508     fHistEventMultiplicity->Fill(6);
509     fHistTrackMultiplicityMB->Fill(TrackNumber,percentile); 
510     eventtype =3;
511   }
512   
513   //    cout<<"ET 2: "<<eventtype<<endl;
514   
515   if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return;
516   
517   AliEventplane *pl=lESDevent->GetEventplane();
518   
519   
520   if(!pl ){
521     AliError("AliAnalysisTaskSENucleiv2SP::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
522     fHistEventMultiplicity->Fill(12);
523   }
524     
525   //Event plane from FLOW
526   
527   Double_t qxEPa = 0, qyEPa = 0;
528   Double_t qxEPc = 0, qyEPc = 0;
529   Double_t qxEP =  0 , qyEP = 0;
530   
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);
534   
535   Double_t Qx2  = 0, Qy2  = 0;
536   Double_t Qx2p = 0, Qy2p = 0;
537   Double_t Qx2n = 0, Qy2n = 0;
538  
539   for (Int_t iT = 0; iT < TrackNumber; iT++){
540     
541     AliESDtrack* track = lESDevent->GetTrack(iT);
542     
543     if (!track)
544       continue;
545     
546     if ((TMath::Abs(track->Eta()) > 0.8) || (track->Pt() < 0.2) || (track->GetTPCNcls() < 70) || (track->Pt() >= 20.0))
547       continue;
548     if(!fESDtrackCutsEP->AcceptTrack(track))
549       continue;
550     if(track->Eta()>0 && track->Eta()<0.8){
551       
552       Qx2p += TMath::Cos(2*track->Phi());
553       Qy2p += TMath::Sin(2*track->Phi());
554     }
555     if(track->Eta()<0 && track->Eta()> -0.8){
556       
557       Qx2n += TMath::Cos(2*track->Phi());
558       Qy2n += TMath::Sin(2*track->Phi());
559     }
560
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());
564     }
565   }
566   
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.;
570
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); 
577
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);           
590
591   // For TPC, V0M, V0c and V0A resolution 
592
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);
604
605   //Scalar Product
606   
607   Double_t  QV0AQV0C = qxEPa * qxEPc + qyEPa*qyEPc;
608   hQVzAQVzCvsCentrality->Fill(QV0AQV0C,percentile);
609   
610   //====================================================================================================================
611   
612   // To remove auto-correlation
613   TVector2 *q = 0x0;
614   q = pl->GetQVector();
615
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;
622
623   Float_t  uqV0A = -999;
624   Float_t  uqV0C = -999; 
625
626   for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
627       
628     AliESDtrack *esdtrack=lESDevent->GetTrack(j);
629     if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
630     
631     status  = (ULong_t)esdtrack->GetStatus();
632    
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;
638     
639     TPCSignal=esdtrack->GetTPCsignal(); 
640       
641     if(TPCSignal<10)continue;
642     if(TPCSignal>1000)continue;
643     if(!esdtrack->GetInnerParam()) continue;
644     
645     Double_t ptot = esdtrack->GetInnerParam()->GetP(); // momentum for dEdx determination
646  
647     if(ptot<0.2)continue;
648     fhBB->Fill(ptot*esdtrack->GetSign(),TPCSignal);
649     esdtrack->GetImpactParameters(impactXY, impactZ);
650               
651     ptcExp = -999;
652     if(fptc==1)
653       ptcExp  = AliExternalTrackParam::BetheBlochAleph(ptot/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
654     if(fptc==2)
655       ptcExp  = AliExternalTrackParam::BetheBlochAleph(ptot/(0.938*3),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
656     if(fptc==3)
657       ptcExp  = 4*AliExternalTrackParam::BetheBlochAleph(2*ptot/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768);
658     
659     pullTPC  = (TPCSignal - ptcExp)/(0.07*ptcExp);
660
661     Double_t p    = esdtrack->P();
662     Double_t tof  = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p);
663     Double_t tPhi = esdtrack->Phi();
664
665     Float_t  beta = 0;
666     Float_t  gamma = 0;
667     Float_t  mass  = -99;
668     Double_t pt  = esdtrack->Pt();
669
670     if(fptc==3)
671       pt = 2*pt;
672
673     if(TMath::Abs(ptot) < pmax && TMath::Abs(pullTPC) <= 3 && TMath::Abs(pt) < ptmax){
674
675       fhBBDeu->Fill(ptot*esdtrack->GetSign(),TPCSignal);
676       
677       //
678       // Process TOF information
679       //
680       if (hasTOF) {
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.
684         
685         fhTOF->Fill(ptot*esdtrack->GetSign(),beta);
686         if(fptc==1){
687           if(TMath::Abs(mass) > 2.7)continue;
688           if(TMath::Abs(mass) < 1. )continue;
689         }
690         if(fptc==2){
691           if(TMath::Abs(mass) > 5.0)continue;
692           if(TMath::Abs(mass) < 1.8 )continue;
693         }
694         if(fptc==3){
695           if(TMath::Abs(mass) > 5.0)continue;
696           if(TMath::Abs(mass) < 1.8 )continue;
697         }
698         fhMassTOF->Fill(mass);
699       }
700    
701       // Event Plane
702       // Remove AutoCorrelation
703       
704       evPlAngTPC = GetEventPlaneForCandidate(esdtrack,q,pl);
705       
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));
710       
711       // Scalar Product
712       
713       uqV0A = TMath::Cos(2*tPhi)*qxEPa+TMath::Sin(2*tPhi)*qyEPa;
714       uqV0C = TMath::Cos(2*tPhi)*qxEPc+TMath::Sin(2*tPhi)*qyEPc;
715        
716       tCentrality      = percentile;
717       tType            = eventtype;
718       tHasTOF          = hasTOF;
719       tpT              = pt;
720       tMassTOF         = mass;
721       tuqV0A           = uqV0A;
722       tuqV0C           = uqV0C;
723       tCharge          = esdtrack->GetSign();
724       tCosdeltaphiTPC  = deltaphiTPC;
725       tCosdeltaphiV0M  = deltaphiV0;
726       tCosdeltaphiV0A  = deltaphiV0A;
727       tCosdeltaphiV0C  = deltaphiV0C;
728       timpactXY        = impactXY;
729       timpactZ         = impactZ;
730       tpull            = pullTPC;
731
732       ftree->Fill();
733     } 
734   }  //track
735   
736   PostData(1, fListHist);
737   PostData(2, ftree);
738 } //end userexec
739
740
741 //________________________________________________________________________
742
743 void AliAnalysisTaskNucleiv2SP::Terminate(Option_t *) 
744 {
745   // Draw result to the screen
746   // Called once at the end of the query
747 }
748