]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGUD/UPC/AliAnalysisTaskUpcPsi2s.cxx
Revert "Another histos for lumi"
[u/mrichter/AliRoot.git] / PWGUD / UPC / AliAnalysisTaskUpcPsi2s.cxx
CommitLineData
3d16cd00 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"
17c65770 27#include "TDatabasePDG.h"
28#include "TLorentzVector.h"
3d16cd00 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
51// my headers
52#include "AliAnalysisTaskUpcPsi2s.h"
53
54ClassImp(AliAnalysisTaskUpcPsi2s);
55
b8f92f9d 56using std::cout;
57using std::endl;
58
3d16cd00 59//trees for UPC analysis,
60// michal.broz@cern.ch
61
62//_____________________________________________________________________________
63AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s()
f052ef6f 64 : AliAnalysisTaskSE(),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),fJPsiTree(0),fPsi2sTree(0),
d457ec9e 65 fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
0d644216 66 fVtxContrib(0),fVtxPosX(0),fVtxPosY(0),fVtxPosZ(0),fVtxErrX(0),fVtxErrY(0),fVtxErrZ(0),fVtxChi2(0),fVtxNDF(0),
d457ec9e 67 fBCrossNum(0),fNtracklets(0),
3d16cd00 68 fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
69 fDataFilnam(0),fRecoPass(0),fEvtNum(0),
17c65770 70 fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),
f052ef6f 71 fListTrig(0),fHistUpcTriggersPerRun(0),fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0),
72 fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
73 fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0)
17c65770 74
3d16cd00 75{
76
77//Dummy constructor
78
79}//AliAnalysisTaskUpcPsi2s
80
81
82//_____________________________________________________________________________
83AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name)
f052ef6f 84 : AliAnalysisTaskSE(name),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),fJPsiTree(0),fPsi2sTree(0),
d457ec9e 85 fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
0d644216 86 fVtxContrib(0),fVtxPosX(0),fVtxPosY(0),fVtxPosZ(0),fVtxErrX(0),fVtxErrY(0),fVtxErrZ(0),fVtxChi2(0),fVtxNDF(0),
d457ec9e 87 fBCrossNum(0),fNtracklets(0),
3d16cd00 88 fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
89 fDataFilnam(0),fRecoPass(0),fEvtNum(0),
17c65770 90 fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),
f052ef6f 91 fListTrig(0),fHistUpcTriggersPerRun(0),fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0),
92 fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
93 fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0)
17c65770 94
3d16cd00 95{
96
97 // Constructor
98 if( strstr(name,"ESD") ) fType = 0;
99 if( strstr(name,"AOD") ) fType = 1;
100
101 Init();
102
103 DefineOutput(1, TTree::Class());
104 DefineOutput(2, TTree::Class());
f052ef6f 105 DefineOutput(3, TList::Class());
17c65770 106 DefineOutput(4, TList::Class());
3d16cd00 107
108}//AliAnalysisTaskUpcPsi2s
109
110//_____________________________________________________________________________
111void AliAnalysisTaskUpcPsi2s::Init()
112{
113
114 for(Int_t i=0; i<ntrg; i++) fTrigger[i] = kFALSE;
115
116}//Init
117
118//_____________________________________________________________________________
119AliAnalysisTaskUpcPsi2s::~AliAnalysisTaskUpcPsi2s()
120{
121 // Destructor
122 if(fJPsiTree){
123 delete fJPsiTree;
124 fJPsiTree = 0x0;
125 }
126 if(fPsi2sTree){
127 delete fPsi2sTree;
128 fPsi2sTree = 0x0;
129 }
f052ef6f 130 if(fListTrig){
131 delete fListTrig;
132 fListTrig = 0x0;
3d16cd00 133 }
46e1d1dc 134 if(fListHist){
135 delete fListHist;
136 fListHist = 0x0;
17c65770 137 }
3d16cd00 138
139}//~AliAnalysisTaskUpcPsi2s
140
141
142//_____________________________________________________________________________
143void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
144{
3d16cd00 145 //input file
146 fDataFilnam = new TObjString();
147 fDataFilnam->SetString("");
148
149 //tracks
150 fJPsiAODTracks = new TClonesArray("AliAODTrack", 1000);
151 fJPsiESDTracks = new TClonesArray("AliESDtrack", 1000);
152 fPsi2sAODTracks = new TClonesArray("AliAODTrack", 1000);
153 fPsi2sESDTracks = new TClonesArray("AliESDtrack", 1000);
154
155 //output tree with JPsi candidate events
156 fJPsiTree = new TTree("fJPsiTree", "fJPsiTree");
157 fJPsiTree ->Branch("fRunNum", &fRunNum, "fRunNum/I");
158 fJPsiTree ->Branch("fPerNum", &fPerNum, "fPerNum/i");
159 fJPsiTree ->Branch("fOrbNum", &fOrbNum, "fOrbNum/i");
160
161 fJPsiTree ->Branch("fBCrossNum", &fBCrossNum, "fBCrossNum/s");
162 fJPsiTree ->Branch("fTrigger", &fTrigger[0], Form("fTrigger[%i]/O", ntrg));
163 fJPsiTree ->Branch("fL0inputs", &fL0inputs, "fL0inputs/i");
164 fJPsiTree ->Branch("fL1inputs", &fL1inputs, "fL1inputs/i");
165 fJPsiTree ->Branch("fNtracklets", &fNtracklets, "fNtracklets/s");
166 fJPsiTree ->Branch("fVtxContrib", &fVtxContrib, "fVtxContrib/I");
d457ec9e
M
167
168 fJPsiTree ->Branch("fVtxPosX", &fVtxPosX, "fVtxPosX/D");
169 fJPsiTree ->Branch("fVtxPosY", &fVtxPosY, "fVtxPosY/D");
170 fJPsiTree ->Branch("fVtxPosZ", &fVtxPosZ, "fVtxPosZ/D");
171 fJPsiTree ->Branch("fVtxErrX", &fVtxErrX, "fVtxErrX/D");
172 fJPsiTree ->Branch("fVtxErrY", &fVtxErrY, "fVtxErrY/D");
173 fJPsiTree ->Branch("fVtxErrZ", &fVtxErrZ, "fVtxErrZ/D");
174 fJPsiTree ->Branch("fVtxChi2", &fVtxChi2, "fVtxChi2/D");
175 fJPsiTree ->Branch("fVtxNDF", &fVtxNDF, "fVtxNDF/D");
176
3d16cd00 177 fJPsiTree ->Branch("fZDCAenergy", &fZDCAenergy, "fZDCAenergy/D");
178 fJPsiTree ->Branch("fZDCCenergy", &fZDCCenergy, "fZDCCenergy/D");
179 fJPsiTree ->Branch("fV0Adecision", &fV0Adecision, "fV0Adecision/I");
180 fJPsiTree ->Branch("fV0Cdecision", &fV0Cdecision, "fV0Cdecision/I");
181 fJPsiTree ->Branch("fDataFilnam", &fDataFilnam);
182 fJPsiTree ->Branch("fRecoPass", &fRecoPass, "fRecoPass/S");
183 fJPsiTree ->Branch("fEvtNum", &fEvtNum, "fEvtNum/L");
184 if( fType == 0 ) {
185 fJPsiTree ->Branch("fJPsiESDTracks", &fJPsiESDTracks);
186 }
187 if( fType == 1 ) {
188 fJPsiTree ->Branch("fJPsiAODTracks", &fJPsiAODTracks);
189 }
190
191 //output tree with Psi2s candidate events
192 fPsi2sTree = new TTree("fPsi2sTree", "fPsi2sTree");
193 fPsi2sTree ->Branch("fRunNum", &fRunNum, "fRunNum/I");
194 fPsi2sTree ->Branch("fPerNum", &fPerNum, "fPerNum/i");
195 fPsi2sTree ->Branch("fOrbNum", &fOrbNum, "fOrbNum/i");
196
197 fPsi2sTree ->Branch("fBCrossNum", &fBCrossNum, "fBCrossNum/s");
198 fPsi2sTree ->Branch("fTrigger", &fTrigger[0], Form("fTrigger[%i]/O", ntrg));
199 fPsi2sTree ->Branch("fL0inputs", &fL0inputs, "fL0inputs/i");
200 fPsi2sTree ->Branch("fL1inputs", &fL1inputs, "fL1inputs/i");
201 fPsi2sTree ->Branch("fNtracklets", &fNtracklets, "fNtracklets/s");
202 fPsi2sTree ->Branch("fVtxContrib", &fVtxContrib, "fVtxContrib/I");
d457ec9e
M
203
204 fPsi2sTree ->Branch("fVtxPosX", &fVtxPosX, "fVtxPosX/D");
205 fPsi2sTree ->Branch("fVtxPosY", &fVtxPosY, "fVtxPosY/D");
206 fPsi2sTree ->Branch("fVtxPosZ", &fVtxPosZ, "fVtxPosZ/D");
207 fPsi2sTree ->Branch("fVtxErrX", &fVtxErrX, "fVtxErrX/D");
208 fPsi2sTree ->Branch("fVtxErrY", &fVtxErrY, "fVtxErrY/D");
209 fPsi2sTree ->Branch("fVtxErrZ", &fVtxErrZ, "fVtxErrZ/D");
210 fPsi2sTree ->Branch("fVtxChi2", &fVtxChi2, "fVtxChi2/D");
211 fPsi2sTree ->Branch("fVtxNDF", &fVtxNDF, "fVtxNDF/D");
212
3d16cd00 213 fPsi2sTree ->Branch("fZDCAenergy", &fZDCAenergy, "fZDCAenergy/D");
214 fPsi2sTree ->Branch("fZDCCenergy", &fZDCCenergy, "fZDCCenergy/D");
215 fPsi2sTree ->Branch("fV0Adecision", &fV0Adecision, "fV0Adecision/I");
216 fPsi2sTree ->Branch("fV0Cdecision", &fV0Cdecision, "fV0Cdecision/I");
217 fPsi2sTree ->Branch("fDataFilnam", &fDataFilnam);
218 fPsi2sTree ->Branch("fRecoPass", &fRecoPass, "fRecoPass/S");
219 fPsi2sTree ->Branch("fEvtNum", &fEvtNum, "fEvtNum/L");
220 if( fType == 0 ) {
221 fPsi2sTree ->Branch("fPsi2sESDTracks", &fPsi2sESDTracks);
222 }
223 if( fType == 1 ) {
224 fPsi2sTree ->Branch("fPsi2sAODTracks", &fPsi2sAODTracks);
225 }
226
f052ef6f 227 fListTrig = new TList();
228 fListTrig ->SetOwner();
229
230 fHistUpcTriggersPerRun = new TH1D("fHistUpcTriggersPerRun", "fHistUpcTriggersPerRun", 3000, 167000.5, 170000.5);
231 fListTrig->Add(fHistUpcTriggersPerRun);
232
233 fHistZedTriggersPerRun = new TH1D("fHistZedTriggersPerRun", "fHistZedTriggersPerRun", 3000, 167000.5, 170000.5);
234 fListTrig->Add(fHistZedTriggersPerRun);
235
236 fHistCvlnTriggersPerRun = new TH1D("fHistCvlnTriggersPerRun", "fHistCvlnTriggersPerRun", 3000, 167000.5, 170000.5);
237 fListTrig->Add(fHistCvlnTriggersPerRun);
238
46e1d1dc 239 fListHist = new TList();
240 fListHist ->SetOwner();
241
17c65770 242 TString CutNameJPsi[12] = {"Analyzed","Triggered","Vertex cut","V0 decision","Two good tracks",
243 "Like sign","Oposite sign","One p_{T}>1", "Both p_{T}>1","PID","Dimuom","Dielectron"};
244 fHistNeventsJPsi = new TH1D("fHistNeventsJPsi","fHistNeventsPsi2s",12,0.5,12.5);
245 for (Int_t i = 0; i<12; i++) fHistNeventsJPsi->GetXaxis()->SetBinLabel(i+1,CutNameJPsi[i].Data());
46e1d1dc 246 fListHist->Add(fHistNeventsJPsi);
17c65770 247
248 fHistTPCsignalJPsi = new TH2D("fHistTPCsignalJPsi","fHistTPCsignalJPsi",240,0,120,240,0,120);
46e1d1dc 249 fListHist->Add(fHistTPCsignalJPsi);
17c65770 250
251 fHistDiLeptonPtJPsi = new TH2D("fHistDiLeptonPtJPsi","fHistDiLeptonPtJPsi",350,0,3.5,350,0,3.5);
46e1d1dc 252 fListHist->Add(fHistDiLeptonPtJPsi);
17c65770 253
254 fHistDiElectronMass = new TH1D("fHistDiElectronMass","Invariant mass of J/#psi candidates",100,2,5);
255 fHistDiElectronMass->GetXaxis()->SetTitle("Invariant mass(e^{+}e^{-}) (GeV/c)");
46e1d1dc 256 fListHist->Add(fHistDiElectronMass);
17c65770 257
258 fHistDiMuonMass = new TH1D("fHistDiMuonMass","Invariant mass of J/#psi candidates",100,2,5);
259 fHistDiMuonMass->GetXaxis()->SetTitle("Invariant mass(#mu^{+}#mu^{-}) (GeV/c)");
46e1d1dc 260 fListHist->Add(fHistDiMuonMass);
17c65770 261
262 TString CutNamePsi2s[13] = {"Analyzed","Triggered","Vertex cut","V0 decision","Four good tracks",
263 "DiLepton - DiPion","Like sign leptons","Like sign pions","Like sign both","Oposite sign","PID","Dimuom","Dielectron"};
264
265 fHistNeventsPsi2s = new TH1D("fHistNeventsPsi2s","fHistNeventsPsi2s",13,0.5,13.5);
266 for (Int_t i = 0; i<13; i++) fHistNeventsPsi2s->GetXaxis()->SetBinLabel(i+1,CutNamePsi2s[i].Data());
46e1d1dc 267 fListHist->Add(fHistNeventsPsi2s);
17c65770 268
269 fHistPsi2sMassVsPt = new TH2D("fHistPsi2sMassVsPt","Mass vs p_{T} of #psi(2s) candidates",100,3,6,50,0,5);
270 fHistPsi2sMassVsPt->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
271 fHistPsi2sMassVsPt->GetYaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
46e1d1dc 272 fListHist->Add(fHistPsi2sMassVsPt);
17c65770 273
274 fHistPsi2sMassCoherent = new TH1D("fHistPsi2sMassAllCoherent","Invariant mass of coherent #psi(2s) candidates",100,3,6);
275 fHistPsi2sMassCoherent->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
46e1d1dc 276 fListHist->Add(fHistPsi2sMassCoherent);
17c65770 277
3d16cd00 278 PostData(1, fJPsiTree);
279 PostData(2, fPsi2sTree);
f052ef6f 280 PostData(3, fListTrig);
46e1d1dc 281 PostData(4, fListHist);
3d16cd00 282
283}//UserCreateOutputObjects
284
285//_____________________________________________________________________________
286void AliAnalysisTaskUpcPsi2s::UserExec(Option_t *)
287{
288
289 //cout<<"#################### Next event ##################"<<endl;
290
f052ef6f 291 if( fType == 0 ){
292 RunESDtrig();
293 if(fRunHist) RunESDhist();
294 if(fRunTree) RunESDtree();
295 }
296
297 if( fType == 1 ){
298 RunAODtrig();
17c65770 299 if(fRunHist) RunAODhist();
300 if(fRunTree) RunAODtree();
301 }
3d16cd00 302
303}//UserExec
17c65770 304//_____________________________________________________________________________
f052ef6f 305void AliAnalysisTaskUpcPsi2s::RunAODtrig()
306{
307
308 //input event
309 AliAODEvent *aod = (AliAODEvent*) InputEvent();
310 if(!aod) return;
311
312 fRunNum = aod ->GetRunNumber();
313 //Trigger
314 TString trigger = aod->GetFiredTriggerClasses();
315
316 if(trigger.Contains("CCUP4-B")) fHistUpcTriggersPerRun->Fill(fRunNum); //Upc triggers
317
0d644216
MB
318 if(trigger.Contains("CVLN")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers
319
320 //if(aod->GetHeader()->IsTriggerInputFired("1ZED")) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
f052ef6f 321
322 fL1inputs = aod->GetHeader()->GetL1TriggerInputs();
323 if(fL1inputs & (1 << 18)) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
324
325PostData(3, fListTrig);
326
327}
328//_____________________________________________________________________________
17c65770 329void AliAnalysisTaskUpcPsi2s::RunAODhist()
330{
331
332 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
333
334 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
335 Double_t muonMass = partMuon->Mass();
336
337 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
338 Double_t electronMass = partElectron->Mass();
339
340 TParticlePDG *partPion = pdgdat->GetParticle( 211 );
341 Double_t pionMass = partPion->Mass();
342
343 //input event
344 AliAODEvent *aod = (AliAODEvent*) InputEvent();
345 if(!aod) return;
346
347 fHistNeventsJPsi->Fill(1);
348 fHistNeventsPsi2s->Fill(1);
349
350 //Trigger
351 TString trigger = aod->GetFiredTriggerClasses();
352
353 if( !trigger.Contains("CCUP4-B") ) return;
354
355 fHistNeventsJPsi->Fill(2);
356 fHistNeventsPsi2s->Fill(2);
357
358 //primary vertex
359 AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
360 fVtxContrib = fAODVertex->GetNContributors();
361 if(fVtxContrib < 2) return;
362
363 fHistNeventsJPsi->Fill(3);
364 fHistNeventsPsi2s->Fill(3);
365
17c65770 366 //VZERO, ZDC
367 AliAODVZERO *fV0data = aod ->GetVZEROData();
f052ef6f 368 AliAODZDC *fZDCdata = aod->GetZDCData();
17c65770 369
370 fV0Adecision = fV0data->GetV0ADecision();
371 fV0Cdecision = fV0data->GetV0CDecision();
372 if(fV0Adecision != AliAODVZERO::kV0Empty || fV0Cdecision != AliAODVZERO::kV0Empty) return;
373
f052ef6f 374 fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
375 fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
376
0d644216 377 if( fZDCAenergy > 12000 || fZDCCenergy > 12000) return;
f052ef6f 378
17c65770 379 fHistNeventsJPsi->Fill(4);
380 fHistNeventsPsi2s->Fill(4);
381
382 Int_t nGoodTracks=0;
383 //Two tracks loop
384 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
385
386 TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
387 Short_t qLepton[4], qPion[4];
388 UInt_t nLepton=0, nPion=0, nHighPt=0;
389 Double_t jRecTPCsignal[5];
390 Int_t mass[3]={-1,-1,-1};
73c6b208 391
392 //Two track loop
17c65770 393 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
394 AliAODTrack *trk = aod->GetTrack(itr);
395 if( !trk ) continue;
396
397 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
398 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
73c6b208 399 if(trk->GetTPCNcls() < 70)continue;
17c65770 400 if(trk->Chi2perNDF() > 4)continue;
73c6b208 401 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
17c65770 402 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
403 if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
404 if(TMath::Abs(dca[1]) > 2) continue;
73c6b208 405 if(TMath::Abs(dca[0]) > 0.2) continue;
17c65770 406
407 TrackIndex[nGoodTracks] = itr;
408 nGoodTracks++;
409
73c6b208 410 if(nGoodTracks > 2) break;
17c65770 411 }//Track loop
73c6b208 412
17c65770 413 if(nGoodTracks == 2){
414 fHistNeventsJPsi->Fill(5);
415 for(Int_t i=0; i<2; i++){
416 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
417 if(trk->Pt() > 1) nHighPt++;
418 jRecTPCsignal[nLepton] = trk->GetTPCsignal();
419 qLepton[nLepton] = trk->Charge();
420 if(jRecTPCsignal[nLepton] > 40 && jRecTPCsignal[nLepton] < 70){
421 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
422 mass[nLepton] = 0;
423 }
424 if(jRecTPCsignal[nLepton] > 70 && jRecTPCsignal[nLepton] < 100){
425 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
426 mass[nLepton] = 1;
427 }
428 nLepton++;
429 }
430 if(nLepton == 2){
431 if(qLepton[0]*qLepton[1] > 0) fHistNeventsJPsi->Fill(6);
432 if(qLepton[0]*qLepton[1] < 0){
433 fHistNeventsJPsi->Fill(7);
434 if(nHighPt > 0){
435 fHistNeventsJPsi->Fill(8);
436 fHistTPCsignalJPsi->Fill(jRecTPCsignal[0],jRecTPCsignal[1]);
437 if(nHighPt == 2) fHistNeventsJPsi->Fill(9);
438 if(mass[0] == mass[1] && mass[0] != -1) {
439 fHistNeventsJPsi->Fill(10);
440 vCandidate = vLepton[0]+vLepton[1];
441 if( vCandidate.M() > 2.8 && vCandidate.M() < 3.2) fHistDiLeptonPtJPsi->Fill(vLepton[0].Pt(),vLepton[1].Pt());
442 if(mass[0] == 0) {
443 fHistDiMuonMass->Fill(vCandidate.M());
444 fHistNeventsJPsi->Fill(11);
445 }
446 if(mass[0] == 1) {
447 fHistDiElectronMass->Fill(vCandidate.M());
448 fHistNeventsJPsi->Fill(12);
449 }
450 }
451 }
452 }
453 }
454 }
73c6b208 455
456 nGoodTracks = 0;
457 //Four track loop
458 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
459 AliAODTrack *trk = aod->GetTrack(itr);
460 if( !trk ) continue;
461
462 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
463 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
464 if(trk->GetTPCNcls() < 50)continue;
465 if(trk->Chi2perNDF() > 4)continue;
466 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
467 if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
468 if(TMath::Abs(dca[1]) > 2) continue;
469
470 TrackIndex[nGoodTracks] = itr;
471 nGoodTracks++;
472
473 if(nGoodTracks > 4) break;
474 }//Track loop
475
17c65770 476 nLepton=0; nPion=0; nHighPt=0;
477 mass[0]= -1; mass[1]= -1, mass[2]= -1;
478
479 if(nGoodTracks == 4){
480 fHistNeventsPsi2s->Fill(5);
481 for(Int_t i=0; i<4; i++){
482 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
483
484 if(trk->Pt() > 1){
485 jRecTPCsignal[nLepton] = trk->GetTPCsignal();
486 qLepton[nLepton] = trk->Charge();
487 if(jRecTPCsignal[nLepton] > 40 && jRecTPCsignal[nLepton] < 70){
488 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
489 mass[nLepton] = 0;
490 }
491 if(jRecTPCsignal[nLepton] > 70 && jRecTPCsignal[nLepton] < 100){
492 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
493 mass[nLepton] = 1;
494 }
495 nLepton++;
496 }
497 else{
498 qPion[nPion] = trk->Charge();
499 vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
500 nPion++;
501 }
502
503 if(nLepton > 2 || nPion > 2) break;
504 }
505 if((nLepton == 2) && (nPion == 2)){
506 fHistNeventsPsi2s->Fill(6);
507 if(qLepton[0]*qLepton[1] > 0) fHistNeventsPsi2s->Fill(7);
508 if(qPion[0]*qPion[1] > 0) fHistNeventsPsi2s->Fill(8);
509 if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(9);
510 if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
511 fHistNeventsPsi2s->Fill(10);
512 if(mass[0] == mass[1]) {
513 fHistNeventsPsi2s->Fill(11);
514 vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
515 vDilepton = vLepton[0]+vLepton[1];
516 fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
517 if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
518 if(mass[0] == 0) fHistNeventsPsi2s->Fill(12);
519 if(mass[0] == 1) fHistNeventsPsi2s->Fill(13);
520 }
521 }
522 }
523 }
524
46e1d1dc 525 PostData(4, fListHist);
17c65770 526
527}
3d16cd00 528
529//_____________________________________________________________________________
17c65770 530void AliAnalysisTaskUpcPsi2s::RunAODtree()
3d16cd00 531{
532 //input event
533 AliAODEvent *aod = (AliAODEvent*) InputEvent();
534 if(!aod) return;
535
536 //input data
537 const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
538 fDataFilnam->Clear();
539 fDataFilnam->SetString(filnam);
540 fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
541 fRunNum = aod ->GetRunNumber();
542
3d16cd00 543 //Trigger
544 TString trigger = aod->GetFiredTriggerClasses();
545
f052ef6f 546 if( !trigger.Contains("CCUP4-B") ) return;
3d16cd00 547
548 //trigger inputs
549 fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
550 fL1inputs = aod->GetHeader()->GetL1TriggerInputs();
551
552 //Event identification
553 fPerNum = aod ->GetPeriodNumber();
554 fOrbNum = aod ->GetOrbitNumber();
555 fBCrossNum = aod ->GetBunchCrossNumber();
556
557 //primary vertex
558 AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
559 fVtxContrib = fAODVertex->GetNContributors();
d457ec9e
M
560 fVtxPosX = fAODVertex->GetX();
561 fVtxPosY = fAODVertex->GetY();
562 fVtxPosZ = fAODVertex->GetZ();
563 Double_t CovMatx[6];
564 fAODVertex->GetCovarianceMatrix(CovMatx);
565 fVtxErrX = CovMatx[0];
566 fVtxErrY = CovMatx[1];
567 fVtxErrZ = CovMatx[2];
568 fVtxChi2 = fAODVertex->GetChi2();
569 fVtxNDF = fAODVertex->GetNDF();
0d644216 570
3d16cd00 571
572 //Tracklets
573 fNtracklets = aod->GetTracklets()->GetNumberOfTracklets();
574
575 //VZERO, ZDC
576 AliAODVZERO *fV0data = aod ->GetVZEROData();
577 AliAODZDC *fZDCdata = aod->GetZDCData();
578
579 fV0Adecision = fV0data->GetV0ADecision();
580 fV0Cdecision = fV0data->GetV0CDecision();
581 fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
582 fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
3d16cd00 583
17c65770 584 Int_t nGoodTracks=0;
3d16cd00 585 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
586
73c6b208 587 //Two track loop
3d16cd00 588 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
589 AliAODTrack *trk = aod->GetTrack(itr);
590 if( !trk ) continue;
591
592 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
593 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
73c6b208 594 if(trk->GetTPCNcls() < 70)continue;
3d16cd00 595 if(trk->Chi2perNDF() > 4)continue;
73c6b208 596 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
3d16cd00 597 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
598 if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
599 if(TMath::Abs(dca[1]) > 2) continue;
73c6b208 600 if(TMath::Abs(dca[0]) > 0.2) continue;
3d16cd00 601
602 TrackIndex[nGoodTracks] = itr;
603 nGoodTracks++;
604
73c6b208 605 if(nGoodTracks > 2) break;
3d16cd00 606 }//Track loop
73c6b208 607
3d16cd00 608 if(nGoodTracks == 2){
609 for(Int_t i=0; i<2; i++){
610 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
611
612 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
613 trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov);
614
f052ef6f 615 trk->SetDCA(dca[0],dca[1]); //to get DCAxy trk->DCA(); to get DCAz trk->ZAtDCA();
3d16cd00 616 new((*fJPsiAODTracks)[i]) AliAODTrack(*trk);
617
618 }
619 fJPsiTree ->Fill();
620 PostData(1, fJPsiTree);
621 }
73c6b208 622
623 nGoodTracks = 0;
624 //Four track loop
625 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
626 AliAODTrack *trk = aod->GetTrack(itr);
627 if( !trk ) continue;
628
629 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
630 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
631 if(trk->GetTPCNcls() < 50)continue;
632 if(trk->Chi2perNDF() > 4)continue;
633 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
634 if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
635 if(TMath::Abs(dca[1]) > 2) continue;
636
637 TrackIndex[nGoodTracks] = itr;
638 nGoodTracks++;
639
640 if(nGoodTracks > 4) break;
641 }//Track loop
642
3d16cd00 643
644 if(nGoodTracks == 4){
645 for(Int_t i=0; i<4; i++){
646 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
647
648 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
649 trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov);
650
f052ef6f 651 trk->SetDCA(dca[0],dca[1]); //to get DCAxy trk->DCA(); to get DCAz trk->ZAtDCA();
3d16cd00 652 new((*fPsi2sAODTracks)[i]) AliAODTrack(*trk);
653
654 }
655 fPsi2sTree ->Fill();
656 PostData(2, fPsi2sTree);
657 }
3d16cd00 658
659}//RunAOD
660
661//_____________________________________________________________________________
f052ef6f 662void AliAnalysisTaskUpcPsi2s::RunESDtrig()
663{
664
665 //input event
666 AliESDEvent *esd = (AliESDEvent*) InputEvent();
667 if(!esd) return;
668
669 fRunNum = esd ->GetRunNumber();
670 //Trigger
671 TString trigger = esd->GetFiredTriggerClasses();
672
673 if(trigger.Contains("CCUP4-B")) fHistUpcTriggersPerRun->Fill(fRunNum); //Upc triggers
674
0d644216 675 if(trigger.Contains("CVLN")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers
f052ef6f 676
677 if(esd->GetHeader()->IsTriggerInputFired("1ZED")) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
678
679PostData(3, fListTrig);
680
681}
682//_____________________________________________________________________________
683void AliAnalysisTaskUpcPsi2s::RunESDhist()
684{
685
686 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
687
688 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
689 Double_t muonMass = partMuon->Mass();
690
691 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
692 Double_t electronMass = partElectron->Mass();
693
694 TParticlePDG *partPion = pdgdat->GetParticle( 211 );
695 Double_t pionMass = partPion->Mass();
696
697 //input event
698 AliESDEvent *esd = (AliESDEvent*) InputEvent();
699 if(!esd) return;
700
701 fHistNeventsJPsi->Fill(1);
702 fHistNeventsPsi2s->Fill(1);
703
704 //Trigger
705 TString trigger = esd->GetFiredTriggerClasses();
706
707 if( !trigger.Contains("CCUP4-B") ) return;
708
709 fHistNeventsJPsi->Fill(2);
710 fHistNeventsPsi2s->Fill(2);
711
712 //primary vertex
713 AliESDVertex *fESDVertex = (AliESDVertex*) esd->GetPrimaryVertex();
714 fVtxContrib = fESDVertex->GetNContributors();
715 if(fVtxContrib < 2) return;
716
717 fHistNeventsJPsi->Fill(3);
718 fHistNeventsPsi2s->Fill(3);
719
720 //VZERO, ZDC
721 AliESDVZERO *fV0data = esd->GetVZEROData();
722 AliESDZDC *fZDCdata = esd->GetESDZDC();
723
724 fV0Adecision = fV0data->GetV0ADecision();
725 fV0Cdecision = fV0data->GetV0CDecision();
726 if(fV0Adecision != AliESDVZERO::kV0Empty || fV0Cdecision != AliESDVZERO::kV0Empty) return;
727
728 fZDCAenergy = fZDCdata->GetZN2TowerEnergy()[0];
729 fZDCCenergy = fZDCdata->GetZN1TowerEnergy()[0];
730 if( fZDCAenergy > 12000 || fZDCCenergy > 12000) return;
731
732 fHistNeventsJPsi->Fill(4);
733 fHistNeventsPsi2s->Fill(4);
734
735 Int_t nGoodTracks=0;
736 //Two tracks loop
737 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
738
739 TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
740 Short_t qLepton[4], qPion[4];
741 UInt_t nLepton=0, nPion=0, nHighPt=0;
742 Double_t jRecTPCsignal[5];
743 Int_t mass[3]={-1,-1,-1};
744
745 //Track loop
746 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
747 AliESDtrack *trk = esd->GetTrack(itr);
748 if( !trk ) continue;
749
750 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
751 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
752 if(trk->GetTPCNcls() < 50)continue;
753 if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
754 Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
755 if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
756 trk->GetImpactParameters(dca[0],dca[1]);
757 if(TMath::Abs(dca[1]) > 2) continue;
758
759 TrackIndex[nGoodTracks] = itr;
760 nGoodTracks++;
761 if(nGoodTracks > 4) break;
762 }//Track loop
763
764 if(nGoodTracks == 2){
765 fHistNeventsJPsi->Fill(5);
766 for(Int_t i=0; i<2; i++){
767 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
768 if(trk->Pt() > 1) nHighPt++;
769 jRecTPCsignal[nLepton] = trk->GetTPCsignal();
770 qLepton[nLepton] = trk->Charge();
771 if(jRecTPCsignal[nLepton] > 40 && jRecTPCsignal[nLepton] < 70){
772 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
773 mass[nLepton] = 0;
774 }
775 if(jRecTPCsignal[nLepton] > 70 && jRecTPCsignal[nLepton] < 100){
776 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
777 mass[nLepton] = 1;
778 }
779 nLepton++;
780 }
781 if(nLepton == 2){
782 if(qLepton[0]*qLepton[1] > 0) fHistNeventsJPsi->Fill(6);
783 if(qLepton[0]*qLepton[1] < 0){
784 fHistNeventsJPsi->Fill(7);
785 if(nHighPt > 0){
786 fHistNeventsJPsi->Fill(8);
787 fHistTPCsignalJPsi->Fill(jRecTPCsignal[0],jRecTPCsignal[1]);
788 if(nHighPt == 2) fHistNeventsJPsi->Fill(9);
789 if(mass[0] == mass[1] && mass[0] != -1) {
790 fHistNeventsJPsi->Fill(10);
791 vCandidate = vLepton[0]+vLepton[1];
792 if( vCandidate.M() > 2.8 && vCandidate.M() < 3.2) fHistDiLeptonPtJPsi->Fill(vLepton[0].Pt(),vLepton[1].Pt());
793 if(mass[0] == 0) {
794 fHistDiMuonMass->Fill(vCandidate.M());
795 fHistNeventsJPsi->Fill(11);
796 }
797 if(mass[0] == 1) {
798 fHistDiElectronMass->Fill(vCandidate.M());
799 fHistNeventsJPsi->Fill(12);
800 }
801 }
802 }
803 }
804 }
805 }
806 nLepton=0; nPion=0; nHighPt=0;
807 mass[0]= -1; mass[1]= -1, mass[2]= -1;
808
809 if(nGoodTracks == 4){
810 fHistNeventsPsi2s->Fill(5);
811 for(Int_t i=0; i<4; i++){
812 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
813
814 if(trk->Pt() > 1){
815 jRecTPCsignal[nLepton] = trk->GetTPCsignal();
816 qLepton[nLepton] = trk->Charge();
817 if(jRecTPCsignal[nLepton] > 40 && jRecTPCsignal[nLepton] < 70){
818 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
819 mass[nLepton] = 0;
820 }
821 if(jRecTPCsignal[nLepton] > 70 && jRecTPCsignal[nLepton] < 100){
822 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
823 mass[nLepton] = 1;
824 }
825 nLepton++;
826 }
827 else{
828 qPion[nPion] = trk->Charge();
829 vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
830 nPion++;
831 }
832
833 if(nLepton > 2 || nPion > 2) break;
834 }
835 if((nLepton == 2) && (nPion == 2)){
836 fHistNeventsPsi2s->Fill(6);
837 if(qLepton[0]*qLepton[1] > 0) fHistNeventsPsi2s->Fill(7);
838 if(qPion[0]*qPion[1] > 0) fHistNeventsPsi2s->Fill(8);
839 if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(9);
840 if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
841 fHistNeventsPsi2s->Fill(10);
842 if(mass[0] == mass[1]) {
843 fHistNeventsPsi2s->Fill(11);
844 vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
845 vDilepton = vLepton[0]+vLepton[1];
846 fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
847 if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
848 if(mass[0] == 0) fHistNeventsPsi2s->Fill(12);
849 if(mass[0] == 1) fHistNeventsPsi2s->Fill(13);
850 }
851 }
852 }
853 }
854
855 PostData(4, fListHist);
856
857}
858
859//_____________________________________________________________________________
860void AliAnalysisTaskUpcPsi2s::RunESDtree()
3d16cd00 861{
862
863 //input event
864 AliESDEvent *esd = (AliESDEvent*) InputEvent();
865 if(!esd) return;
866
867 //input data
868 const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
869 fDataFilnam->Clear();
870 fDataFilnam->SetString(filnam);
871 fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
872 fRunNum = esd->GetRunNumber();
873
3d16cd00 874 //Trigger
875 TString trigger = esd->GetFiredTriggerClasses();
876
f052ef6f 877 if( !trigger.Contains("CCUP4-B") ) return;
3d16cd00 878
879 //trigger inputs
880 fL0inputs = esd->GetHeader()->GetL0TriggerInputs();
881 fL1inputs = esd->GetHeader()->GetL1TriggerInputs();
882
883 //Event identification
884 fPerNum = esd->GetPeriodNumber();
885 fOrbNum = esd->GetOrbitNumber();
886 fBCrossNum = esd->GetBunchCrossNumber();
887
888 //primary vertex
889 AliESDVertex *fESDVertex = (AliESDVertex*) esd->GetPrimaryVertex();
890 fVtxContrib = fESDVertex->GetNContributors();
891
892 //Tracklets
893 fNtracklets = esd->GetMultiplicity()->GetNumberOfTracklets();
894
895 //VZERO, ZDC
896 AliESDVZERO *fV0data = esd->GetVZEROData();
897 AliESDZDC *fZDCdata = esd->GetESDZDC();
898
899 fV0Adecision = fV0data->GetV0ADecision();
900 fV0Cdecision = fV0data->GetV0CDecision();
901 fZDCAenergy = fZDCdata->GetZN2TowerEnergy()[0];
902 fZDCCenergy = fZDCdata->GetZN1TowerEnergy()[0];
3d16cd00 903
17c65770 904 Int_t nGoodTracks=0;
3d16cd00 905 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
17c65770 906
907 //Track loop
3d16cd00 908 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
909 AliESDtrack *trk = esd->GetTrack(itr);
910 if( !trk ) continue;
911
912 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
913 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
914 if(trk->GetTPCNcls() < 50)continue;
915 if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
916 Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
917 if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
918 trk->GetImpactParameters(dca[0],dca[1]);
919 if(TMath::Abs(dca[1]) > 2) continue;
920
921 TrackIndex[nGoodTracks] = itr;
922 nGoodTracks++;
923 if(nGoodTracks > 4) break;
924 }//Track loop
925
926 if(nGoodTracks == 2){
927 for(Int_t i=0; i<2; i++){
928 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
929
930 AliExternalTrackParam cParam;
931 trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam);// to get trk->GetImpactParameters(DCAxy,DCAz);
932
933 new((*fJPsiESDTracks)[i]) AliESDtrack(*trk);
934
935 }
936 fJPsiTree ->Fill();
937 PostData(1, fJPsiTree);
938 }
939
940 if(nGoodTracks == 4){
941 for(Int_t i=0; i<4; i++){
942 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
943
944 AliExternalTrackParam cParam;
945 trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam);// to get trk->GetImpactParameters(DCAxy,DCAz);
946
947 new((*fPsi2sESDTracks)[i]) AliESDtrack(*trk);
948
949 }
950 fPsi2sTree ->Fill();
951 PostData(2, fPsi2sTree);
952 }
3d16cd00 953
954}//RunESD
955
956//_____________________________________________________________________________
957void AliAnalysisTaskUpcPsi2s::Terminate(Option_t *)
958{
959
960 cout<<"Analysis complete."<<endl;
961}//Terminate
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991