1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
16 //_________________________________________________________________________
18 // Class for track selection and identification (not done now)
19 // Tracks from the CTS are kept in the AOD.
20 // Few histograms produced.
22 //-- Author: Gustavo Conesa (INFN-LNF)
23 //_________________________________________________________________________
26 // --- ROOT system ---
27 #include "TParticle.h"
30 //---- AliRoot system ----
31 #include "AliAnaChargedParticles.h"
32 #include "AliCaloTrackReader.h"
33 #include "AliAODPWG4Particle.h"
35 #include "AliFiducialCut.h"
36 #include "AliVTrack.h"
37 #include "AliAODMCParticle.h"
38 #include "AliAODTrack.h"
39 #include "AliAODEvent.h"
40 #include "AliESDEvent.h"
42 ClassImp(AliAnaChargedParticles)
44 //__________________________________________________
45 AliAnaChargedParticles::AliAnaChargedParticles() :
46 AliAnaCaloTrackCorrBaseClass(),
47 fFillPileUpHistograms(0),
48 fFillVertexBC0Histograms(0),
50 fhNtracks(0), fhPt(0), fhPtNoCut(0),
51 fhPtCutDCA(0), fhPtCutDCABCOK(0),
52 fhPhiNeg(0), fhEtaNeg(0),
53 fhPhiPos(0), fhEtaPos(0),
54 fhEtaPhiPos(0), fhEtaPhiNeg(0),
55 fhPtVtxOutBC0(0), fhEtaPhiVtxOutBC0(0),
56 fhPtVtxInBC0(0), fhEtaPhiVtxInBC0(0),
57 fhPtSPDRefit(0), fhPtNoSPDRefit(0), fhPtNoSPDNoRefit(0),
58 fhEtaPhiSPDRefitPt02(0), fhEtaPhiNoSPDRefitPt02(0), fhEtaPhiNoSPDNoRefitPt02(0),
59 fhEtaPhiSPDRefitPt3(0), fhEtaPhiNoSPDRefitPt3(0), fhEtaPhiNoSPDNoRefitPt3(0),
61 fhPtPion(0), fhPhiPion(0), fhEtaPion(0),
62 fhPtProton(0), fhPhiProton(0), fhEtaProton(0),
63 fhPtElectron(0), fhPhiElectron(0), fhEtaElectron(0),
64 fhPtKaon(0), fhPhiKaon(0), fhEtaKaon(0),
65 fhPtUnknown(0), fhPhiUnknown(0), fhEtaUnknown(0),
67 fhTOFSignal(0), fhTOFSignalPtCut(0), fhTOFSignalBCOK(0),
68 fhPtTOFSignal(0), fhPtTOFSignalDCACut(0),
69 fhPtTOFSignalVtxOutBC0(0), fhPtTOFSignalVtxInBC0(0),
70 fhPtTOFStatus0(0), fhEtaPhiTOFStatus0(0),
71 fhEtaPhiTOFBC0(0), fhEtaPhiTOFBCPlus(0), fhEtaPhiTOFBCMinus(0),
72 fhEtaPhiTOFBC0PileUpSPD(0),
73 fhEtaPhiTOFBCPlusPileUpSPD(0),
74 fhEtaPhiTOFBCMinusPileUpSPD(0),
75 fhProductionVertexBC(0)
79 for(Int_t i = 0; i < 7; i++)
82 fhPtTOFSignalPileUp[i] = 0;
83 fhPtTOFSignalVtxOutBC0PileUp[i] = 0;
84 fhPtTOFSignalVtxInBC0PileUp [i] = 0;
85 fhProductionVertexBCPileUp [i] = 0;
88 for(Int_t i = 0; i < 3; i++)
92 fhPtDCASPDRefit [i] = 0 ;
93 fhPtDCANoSPDRefit [i] = 0 ;
94 fhPtDCANoSPDNoRefit [i] = 0 ;
96 fhPtDCAPileUp [i] = 0 ;
97 fhPtDCATOFBC0 [i] = 0 ;
98 fhPtDCATOFBCOut [i] = 0 ;
99 fhPtDCAPileUpTOFBC0 [i] = 0 ;
100 fhPtDCANoTOFHit [i] = 0 ;
101 fhPtDCAPileUpNoTOFHit [i] = 0 ;
103 fhPtDCAVtxOutBC0 [i] = 0 ;
104 fhPtDCAVtxInBC0 [i] = 0 ;
105 fhPtDCAVtxOutBC0PileUp[i] = 0 ;
106 fhPtDCAVtxInBC0PileUp [i] = 0 ;
107 fhPtDCAVtxOutBC0NoTOFHit[i] = 0 ;
108 fhPtDCAVtxInBC0NoTOFHit [i] = 0 ;
109 fhPtDCAVtxOutBC0PileUpNoTOFHit[i] = 0 ;
110 fhPtDCAVtxInBC0PileUpNoTOFHit [i] = 0 ;
113 //Initialize parameters
118 //_______________________________________________________
119 TList * AliAnaChargedParticles::GetCreateOutputObjects()
121 // Create histograms to be saved in output file and
122 // store them in fOutputContainer
125 TList * outputContainer = new TList() ;
126 outputContainer->SetName("ExampleHistos") ;
128 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
129 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
130 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
132 fhNtracks = new TH1F ("hNtracks","# of tracks", 1000,0,1000);
133 fhNtracks->SetXTitle("# of tracks");
134 outputContainer->Add(fhNtracks);
136 fhPt = new TH1F ("hPt","p_T distribution", nptbins,ptmin,ptmax);
137 fhPt->SetXTitle("p_{T} (GeV/c)");
138 outputContainer->Add(fhPt);
140 fhPtNoCut = new TH1F ("hPtNoCut","p_T distribution, raw tracks", nptbins,ptmin,ptmax);
141 fhPtNoCut->SetXTitle("p_{T} (GeV/c)");
142 outputContainer->Add(fhPtNoCut);
144 fhPtCutDCA = new TH1F ("hPtCutDCA","p_T distribution, cut DCA", nptbins,ptmin,ptmax);
145 fhPtCutDCA->SetXTitle("p_{T} (GeV/c)");
146 outputContainer->Add(fhPtCutDCA);
148 fhPtCutDCABCOK = new TH1F ("hPtCutDCABCOK","p_T distribution, DCA cut, track BC=0 or -100", nptbins,ptmin,ptmax);
149 fhPtCutDCABCOK->SetXTitle("p_{T} (GeV/c)");
150 outputContainer->Add(fhPtCutDCABCOK);
152 fhPhiNeg = new TH2F ("hPhiNegative","#phi of negative charges distribution",
153 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
154 fhPhiNeg->SetYTitle("#phi (rad)");
155 fhPhiNeg->SetXTitle("p_{T} (GeV/c)");
156 outputContainer->Add(fhPhiNeg);
158 fhEtaNeg = new TH2F ("hEtaNegative","#eta of negative charges distribution",
159 nptbins,ptmin,ptmax, netabins,etamin,etamax);
160 fhEtaNeg->SetYTitle("#eta ");
161 fhEtaNeg->SetXTitle("p_{T} (GeV/c)");
162 outputContainer->Add(fhEtaNeg);
164 fhPhiPos = new TH2F ("hPhiPositive","#phi of positive charges distribution",
165 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
166 fhPhiPos->SetYTitle("#phi (rad)");
167 fhPhiPos->SetXTitle("p_{T} (GeV/c)");
168 outputContainer->Add(fhPhiPos);
170 fhEtaPos = new TH2F ("hEtaPositive","#eta of positive charges distribution",
171 nptbins,ptmin,ptmax, netabins,etamin,etamax);
172 fhEtaPos->SetYTitle("#eta ");
173 fhEtaPos->SetXTitle("p_{T} (GeV/c)");
174 outputContainer->Add(fhEtaPos);
176 fhEtaPhiPos = new TH2F ("hEtaPhiPositive","pt/eta/phi of positive charge",netabins,etamin,etamax, nphibins,phimin,phimax);
177 fhEtaPhiPos->SetXTitle("#eta ");
178 fhEtaPhiPos->SetYTitle("#phi (rad)");
179 outputContainer->Add(fhEtaPhiPos);
181 fhEtaPhiNeg = new TH2F ("hEtaPhiNegative","eta vs phi of negative charge",netabins,etamin,etamax, nphibins,phimin,phimax);
182 fhEtaPhiNeg->SetXTitle("#eta ");
183 fhEtaPhiNeg->SetYTitle("#phi (rad)");
184 outputContainer->Add(fhEtaPhiNeg);
186 if(fFillVertexBC0Histograms)
188 fhPtVtxOutBC0 = new TH1F ("hPtVtxOutBC0","p_T distribution, vertex in BC=0", nptbins,ptmin,ptmax);
189 fhPtVtxOutBC0->SetXTitle("p_{T} (GeV/c)");
190 outputContainer->Add(fhPtVtxOutBC0);
192 fhEtaPhiVtxOutBC0 = new TH2F ("hEtaPhiVtxOutBC0","eta vs phi of all charges with vertex in BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
193 fhEtaPhiVtxOutBC0->SetXTitle("#eta ");
194 fhEtaPhiVtxOutBC0->SetYTitle("#phi (rad)");
195 outputContainer->Add(fhEtaPhiVtxOutBC0);
197 fhPtVtxInBC0 = new TH1F ("hPtVtxInBC0","p_T distribution, vertex in BC=0", nptbins,ptmin,ptmax);
198 fhPtVtxInBC0->SetXTitle("p_{T} (GeV/c)");
199 outputContainer->Add(fhPtVtxInBC0);
201 fhEtaPhiVtxInBC0 = new TH2F ("hEtaPhiVtxInBC0","eta vs phi of all charges with vertex in BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
202 fhEtaPhiVtxInBC0->SetXTitle("#eta ");
203 fhEtaPhiVtxInBC0->SetYTitle("#phi (rad)");
204 outputContainer->Add(fhEtaPhiVtxInBC0);
207 fhPtSPDRefit = new TH1F ("hPtSPDRefit","p_T distribution of tracks with SPD and ITS refit", nptbins,ptmin,ptmax);
208 fhPtSPDRefit->SetXTitle("p_{T} (GeV/c)");
209 outputContainer->Add(fhPtSPDRefit);
211 fhEtaPhiSPDRefitPt02 = new TH2F ("hEtaPhiSPDRefitPt02","eta vs phi of tracks with SPD and ITS refit, p_{T} < 2 GeV/c",netabins,etamin,etamax, nphibins,phimin,phimax);
212 fhEtaPhiSPDRefitPt02->SetXTitle("#eta ");
213 fhEtaPhiSPDRefitPt02->SetYTitle("#phi (rad)");
214 outputContainer->Add(fhEtaPhiSPDRefitPt02);
216 fhEtaPhiSPDRefitPt3 = new TH2F ("hEtaPhiSPDRefitPt3","eta vs phi of tracks with SPD and ITS refit, p_{T} > 3 GeV/c",netabins,etamin,etamax, nphibins,phimin,phimax);
217 fhEtaPhiSPDRefitPt3->SetXTitle("#eta ");
218 fhEtaPhiSPDRefitPt3->SetYTitle("#phi (rad)");
219 outputContainer->Add(fhEtaPhiSPDRefitPt3);
221 fhPtNoSPDRefit = new TH1F ("hPtNoSPDRefit","p_T distribution of constrained tracks no SPD and with ITSRefit", nptbins,ptmin,ptmax);
222 fhPtNoSPDRefit->SetXTitle("p_{T} (GeV/c)");
223 outputContainer->Add(fhPtNoSPDRefit);
225 fhEtaPhiNoSPDRefitPt02 = new TH2F ("hEtaPhiNoSPDRefitPt02","eta vs phi of constrained tracks no SPD and with ITSRefit, p_{T} < 2 GeV/c",netabins,etamin,etamax, nphibins,phimin,phimax);
226 fhEtaPhiNoSPDRefitPt02->SetXTitle("#eta ");
227 fhEtaPhiNoSPDRefitPt02->SetYTitle("#phi (rad)");
228 outputContainer->Add(fhEtaPhiNoSPDRefitPt02);
230 fhEtaPhiNoSPDRefitPt3 = new TH2F ("hEtaPhiNoSPDRefitPt3","eta vs phi of of constrained tracks no SPD and with ITSRefit, p_{T} > 3 GeV/c",netabins,etamin,etamax, nphibins,phimin,phimax);
231 fhEtaPhiNoSPDRefitPt3->SetXTitle("#eta ");
232 fhEtaPhiNoSPDRefitPt3->SetYTitle("#phi (rad)");
233 outputContainer->Add(fhEtaPhiNoSPDRefitPt3);
235 fhPtNoSPDNoRefit = new TH1F ("hPtNoSPDNoRefit","p_T distribution of constrained tracks with no SPD requierement and without ITSRefit", nptbins,ptmin,ptmax);
236 fhPtNoSPDNoRefit->SetXTitle("p_{T} (GeV/c)");
237 outputContainer->Add(fhPtNoSPDNoRefit);
239 fhEtaPhiNoSPDNoRefitPt02 = new TH2F ("hEtaPhiNoSPDNoRefitPt02","eta vs phi of constrained tracks with no SPD requierement and without ITSRefit, p_{T} < 2 GeV/c",netabins,etamin,etamax, nphibins,phimin,phimax);
240 fhEtaPhiNoSPDNoRefitPt02->SetXTitle("#eta ");
241 fhEtaPhiNoSPDNoRefitPt02->SetYTitle("#phi (rad)");
242 outputContainer->Add(fhEtaPhiNoSPDNoRefitPt02);
244 fhEtaPhiNoSPDNoRefitPt3 = new TH2F ("hEtaPhiNoSPDNoRefitPt3","eta vs phi of constrained tracks with no SPD requierement and without ITSRefit, p_{T} > 3 GeV/c",netabins,etamin,etamax, nphibins,phimin,phimax);
245 fhEtaPhiNoSPDNoRefitPt3->SetXTitle("#eta ");
246 fhEtaPhiNoSPDNoRefitPt3->SetYTitle("#phi (rad)");
247 outputContainer->Add(fhEtaPhiNoSPDNoRefitPt3);
249 if(fFillVertexBC0Histograms)
251 fhProductionVertexBC = new TH1F("hProductionVertexBC", "tracks production vertex bunch crossing ", 41 , -20 , 20 ) ;
252 fhProductionVertexBC->SetYTitle("# tracks");
253 fhProductionVertexBC->SetXTitle("Bunch crossing");
254 outputContainer->Add(fhProductionVertexBC);
257 Int_t ntofbins = 1000;
261 fhTOFSignal = new TH1F ("hTOFSignal","TOF signal", ntofbins,mintof,maxtof);
262 fhTOFSignal->SetXTitle("TOF signal (ns)");
263 outputContainer->Add(fhTOFSignal);
265 fhTOFSignalBCOK = new TH1F ("hTOFSignalBCOK","TOF signal", ntofbins,mintof,maxtof);
266 fhTOFSignalBCOK->SetXTitle("TOF signal (ns)");
267 outputContainer->Add(fhTOFSignalBCOK);
269 fhTOFSignalPtCut = new TH1F ("hTOFSignalPtCut","TOF signal", ntofbins,mintof,maxtof);
270 fhTOFSignalPtCut->SetXTitle("TOF signal (ns)");
271 outputContainer->Add(fhTOFSignalPtCut);
273 fhPtTOFSignal = new TH2F ("hPtTOFSignal","TOF signal", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
274 fhPtTOFSignal->SetYTitle("TOF signal (ns)");
275 fhPtTOFSignal->SetXTitle("p_{T} (GeV/c)");
276 outputContainer->Add(fhPtTOFSignal);
278 fhPtTOFSignalDCACut = new TH2F ("hPtTOFSignalDCACut","TOF signal after DCA cut", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
279 fhPtTOFSignalDCACut->SetYTitle("TOF signal (ns)");
280 fhPtTOFSignalDCACut->SetXTitle("p_{T} (GeV/c)");
281 outputContainer->Add(fhPtTOFSignalDCACut);
283 if(fFillVertexBC0Histograms)
285 fhPtTOFSignalVtxOutBC0 = new TH2F ("hPtTOFSignalVtxOutBC0","TOF signal, vtx BC!=0", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
286 fhPtTOFSignalVtxOutBC0->SetYTitle("TOF signal (ns)");
287 fhPtTOFSignalVtxOutBC0->SetXTitle("p_{T} (GeV/c)");
288 outputContainer->Add(fhPtTOFSignalVtxOutBC0);
290 fhPtTOFSignalVtxInBC0 = new TH2F ("hPtTOFSignalVtxOnBC0","TOF signal, vtx BC=0", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
291 fhPtTOFSignalVtxInBC0->SetYTitle("TOF signal (ns)");
292 fhPtTOFSignalVtxInBC0->SetXTitle("p_{T} (GeV/c)");
293 outputContainer->Add(fhPtTOFSignalVtxInBC0);
296 if(fFillPileUpHistograms)
298 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
300 for(Int_t i = 0 ; i < 7 ; i++)
302 fhPtPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
303 Form("Track p_{T} distribution, %s Pile-Up event",pileUpName[i].Data()),
304 nptbins,ptmin,ptmax);
305 fhPtPileUp[i]->SetXTitle("p_{T} (GeV/c)");
306 outputContainer->Add(fhPtPileUp[i]);
308 fhPtTOFSignalPileUp[i] = new TH2F(Form("hPtTOFSignalPileUp%s",pileUpName[i].Data()),
309 Form("Track TOF vs p_{T} distribution, %s Pile-Up event",pileUpName[i].Data()),
310 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
311 fhPtTOFSignalPileUp[i]->SetXTitle("p_{T} (GeV/c)");
312 fhPtTOFSignalPileUp[i]->SetXTitle("TOF signal (ns)");
313 outputContainer->Add(fhPtTOFSignalPileUp[i]);
315 if(fFillVertexBC0Histograms)
317 fhPtTOFSignalVtxOutBC0PileUp[i] = new TH2F(Form("hPtTOFSignalVtxOutBC0PileUp%s",pileUpName[i].Data()),
318 Form("Track TOF vs p_{T} distribution, %s Pile-Up event, vtx BC!=0",pileUpName[i].Data()),
319 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
320 fhPtTOFSignalVtxOutBC0PileUp[i]->SetXTitle("p_{T} (GeV/c)");
321 fhPtTOFSignalVtxOutBC0PileUp[i]->SetXTitle("TOF signal (ns)");
322 outputContainer->Add(fhPtTOFSignalVtxOutBC0PileUp[i]);
324 fhPtTOFSignalVtxInBC0PileUp[i] = new TH2F(Form("hPtTOFSignalVtxInBC0PileUp%s",pileUpName[i].Data()),
325 Form("Track TOF vs p_{T} distribution, %s Pile-Up event, vtx BC=0",pileUpName[i].Data()),
326 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
327 fhPtTOFSignalVtxInBC0PileUp[i]->SetXTitle("p_{T} (GeV/c)");
328 fhPtTOFSignalVtxInBC0PileUp[i]->SetXTitle("TOF signal (ns)");
329 outputContainer->Add(fhPtTOFSignalVtxInBC0PileUp[i]);
332 if(fFillVertexBC0Histograms)
334 fhProductionVertexBCPileUp[i] = new TH1F(Form("hProductionVertexBCPileUp%s",pileUpName[i].Data()),
335 Form("tracks production vertex bunch crossing, %s Pile-Up event",pileUpName[i].Data()),
337 fhProductionVertexBCPileUp[i]->SetYTitle("# tracks");
338 fhProductionVertexBCPileUp[i]->SetXTitle("Bunch crossing");
339 outputContainer->Add(fhProductionVertexBCPileUp[i]);
343 fhEtaPhiTOFBC0 = new TH2F ("hEtaPhiTOFBC0","eta-phi for tracks with hit on TOF, and tof corresponding to BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
344 fhEtaPhiTOFBC0->SetXTitle("#eta ");
345 fhEtaPhiTOFBC0->SetYTitle("#phi (rad)");
346 outputContainer->Add(fhEtaPhiTOFBC0);
348 fhEtaPhiTOFBCPlus = new TH2F ("hEtaPhiTOFBCPlus","eta-phi for tracks with hit on TOF, and tof corresponding to BC>0",netabins,etamin,etamax, nphibins,phimin,phimax);
349 fhEtaPhiTOFBCPlus->SetXTitle("#eta ");
350 fhEtaPhiTOFBCPlus->SetYTitle("#phi (rad)");
351 outputContainer->Add(fhEtaPhiTOFBCPlus);
353 fhEtaPhiTOFBCMinus = new TH2F ("hEtaPhiTOFBCMinus","eta-phi for tracks with hit on TOF, and tof corresponding to BC<0",netabins,etamin,etamax, nphibins,phimin,phimax);
354 fhEtaPhiTOFBCMinus->SetXTitle("#eta ");
355 fhEtaPhiTOFBCMinus->SetYTitle("#phi (rad)");
356 outputContainer->Add(fhEtaPhiTOFBCMinus);
358 fhEtaPhiTOFBC0PileUpSPD = new TH2F ("hEtaPhiTOFBC0PileUpSPD","eta-phi for tracks with hit on TOF, and tof corresponding to BC=0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
359 fhEtaPhiTOFBC0PileUpSPD->SetXTitle("#eta ");
360 fhEtaPhiTOFBC0PileUpSPD->SetYTitle("#phi (rad)");
361 outputContainer->Add(fhEtaPhiTOFBC0PileUpSPD);
363 fhEtaPhiTOFBCPlusPileUpSPD = new TH2F ("hEtaPhiTOFBCPlusPileUpSPD","eta-phi for tracks with hit on TOF, and tof corresponding to BC>0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
364 fhEtaPhiTOFBCPlusPileUpSPD->SetXTitle("#eta ");
365 fhEtaPhiTOFBCPlusPileUpSPD->SetYTitle("#phi (rad)");
366 outputContainer->Add(fhEtaPhiTOFBCPlusPileUpSPD);
368 fhEtaPhiTOFBCMinusPileUpSPD = new TH2F ("hEtaPhiTOFBCMinusPileUpSPD","eta-phi for tracks with hit on TOF, and tof corresponding to BC<0, SPD pile-up",netabins,etamin,etamax, nphibins,phimin,phimax);
369 fhEtaPhiTOFBCMinusPileUpSPD->SetXTitle("#eta ");
370 fhEtaPhiTOFBCMinusPileUpSPD->SetYTitle("#phi (rad)");
371 outputContainer->Add(fhEtaPhiTOFBCMinusPileUpSPD);
375 fhPtTOFStatus0 = new TH1F ("hPtTOFStatus0","p_T distribution of tracks not hitting TOF", nptbins,ptmin,ptmax);
376 fhPtTOFStatus0->SetXTitle("p_{T} (GeV/c)");
377 outputContainer->Add(fhPtTOFStatus0);
380 fhEtaPhiTOFStatus0 = new TH2F ("hEtaPhiTOFStatus0","eta-phi for tracks without hit on TOF",netabins,etamin,etamax, nphibins,phimin,phimax);
381 fhEtaPhiTOFStatus0->SetXTitle("#eta ");
382 fhEtaPhiTOFStatus0->SetYTitle("#phi (rad)");
383 outputContainer->Add(fhEtaPhiTOFStatus0);
385 TString dcaName[] = {"xy","z","Cons"} ;
386 Int_t ndcabins = 800;
390 for(Int_t i = 0 ; i < 3 ; i++)
393 fhPtDCA[i] = new TH2F(Form("hPtDCA%s",dcaName[i].Data()),
394 Form("Track DCA%s vs p_{T} distribution",dcaName[i].Data()),
395 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
396 fhPtDCA[i]->SetXTitle("p_{T} (GeV/c)");
397 fhPtDCA[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
398 outputContainer->Add(fhPtDCA[i]);
400 fhPtDCASPDRefit[i] = new TH2F(Form("hPtDCA%sSPDRefit",dcaName[i].Data()),
401 Form("Track DCA%s vs p_{T} distribution of tracks with SPD and ITS refit",dcaName[i].Data()),
402 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
403 fhPtDCASPDRefit[i]->SetXTitle("p_{T} (GeV/c)");
404 fhPtDCASPDRefit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
405 outputContainer->Add(fhPtDCASPDRefit[i]);
407 fhPtDCANoSPDRefit[i] = new TH2F(Form("hPtDCA%sNoSPDRefit",dcaName[i].Data()),
408 Form("Track DCA%s vs p_{T} distributionof constrained tracks no SPD and with ITSRefit",dcaName[i].Data()),
409 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
410 fhPtDCANoSPDRefit[i]->SetXTitle("p_{T} (GeV/c)");
411 fhPtDCANoSPDRefit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
412 outputContainer->Add(fhPtDCANoSPDRefit[i]);
414 fhPtDCANoSPDNoRefit[i] = new TH2F(Form("hPtDCA%sNoSPDNoRefit",dcaName[i].Data()),
415 Form("Track DCA%s vs p_{T} distribution, constrained tracks with no SPD requierement and without ITSRefit",dcaName[i].Data()),
416 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
417 fhPtDCANoSPDNoRefit[i]->SetXTitle("p_{T} (GeV/c)");
418 fhPtDCANoSPDNoRefit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
419 outputContainer->Add(fhPtDCANoSPDNoRefit[i]);
421 fhPtDCATOFBC0[i] = new TH2F(Form("hPtDCA%sTOFBC0",dcaName[i].Data()),
422 Form("Track DCA%s vs p_{T} distribution, BC=0",dcaName[i].Data()),
423 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
424 fhPtDCATOFBC0[i]->SetXTitle("p_{T} (GeV/c)");
425 fhPtDCATOFBC0[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
426 outputContainer->Add(fhPtDCATOFBC0[i]);
428 fhPtDCATOFBCOut[i] = new TH2F(Form("hPtDCA%sTOFBCOut",dcaName[i].Data()),
429 Form("Track DCA%s vs p_{T} distribution, BC!=0",dcaName[i].Data()),
430 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
431 fhPtDCATOFBCOut[i]->SetXTitle("p_{T} (GeV/c)");
432 fhPtDCATOFBCOut[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
433 outputContainer->Add(fhPtDCATOFBCOut[i]);
435 fhPtDCANoTOFHit[i] = new TH2F(Form("hPtDCA%sNoTOFHit",dcaName[i].Data()),
436 Form("Track (no TOF hit) DCA%s vs p_{T} distribution",dcaName[i].Data()),
437 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
438 fhPtDCANoTOFHit[i]->SetXTitle("p_{T} (GeV/c)");
439 fhPtDCANoTOFHit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
440 outputContainer->Add(fhPtDCANoTOFHit[i]);
442 if(fFillVertexBC0Histograms)
444 fhPtDCAVtxOutBC0[i] = new TH2F(Form("hPtDCA%sVtxOutBC0",dcaName[i].Data()),
445 Form("Track DCA%s vs p_{T} distribution, vertex with BC!=0",dcaName[i].Data()),
446 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
447 fhPtDCAVtxOutBC0[i]->SetXTitle("p_{T} (GeV/c)");
448 fhPtDCAVtxOutBC0[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
449 outputContainer->Add(fhPtDCAVtxOutBC0[i]);
451 fhPtDCAVtxOutBC0NoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxOutBC0NoTOFHit",dcaName[i].Data()),
452 Form("Track (no TOF hit) DCA%s vs p_{T} distribution, vertex with BC!=0",dcaName[i].Data()),
453 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
454 fhPtDCAVtxOutBC0NoTOFHit[i]->SetXTitle("p_{T} (GeV/c)");
455 fhPtDCAVtxOutBC0NoTOFHit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
456 outputContainer->Add(fhPtDCAVtxOutBC0NoTOFHit[i]);
458 fhPtDCAVtxInBC0[i] = new TH2F(Form("hPtDCA%sVtxInBC0",dcaName[i].Data()),
459 Form("Track DCA%s vs p_{T} distribution, vertex with BC==0",dcaName[i].Data()),
460 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
461 fhPtDCAVtxInBC0[i]->SetXTitle("p_{T} (GeV/c)");
462 fhPtDCAVtxInBC0[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
463 outputContainer->Add(fhPtDCAVtxInBC0[i]);
465 fhPtDCAVtxInBC0NoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxInBC0NoTOFHit",dcaName[i].Data()),
466 Form("Track (no TOF hit) DCA%s vs p_{T} distribution, vertex with BC==0",dcaName[i].Data()),
467 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
468 fhPtDCAVtxInBC0NoTOFHit[i]->SetXTitle("p_{T} (GeV/c)");
469 fhPtDCAVtxInBC0NoTOFHit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
470 outputContainer->Add(fhPtDCAVtxInBC0NoTOFHit[i]);
473 if(fFillPileUpHistograms)
475 fhPtDCAPileUp[i] = new TH2F(Form("hPtDCA%sPileUp",dcaName[i].Data()),
476 Form("Track DCA%s vs p_{T} distribution, SPD Pile-Up",dcaName[i].Data()),
477 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
478 fhPtDCAPileUp[i]->SetXTitle("p_{T} (GeV/c)");
479 fhPtDCAPileUp[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
480 outputContainer->Add(fhPtDCAPileUp[i]);
482 fhPtDCAPileUpTOFBC0[i] = new TH2F(Form("hPtDCA%sPileUpTOFBC0",dcaName[i].Data()),
483 Form("Track DCA%s vs p_{T} distribution",dcaName[i].Data()),
484 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
485 fhPtDCAPileUpTOFBC0[i]->SetXTitle("p_{T} (GeV/c)");
486 fhPtDCAPileUpTOFBC0[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
487 outputContainer->Add(fhPtDCAPileUpTOFBC0[i]);
489 fhPtDCAPileUpNoTOFHit[i] = new TH2F(Form("hPtDCA%sPileUpNoTOFHit",dcaName[i].Data()),
490 Form("Track (no TOF hit) DCA%s vs p_{T} distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].Data()),
491 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
492 fhPtDCAPileUpNoTOFHit[i]->SetXTitle("p_{T} (GeV/c)");
493 fhPtDCAPileUpNoTOFHit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
494 outputContainer->Add(fhPtDCAPileUpNoTOFHit[i]);
496 if(fFillVertexBC0Histograms)
498 fhPtDCAVtxOutBC0PileUp[i] = new TH2F(Form("hPtDCA%sPileUpVtxOutBC0",dcaName[i].Data()),
499 Form("Track DCA%s vs p_{T} distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].Data()),
500 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
501 fhPtDCAVtxOutBC0PileUp[i]->SetXTitle("p_{T} (GeV/c)");
502 fhPtDCAVtxOutBC0PileUp[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
503 outputContainer->Add(fhPtDCAVtxOutBC0PileUp[i]);
505 fhPtDCAVtxOutBC0PileUpNoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxOutBC0PileUpNoTOFHit",dcaName[i].Data()),
506 Form("Track (no TOF hit) DCA%s vs p_{T} distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].Data()),
507 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
508 fhPtDCAVtxOutBC0PileUpNoTOFHit[i]->SetXTitle("p_{T} (GeV/c)");
509 fhPtDCAVtxOutBC0PileUpNoTOFHit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
510 outputContainer->Add(fhPtDCAVtxOutBC0PileUpNoTOFHit[i]);
512 fhPtDCAVtxInBC0PileUp[i] = new TH2F(Form("hPtDCA%sPileUpVtxInBC0",dcaName[i].Data()),
513 Form("Track DCA%s vs p_{T} distribution, SPD Pile-Up,vertex with BC==0",dcaName[i].Data()),
514 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
515 fhPtDCAVtxInBC0PileUp[i]->SetXTitle("p_{T} (GeV/c)");
516 fhPtDCAVtxInBC0PileUp[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
517 outputContainer->Add(fhPtDCAVtxInBC0PileUp[i]);
519 fhPtDCAVtxInBC0PileUpNoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxInBC0PileUpNoTOFHit",dcaName[i].Data()),
520 Form("Track (no TOF hit) DCA%s vs p_{T} distribution, SPD Pile-Up, vertex with BC==0",dcaName[i].Data()),
521 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
522 fhPtDCAVtxInBC0PileUpNoTOFHit[i]->SetXTitle("p_{T} (GeV/c)");
523 fhPtDCAVtxInBC0PileUpNoTOFHit[i]->SetXTitle(Form("DCA_{%s}",dcaName[i].Data()));
524 outputContainer->Add(fhPtDCAVtxInBC0PileUpNoTOFHit[i]);
532 fhPtPion = new TH1F ("hPtMCPion","p_T distribution from #pi", nptbins,ptmin,ptmax);
533 fhPtPion->SetXTitle("p_{T} (GeV/c)");
534 outputContainer->Add(fhPtPion);
536 fhPhiPion = new TH2F ("hPhiMCPion","#phi distribution from #pi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
537 fhPhiPion->SetXTitle("#phi (rad)");
538 outputContainer->Add(fhPhiPion);
540 fhEtaPion = new TH2F ("hEtaMCPion","#eta distribution from #pi",nptbins,ptmin,ptmax, netabins,etamin,etamax);
541 fhEtaPion->SetXTitle("#eta ");
542 outputContainer->Add(fhEtaPion);
544 fhPtProton = new TH1F ("hPtMCProton","p_T distribution from proton", nptbins,ptmin,ptmax);
545 fhPtProton->SetXTitle("p_{T} (GeV/c)");
546 outputContainer->Add(fhPtProton);
548 fhPhiProton = new TH2F ("hPhiMCProton","#phi distribution from proton",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
549 fhPhiProton->SetXTitle("#phi (rad)");
550 outputContainer->Add(fhPhiProton);
552 fhEtaProton = new TH2F ("hEtaMCProton","#eta distribution from proton",nptbins,ptmin,ptmax, netabins,etamin,etamax);
553 fhEtaProton->SetXTitle("#eta ");
554 outputContainer->Add(fhEtaProton);
556 fhPtKaon = new TH1F ("hPtMCKaon","p_T distribution from kaon", nptbins,ptmin,ptmax);
557 fhPtKaon->SetXTitle("p_{T} (GeV/c)");
558 outputContainer->Add(fhPtKaon);
560 fhPhiKaon = new TH2F ("hPhiMCKaon","#phi distribution from kaon",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
561 fhPhiKaon->SetXTitle("#phi (rad)");
562 outputContainer->Add(fhPhiKaon);
564 fhEtaKaon = new TH2F ("hEtaMCKaon","#eta distribution from kaon",nptbins,ptmin,ptmax, netabins,etamin,etamax);
565 fhEtaKaon->SetXTitle("#eta ");
566 outputContainer->Add(fhEtaKaon);
568 fhPtElectron = new TH1F ("hPtMCElectron","p_T distribution from electron", nptbins,ptmin,ptmax);
569 fhPtElectron->SetXTitle("p_{T} (GeV/c)");
570 outputContainer->Add(fhPtElectron);
572 fhPhiElectron = new TH2F ("hPhiMCElectron","#phi distribution from electron",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
573 fhPhiElectron->SetXTitle("#phi (rad)");
574 outputContainer->Add(fhPhiElectron);
576 fhEtaElectron = new TH2F ("hEtaMCElectron","#eta distribution from electron",nptbins,ptmin,ptmax, netabins,etamin,etamax);
577 fhEtaElectron->SetXTitle("#eta ");
578 outputContainer->Add(fhEtaElectron);
580 fhPtUnknown = new TH1F ("hPtMCUnknown","p_T distribution from unknown", nptbins,ptmin,ptmax);
581 fhPtUnknown->SetXTitle("p_{T} (GeV/c)");
582 outputContainer->Add(fhPtUnknown);
584 fhPhiUnknown = new TH2F ("hPhiMCUnknown","#phi distribution from unknown",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
585 fhPhiUnknown->SetXTitle("#phi (rad)");
586 outputContainer->Add(fhPhiUnknown);
588 fhEtaUnknown = new TH2F ("hEtaMCUnknown","#eta distribution from unknown",nptbins,ptmin,ptmax, netabins,etamin,etamax);
589 fhEtaUnknown->SetXTitle("#eta ");
590 outputContainer->Add(fhEtaUnknown);
594 return outputContainer;
599 //___________________________________________
600 void AliAnaChargedParticles::InitParameters()
602 //Initialize the parameters of the analysis.
603 SetOutputAODClassName("AliAODPWG4Particle");
604 SetOutputAODName("PWG4Particle");
606 AddToHistogramsName("AnaCharged_");
611 //____________________________________________________________
612 void AliAnaChargedParticles::Print(const Option_t * opt) const
614 //Print some relevant parameters set for the analysis
618 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
619 AliAnaCaloTrackCorrBaseClass::Print(" ");
621 printf("Min Pt = %3.2f\n", GetMinPt());
622 printf("Max Pt = %3.2f\n", GetMaxPt());
626 //_________________________________
627 void AliAnaChargedParticles::Init()
631 if(!GetReader()->IsCTSSwitchedOn()){
632 printf("AliAnaChargedParticles::Init() - STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
638 //_________________________________________________
639 void AliAnaChargedParticles::MakeAnalysisFillAOD()
641 //Do analysis and fill aods
642 if(!GetCTSTracks() || GetCTSTracks()->GetEntriesFast() == 0) return ;
644 Int_t ntracks = GetCTSTracks()->GetEntriesFast();
645 Double_t vert[3] = {0,0,0}; //vertex ;
649 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);
651 AliVEvent * event = GetReader()->GetInputEvent();
653 Int_t vtxBC = GetReader()->GetVertexBC();
654 if(!GetReader()->IsDCACutOn()) vtxBC = GetReader()->GetVertexBC(event->GetPrimaryVertex());
656 if(fFillVertexBC0Histograms)
658 fhProductionVertexBC->Fill(vtxBC);
659 if(fFillPileUpHistograms)
661 if(GetReader()->IsPileUpFromSPD()) fhProductionVertexBCPileUp[0]->Fill(vtxBC);
662 if(GetReader()->IsPileUpFromEMCal()) fhProductionVertexBCPileUp[1]->Fill(vtxBC);
663 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhProductionVertexBCPileUp[2]->Fill(vtxBC);
664 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhProductionVertexBCPileUp[3]->Fill(vtxBC);
665 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhProductionVertexBCPileUp[4]->Fill(vtxBC);
666 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhProductionVertexBCPileUp[5]->Fill(vtxBC);
667 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhProductionVertexBCPileUp[6]->Fill(vtxBC);
671 //printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - primary vertex BC %d\n",vtxBC);
673 Double_t bz = event->GetMagneticField();
675 //Fill AODParticle with CTS aods
680 for(Int_t i = 0; i < ntracks; i++)
682 AliVTrack * track = (AliVTrack*) (GetCTSTracks()->At(i));
690 AliAODTrack * aodTrack = dynamic_cast<AliAODTrack*>(track);
691 AliESDtrack * esdTrack = dynamic_cast<AliESDtrack*>(track);
694 ULong_t status = track->GetStatus();
695 Bool_t okTOF = (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ;
696 Double32_t tof = track->GetTOFsignal()*1e-3;
699 Double_t dcaCons = -999;
702 dcaCons = aodTrack->DCA();
703 //vtxBC = aodTrack->GetProdVertex()->GetBC();
706 Double_t dca[2] = {1e6,1e6};
707 Double_t covar[3] = {1e6,1e6,1e6};
708 track->PropagateToDCA(GetReader()->GetInputEvent()->GetPrimaryVertex(),bz,100.,dca,covar);
710 Float_t trackDCA = dca[0];
714 fhPtDCA[0]->Fill(pt, dca[0]);
715 fhPtDCA[1]->Fill(pt, dca[1]);
720 fhPtDCA[2]->Fill(pt, dcaCons);
723 if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtCutDCA->Fill(pt);
725 if(fFillVertexBC0Histograms)
727 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
729 fhPtVtxOutBC0->Fill(pt);
730 fhEtaPhiVtxOutBC0->Fill(eta,phi);
734 fhPtDCAVtxOutBC0[0]->Fill(pt, dca[0]);
735 fhPtDCAVtxOutBC0[1]->Fill(pt, dca[1]);
738 fhPtDCAVtxOutBC0[2]->Fill(pt, dcaCons);
742 fhPtVtxInBC0->Fill(pt);
743 fhEtaPhiVtxInBC0->Fill(eta,phi);
744 if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtCutDCABCOK->Fill(pt);
748 fhPtDCAVtxInBC0[0]->Fill(pt, dca[0]);
749 fhPtDCAVtxInBC0[1]->Fill(pt, dca[1]);
752 fhPtDCAVtxInBC0[2]->Fill(pt, dcaCons);
757 if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD())
761 fhPtDCAPileUp[0]->Fill(pt, dca[0]);
762 fhPtDCAPileUp[1]->Fill(pt, dca[1]);
765 fhPtDCAPileUp[2]->Fill(pt, dcaCons);
767 if(fFillVertexBC0Histograms)
769 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
773 fhPtDCAVtxOutBC0PileUp[0]->Fill(pt, dca[0]);
774 fhPtDCAVtxOutBC0PileUp[1]->Fill(pt, dca[1]);
776 else fhPtDCAVtxOutBC0PileUp[2]->Fill(pt, dcaCons);
782 fhPtDCAVtxInBC0PileUp[0]->Fill(pt, dca[0]);
783 fhPtDCAVtxInBC0PileUp[1]->Fill(pt, dca[1]);
785 else fhPtDCAVtxInBC0PileUp[2]->Fill(pt, dcaCons);
794 fhPtDCANoTOFHit[0]->Fill(pt, dca[0]);
795 fhPtDCANoTOFHit[1]->Fill(pt, dca[1]);
798 fhPtDCANoTOFHit[2]->Fill(pt, dcaCons);
800 if(fFillVertexBC0Histograms)
802 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
806 fhPtDCAVtxOutBC0NoTOFHit[0]->Fill(pt, dca[0]);
807 fhPtDCAVtxOutBC0NoTOFHit[1]->Fill(pt, dca[1]);
810 fhPtDCAVtxOutBC0NoTOFHit[2]->Fill(pt, dcaCons);
816 fhPtDCAVtxInBC0NoTOFHit[0]->Fill(pt, dca[0]);
817 fhPtDCAVtxInBC0NoTOFHit[1]->Fill(pt, dca[1]);
820 fhPtDCAVtxInBC0NoTOFHit[2]->Fill(pt, dcaCons);
825 if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD())
829 fhPtDCAPileUpNoTOFHit[0]->Fill(pt, dca[0]);
830 fhPtDCAPileUpNoTOFHit[1]->Fill(pt, dca[1]);
833 fhPtDCAPileUpNoTOFHit[2]->Fill(pt, dcaCons);
835 if(fFillVertexBC0Histograms)
837 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
841 fhPtDCAVtxOutBC0PileUpNoTOFHit[0]->Fill(pt, dca[0]);
842 fhPtDCAVtxOutBC0PileUpNoTOFHit[1]->Fill(pt, dca[1]);
845 fhPtDCAVtxOutBC0PileUpNoTOFHit[2]->Fill(pt, dcaCons);
851 fhPtDCAVtxInBC0PileUpNoTOFHit[0]->Fill(pt, dca[0]);
852 fhPtDCAVtxInBC0PileUpNoTOFHit[1]->Fill(pt, dca[1]);
855 fhPtDCAVtxInBC0PileUpNoTOFHit[2]->Fill(pt, dcaCons);
862 //printf("track pT %2.2f, DCA Cons %f, DCA1 %f, DCA2 %f, TOFBC %d, oktof %d, tof %f\n",
863 // pt,dcaCons,dca[0],dca[1],track->GetTOFBunchCrossing(bz),okTOF, tof);
865 Int_t trackBC = track->GetTOFBunchCrossing(bz);
867 // if( vtxBC == 0 && trackBC !=0 && trackBC!=AliVTrack::kTOFBCNA)
868 // printf("TOF Signal %e, BC %d, pt %f, dca_xy %f, dca_z %f, dca_tpc %f \n", tof,trackBC, pt,dca[0],dca[1],dcaCons);
873 fhTOFSignal ->Fill(tof);
874 fhPtTOFSignal->Fill(pt, tof);
875 if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtTOFSignalDCACut->Fill(pt, tof);
877 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
878 fhPtTOFSignalVtxOutBC0->Fill(pt, tof);
880 fhPtTOFSignalVtxInBC0->Fill(pt, tof);
884 fhTOFSignalBCOK->Fill(tof);
888 fhPtDCATOFBC0[0]->Fill(pt, dca[0]);
889 fhPtDCATOFBC0[1]->Fill(pt, dca[1]);
892 fhPtDCATOFBC0[2]->Fill(pt, dcaCons);
894 if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD())
898 fhPtDCAPileUpTOFBC0[0]->Fill(pt, dca[0]);
899 fhPtDCAPileUpTOFBC0[1]->Fill(pt, dca[1]);
902 fhPtDCAPileUpTOFBC0[2]->Fill(pt, dcaCons);
905 else if(trackBC!=AliVTrack::kTOFBCNA)
909 fhPtDCATOFBCOut[0]->Fill(pt, dca[0]);
910 fhPtDCATOFBCOut[1]->Fill(pt, dca[1]);
913 fhPtDCATOFBCOut[2]->Fill(pt, dcaCons);
917 if(fFillPileUpHistograms)
919 if(GetReader()->IsPileUpFromSPD()) fhPtTOFSignalPileUp[0]->Fill(pt, tof);
920 if(GetReader()->IsPileUpFromEMCal()) fhPtTOFSignalPileUp[1]->Fill(pt, tof);
921 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTOFSignalPileUp[2]->Fill(pt, tof);
922 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTOFSignalPileUp[3]->Fill(pt, tof);
923 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTOFSignalPileUp[4]->Fill(pt, tof);
924 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTOFSignalPileUp[5]->Fill(pt, tof);
925 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTOFSignalPileUp[6]->Fill(pt, tof);
927 if (trackBC ==0) { fhEtaPhiTOFBC0 ->Fill(eta,phi); if(GetReader()->IsPileUpFromSPD()) fhEtaPhiTOFBC0PileUpSPD ->Fill(eta,phi); }
928 else if (trackBC < 0) { fhEtaPhiTOFBCPlus ->Fill(eta,phi); if(GetReader()->IsPileUpFromSPD()) fhEtaPhiTOFBCPlusPileUpSPD ->Fill(eta,phi); }
929 else if (trackBC > 0) { fhEtaPhiTOFBCMinus->Fill(eta,phi); if(GetReader()->IsPileUpFromSPD()) fhEtaPhiTOFBCMinusPileUpSPD->Fill(eta,phi); }
931 if(fFillVertexBC0Histograms)
933 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
935 if(GetReader()->IsPileUpFromSPD()) fhPtTOFSignalVtxOutBC0PileUp[0]->Fill(pt, tof);
936 if(GetReader()->IsPileUpFromEMCal()) fhPtTOFSignalVtxOutBC0PileUp[1]->Fill(pt, tof);
937 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTOFSignalVtxOutBC0PileUp[2]->Fill(pt, tof);
938 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTOFSignalVtxOutBC0PileUp[3]->Fill(pt, tof);
939 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTOFSignalVtxOutBC0PileUp[4]->Fill(pt, tof);
940 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTOFSignalVtxOutBC0PileUp[5]->Fill(pt, tof);
941 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTOFSignalVtxOutBC0PileUp[6]->Fill(pt, tof);
945 if(GetReader()->IsPileUpFromSPD()) fhPtTOFSignalVtxInBC0PileUp[0]->Fill(pt, tof);
946 if(GetReader()->IsPileUpFromEMCal()) fhPtTOFSignalVtxInBC0PileUp[1]->Fill(pt, tof);
947 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTOFSignalVtxInBC0PileUp[2]->Fill(pt, tof);
948 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTOFSignalVtxInBC0PileUp[3]->Fill(pt, tof);
949 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTOFSignalVtxInBC0PileUp[4]->Fill(pt, tof);
950 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTOFSignalVtxInBC0PileUp[5]->Fill(pt, tof);
951 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTOFSignalVtxInBC0PileUp[6]->Fill(pt, tof);
957 //Fill AODParticle after some selection
958 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
960 Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"CTS") ;
963 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Track pt %2.2f, eta %2.2f, phi %2.2f in fiducial cut %d\n",pt,eta,phi,in);
965 //Acceptance selection
966 if(IsFiducialCutOn() && ! in ) continue ;
968 // Momentum selection
969 if(pt < GetMinPt() || pt > GetMaxPt()) continue;
971 if(okTOF) fhTOFSignalPtCut->Fill(tof);
974 fhPtTOFStatus0 ->Fill(pt);
975 fhEtaPhiTOFStatus0->Fill(eta,phi);
978 Bool_t bITSRefit = (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit;
979 Bool_t bConstrained = kFALSE;
980 if (aodTrack) bConstrained = aodTrack->IsGlobalConstrained();
981 else if(esdTrack) bConstrained = (!esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1));
982 //printf("Track %d, pt %2.2f, eta %2.2f, phi %2.2f, SPDRefit %d, refit %d, dcaCons %2.2f\n",
983 // i, pt, eta, phi, bConstrained, bITSRefit, dcaCons);
989 fhPtNoSPDRefit->Fill(pt);
990 if(pt < 2)fhEtaPhiNoSPDRefitPt02->Fill(eta,phi);
991 if(pt > 3)fhEtaPhiNoSPDRefitPt3 ->Fill(eta,phi);
995 fhPtDCANoSPDRefit[0]->Fill(pt, dca[0]);
996 fhPtDCANoSPDRefit[1]->Fill(pt, dca[1]);
999 fhPtDCANoSPDRefit[2]->Fill(pt, dcaCons);
1004 fhPtNoSPDNoRefit->Fill(pt);
1005 if(pt < 2)fhEtaPhiNoSPDNoRefitPt02->Fill(eta,phi);
1006 if(pt > 3)fhEtaPhiNoSPDNoRefitPt3 ->Fill(eta,phi);
1009 fhPtDCANoSPDNoRefit[0]->Fill(pt, dca[0]);
1010 fhPtDCANoSPDNoRefit[1]->Fill(pt, dca[1]);
1013 fhPtDCANoSPDNoRefit[2]->Fill(pt, dcaCons);
1019 fhPtSPDRefit->Fill(pt);
1020 if(pt < 2)fhEtaPhiSPDRefitPt02->Fill(eta,phi);
1021 if(pt > 3)fhEtaPhiSPDRefitPt3 ->Fill(eta,phi);
1024 fhPtDCASPDRefit[0]->Fill(pt, dca[0]);
1025 fhPtDCASPDRefit[1]->Fill(pt, dca[1]);
1028 fhPtDCASPDRefit[2]->Fill(pt, dcaCons);
1032 if (GetMixedEvent())
1034 evtIndex = GetMixedEvent()->EventIndex(track->GetID()) ;
1037 GetVertex(vert,evtIndex);
1038 if(TMath::Abs(vert[2])> GetZvertexCut()) return;
1040 AliAODPWG4Particle tr = AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
1041 tr.SetDetector("CTS");
1042 tr.SetLabel(track->GetLabel());
1043 tr.SetTrackLabel(track->GetID(),-1);
1044 tr.SetChargedBit(track->Charge()>0);
1051 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast());
1054 //__________________________________________________________________
1055 void AliAnaChargedParticles::MakeAnalysisFillHistograms()
1057 //Do analysis and fill histograms
1059 //Loop on stored AODParticles
1060 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
1062 fhNtracks->Fill(GetReader()->GetTrackMultiplicity()) ;
1065 printf("AliAnaChargedParticles::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);
1071 for(Int_t iaod = 0; iaod < naod ; iaod++)
1073 AliAODPWG4Particle* track = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
1081 if(track->GetChargedBit())
1083 fhPhiPos ->Fill(pt, phi);
1084 fhEtaPos ->Fill(pt, eta);
1085 fhEtaPhiPos->Fill(eta,phi);
1089 fhPhiNeg ->Fill(pt, phi);
1090 fhEtaNeg ->Fill(pt, eta);
1091 fhEtaPhiNeg->Fill(eta,phi);
1094 if(fFillPileUpHistograms)
1096 if(GetReader()->IsPileUpFromSPD()) {fhPtPileUp[0]->Fill(pt);}
1097 if(GetReader()->IsPileUpFromEMCal()) {fhPtPileUp[1]->Fill(pt);}
1098 if(GetReader()->IsPileUpFromSPDOrEMCal()) {fhPtPileUp[2]->Fill(pt);}
1099 if(GetReader()->IsPileUpFromSPDAndEMCal()) {fhPtPileUp[3]->Fill(pt);}
1100 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) {fhPtPileUp[4]->Fill(pt);}
1101 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) {fhPtPileUp[5]->Fill(pt);}
1102 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) {fhPtPileUp[6]->Fill(pt);}
1108 //Play with the MC stack if available
1110 Int_t label = track->GetLabel();
1113 if( GetReader()->ReadStack() && label < GetMCStack()->GetNtrack())
1115 TParticle * mom = GetMCStack()->Particle(label);
1116 mompdg =TMath::Abs(mom->GetPdgCode());
1118 else if(GetReader()->ReadAODMCParticles())
1120 AliAODMCParticle * aodmom = 0;
1121 //Get the list of MC particles
1122 aodmom = (AliAODMCParticle*) (GetReader()->GetAODMCParticles(track->GetInputFileIndex()))->At(label);
1123 mompdg =TMath::Abs(aodmom->GetPdgCode());
1129 fhPtPion ->Fill(pt);
1130 fhPhiPion->Fill(pt, phi);
1131 fhEtaPion->Fill(pt, eta);
1133 else if(mompdg==2212)
1135 fhPtProton ->Fill(pt);
1136 fhPhiProton->Fill(pt, phi);
1137 fhEtaProton->Fill(pt, eta);
1139 else if(mompdg==321)
1141 fhPtKaon ->Fill(pt);
1142 fhPhiKaon->Fill(pt, phi);
1143 fhEtaKaon->Fill(pt, eta);
1147 fhPtElectron ->Fill(pt);
1148 fhPhiElectron->Fill(pt, phi);
1149 fhEtaElectron->Fill(pt, eta);
1153 fhPtUnknown ->Fill(pt);
1154 fhPhiUnknown->Fill(pt, phi);
1155 fhEtaUnknown->Fill(pt, eta);
1158 }//Work with stack also