Task for Phi with ITSsa tracks
[u/mrichter/AliRoot.git] / PWGUD / UPC / AliAnalysisTaskUpcPhi.cxx
1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  * 
14 **************************************************************************/
15
16 // c++ headers
17 #include <iostream>
18 #include <string.h>
19
20 // root headers
21 #include "TH1I.h"
22 #include "TTree.h"
23 #include "TClonesArray.h"
24 #include "TParticle.h"
25 #include "TObjString.h"
26 #include "TFile.h"
27 #include "TDatabasePDG.h"
28 #include "TLorentzVector.h"
29
30 // aliroot headers
31 #include "AliAnalysisManager.h"
32 #include "AliInputEventHandler.h"
33 #include "AliESDEvent.h"
34 #include "AliAODEvent.h"
35 #include "AliMCEvent.h"
36 #include "AliAODVZERO.h"
37 #include "AliAODZDC.h"
38 #include "AliESDVZERO.h"
39 #include "AliESDZDC.h"
40 #include "AliPIDResponse.h"
41 #include "AliAODTrack.h"
42 #include "AliAODPid.h"
43 #include "AliAODVertex.h"
44 #include "AliESDVertex.h"
45 #include "AliMultiplicity.h"
46 #include "AliESDtrack.h"
47 #include "AliESDMuonTrack.h"
48 #include "AliAODMCParticle.h"
49 #include "AliMCParticle.h"
50 #include "AliCentrality.h"
51 #include "AliKFVertex.h"
52 #include "AliExternalTrackParam.h"
53 #include "AliTriggerAnalysis.h"
54
55 // my headers
56 #include "AliAnalysisTaskUpcPhi.h"
57
58 ClassImp(AliAnalysisTaskUpcPhi);
59
60 using std::cout;
61 using std::endl;
62
63 //trees for UPC analysis,
64 // michal.broz@cern.ch
65
66 //_____________________________________________________________________________
67 AliAnalysisTaskUpcPhi::AliAnalysisTaskUpcPhi() 
68   : AliAnalysisTaskSE(),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fRunSystematics(kFALSE),fPIDResponse(0),fPhiTree(0),
69     fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
70     fTOFtrig1(0), fTOFtrig2(0),
71     fVtxContrib(0),fVtxChi2(0),fVtxNDF(0),
72     fBCrossNum(0),fNtracklets(0),fNLooseTracks(0),
73     fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
74     fDataFilnam(0),fRecoPass(0),fEvtNum(0),
75     fPhiAODTracks(0),fPhiESDTracks(0),fGenPart(0),
76     fListTrig(0),fHistCcup4TriggersPerRun(0), fHistCcup7TriggersPerRun(0), fHistCcup2TriggersPerRun(0),fHistCint1TriggersPerRun(0),fHistC0tvxAndCint1TriggersPerRun(0),
77     fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
78     fListHist(0)
79
80 {
81
82 //Dummy constructor
83
84 }//AliAnalysisTaskUpcPhi
85
86
87 //_____________________________________________________________________________
88 AliAnalysisTaskUpcPhi::AliAnalysisTaskUpcPhi(const char *name) 
89   : AliAnalysisTaskSE(name),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fRunSystematics(kFALSE),fPIDResponse(0),fPhiTree(0),
90     fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
91     fTOFtrig1(0), fTOFtrig2(0),
92     fVtxContrib(0),fVtxChi2(0),fVtxNDF(0),
93     fBCrossNum(0),fNtracklets(0),fNLooseTracks(0),
94     fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
95     fDataFilnam(0),fRecoPass(0),fEvtNum(0),
96     fPhiAODTracks(0),fPhiESDTracks(0),fGenPart(0),
97     fListTrig(0),fHistCcup4TriggersPerRun(0), fHistCcup7TriggersPerRun(0), fHistCcup2TriggersPerRun(0),fHistCint1TriggersPerRun(0),fHistC0tvxAndCint1TriggersPerRun(0),
98     fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
99     fListHist(0)
100
101 {
102
103   // Constructor
104   if( strstr(name,"ESD") ) fType = 0;
105   if( strstr(name,"AOD") ) fType = 1;
106   
107   Init();
108
109   DefineOutput(1, TTree::Class());
110   DefineOutput(2, TList::Class());
111   DefineOutput(3, TList::Class());
112
113 }//AliAnalysisTaskUpcPhi
114
115 //_____________________________________________________________________________
116 void AliAnalysisTaskUpcPhi::Init()
117 {
118   
119   for(Int_t i=0; i<ntrg; i++) fTrigger[i] = kFALSE;
120   for(Int_t i=0; i<4; i++) {
121         fTOFphi[i] = -666;
122         fPIDTPCMuon[i] = -666;
123         fPIDTPCElectron[i] = -666;
124         fPIDTPCPion[i] = -666;
125         fPIDTPCKaon[i] = -666;
126         fPIDTPCProton[i] = -666;
127         
128         fPIDTOFMuon[i] = -666;
129         fPIDTOFElectron[i] = -666;
130         fPIDTOFPion[i] = -666;
131         fPIDTOFKaon[i] = -666;
132         fPIDTOFProton[i] = -666;
133         
134         fTriggerInputsMC[i] = kFALSE;
135         }
136   for(Int_t i=0; i<3; i++){
137         fVtxPos[i] = -666; 
138         fVtxErr[i] = -666;
139         fKfVtxPos[i] = -666;
140         fSpdVtxPos[i] = -666;
141         }
142
143 }//Init
144
145 //_____________________________________________________________________________
146 AliAnalysisTaskUpcPhi::~AliAnalysisTaskUpcPhi() 
147 {
148   // Destructor
149   if(fPhiTree){
150      delete fPhiTree;
151      fPhiTree = 0x0;
152   }
153   if(fListTrig){
154      delete fListTrig;
155      fListTrig = 0x0;
156   }
157   if(fListHist){
158      delete fListHist;
159      fListHist = 0x0;
160   }
161
162 }//~AliAnalysisTaskUpcPhi
163
164
165 //_____________________________________________________________________________
166 void AliAnalysisTaskUpcPhi::UserCreateOutputObjects()
167 {
168   //PID response
169   AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
170   AliInputEventHandler *inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
171   fPIDResponse = inputHandler->GetPIDResponse();
172
173   //input file
174   fDataFilnam = new TObjString();
175   fDataFilnam->SetString("");
176
177     //tracks
178   fPhiAODTracks = new TClonesArray("AliAODTrack", 1000);
179   fPhiESDTracks = new TClonesArray("AliESDtrack", 1000);
180   fGenPart = new TClonesArray("TParticle", 1000);
181
182  //output tree with Phi candidate events
183   fPhiTree = new TTree("fPhiTree", "fPhiTree");
184   fPhiTree ->Branch("fRunNum", &fRunNum, "fRunNum/I");
185   fPhiTree ->Branch("fPerNum", &fPerNum, "fPerNum/i");
186   fPhiTree ->Branch("fOrbNum", &fOrbNum, "fOrbNum/i");
187   
188   fPhiTree ->Branch("fBCrossNum", &fBCrossNum, "fBCrossNum/s");
189   fPhiTree ->Branch("fTrigger", &fTrigger[0], Form("fTrigger[%i]/O", ntrg));
190   fPhiTree ->Branch("fL0inputs", &fL0inputs, "fL0inputs/i");
191   fPhiTree ->Branch("fL1inputs", &fL1inputs, "fL1inputs/i");
192   fPhiTree ->Branch("fNtracklets", &fNtracklets, "fNtracklets/s");
193   fPhiTree ->Branch("fNLooseTracks", &fNLooseTracks, "fNLooseTracks/s");
194   fPhiTree ->Branch("fVtxContrib", &fVtxContrib, "fVtxContrib/I");
195   
196   fPhiTree ->Branch("fTOFtrig1", &fTOFtrig1, "fTOFtrig1/O");
197   fPhiTree ->Branch("fTOFtrig2", &fTOFtrig2, "fTOFtrig2/O");
198   fPhiTree ->Branch("fTOFphi", &fTOFphi[0], "fTOFphi[2]/D");
199   
200   fPhiTree ->Branch("fPIDTPCMuon", &fPIDTPCMuon[0], "fPIDTPCMuon[2]/D");
201   fPhiTree ->Branch("fPIDTPCElectron", &fPIDTPCElectron[0], "fPIDTPCElectron[2]/D");
202   fPhiTree ->Branch("fPIDTPCPion", &fPIDTPCPion[0], "fPIDTPCPion[2]/D");
203   fPhiTree ->Branch("fPIDTPCKaon", &fPIDTPCKaon[0], "fPIDTPCKaon[2]/D");
204   fPhiTree ->Branch("fPIDTPCProton", &fPIDTPCProton[0], "fPIDTPCProton[2]/D");
205   
206   fPhiTree ->Branch("fPIDTOFMuon", &fPIDTOFMuon[0], "fPIDTOFMuon[2]/D");
207   fPhiTree ->Branch("fPIDTOFElectron", &fPIDTOFElectron[0], "fPIDTOFElectron[2]/D");
208   fPhiTree ->Branch("fPIDTOFPion", &fPIDTOFPion[0], "fPIDTOFPion[2]/D");
209   fPhiTree ->Branch("fPIDTOFKaon", &fPIDTOFKaon[0], "fPIDTOFKaon[2]/D");
210   fPhiTree ->Branch("fPIDTOFProton", &fPIDTOFProton[0], "fPIDTOFProton[2]/D");
211   
212   fPhiTree ->Branch("fVtxPos", &fVtxPos[0], "fVtxPos[3]/D");
213   fPhiTree ->Branch("fVtxErr", &fVtxErr[0], "fVtxErr[3]/D");
214   fPhiTree ->Branch("fVtxChi2", &fVtxChi2, "fVtxChi2/D");
215   fPhiTree ->Branch("fVtxNDF", &fVtxNDF, "fVtxNDF/D");
216   
217   fPhiTree ->Branch("fKfVtxPos", &fKfVtxPos[0], "fKfVtxPos[3]/D");
218   fPhiTree ->Branch("fSpdVtxPos", &fSpdVtxPos[0], "fSpdVtxPos[3]/D");
219   
220   fPhiTree ->Branch("fZDCAenergy", &fZDCAenergy, "fZDCAenergy/D");
221   fPhiTree ->Branch("fZDCCenergy", &fZDCCenergy, "fZDCCenergy/D");
222   fPhiTree ->Branch("fV0Adecision", &fV0Adecision, "fV0Adecision/I");
223   fPhiTree ->Branch("fV0Cdecision", &fV0Cdecision, "fV0Cdecision/I");  
224   fPhiTree ->Branch("fDataFilnam", &fDataFilnam);
225   fPhiTree ->Branch("fRecoPass", &fRecoPass, "fRecoPass/S");
226   fPhiTree ->Branch("fEvtNum", &fEvtNum, "fEvtNum/L");                         
227   if( fType == 0 ) {
228     fPhiTree ->Branch("fPhiESDTracks", &fPhiESDTracks);
229   }
230   if( fType == 1 ) {
231     fPhiTree ->Branch("fPhiAODTracks", &fPhiAODTracks);
232   }
233   if(isMC) {
234     fPhiTree ->Branch("fGenPart", &fGenPart);
235     fPhiTree ->Branch("fTriggerInputsMC", &fTriggerInputsMC[0], "fTriggerInputsMC[2]/O");
236   }
237
238   
239   fListTrig = new TList();
240   fListTrig ->SetOwner();
241   
242   fHistCcup4TriggersPerRun = new TH1D("fHistCcup4TriggersPerRun", "fHistCcup4TriggersPerRun", 33000, 167000.5, 200000.5);
243   fListTrig->Add(fHistCcup4TriggersPerRun);
244   
245   fHistCcup7TriggersPerRun = new TH1D("fHistCcup7TriggersPerRun", "fHistCcup7TriggersPerRun", 33000, 167000.5, 200000.5);
246   fListTrig->Add(fHistCcup7TriggersPerRun);
247   
248   fHistCcup2TriggersPerRun = new TH1D("fHistCcup2TriggersPerRun", "fHistCcup2TriggersPerRun", 33000, 167000.5, 200000.5);
249   fListTrig->Add(fHistCcup2TriggersPerRun);
250   
251   fHistCint1TriggersPerRun = new TH1D("fHistCint1TriggersPerRun", "fHistCint1TriggersPerRun", 33000, 167000.5, 200000.5);
252   fListTrig->Add(fHistCint1TriggersPerRun);
253   
254   fHistC0tvxAndCint1TriggersPerRun = new TH1D("fHistC0tvxAndCint1TriggersPerRun", "fHistC0tvxAndCint1TriggersPerRun", 33000, 167000.5, 200000.5);
255   fListTrig->Add(fHistC0tvxAndCint1TriggersPerRun);
256   
257   fHistZedTriggersPerRun = new TH1D("fHistZedTriggersPerRun", "fHistZedTriggersPerRun", 33000, 167000.5, 200000.5);
258   fListTrig->Add(fHistZedTriggersPerRun);
259
260   fHistCvlnTriggersPerRun = new TH1D("fHistCvlnTriggersPerRun", "fHistCvlnTriggersPerRun", 33000, 167000.5, 200000.5);
261   fListTrig->Add(fHistCvlnTriggersPerRun);
262   
263   fHistMBTriggersPerRun = new TH1D("fHistMBTriggersPerRun", "fHistMBTriggersPerRun", 33000, 167000.5, 200000.5);
264   fListTrig->Add(fHistMBTriggersPerRun);
265   
266   fHistCentralTriggersPerRun = new TH1D("fHistCentralTriggersPerRun", "fHistCentralTriggersPerRun", 33000, 167000.5, 200000.5);
267   fListTrig->Add(fHistCentralTriggersPerRun);
268   
269   fHistSemiCentralTriggersPerRun = new TH1D("fHistSemiCentralTriggersPerRun", "fHistSemiCentralTriggersPerRun", 33000, 167000.5, 200000.5);
270   fListTrig->Add(fHistSemiCentralTriggersPerRun);
271   
272   fListHist = new TList();
273   fListHist ->SetOwner();
274   
275   PostData(1, fPhiTree);
276   PostData(2, fListTrig);
277   PostData(3, fListHist);
278
279 }//UserCreateOutputObjects
280
281 //_____________________________________________________________________________
282 void AliAnalysisTaskUpcPhi::UserExec(Option_t *) 
283 {
284
285   //cout<<"#################### Next event ##################"<<endl;
286
287   if( fType == 0 ){
288         RunESDtrig(); 
289         if(fRunHist) RunESDhist();
290         if(fRunTree) RunESDtree();
291         }
292
293   if( fType == 1 ){
294         RunAODtrig(); 
295         if(fRunHist) RunAODhist();
296         if(fRunTree) RunAODtree();
297         }
298
299 }//UserExec
300 //_____________________________________________________________________________
301 void AliAnalysisTaskUpcPhi::RunAODtrig()
302 {
303
304   //input event
305   AliAODEvent *aod = (AliAODEvent*) InputEvent();
306   if(!aod) return;
307
308   fRunNum = aod ->GetRunNumber();
309   //Trigger
310   TString trigger = aod->GetFiredTriggerClasses();
311   
312   if(trigger.Contains("CCUP4-B")) fHistCcup4TriggersPerRun->Fill(fRunNum); //CCUP4 triggers
313   if(trigger.Contains("CCUP7-B")) fHistCcup7TriggersPerRun->Fill(fRunNum); //CCUP7 triggers
314   if(trigger.Contains("CCUP2-B")) fHistCcup2TriggersPerRun->Fill(fRunNum); //CCUP2 triggers
315   
316   if(trigger.Contains("CINT1")) fHistCint1TriggersPerRun->Fill(fRunNum); //CINT1 triggers
317   
318   fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
319   if(trigger.Contains("CINT1") && (fL0inputs & (1 << 3))) fHistC0tvxAndCint1TriggersPerRun->Fill(fRunNum); //0TVX triggers in CINT1 events
320   
321   if(trigger.Contains("CVLN_B2-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers - synchronously downscaled
322   if(trigger.Contains("CVLN_R1-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers - randomly downscaled
323   
324   fL1inputs = aod->GetHeader()->GetL1TriggerInputs();
325   if(fL1inputs & (1 << 18)) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
326   
327   //MB, Central and SemiCentral triggers
328   AliCentrality *centrality = aod->GetCentrality();
329   UInt_t selectionMask = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
330   
331   Double_t percentile = centrality->GetCentralityPercentileUnchecked("V0M");
332   //Double_t percentile = centrality->GetCentralityPercentile("V0M");
333   
334   if(((selectionMask & AliVEvent::kMB) == AliVEvent::kMB) && percentile<=80 && percentile>=0) fHistMBTriggersPerRun->Fill(fRunNum);
335   
336   if(((selectionMask & AliVEvent::kCentral) == AliVEvent::kCentral) && percentile<=6 && percentile>=0 && (trigger.Contains("CVHN_R2-B"))) fHistCentralTriggersPerRun->Fill(fRunNum);
337
338   if(((selectionMask & AliVEvent::kSemiCentral) == AliVEvent::kSemiCentral) && percentile<=50 && percentile>=15) fHistSemiCentralTriggersPerRun->Fill(fRunNum);
339     
340 PostData(3, fListTrig);
341
342 }
343 //_____________________________________________________________________________
344 void AliAnalysisTaskUpcPhi::RunAODhist()
345 {
346
347
348 }
349
350 //_____________________________________________________________________________
351 void AliAnalysisTaskUpcPhi::RunAODtree()
352 {
353   //input event
354   AliAODEvent *aod = (AliAODEvent*) InputEvent();
355   if(!aod) return;
356
357   if(isMC) RunAODMC(aod);
358
359   //input data
360   const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
361   fDataFilnam->Clear();
362   fDataFilnam->SetString(filnam);
363   fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
364   fRunNum = aod ->GetRunNumber();
365
366   //Trigger
367   TString trigger = aod->GetFiredTriggerClasses();
368   
369   fTrigger[0]  = trigger.Contains("CCUP4-B"); // Central UPC Pb-Pb 2011
370   fTrigger[1]  = trigger.Contains("CCUP2-B"); // Double gap
371   fTrigger[2]  = trigger.Contains("CCUP7-B"); // Central UPC p-Pb 2013
372   fTrigger[3]  = trigger.Contains("CINT1");
373   
374   Bool_t isTriggered = kFALSE;
375   for(Int_t i=0; i<ntrg; i++) {
376     if( fTrigger[i] ) isTriggered = kTRUE;
377   }
378   if(!isMC && !isTriggered ) return;
379
380   //trigger inputs
381   fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
382   fL1inputs = aod->GetHeader()->GetL1TriggerInputs();  
383
384   //Event identification
385   fPerNum = aod ->GetPeriodNumber();
386   fOrbNum = aod ->GetOrbitNumber();
387   fBCrossNum = aod ->GetBunchCrossNumber();
388
389   //primary vertex
390   AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
391   fVtxContrib = fAODVertex->GetNContributors();
392   fVtxPos[0] = fAODVertex->GetX();
393   fVtxPos[1] = fAODVertex->GetY();
394   fVtxPos[2] = fAODVertex->GetZ();
395   Double_t CovMatx[6];
396   fAODVertex->GetCovarianceMatrix(CovMatx); 
397   fVtxErr[0] = CovMatx[0];
398   fVtxErr[1] = CovMatx[1];
399   fVtxErr[2] = CovMatx[2];
400   fVtxChi2 = fAODVertex->GetChi2();
401   fVtxNDF = fAODVertex->GetNDF();
402   
403   //SPD primary vertex
404   AliAODVertex *fSPDVertex = aod->GetPrimaryVertexSPD();
405   if(fSPDVertex){
406         fSpdVtxPos[0] = fSPDVertex->GetX();
407         fSpdVtxPos[1] = fSPDVertex->GetY();
408         fSpdVtxPos[2] = fSPDVertex->GetZ();
409         }
410   else{
411         fSpdVtxPos[0] = -666;
412         fSpdVtxPos[1] = -666;
413         fSpdVtxPos[2] = -666;
414         }
415
416   //Tracklets
417   fNtracklets = aod->GetTracklets()->GetNumberOfTracklets();
418
419   //VZERO, ZDC
420   AliAODVZERO *fV0data = aod ->GetVZEROData();
421   AliAODZDC *fZDCdata = aod->GetZDCData();
422   
423   fV0Adecision = fV0data->GetV0ADecision();
424   fV0Cdecision = fV0data->GetV0CDecision();
425   fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
426   fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
427   
428   fNLooseTracks = 0;
429   
430   //Track loop - loose cuts
431   for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
432     AliAODTrack *trk = dynamic_cast<AliAODTrack*>(aod->GetTrack(itr));
433     if( !trk ) continue;
434     if(!(trk->TestFilterBit(1<<1))) continue;
435
436       fNLooseTracks++; 
437   }//Track loop -loose cuts
438   
439   Int_t nGoodTracks=0;
440   Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
441   
442    //Two track loop
443   for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
444     AliAODTrack *trk = dynamic_cast<AliAODTrack*>(aod->GetTrack(itr));
445     if( !trk ) continue;
446     if(!(trk->TestFilterBit(1<<1))) continue;
447
448       if(!(trk->GetStatus() & AliAODTrack::kITSrefit) ) continue;
449       if(trk->GetITSNcls() < 3)continue;
450       if(trk->Chi2perNDF() > 4)continue;
451       if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1)))continue;
452  
453       TrackIndex[nGoodTracks] = itr;
454       nGoodTracks++;
455                                   
456       if(nGoodTracks > 2) break;  
457   }//Track loop
458       
459   fPhiAODTracks->Clear("C");  
460   if(nGoodTracks == 2){
461
462           for(Int_t i=0; i<2; i++){
463                 AliAODTrack *trk = dynamic_cast<AliAODTrack*>(aod->GetTrack(TrackIndex[i]));
464                 if(!trk) AliFatal("Not a standard AOD");
465                 
466                 new((*fPhiAODTracks)[i]) AliAODTrack(*trk);
467                 }
468                         
469   if(!isMC) fPhiTree ->Fill();
470   }
471   if(isMC) fPhiTree ->Fill();
472   
473   
474   PostData(1, fPhiTree);
475
476 }//RunAOD
477
478
479 //_____________________________________________________________________________
480 void AliAnalysisTaskUpcPhi::RunAODMC(AliAODEvent *aod)
481 {
482
483   fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
484   fTriggerInputsMC[0] = kFALSE;//0SM2
485   fTriggerInputsMC[1] = fL0inputs & (1 << 0);//0VBA
486   fTriggerInputsMC[2] = fL0inputs & (1 << 1);//0VBC
487   fTriggerInputsMC[3] = fL0inputs & (1 << 9);//0OMU
488
489   fGenPart->Clear("C");
490
491   TClonesArray *arrayMC = (TClonesArray*) aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
492   if(!arrayMC) return;
493
494   Int_t nmc=0;
495   //loop over mc particles
496   for(Int_t imc=0; imc<arrayMC->GetEntriesFast(); imc++) {
497     AliAODMCParticle *mcPart = (AliAODMCParticle*) arrayMC->At(imc);
498     if(!mcPart) continue;
499
500     if(mcPart->GetMother() >= 0) continue;
501
502     TParticle *part = (TParticle*) fGenPart->ConstructedAt(nmc++);
503     part->SetMomentum(mcPart->Px(), mcPart->Py(), mcPart->Pz(), mcPart->E());
504     part->SetPdgCode(mcPart->GetPdgCode());
505     part->SetUniqueID(imc);
506   }//loop over mc particles
507
508 }//RunAODMC
509
510
511 //_____________________________________________________________________________
512 void AliAnalysisTaskUpcPhi::RunESDtrig()
513 {
514
515
516 }
517 //_____________________________________________________________________________
518 void AliAnalysisTaskUpcPhi::RunESDhist()
519 {
520
521
522 }
523
524 //_____________________________________________________________________________
525 void AliAnalysisTaskUpcPhi::RunESDtree()
526 {
527
528
529 }//RunESD
530
531
532 //_____________________________________________________________________________
533 void AliAnalysisTaskUpcPhi::RunESDMC(AliESDEvent* esd)
534 {
535
536
537 }//RunESDMC
538
539
540
541 //_____________________________________________________________________________
542 void AliAnalysisTaskUpcPhi::Terminate(Option_t *) 
543 {
544
545   cout<<"Analysis complete."<<endl;
546 }//Terminate