1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
23 #include "TClonesArray.h"
24 #include "TParticle.h"
25 #include "TObjString.h"
27 #include "TDatabasePDG.h"
28 #include "TLorentzVector.h"
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"
56 #include "AliAnalysisTaskUpcPsi2s.h"
58 ClassImp(AliAnalysisTaskUpcPsi2s);
63 //trees for UPC analysis,
64 // michal.broz@cern.ch
66 //_____________________________________________________________________________
67 AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s()
68 : AliAnalysisTaskSE(),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fRunSystematics(kFALSE),fPIDResponse(0),fJPsiTree(0),fPsi2sTree(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 fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),fGenPart(0),
76 fListTrig(0),fHistCcup4TriggersPerRun(0), fHistCcup7TriggersPerRun(0), fHistCcup2TriggersPerRun(0),
77 fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
78 fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),fHistDiLeptonMass(0),
79 fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
80 fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0)
86 }//AliAnalysisTaskUpcPsi2s
89 //_____________________________________________________________________________
90 AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name)
91 : AliAnalysisTaskSE(name),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fRunSystematics(kFALSE),fPIDResponse(0),fJPsiTree(0),fPsi2sTree(0),
92 fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
93 fTOFtrig1(0), fTOFtrig2(0),
94 fVtxContrib(0),fVtxChi2(0),fVtxNDF(0),
95 fBCrossNum(0),fNtracklets(0),fNLooseTracks(0),
96 fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
97 fDataFilnam(0),fRecoPass(0),fEvtNum(0),
98 fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),fGenPart(0),
99 fListTrig(0),fHistCcup4TriggersPerRun(0), fHistCcup7TriggersPerRun(0), fHistCcup2TriggersPerRun(0),
100 fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
101 fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),fHistDiLeptonMass(0),
102 fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
103 fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0)
108 if( strstr(name,"ESD") ) fType = 0;
109 if( strstr(name,"AOD") ) fType = 1;
113 DefineOutput(1, TTree::Class());
114 DefineOutput(2, TTree::Class());
115 DefineOutput(3, TList::Class());
116 DefineOutput(4, TList::Class());
118 }//AliAnalysisTaskUpcPsi2s
120 //_____________________________________________________________________________
121 void AliAnalysisTaskUpcPsi2s::Init()
124 for(Int_t i=0; i<ntrg; i++) fTrigger[i] = kFALSE;
125 for(Int_t i=0; i<4; i++) {
128 fPIDElectron[i] = -666;
130 fTriggerInputsMC[i] = kFALSE;
132 for(Int_t i=0; i<3; i++){
140 //_____________________________________________________________________________
141 AliAnalysisTaskUpcPsi2s::~AliAnalysisTaskUpcPsi2s()
161 }//~AliAnalysisTaskUpcPsi2s
164 //_____________________________________________________________________________
165 void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
168 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
169 AliInputEventHandler *inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
170 fPIDResponse = inputHandler->GetPIDResponse();
173 fDataFilnam = new TObjString();
174 fDataFilnam->SetString("");
177 fJPsiAODTracks = new TClonesArray("AliAODTrack", 1000);
178 fJPsiESDTracks = new TClonesArray("AliESDtrack", 1000);
179 fPsi2sAODTracks = new TClonesArray("AliAODTrack", 1000);
180 fPsi2sESDTracks = new TClonesArray("AliESDtrack", 1000);
181 fGenPart = new TClonesArray("TParticle", 1000);
183 //output tree with JPsi candidate events
184 fJPsiTree = new TTree("fJPsiTree", "fJPsiTree");
185 fJPsiTree ->Branch("fRunNum", &fRunNum, "fRunNum/I");
186 fJPsiTree ->Branch("fPerNum", &fPerNum, "fPerNum/i");
187 fJPsiTree ->Branch("fOrbNum", &fOrbNum, "fOrbNum/i");
189 fJPsiTree ->Branch("fBCrossNum", &fBCrossNum, "fBCrossNum/s");
190 fJPsiTree ->Branch("fTrigger", &fTrigger[0], Form("fTrigger[%i]/O", ntrg));
191 fJPsiTree ->Branch("fL0inputs", &fL0inputs, "fL0inputs/i");
192 fJPsiTree ->Branch("fL1inputs", &fL1inputs, "fL1inputs/i");
193 fJPsiTree ->Branch("fNtracklets", &fNtracklets, "fNtracklets/s");
194 fJPsiTree ->Branch("fNLooseTracks", &fNLooseTracks, "fNLooseTracks/s");
195 fJPsiTree ->Branch("fVtxContrib", &fVtxContrib, "fVtxContrib/I");
197 fJPsiTree ->Branch("fTOFtrig1", &fTOFtrig1, "fTOFtrig1/O");
198 fJPsiTree ->Branch("fTOFtrig2", &fTOFtrig2, "fTOFtrig2/O");
199 fJPsiTree ->Branch("fTOFphi", &fTOFphi[0], "fTOFphi[4]/D");
201 fJPsiTree ->Branch("fPIDMuon", &fPIDMuon[0], "fPIDMuon[4]/D");
202 fJPsiTree ->Branch("fPIDElectron", &fPIDElectron[0], "fPIDElectron[4]/D");
203 fJPsiTree ->Branch("fPIDPion", &fPIDPion[0], "fPIDPion[4]/D");
205 fJPsiTree ->Branch("fVtxPos", &fVtxPos[0], "fVtxPos[3]/D");
206 fJPsiTree ->Branch("fVtxErr", &fVtxErr[0], "fVtxErr[3]/D");
207 fJPsiTree ->Branch("fVtxChi2", &fVtxChi2, "fVtxChi2/D");
208 fJPsiTree ->Branch("fVtxNDF", &fVtxNDF, "fVtxNDF/D");
210 fJPsiTree ->Branch("fKfVtxPos", &fKfVtxPos[0], "fKfVtxPos[3]/D");
212 fJPsiTree ->Branch("fZDCAenergy", &fZDCAenergy, "fZDCAenergy/D");
213 fJPsiTree ->Branch("fZDCCenergy", &fZDCCenergy, "fZDCCenergy/D");
214 fJPsiTree ->Branch("fV0Adecision", &fV0Adecision, "fV0Adecision/I");
215 fJPsiTree ->Branch("fV0Cdecision", &fV0Cdecision, "fV0Cdecision/I");
216 fJPsiTree ->Branch("fDataFilnam", &fDataFilnam);
217 fJPsiTree ->Branch("fRecoPass", &fRecoPass, "fRecoPass/S");
218 fJPsiTree ->Branch("fEvtNum", &fEvtNum, "fEvtNum/L");
220 fJPsiTree ->Branch("fJPsiESDTracks", &fJPsiESDTracks);
223 fJPsiTree ->Branch("fJPsiAODTracks", &fJPsiAODTracks);
226 fJPsiTree ->Branch("fGenPart", &fGenPart);
227 fJPsiTree ->Branch("fTriggerInputsMC", &fTriggerInputsMC[0], "fTriggerInputsMC[4]/O");
231 //output tree with Psi2s candidate events
232 fPsi2sTree = new TTree("fPsi2sTree", "fPsi2sTree");
233 fPsi2sTree ->Branch("fRunNum", &fRunNum, "fRunNum/I");
234 fPsi2sTree ->Branch("fPerNum", &fPerNum, "fPerNum/i");
235 fPsi2sTree ->Branch("fOrbNum", &fOrbNum, "fOrbNum/i");
237 fPsi2sTree ->Branch("fBCrossNum", &fBCrossNum, "fBCrossNum/s");
238 fPsi2sTree ->Branch("fTrigger", &fTrigger[0], Form("fTrigger[%i]/O", ntrg));
239 fPsi2sTree ->Branch("fL0inputs", &fL0inputs, "fL0inputs/i");
240 fPsi2sTree ->Branch("fL1inputs", &fL1inputs, "fL1inputs/i");
241 fPsi2sTree ->Branch("fNtracklets", &fNtracklets, "fNtracklets/s");
242 fPsi2sTree ->Branch("fNLooseTracks", &fNLooseTracks, "fNLooseTracks/s");
243 fPsi2sTree ->Branch("fVtxContrib", &fVtxContrib, "fVtxContrib/I");
245 fPsi2sTree ->Branch("fTOFtrig1", &fTOFtrig1, "fTOFtrig1/O");
246 fPsi2sTree ->Branch("fTOFtrig2", &fTOFtrig2, "fTOFtrig2/O");
247 fPsi2sTree ->Branch("fTOFphi", &fTOFphi[0], "fTOFphi[4]/D");
249 fPsi2sTree ->Branch("fPIDMuon", &fPIDMuon[0], "fPIDMuon[4]/D");
250 fPsi2sTree ->Branch("fPIDElectron", &fPIDElectron[0], "fPIDElectron[4]/D");
251 fPsi2sTree ->Branch("fPIDPion", &fPIDPion[0], "fPIDPion[4]/D");
253 fPsi2sTree ->Branch("fVtxPos", &fVtxPos[0], "fVtxPos[3]/D");
254 fPsi2sTree ->Branch("fVtxErr", &fVtxErr[0], "fVtxErr[3]/D");
255 fPsi2sTree ->Branch("fVtxChi2", &fVtxChi2, "fVtxChi2/D");
256 fPsi2sTree ->Branch("fVtxNDF", &fVtxNDF, "fVtxNDF/D");
258 fPsi2sTree ->Branch("fKfVtxPos", &fKfVtxPos[0], "fKfVtxPos[3]/D");
260 fPsi2sTree ->Branch("fZDCAenergy", &fZDCAenergy, "fZDCAenergy/D");
261 fPsi2sTree ->Branch("fZDCCenergy", &fZDCCenergy, "fZDCCenergy/D");
262 fPsi2sTree ->Branch("fV0Adecision", &fV0Adecision, "fV0Adecision/I");
263 fPsi2sTree ->Branch("fV0Cdecision", &fV0Cdecision, "fV0Cdecision/I");
264 fPsi2sTree ->Branch("fDataFilnam", &fDataFilnam);
265 fPsi2sTree ->Branch("fRecoPass", &fRecoPass, "fRecoPass/S");
266 fPsi2sTree ->Branch("fEvtNum", &fEvtNum, "fEvtNum/L");
268 fPsi2sTree ->Branch("fPsi2sESDTracks", &fPsi2sESDTracks);
271 fPsi2sTree ->Branch("fPsi2sAODTracks", &fPsi2sAODTracks);
274 fPsi2sTree ->Branch("fGenPart", &fGenPart);
275 fPsi2sTree ->Branch("fTriggerInputsMC", &fTriggerInputsMC[0], "fTriggerInputsMC[4]/O");
279 fListTrig = new TList();
280 fListTrig ->SetOwner();
282 fHistCcup4TriggersPerRun = new TH1D("fHistCcup4TriggersPerRun", "fHistCcup4TriggersPerRun", 33000, 167000.5, 200000.5);
283 fListTrig->Add(fHistCcup4TriggersPerRun);
285 fHistCcup7TriggersPerRun = new TH1D("fHistCcup7TriggersPerRun", "fHistCcup7TriggersPerRun", 33000, 167000.5, 200000.5);
286 fListTrig->Add(fHistCcup7TriggersPerRun);
288 fHistCcup2TriggersPerRun = new TH1D("fHistCcup2TriggersPerRun", "fHistCcup2TriggersPerRun", 33000, 167000.5, 200000.5);
289 fListTrig->Add(fHistCcup2TriggersPerRun);
291 fHistZedTriggersPerRun = new TH1D("fHistZedTriggersPerRun", "fHistZedTriggersPerRun", 33000, 167000.5, 200000.5);
292 fListTrig->Add(fHistZedTriggersPerRun);
294 fHistCvlnTriggersPerRun = new TH1D("fHistCvlnTriggersPerRun", "fHistCvlnTriggersPerRun", 33000, 167000.5, 200000.5);
295 fListTrig->Add(fHistCvlnTriggersPerRun);
297 fHistMBTriggersPerRun = new TH1D("fHistMBTriggersPerRun", "fHistMBTriggersPerRun", 33000, 167000.5, 200000.5);
298 fListTrig->Add(fHistMBTriggersPerRun);
300 fHistCentralTriggersPerRun = new TH1D("fHistCentralTriggersPerRun", "fHistCentralTriggersPerRun", 33000, 167000.5, 200000.5);
301 fListTrig->Add(fHistCentralTriggersPerRun);
303 fHistSemiCentralTriggersPerRun = new TH1D("fHistSemiCentralTriggersPerRun", "fHistSemiCentralTriggersPerRun", 33000, 167000.5, 200000.5);
304 fListTrig->Add(fHistSemiCentralTriggersPerRun);
306 fListHist = new TList();
307 fListHist ->SetOwner();
309 TString CutNameJPsi[13] = {"Analyzed","Triggered","Vertex cut","V0 decision","Neutron ZDC cut","Two good tracks",
310 "Like sign","Oposite sign","One p_{T}>1", "Both p_{T}>1","PID","Dimuom","Dielectron"};
311 fHistNeventsJPsi = new TH1D("fHistNeventsJPsi","fHistNeventsPsi2s",13,0.5,13.5);
312 for (Int_t i = 0; i<13; i++) fHistNeventsJPsi->GetXaxis()->SetBinLabel(i+1,CutNameJPsi[i].Data());
313 fListHist->Add(fHistNeventsJPsi);
315 fHistTPCsignalJPsi = new TH2D("fHistTPCsignalJPsi","fHistTPCsignalJPsi",240,0,120,240,0,120);
316 fListHist->Add(fHistTPCsignalJPsi);
318 fHistDiLeptonPtJPsi = new TH2D("fHistDiLeptonPtJPsi","fHistDiLeptonPtJPsi",350,0,3.5,350,0,3.5);
319 fListHist->Add(fHistDiLeptonPtJPsi);
321 fHistDiElectronMass = new TH1D("fHistDiElectronMass","Invariant mass of J/#psi candidates",100,2,5);
322 fHistDiElectronMass->GetXaxis()->SetTitle("Invariant mass(e^{+}e^{-}) (GeV/c)");
323 fListHist->Add(fHistDiElectronMass);
325 fHistDiMuonMass = new TH1D("fHistDiMuonMass","Invariant mass of J/#psi candidates",100,2,5);
326 fHistDiMuonMass->GetXaxis()->SetTitle("Invariant mass(#mu^{+}#mu^{-}) (GeV/c)");
327 fListHist->Add(fHistDiMuonMass);
329 fHistDiLeptonMass = new TH1D("fHistDiLeptonMass","Invariant mass of J/#psi candidates",130,2.1,6.0);
330 fHistDiLeptonMass->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}) (GeV/c)");
331 fListHist->Add(fHistDiLeptonMass);
333 TString CutNamePsi2s[14] = {"Analyzed","Triggered","Vertex cut","V0 decision","Neutron ZDC cut","Four good tracks",
334 "DiLepton - DiPion","Like sign leptons","Like sign pions","Like sign both","Oposite sign","PID","Dimuom","Dielectron"};
336 fHistNeventsPsi2s = new TH1D("fHistNeventsPsi2s","fHistNeventsPsi2s",14,0.5,14.5);
337 for (Int_t i = 0; i<14; i++) fHistNeventsPsi2s->GetXaxis()->SetBinLabel(i+1,CutNamePsi2s[i].Data());
338 fListHist->Add(fHistNeventsPsi2s);
340 fHistPsi2sMassVsPt = new TH2D("fHistPsi2sMassVsPt","Mass vs p_{T} of #psi(2s) candidates",100,3,6,50,0,5);
341 fHistPsi2sMassVsPt->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
342 fHistPsi2sMassVsPt->GetYaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
343 fListHist->Add(fHistPsi2sMassVsPt);
345 fHistPsi2sMassCoherent = new TH1D("fHistPsi2sMassAllCoherent","Invariant mass of coherent #psi(2s) candidates",100,3,6);
346 fHistPsi2sMassCoherent->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
347 fListHist->Add(fHistPsi2sMassCoherent);
349 fListSystematics = new TList();
350 fListSystematics->SetOwner();
351 fListSystematics->SetName("fListSystematics");
352 fListHist->Add(fListSystematics);
356 PostData(1, fJPsiTree);
357 PostData(2, fPsi2sTree);
358 PostData(3, fListTrig);
359 PostData(4, fListHist);
361 }//UserCreateOutputObjects
363 //_____________________________________________________________________________
364 void AliAnalysisTaskUpcPsi2s::InitSystematics()
367 fListJPsiLoose = new TList();
368 fListJPsiLoose->SetOwner();
369 fListJPsiLoose->SetName("JPsiLoose");
370 fListSystematics->Add(fListJPsiLoose);
372 TH1D *fHistJPsiNClusLoose = new TH1D("JPsiNClusLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
373 fListJPsiLoose->Add(fHistJPsiNClusLoose);
375 TH1D *fHistJPsiChi2Loose = new TH1D("JPsiChi2Loose","Invariant mass of J/#psi candidates",130,2.1,6.0);
376 fListJPsiLoose->Add(fHistJPsiChi2Loose);
378 TH1D *fHistJPsiDCAzLoose = new TH1D("JPsiDCAzLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
379 fListJPsiLoose->Add(fHistJPsiDCAzLoose);
381 TH1D *fHistJPsiDCAxyLoose = new TH1D("JPsiDCAxyLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
382 fListJPsiLoose->Add(fHistJPsiDCAxyLoose);
384 fListJPsiTight = new TList();
385 fListJPsiTight->SetOwner();
386 fListJPsiTight->SetName("JPsiTight");
387 fListSystematics->Add(fListJPsiTight);
389 TH1D *fHistJPsiNClusTight = new TH1D("JPsiNClusTight","Invariant mass of J/#psi candidates",130,2.1,6.0);
390 fListJPsiTight->Add(fHistJPsiNClusTight);
392 TH1D *fHistJPsiChi2Tight = new TH1D("JPsiChi2Tight","Invariant mass of J/#psi candidates",130,2.1,6.0);
393 fListJPsiTight->Add(fHistJPsiChi2Tight);
395 TH1D *fHistJPsiDCAzTight = new TH1D("JPsiDCAzTight","Invariant mass of J/#psi candidates",130,2.1,6.0);
396 fListJPsiTight->Add(fHistJPsiDCAzTight);
398 TH1D *fHistJPsiDCAxyTight = new TH1D("JPsiDCAxyTight","Invariant mass of J/#psi candidates",130,2.1,6.0);
399 fListJPsiTight->Add(fHistJPsiDCAxyTight);
404 //_____________________________________________________________________________
405 void AliAnalysisTaskUpcPsi2s::UserExec(Option_t *)
408 //cout<<"#################### Next event ##################"<<endl;
412 if(fRunHist) RunESDhist();
413 if(fRunTree) RunESDtree();
418 if(fRunHist) RunAODhist();
419 if(fRunTree) RunAODtree();
423 //_____________________________________________________________________________
424 void AliAnalysisTaskUpcPsi2s::RunAODtrig()
428 AliAODEvent *aod = (AliAODEvent*) InputEvent();
431 fRunNum = aod ->GetRunNumber();
433 TString trigger = aod->GetFiredTriggerClasses();
435 if(trigger.Contains("CCUP4-B")) fHistCcup4TriggersPerRun->Fill(fRunNum); //CCUP4 triggers
436 if(trigger.Contains("CCUP7-B")) fHistCcup7TriggersPerRun->Fill(fRunNum); //CCUP7 triggers
437 if(trigger.Contains("CCUP2-B")) fHistCcup2TriggersPerRun->Fill(fRunNum); //CCUP2 triggers
439 if(trigger.Contains("CVLN_B2-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers - synchronously downscaled
440 if(trigger.Contains("CVLN_R1-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers - randomly downscaled
442 fL1inputs = aod->GetHeader()->GetL1TriggerInputs();
443 if(fL1inputs & (1 << 18)) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
445 //MB, Central and SemiCentral triggers
446 AliCentrality *centrality = aod->GetCentrality();
447 UInt_t selectionMask = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
449 Double_t percentile = centrality->GetCentralityPercentileUnchecked("V0M");
450 //Double_t percentile = centrality->GetCentralityPercentile("V0M");
452 if(((selectionMask & AliVEvent::kMB) == AliVEvent::kMB) && percentile<=80 && percentile>=0) fHistMBTriggersPerRun->Fill(fRunNum);
454 if(((selectionMask & AliVEvent::kCentral) == AliVEvent::kCentral) && percentile<=6 && percentile>=0 && (trigger.Contains("CVHN_R2-B"))) fHistCentralTriggersPerRun->Fill(fRunNum);
456 if(((selectionMask & AliVEvent::kSemiCentral) == AliVEvent::kSemiCentral) && percentile<=50 && percentile>=15) fHistSemiCentralTriggersPerRun->Fill(fRunNum);
458 PostData(3, fListTrig);
461 //_____________________________________________________________________________
462 void AliAnalysisTaskUpcPsi2s::RunAODhist()
465 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
467 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
468 Double_t muonMass = partMuon->Mass();
470 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
471 Double_t electronMass = partElectron->Mass();
473 TParticlePDG *partPion = pdgdat->GetParticle( 211 );
474 Double_t pionMass = partPion->Mass();
477 AliAODEvent *aod = (AliAODEvent*) InputEvent();
480 cout<<"Event number: "<<((TTree*) GetInputData(0))->GetTree()->GetReadEntry()<<endl;
482 fHistNeventsJPsi->Fill(1);
483 fHistNeventsPsi2s->Fill(1);
486 TString trigger = aod->GetFiredTriggerClasses();
488 if(!isMC && !trigger.Contains("CCUP") ) return;
490 fHistNeventsJPsi->Fill(2);
491 fHistNeventsPsi2s->Fill(2);
494 AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
495 fVtxContrib = fAODVertex->GetNContributors();
496 if(fVtxContrib < 2) return;
498 fHistNeventsJPsi->Fill(3);
499 fHistNeventsPsi2s->Fill(3);
502 AliAODVZERO *fV0data = aod ->GetVZEROData();
503 AliAODZDC *fZDCdata = aod->GetZDCData();
505 fV0Adecision = fV0data->GetV0ADecision();
506 fV0Cdecision = fV0data->GetV0CDecision();
507 if(fV0Adecision != AliAODVZERO::kV0Empty || fV0Cdecision != AliAODVZERO::kV0Empty) return;
509 fHistNeventsJPsi->Fill(4);
510 fHistNeventsPsi2s->Fill(4);
512 fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
513 fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
515 if( fZDCAenergy > 8200 || fZDCCenergy > 8200) return;
517 fHistNeventsJPsi->Fill(5);
518 fHistNeventsPsi2s->Fill(5);
520 //Systematics - cut variation
521 if(fRunSystematics) RunAODsystematics(aod);
524 Int_t nGoodTracks = 0;
525 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
527 TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
528 Short_t qLepton[4], qPion[4];
529 UInt_t nLepton=0, nPion=0, nHighPt=0;
530 Double_t fRecTPCsignal[5], fRecTPCsignalDist;
532 Int_t mass[3]={-1,-1,-1};
536 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
537 AliAODTrack *trk = aod->GetTrack(itr);
539 if(!(trk->TestFilterBit(1<<0))) continue;
541 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
542 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
543 if(trk->GetTPCNcls() < 50)continue;
544 if(trk->Chi2perNDF() > 4)continue;
545 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
546 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
547 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
550 if(TMath::Abs(dca[1]) > 2) continue;
552 TrackIndex[nGoodTracks] = itr;
555 if(nGoodTracks > 4) break;
558 nLepton=0; nPion=0; nHighPt=0;
559 mass[0]= -1; mass[1]= -1, mass[2]= -1;
561 if(nGoodTracks == 4){
562 fHistNeventsPsi2s->Fill(6);
563 for(Int_t i=0; i<4; i++){
564 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
567 fRecTPCsignal[nLepton] = trk->GetTPCsignal();
568 qLepton[nLepton] = trk->Charge();
569 if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
570 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
573 if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
574 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
580 qPion[nPion] = trk->Charge();
581 vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
585 if(nLepton > 2 || nPion > 2) break;
587 if((nLepton == 2) && (nPion == 2)){
588 fHistNeventsPsi2s->Fill(7);
589 if(qLepton[0]*qLepton[1] > 0) fHistNeventsPsi2s->Fill(8);
590 if(qPion[0]*qPion[1] > 0) fHistNeventsPsi2s->Fill(9);
591 if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(10);
592 if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
593 fHistNeventsPsi2s->Fill(11);
594 if(mass[0] == mass[1]) {
595 fHistNeventsPsi2s->Fill(12);
596 vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
597 vDilepton = vLepton[0]+vLepton[1];
598 fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
599 if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
600 if(mass[0] == 0) fHistNeventsPsi2s->Fill(13);
601 if(mass[0] == 1) fHistNeventsPsi2s->Fill(14);
609 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
610 AliAODTrack *trk = aod->GetTrack(itr);
612 if(!(trk->TestFilterBit(1<<0))) continue;
614 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
615 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
616 if(trk->GetTPCNcls() < 70)continue;
617 if(trk->Chi2perNDF() > 4)continue;
618 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
619 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
620 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
621 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
623 if(TMath::Abs(dca[1]) > 2) continue;
624 Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
625 if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
627 TrackIndex[nGoodTracks] = itr;
630 if(nGoodTracks > 2) break;
633 nLepton=0; nPion=0; nHighPt=0;
634 mass[0]= -1; mass[1]= -1, mass[2]= -1;
636 if(nGoodTracks == 2){
637 fHistNeventsJPsi->Fill(6);
638 for(Int_t i=0; i<2; i++){
639 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
640 if(trk->Pt() > 1) nHighPt++;
641 fRecTPCsignal[nLepton] = trk->GetTPCsignal();
642 qLepton[nLepton] = trk->Charge();
643 if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
644 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
647 if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
648 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
654 if(qLepton[0]*qLepton[1] > 0) fHistNeventsJPsi->Fill(7);
655 if(qLepton[0]*qLepton[1] < 0){
656 fHistNeventsJPsi->Fill(8);
658 fHistNeventsJPsi->Fill(9);
659 fHistTPCsignalJPsi->Fill(fRecTPCsignal[0],fRecTPCsignal[1]);
660 if(nHighPt == 2) fHistNeventsJPsi->Fill(10);
661 if(mass[0] != -1 && mass[1] != -1) {
662 fHistNeventsJPsi->Fill(11);
663 vCandidate = vLepton[0]+vLepton[1];
664 fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
665 if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
667 fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
668 if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1;
670 if( vCandidate.M() > 2.8 && vCandidate.M() < 3.2) fHistDiLeptonPtJPsi->Fill(vLepton[0].Pt(),vLepton[1].Pt());
672 fHistDiMuonMass->Fill(vCandidate.M());
673 if(vCandidate.Pt()<0.15)fHistDiLeptonMass->Fill(vCandidate.M());
674 fHistNeventsJPsi->Fill(12);
677 fHistDiElectronMass->Fill(vCandidate.M());
678 if(vCandidate.Pt()<0.3)fHistDiLeptonMass->Fill(vCandidate.M());
679 fHistNeventsJPsi->Fill(13);
688 PostData(4, fListHist);
692 //_____________________________________________________________________________
693 void AliAnalysisTaskUpcPsi2s::RunAODsystematics(AliAODEvent* aod)
696 Double_t fJPsiSels[4];
698 fJPsiSels[0] = 70; //min number of TPC clusters
699 fJPsiSels[1] = 4; //chi2
700 fJPsiSels[2] = 2; //DCAz
701 fJPsiSels[3] = 1; // DCAxy 1x
703 Double_t fJPsiSelsMid[4];
705 fJPsiSelsMid[0] = 70; //min number of TPC clusters
706 fJPsiSelsMid[1] = 4; //chi2
707 fJPsiSelsMid[2] = 2; //DCAz
708 fJPsiSelsMid[3] = 1; // DCAxy 1x
710 Double_t fJPsiSelsLoose[4];
712 fJPsiSelsLoose[0] = 60; //min number of TPC clusters
713 fJPsiSelsLoose[1] = 5; //chi2
714 fJPsiSelsLoose[2] = 3; //DCAz
715 fJPsiSelsLoose[3] = 2; // DCAxy 2x
717 Double_t fJPsiSelsTight[4];
719 fJPsiSelsTight[0] = 80; //min number of TPC clusters
720 fJPsiSelsTight[1] = 3.5; //chi2
721 fJPsiSelsTight[2] = 1; //DCAz
722 fJPsiSelsTight[3] = 0.5; // DCAxy 0.5x
724 Int_t nGoodTracks = 0;
725 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
727 TLorentzVector vLepton[4], vCandidate, vDilepton;
729 UInt_t nLepton=0, nHighPt=0;
730 Double_t fRecTPCsignal[5], fRecTPCsignalDist;
733 AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
735 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
737 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
738 Double_t muonMass = partMuon->Mass();
740 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
741 Double_t electronMass = partElectron->Mass();
743 // TParticlePDG *partPion = pdgdat->GetParticle( 211 );
744 // Double_t pionMass = partPion->Mass();
747 for(Int_t i=0; i<4; i++){
748 cout<<"Loose sytematics, cut"<<i<<endl;
749 for(Int_t j=0; j<4; j++){
750 if(i==j) fJPsiSels[j] = fJPsiSelsLoose[i];
751 else fJPsiSels[j] = fJPsiSelsMid[j];
755 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
756 AliAODTrack *trk = aod->GetTrack(itr);
758 if(!(trk->TestFilterBit(1<<0))) continue;
760 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
761 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
762 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
763 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
764 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
765 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
767 Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
769 if(trk->GetTPCNcls() < fJPsiSels[0])continue;
770 if(trk->Chi2perNDF() > fJPsiSels[1])continue;
771 if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;
772 if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
774 TrackIndex[nGoodTracks] = itr;
777 if(nGoodTracks > 2) break;
780 Int_t mass[3]={-1,-1,-1};
782 nLepton=0; nHighPt=0;
784 if(nGoodTracks == 2){
785 fHistNeventsJPsi->Fill(6);
786 for(Int_t k=0; k<2; k++){
787 AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);
788 if(trk->Pt() > 1) nHighPt++;
789 fRecTPCsignal[nLepton] = trk->GetTPCsignal();
790 qLepton[nLepton] = trk->Charge();
791 if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
792 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
795 if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
796 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
802 if(qLepton[0]*qLepton[1] < 0 && nHighPt > 0 && (mass[0]!=-1 || mass[1]!=-1)){
803 vCandidate = vLepton[0]+vLepton[1];
804 fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
805 if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
807 fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
808 if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1;
810 if(fChannel == -1 && vCandidate.Pt()<0.15) ((TH1D*)(fListJPsiLoose->At(i)))->Fill(vCandidate.M());
811 if(fChannel == 1 && vCandidate.Pt()<0.3) ((TH1D*)(fListJPsiLoose->At(i)))->Fill(vCandidate.M());
817 for(Int_t i=0; i<4; i++){
818 cout<<"Tight sytematics, cut"<<i<<endl;
819 for(Int_t j=0; j<4; j++){
820 if(i==j) fJPsiSels[j] = fJPsiSelsTight[i];
821 else fJPsiSels[j] = fJPsiSelsMid[j];
826 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
827 AliAODTrack *trk = aod->GetTrack(itr);
829 if(!(trk->TestFilterBit(1<<0))) continue;
831 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
832 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
833 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
834 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
835 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
836 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
838 Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
840 if(trk->GetTPCNcls() < fJPsiSels[0])continue;
841 if(trk->Chi2perNDF() > fJPsiSels[1])continue;
842 if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;
843 if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
845 TrackIndex[nGoodTracks] = itr;
848 if(nGoodTracks > 2) break;
851 Int_t mass[3]={-1,-1,-1};
853 nLepton=0; nHighPt=0;
855 if(nGoodTracks == 2){
856 fHistNeventsJPsi->Fill(6);
857 for(Int_t k=0; k<2; k++){
858 AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);
859 if(trk->Pt() > 1) nHighPt++;
860 fRecTPCsignal[nLepton] = trk->GetTPCsignal();
861 qLepton[nLepton] = trk->Charge();
862 if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
863 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
866 if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
867 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
873 if(qLepton[0]*qLepton[1] < 0 && nHighPt > 0 && (mass[0]!=-1 || mass[1]!=-1)){
874 vCandidate = vLepton[0]+vLepton[1];
875 fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
876 if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
878 fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
879 if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1;
881 if(fChannel == -1 && vCandidate.Pt()<0.15) ((TH1D*)(fListJPsiTight->At(i)))->Fill(vCandidate.M());
882 if(fChannel == 1 && vCandidate.Pt()<0.3) ((TH1D*)(fListJPsiTight->At(i)))->Fill(vCandidate.M());
890 //_____________________________________________________________________________
891 void AliAnalysisTaskUpcPsi2s::RunAODtree()
894 AliAODEvent *aod = (AliAODEvent*) InputEvent();
897 if(isMC) RunAODMC(aod);
900 const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
901 fDataFilnam->Clear();
902 fDataFilnam->SetString(filnam);
903 fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
904 fRunNum = aod ->GetRunNumber();
907 TString trigger = aod->GetFiredTriggerClasses();
909 fTrigger[0] = trigger.Contains("CCUP4-B"); // Central UPC Pb-Pb 2011
910 fTrigger[1] = trigger.Contains("CCUP2-B"); // Double gap
911 fTrigger[2] = trigger.Contains("CCUP7-B"); // Central UPC p-Pb 2013
913 Bool_t isTriggered = kFALSE;
914 for(Int_t i=0; i<ntrg; i++) {
915 if( fTrigger[i] ) isTriggered = kTRUE;
917 if(!isMC && !isTriggered ) return;
920 fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
921 fL1inputs = aod->GetHeader()->GetL1TriggerInputs();
923 //Event identification
924 fPerNum = aod ->GetPeriodNumber();
925 fOrbNum = aod ->GetOrbitNumber();
926 fBCrossNum = aod ->GetBunchCrossNumber();
929 AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
930 fVtxContrib = fAODVertex->GetNContributors();
931 fVtxPos[0] = fAODVertex->GetX();
932 fVtxPos[1] = fAODVertex->GetY();
933 fVtxPos[2] = fAODVertex->GetZ();
935 fAODVertex->GetCovarianceMatrix(CovMatx);
936 fVtxErr[0] = CovMatx[0];
937 fVtxErr[1] = CovMatx[1];
938 fVtxErr[2] = CovMatx[2];
939 fVtxChi2 = fAODVertex->GetChi2();
940 fVtxNDF = fAODVertex->GetNDF();
943 fNtracklets = aod->GetTracklets()->GetNumberOfTracklets();
946 AliAODVZERO *fV0data = aod ->GetVZEROData();
947 AliAODZDC *fZDCdata = aod->GetZDCData();
949 fV0Adecision = fV0data->GetV0ADecision();
950 fV0Cdecision = fV0data->GetV0CDecision();
951 fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
952 fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
956 //Track loop - loose cuts
957 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
958 AliAODTrack *trk = aod->GetTrack(itr);
960 if(!(trk->TestFilterBit(1<<0))) continue;
962 if(!(trk->GetStatus() & AliAODTrack::kTPCrefit) ) continue;
963 if(!(trk->GetStatus() & AliAODTrack::kITSrefit) ) continue;
964 if(trk->GetTPCNcls() < 20)continue;
966 }//Track loop -loose cuts
969 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
972 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
973 AliAODTrack *trk = aod->GetTrack(itr);
975 if(!(trk->TestFilterBit(1<<0))) continue;
977 if(!(trk->GetStatus() & AliAODTrack::kTPCrefit) ) continue;
978 if(!(trk->GetStatus() & AliAODTrack::kITSrefit) ) continue;
979 if(trk->GetTPCNcls() < 70)continue;
980 if(trk->Chi2perNDF() > 4)continue;
981 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
982 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
983 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
984 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
986 if(TMath::Abs(dca[1]) > 2) continue;
987 Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
988 if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
991 TrackIndex[nGoodTracks] = itr;
994 if(nGoodTracks > 2) break;
997 fJPsiAODTracks->Clear("C");
998 if(nGoodTracks == 2){
1000 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
1001 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
1002 Double_t muonMass = partMuon->Mass();
1003 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
1004 Double_t electronMass = partElectron->Mass();
1005 TParticlePDG *partPion = pdgdat->GetParticle( 211 );
1006 Double_t pionMass = partPion->Mass();
1010 Double_t KFmass = pionMass;
1011 Double_t fRecTPCsignal;
1012 AliKFParticle *KFpart[2];
1013 AliKFVertex *KFvtx = new AliKFVertex();
1014 KFvtx->SetField(aod->GetMagneticField());
1016 for(Int_t i=0; i<2; i++){
1017 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
1019 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
1020 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
1021 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
1024 new((*fJPsiAODTracks)[i]) AliAODTrack(*trk);
1025 ((AliAODTrack*)((*fJPsiAODTracks)[i]))->SetDCA(dca[0],dca[1]);//to get DCAxy trk->DCA(); to get DCAz trk->ZAtDCA();
1027 fPIDMuon[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kMuon);
1028 fPIDElectron[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kElectron);
1029 fPIDPion[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kPion);
1031 trk->GetPosition(KFpar);
1032 trk->PxPyPz(KFpar+3);
1033 trk->GetCovMatrix(KFcov);
1036 fRecTPCsignal = trk->GetTPCsignal();
1037 if(fRecTPCsignal > 40 && fRecTPCsignal < 70) KFmass = muonMass;
1038 if(fRecTPCsignal > 70 && fRecTPCsignal < 100)KFmass = electronMass;
1040 else KFmass = pionMass;
1042 KFpart[i] = new AliKFParticle();
1043 KFpart[i]->SetField(aod->GetMagneticField());
1044 KFpart[i]->AliKFParticleBase::Initialize(KFpar,KFcov,(Int_t) trk->Charge(), KFmass);
1045 KFvtx->AddDaughter(*KFpart[i]);
1048 Double_t pos[3]={0,0,0};
1049 AliExternalTrackParam *parTrk = new AliExternalTrackParam();
1050 parTrk->CopyFromVTrack((AliVTrack*) trk);
1051 if(!parTrk->GetXYZAt(378,aod->GetMagneticField(),pos)) fTOFphi[i] = -666;
1053 fTOFphi[i] = TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
1054 if(fTOFphi[i] < 0) fTOFphi[i]+=(2*TMath::Pi()*TMath::RadToDeg());
1058 fKfVtxPos[0]= KFvtx->GetX();
1059 fKfVtxPos[1]= KFvtx->GetY();
1060 fKfVtxPos[2]= KFvtx->GetZ();
1061 for(UInt_t i=0; i<2; i++)delete KFpart[i];
1064 if(!isMC) fJPsiTree ->Fill();
1069 for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
1070 AliAODTrack *trk = aod->GetTrack(itr);
1071 if( !trk ) continue;
1072 if(!(trk->TestFilterBit(1<<0))) continue;
1074 if(!(trk->GetStatus() & AliAODTrack::kTPCrefit) ) continue;
1075 if(!(trk->GetStatus() & AliAODTrack::kITSrefit) ) continue;
1076 if(trk->GetTPCNcls() < 50)continue;
1077 if(trk->Chi2perNDF() > 4)continue;
1078 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
1079 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
1080 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
1082 if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
1083 if(TMath::Abs(dca[1]) > 2) continue;
1084 Double_t cut_DCAxy = 4*(0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
1085 if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
1087 TrackIndex[nGoodTracks] = itr;
1090 if(nGoodTracks > 4) break;
1093 fPsi2sAODTracks->Clear("C");
1094 if(nGoodTracks == 4){
1096 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
1097 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
1098 Double_t muonMass = partMuon->Mass();
1099 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
1100 Double_t electronMass = partElectron->Mass();
1101 TParticlePDG *partPion = pdgdat->GetParticle( 211 );
1102 Double_t pionMass = partPion->Mass();
1106 Double_t KFmass = pionMass;
1107 Double_t fRecTPCsignal;
1108 AliKFParticle *KFpart[4];
1109 AliKFVertex *KFvtx = new AliKFVertex();
1110 KFvtx->SetField(aod->GetMagneticField());
1112 for(Int_t i=0; i<4; i++){
1113 AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
1115 Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
1116 AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
1117 if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
1120 new((*fPsi2sAODTracks)[i]) AliAODTrack(*trk);
1121 ((AliAODTrack*)((*fPsi2sAODTracks)[i]))->SetDCA(dca[0],dca[1]);//to get DCAxy trk->DCA(); to get DCAz trk->ZAtDCA();
1124 fPIDMuon[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kMuon);
1125 fPIDElectron[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kElectron);
1126 fPIDPion[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kPion);
1128 trk->GetPosition(KFpar);
1129 trk->PxPyPz(KFpar+3);
1130 trk->GetCovMatrix(KFcov);
1133 fRecTPCsignal = trk->GetTPCsignal();
1134 if(fRecTPCsignal > 40 && fRecTPCsignal < 70) KFmass = muonMass;
1135 if(fRecTPCsignal > 70 && fRecTPCsignal < 100)KFmass = electronMass;
1137 else KFmass = pionMass;
1139 KFpart[i] = new AliKFParticle();
1140 KFpart[i]->SetField(aod->GetMagneticField());
1141 KFpart[i]->AliKFParticleBase::Initialize(KFpar,KFcov,(Int_t) trk->Charge(), KFmass);
1142 KFvtx->AddDaughter(*KFpart[i]);
1144 Double_t pos[3]={0,0,0};
1145 AliExternalTrackParam *parTrk = new AliExternalTrackParam();
1146 parTrk->CopyFromVTrack((AliVTrack*) trk);
1147 if(!parTrk->GetXYZAt(378,aod->GetMagneticField(),pos)) fTOFphi[i] = -666;
1149 fTOFphi[i] = TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
1150 if(fTOFphi[i] < 0) fTOFphi[i]+=(2*TMath::Pi()*TMath::RadToDeg());
1154 fKfVtxPos[0]= KFvtx->GetX();
1155 fKfVtxPos[1]= KFvtx->GetY();
1156 fKfVtxPos[2]= KFvtx->GetZ();
1157 for(UInt_t i=0; i<4; i++)delete KFpart[i];
1159 if(!isMC) fPsi2sTree ->Fill();
1164 fPsi2sTree ->Fill();
1167 PostData(1, fJPsiTree);
1168 PostData(2, fPsi2sTree);
1173 //_____________________________________________________________________________
1174 void AliAnalysisTaskUpcPsi2s::RunAODMC(AliAODEvent *aod)
1177 fGenPart->Clear("C");
1179 TClonesArray *arrayMC = (TClonesArray*) aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1180 if(!arrayMC) return;
1183 //loop over mc particles
1184 for(Int_t imc=0; imc<arrayMC->GetEntriesFast(); imc++) {
1185 AliAODMCParticle *mcPart = (AliAODMCParticle*) arrayMC->At(imc);
1186 if(!mcPart) continue;
1188 if(mcPart->GetMother() >= 0) continue;
1190 TParticle *part = (TParticle*) fGenPart->ConstructedAt(nmc++);
1191 part->SetMomentum(mcPart->Px(), mcPart->Py(), mcPart->Pz(), mcPart->E());
1192 part->SetPdgCode(mcPart->GetPdgCode());
1193 part->SetUniqueID(imc);
1194 }//loop over mc particles
1199 //_____________________________________________________________________________
1200 void AliAnalysisTaskUpcPsi2s::RunESDtrig()
1204 AliESDEvent *esd = (AliESDEvent*) InputEvent();
1207 fRunNum = esd ->GetRunNumber();
1209 TString trigger = esd->GetFiredTriggerClasses();
1211 if(trigger.Contains("CCUP4-B")) fHistCcup4TriggersPerRun->Fill(fRunNum); //CCUP4 triggers
1212 if(trigger.Contains("CCUP7-B")) fHistCcup7TriggersPerRun->Fill(fRunNum); //CCUP7 triggers
1213 if(trigger.Contains("CCUP2-B")) fHistCcup2TriggersPerRun->Fill(fRunNum); //CCUP2 triggers
1215 if(trigger.Contains("CVLN_B2-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers - synchronously downscaled
1216 if(trigger.Contains("CVLN_R1-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN triggers - randomly downscaled
1218 if(esd->GetHeader()->IsTriggerInputFired("1ZED")) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
1220 //MB, Central and SemiCentral triggers
1221 AliCentrality *centrality = esd->GetCentrality();
1222 UInt_t selectionMask = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1224 //Double_t percentile = centrality->GetCentralityPercentile("V0M");
1225 Double_t percentile = centrality->GetCentralityPercentileUnchecked("V0M");
1227 if(((selectionMask & AliVEvent::kMB) == AliVEvent::kMB) && percentile<=80 && percentile>=0) fHistMBTriggersPerRun->Fill(fRunNum);
1229 if(((selectionMask & AliVEvent::kCentral) == AliVEvent::kCentral) && percentile<=6 && percentile>=0 && (trigger.Contains("CVHN_R2-B"))) fHistCentralTriggersPerRun->Fill(fRunNum);
1231 if(((selectionMask & AliVEvent::kSemiCentral) == AliVEvent::kSemiCentral) && percentile<=50 && percentile>=15) fHistSemiCentralTriggersPerRun->Fill(fRunNum);
1234 PostData(3, fListTrig);
1237 //_____________________________________________________________________________
1238 void AliAnalysisTaskUpcPsi2s::RunESDhist()
1241 TDatabasePDG *pdgdat = TDatabasePDG::Instance();
1243 TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
1244 Double_t muonMass = partMuon->Mass();
1246 TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
1247 Double_t electronMass = partElectron->Mass();
1249 TParticlePDG *partPion = pdgdat->GetParticle( 211 );
1250 Double_t pionMass = partPion->Mass();
1253 AliESDEvent *esd = (AliESDEvent*) InputEvent();
1256 fHistNeventsJPsi->Fill(1);
1257 fHistNeventsPsi2s->Fill(1);
1260 TString trigger = esd->GetFiredTriggerClasses();
1262 if(!isMC && !trigger.Contains("CCUP") ) return;
1264 fHistNeventsJPsi->Fill(2);
1265 fHistNeventsPsi2s->Fill(2);
1268 AliESDVertex *fESDVertex = (AliESDVertex*) esd->GetPrimaryVertex();
1269 fVtxContrib = fESDVertex->GetNContributors();
1270 if(fVtxContrib < 2) return;
1272 fHistNeventsJPsi->Fill(3);
1273 fHistNeventsPsi2s->Fill(3);
1276 AliESDVZERO *fV0data = esd->GetVZEROData();
1277 AliESDZDC *fZDCdata = esd->GetESDZDC();
1279 fV0Adecision = fV0data->GetV0ADecision();
1280 fV0Cdecision = fV0data->GetV0CDecision();
1281 if(fV0Adecision != AliESDVZERO::kV0Empty || fV0Cdecision != AliESDVZERO::kV0Empty) return;
1283 fZDCAenergy = fZDCdata->GetZN2TowerEnergy()[0];
1284 fZDCCenergy = fZDCdata->GetZN1TowerEnergy()[0];
1285 if( fZDCAenergy > 8200 || fZDCCenergy > 8200) return;
1287 fHistNeventsJPsi->Fill(4);
1288 fHistNeventsPsi2s->Fill(4);
1290 Int_t nGoodTracks=0;
1292 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
1294 TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
1295 Short_t qLepton[4], qPion[4];
1296 UInt_t nLepton=0, nPion=0, nHighPt=0;
1297 Double_t fRecTPCsignal[5];
1298 Int_t mass[3]={-1,-1,-1};
1301 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
1302 AliESDtrack *trk = esd->GetTrack(itr);
1303 if( !trk ) continue;
1305 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
1306 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
1307 if(trk->GetTPCNcls() < 70)continue;
1308 if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
1309 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
1310 Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
1311 if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
1312 trk->GetImpactParameters(dca[0],dca[1]);
1313 if(TMath::Abs(dca[1]) > 2) continue;
1314 if(TMath::Abs(dca[1]) > 0.2) continue;
1316 TrackIndex[nGoodTracks] = itr;
1318 if(nGoodTracks > 2) break;
1322 if(nGoodTracks == 2){
1323 fHistNeventsJPsi->Fill(5);
1324 for(Int_t i=0; i<2; i++){
1325 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
1326 if(trk->Pt() > 1) nHighPt++;
1327 fRecTPCsignal[nLepton] = trk->GetTPCsignal();
1328 qLepton[nLepton] = trk->Charge();
1329 if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
1330 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
1333 if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
1334 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
1340 if(qLepton[0]*qLepton[1] > 0) fHistNeventsJPsi->Fill(6);
1341 if(qLepton[0]*qLepton[1] < 0){
1342 fHistNeventsJPsi->Fill(7);
1344 fHistNeventsJPsi->Fill(8);
1345 fHistTPCsignalJPsi->Fill(fRecTPCsignal[0],fRecTPCsignal[1]);
1346 if(nHighPt == 2) fHistNeventsJPsi->Fill(9);
1347 if(mass[0] == mass[1] && mass[0] != -1) {
1348 fHistNeventsJPsi->Fill(10);
1349 vCandidate = vLepton[0]+vLepton[1];
1350 if( vCandidate.M() > 2.8 && vCandidate.M() < 3.2) fHistDiLeptonPtJPsi->Fill(vLepton[0].Pt(),vLepton[1].Pt());
1352 fHistDiMuonMass->Fill(vCandidate.M());
1353 fHistNeventsJPsi->Fill(11);
1356 fHistDiElectronMass->Fill(vCandidate.M());
1357 fHistNeventsJPsi->Fill(12);
1364 nGoodTracks = 0; nLepton=0; nPion=0; nHighPt=0;
1365 mass[0]= -1; mass[1]= -1, mass[2]= -1;
1368 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
1369 AliESDtrack *trk = esd->GetTrack(itr);
1370 if( !trk ) continue;
1372 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
1373 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
1374 if(trk->GetTPCNcls() < 50)continue;
1375 if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
1376 Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
1377 if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
1378 trk->GetImpactParameters(dca[0],dca[1]);
1379 if(TMath::Abs(dca[1]) > 2) continue;
1381 TrackIndex[nGoodTracks] = itr;
1383 if(nGoodTracks > 4) break;
1386 if(nGoodTracks == 4){
1387 fHistNeventsPsi2s->Fill(5);
1388 for(Int_t i=0; i<4; i++){
1389 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
1392 fRecTPCsignal[nLepton] = trk->GetTPCsignal();
1393 qLepton[nLepton] = trk->Charge();
1394 if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
1395 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
1398 if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
1399 vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
1405 qPion[nPion] = trk->Charge();
1406 vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
1410 if(nLepton > 2 || nPion > 2) break;
1412 if((nLepton == 2) && (nPion == 2)){
1413 fHistNeventsPsi2s->Fill(6);
1414 if(qLepton[0]*qLepton[1] > 0) fHistNeventsPsi2s->Fill(7);
1415 if(qPion[0]*qPion[1] > 0) fHistNeventsPsi2s->Fill(8);
1416 if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(9);
1417 if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
1418 fHistNeventsPsi2s->Fill(10);
1419 if(mass[0] == mass[1]) {
1420 fHistNeventsPsi2s->Fill(11);
1421 vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
1422 vDilepton = vLepton[0]+vLepton[1];
1423 fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
1424 if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
1425 if(mass[0] == 0) fHistNeventsPsi2s->Fill(12);
1426 if(mass[0] == 1) fHistNeventsPsi2s->Fill(13);
1432 PostData(4, fListHist);
1436 //_____________________________________________________________________________
1437 void AliAnalysisTaskUpcPsi2s::RunESDtree()
1441 AliESDEvent *esd = (AliESDEvent*) InputEvent();
1444 if(isMC) RunESDMC(esd);
1447 const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
1448 fDataFilnam->Clear();
1449 fDataFilnam->SetString(filnam);
1450 fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
1451 fRunNum = esd->GetRunNumber();
1454 TString trigger = esd->GetFiredTriggerClasses();
1456 fTrigger[0] = trigger.Contains("CCUP4-B"); // Central UPC Pb-Pb 2011
1457 fTrigger[1] = trigger.Contains("CCUP2-B"); // Double gap
1458 fTrigger[2] = trigger.Contains("CCUP7-B"); // Central UPC p-Pb 2013
1460 Bool_t isTriggered = kFALSE;
1461 for(Int_t i=0; i<ntrg; i++) {
1462 if( fTrigger[i] ) isTriggered = kTRUE;
1464 if(!isMC && !isTriggered ) return;
1467 fL0inputs = esd->GetHeader()->GetL0TriggerInputs();
1468 fL1inputs = esd->GetHeader()->GetL1TriggerInputs();
1470 //TOF trigger info (0OMU)
1471 fTOFtrig1 = esd->GetHeader()->IsTriggerInputFired("0OMU");
1472 fTOFtrig2 = esd->GetHeader()->GetActiveTriggerInputs().Contains("0OMU") ? ((esd->GetHeader()) ? esd->GetHeader()->IsTriggerInputFired("0OMU") : kFALSE) : TESTBIT(esd->GetHeader()->GetL0TriggerInputs(), (kFALSE) ? 21 : 9);
1474 //Event identification
1475 fPerNum = esd->GetPeriodNumber();
1476 fOrbNum = esd->GetOrbitNumber();
1477 fBCrossNum = esd->GetBunchCrossNumber();
1480 AliESDVertex *fESDVertex = (AliESDVertex*) esd->GetPrimaryVertex();
1481 fVtxContrib = fESDVertex->GetNContributors();
1482 fVtxPos[0] = fESDVertex->GetX();
1483 fVtxPos[1] = fESDVertex->GetY();
1484 fVtxPos[2] = fESDVertex->GetZ();
1485 Double_t CovMatx[6];
1486 fESDVertex->GetCovarianceMatrix(CovMatx);
1487 fVtxErr[0] = CovMatx[0];
1488 fVtxErr[1] = CovMatx[1];
1489 fVtxErr[2] = CovMatx[2];
1490 fVtxChi2 = fESDVertex->GetChi2();
1491 fVtxNDF = fESDVertex->GetNDF();
1494 fNtracklets = esd->GetMultiplicity()->GetNumberOfTracklets();
1497 AliESDVZERO *fV0data = esd->GetVZEROData();
1498 AliESDZDC *fZDCdata = esd->GetESDZDC();
1500 fV0Adecision = fV0data->GetV0ADecision();
1501 fV0Cdecision = fV0data->GetV0CDecision();
1502 fZDCAenergy = fZDCdata->GetZN2TowerEnergy()[0];
1503 fZDCCenergy = fZDCdata->GetZN1TowerEnergy()[0];
1507 //Track loop - loose cuts
1508 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
1509 AliESDtrack *trk = esd->GetTrack(itr);
1510 if( !trk ) continue;
1512 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
1513 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
1514 if(trk->GetTPCNcls() < 20)continue;
1516 }//Track loop -loose cuts
1518 Int_t nGoodTracks=0;
1519 Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
1522 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
1523 AliESDtrack *trk = esd->GetTrack(itr);
1524 if( !trk ) continue;
1526 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
1527 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
1528 if(trk->GetTPCNcls() < 70)continue;
1529 if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
1530 if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
1531 Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
1532 if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
1533 trk->GetImpactParameters(dca[0],dca[1]);
1534 if(TMath::Abs(dca[1]) > 2) continue;
1535 if(TMath::Abs(dca[1]) > 0.2) continue;
1537 TrackIndex[nGoodTracks] = itr;
1539 if(nGoodTracks > 2) break;
1542 fJPsiESDTracks->Clear("C");
1543 if(nGoodTracks == 2){
1544 for(Int_t i=0; i<2; i++){
1545 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
1547 AliExternalTrackParam cParam;
1548 trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam);// to get trk->GetImpactParameters(DCAxy,DCAz);
1550 new((*fJPsiESDTracks)[i]) AliESDtrack(*trk);
1552 fPIDMuon[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kMuon);
1553 fPIDElectron[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kElectron);
1554 fPIDPion[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kPion);
1556 Double_t pos[3]={0,0,0};
1557 if(!trk->GetXYZAt(378,esd->GetMagneticField(),pos)) fTOFphi[i] = -666;
1559 fTOFphi[i] = TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
1560 if(fTOFphi[i] < 0) fTOFphi[i]+=(2*TMath::Pi()*TMath::RadToDeg());
1563 if(!isMC) fJPsiTree ->Fill();
1568 for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
1569 AliESDtrack *trk = esd->GetTrack(itr);
1570 if( !trk ) continue;
1572 if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
1573 if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
1574 if(trk->GetTPCNcls() < 50)continue;
1575 if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
1576 Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
1577 if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
1578 trk->GetImpactParameters(dca[0],dca[1]);
1579 if(TMath::Abs(dca[1]) > 2) continue;
1581 TrackIndex[nGoodTracks] = itr;
1583 if(nGoodTracks > 4) break;
1586 fPsi2sESDTracks->Clear("C");
1587 if(nGoodTracks == 4){
1588 for(Int_t i=0; i<4; i++){
1589 AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
1591 AliExternalTrackParam cParam;
1592 trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam);// to get trk->GetImpactParameters(DCAxy,DCAz);
1594 new((*fPsi2sESDTracks)[i]) AliESDtrack(*trk);
1596 fPIDMuon[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kMuon);
1597 fPIDElectron[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kElectron);
1598 fPIDPion[i] = fPIDResponse->NumberOfSigmasTPC(trk,AliPID::kPion);
1600 Double_t pos[3]={0,0,0};
1601 if(!trk->GetXYZAt(378,esd->GetMagneticField(),pos)) fTOFphi[i] = -666;
1603 fTOFphi[i] = TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
1604 if(fTOFphi[i] < 0) fTOFphi[i]+=(2*TMath::Pi()*TMath::RadToDeg());
1607 if(!isMC) fPsi2sTree ->Fill();
1612 fPsi2sTree ->Fill();
1615 PostData(1, fJPsiTree);
1616 PostData(2, fPsi2sTree);
1621 //_____________________________________________________________________________
1622 void AliAnalysisTaskUpcPsi2s::RunESDMC(AliESDEvent* esd)
1625 AliTriggerAnalysis *fTrigAna = new AliTriggerAnalysis();
1626 fTrigAna->SetAnalyzeMC(isMC);
1628 if(fTrigAna->SPDFiredChips(esd,1,kFALSE,2) > 1) fTriggerInputsMC[0] = kTRUE;
1629 if(fTrigAna->SPDFiredChips(esd,1,kFALSE,2) < 2) fTriggerInputsMC[0] = kFALSE;
1631 fTriggerInputsMC[1] = esd->GetHeader()->IsTriggerInputFired("0OMU");
1632 fTriggerInputsMC[2] = esd->GetHeader()->IsTriggerInputFired("0VBA");
1633 fTriggerInputsMC[3] = esd->GetHeader()->IsTriggerInputFired("0VBC");
1635 fGenPart->Clear("C");
1637 AliMCEvent *mc = MCEvent();
1641 //loop over mc particles
1642 for(Int_t imc=0; imc<mc->GetNumberOfTracks(); imc++) {
1643 AliMCParticle *mcPart = (AliMCParticle*) mc->GetTrack(imc);
1644 if(!mcPart) continue;
1646 if(mcPart->GetMother() >= 0) continue;
1648 TParticle *part = (TParticle*) fGenPart->ConstructedAt(nmc++);
1649 part->SetMomentum(mcPart->Px(), mcPart->Py(), mcPart->Pz(), mcPart->E());
1650 part->SetPdgCode(mcPart->PdgCode());
1651 part->SetUniqueID(imc);
1652 }//loop over mc particles
1658 //_____________________________________________________________________________
1659 void AliAnalysisTaskUpcPsi2s::Terminate(Option_t *)
1662 cout<<"Analysis complete."<<endl;