]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/CaloTrackCorrelations/AliAnaChargedParticles.cxx
change histogram labels
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaChargedParticles.cxx
CommitLineData
477d6cee 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
477d6cee 15
16//_________________________________________________________________________
17//
18// Class for track selection and identification (not done now)
19// Tracks from the CTS are kept in the AOD.
20// Few histograms produced.
21//
22//-- Author: Gustavo Conesa (INFN-LNF)
23//_________________________________________________________________________
24
25
26// --- ROOT system ---
477d6cee 27#include "TParticle.h"
28#include "TH2F.h"
05d0d05d 29
477d6cee 30//---- AliRoot system ----
31#include "AliAnaChargedParticles.h"
32#include "AliCaloTrackReader.h"
33#include "AliAODPWG4Particle.h"
34#include "AliStack.h"
ff45398a 35#include "AliFiducialCut.h"
88f9563f 36#include "AliVTrack.h"
591cc579 37#include "AliAODMCParticle.h"
fedea415 38#include "AliAODTrack.h"
39#include "AliAODEvent.h"
40#include "AliESDEvent.h"
477d6cee 41
42ClassImp(AliAnaChargedParticles)
43
05d0d05d 44//__________________________________________________
fe9615b9 45 AliAnaChargedParticles::AliAnaChargedParticles() :
745913ae 46 AliAnaCaloTrackCorrBaseClass(),
9b4a1ee2 47 fFillPileUpHistograms(0), fFillTrackBCHistograms(0),
52bd777f 48 fFillVertexBC0Histograms(0),
52bd777f 49 //Histograms
50 fhNtracks(0), fhPt(0), fhPtNoCut(0),
51 fhPtCutDCA(0), fhPtCutDCABCOK(0),
8f467228 52 fhPhiNeg(0), fhEtaNeg(0),
fedea415 53 fhPhiPos(0), fhEtaPos(0),
54 fhEtaPhiPos(0), fhEtaPhiNeg(0),
52bd777f 55 fhPtVtxOutBC0(0), fhEtaPhiVtxOutBC0(0),
56 fhPtVtxInBC0(0), fhEtaPhiVtxInBC0(0),
8f467228 57 fhPtSPDRefit(0), fhPtNoSPDRefit(0), fhPtNoSPDNoRefit(0),
58 fhEtaPhiSPDRefitPt02(0), fhEtaPhiNoSPDRefitPt02(0), fhEtaPhiNoSPDNoRefitPt02(0),
59 fhEtaPhiSPDRefitPt3(0), fhEtaPhiNoSPDRefitPt3(0), fhEtaPhiNoSPDNoRefitPt3(0),
62c64236 60
52bd777f 61 //TOF
fedea415 62 fhTOFSignal(0), fhTOFSignalPtCut(0), fhTOFSignalBCOK(0),
cc944149 63 fhPtTOFSignal(0), fhPtTOFSignalDCACut(0),
64 fhPtTOFSignalVtxOutBC0(0), fhPtTOFSignalVtxInBC0(0),
52bd777f 65 fhPtTOFStatus0(0), fhEtaPhiTOFStatus0(0),
fedea415 66 fhEtaPhiTOFBC0(0), fhEtaPhiTOFBCPlus(0), fhEtaPhiTOFBCMinus(0),
67 fhEtaPhiTOFBC0PileUpSPD(0),
68 fhEtaPhiTOFBCPlusPileUpSPD(0),
52bd777f 69 fhEtaPhiTOFBCMinusPileUpSPD(0),
85c4406e 70 fhProductionVertexBC(0),
71 fhPtNPileUpSPDVtx(0), fhPtNPileUpTrkVtx(0),
72 fhPtNPileUpSPDVtxBC0(0), fhPtNPileUpTrkVtxBC0(0)
73
477d6cee 74{
75 //Default Ctor
76
fedea415 77 for(Int_t i = 0; i < 7; i++)
78 {
79 fhPtPileUp [i] = 0;
80 fhPtTOFSignalPileUp[i] = 0;
52bd777f 81 fhPtTOFSignalVtxOutBC0PileUp[i] = 0;
82 fhPtTOFSignalVtxInBC0PileUp [i] = 0;
83 fhProductionVertexBCPileUp [i] = 0;
fedea415 84 }
85
86 for(Int_t i = 0; i < 3; i++)
87 {
88 fhPtDCA [i] = 0 ;
8f467228 89
90 fhPtDCASPDRefit [i] = 0 ;
91 fhPtDCANoSPDRefit [i] = 0 ;
92 fhPtDCANoSPDNoRefit [i] = 0 ;
93
fedea415 94 fhPtDCAPileUp [i] = 0 ;
fedea415 95 fhPtDCATOFBC0 [i] = 0 ;
52bd777f 96 fhPtDCATOFBCOut [i] = 0 ;
fedea415 97 fhPtDCAPileUpTOFBC0 [i] = 0 ;
52bd777f 98 fhPtDCANoTOFHit [i] = 0 ;
99 fhPtDCAPileUpNoTOFHit [i] = 0 ;
fedea415 100
52bd777f 101 fhPtDCAVtxOutBC0 [i] = 0 ;
102 fhPtDCAVtxInBC0 [i] = 0 ;
103 fhPtDCAVtxOutBC0PileUp[i] = 0 ;
104 fhPtDCAVtxInBC0PileUp [i] = 0 ;
cbd6236f 105 fhPtDCAVtxOutBC0NoTOFHit[i] = 0 ;
106 fhPtDCAVtxInBC0NoTOFHit [i] = 0 ;
52bd777f 107 fhPtDCAVtxOutBC0PileUpNoTOFHit[i] = 0 ;
cbd6236f 108 fhPtDCAVtxInBC0PileUpNoTOFHit [i] = 0 ;
fedea415 109 }
fe9615b9 110
62c64236 111 // MC
112 for(Int_t imcPart = 0; imcPart < 6; imcPart++)
113 {
114 fhPtMCPart [imcPart] = 0;
115 fhPtMCPrimPart [imcPart] = 0;
116 fhPhiMCPart [imcPart] = 0;
117 fhPhiMCPrimPart[imcPart] = 0;
118 fhEtaMCPart [imcPart] = 0;
119 fhEtaMCPrimPart[imcPart] = 0;
120 }
121
477d6cee 122 //Initialize parameters
123 InitParameters();
477d6cee 124
477d6cee 125}
126
05d0d05d 127//_______________________________________________________
477d6cee 128TList * AliAnaChargedParticles::GetCreateOutputObjects()
129{
130 // Create histograms to be saved in output file and
131 // store them in fOutputContainer
132
133
134 TList * outputContainer = new TList() ;
62c64236 135 outputContainer->SetName("ChargedParticleHistos") ;
477d6cee 136
745913ae 137 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
138 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
139 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
5025c139 140
141 fhNtracks = new TH1F ("hNtracks","# of tracks", 1000,0,1000);
142 fhNtracks->SetXTitle("# of tracks");
143 outputContainer->Add(fhNtracks);
05d0d05d 144
ed328e78 145 fhPt = new TH1F ("hPt","#it{p}_{T} distribution", nptbins,ptmin,ptmax);
146 fhPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
477d6cee 147 outputContainer->Add(fhPt);
148
ed328e78 149 fhPtNoCut = new TH1F ("hPtNoCut","#it{p}_{T} distribution, raw tracks", nptbins,ptmin,ptmax);
150 fhPtNoCut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 151 outputContainer->Add(fhPtNoCut);
152
ed328e78 153 fhPtCutDCA = new TH1F ("hPtCutDCA","#it{p}_{T} distribution, cut DCA", nptbins,ptmin,ptmax);
154 fhPtCutDCA->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 155 outputContainer->Add(fhPtCutDCA);
156
9b4a1ee2 157 if(fFillVertexBC0Histograms)
158 {
ed328e78 159 fhPtCutDCABCOK = new TH1F ("hPtCutDCABCOK","#it{p}_{T} distribution, DCA cut, track BC=0 or -100", nptbins,ptmin,ptmax);
160 fhPtCutDCABCOK->SetXTitle("#it{p}_{T} (GeV/#it{c})");
9b4a1ee2 161 outputContainer->Add(fhPtCutDCABCOK);
162 }
163
05d0d05d 164 fhPhiNeg = new TH2F ("hPhiNegative","#phi of negative charges distribution",
165 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
166 fhPhiNeg->SetYTitle("#phi (rad)");
ed328e78 167 fhPhiNeg->SetXTitle("#it{p}_{T} (GeV/#it{c})");
05d0d05d 168 outputContainer->Add(fhPhiNeg);
169
170 fhEtaNeg = new TH2F ("hEtaNegative","#eta of negative charges distribution",
171 nptbins,ptmin,ptmax, netabins,etamin,etamax);
172 fhEtaNeg->SetYTitle("#eta ");
ed328e78 173 fhEtaNeg->SetXTitle("#it{p}_{T} (GeV/#it{c})");
05d0d05d 174 outputContainer->Add(fhEtaNeg);
477d6cee 175
192689a4 176 fhPhiPos = new TH2F ("hPhiPositive","#phi of positive charges distribution",
05d0d05d 177 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
178 fhPhiPos->SetYTitle("#phi (rad)");
ed328e78 179 fhPhiPos->SetXTitle("#it{p}_{T} (GeV/#it{c})");
05d0d05d 180 outputContainer->Add(fhPhiPos);
477d6cee 181
192689a4 182 fhEtaPos = new TH2F ("hEtaPositive","#eta of positive charges distribution",
05d0d05d 183 nptbins,ptmin,ptmax, netabins,etamin,etamax);
184 fhEtaPos->SetYTitle("#eta ");
ed328e78 185 fhEtaPos->SetXTitle("#it{p}_{T} (GeV/#it{c})");
05d0d05d 186 outputContainer->Add(fhEtaPos);
5025c139 187
fe9615b9 188 fhEtaPhiPos = new TH2F ("hEtaPhiPositive","pt/eta/phi of positive charge",netabins,etamin,etamax, nphibins,phimin,phimax);
4bfeae64 189 fhEtaPhiPos->SetXTitle("#eta ");
190 fhEtaPhiPos->SetYTitle("#phi (rad)");
05d0d05d 191 outputContainer->Add(fhEtaPhiPos);
192
ed328e78 193 fhEtaPhiNeg = new TH2F ("hEtaPhiNegative","#eta vs #phi of negative charge",netabins,etamin,etamax, nphibins,phimin,phimax);
4bfeae64 194 fhEtaPhiNeg->SetXTitle("#eta ");
195 fhEtaPhiNeg->SetYTitle("#phi (rad)");
05d0d05d 196 outputContainer->Add(fhEtaPhiNeg);
477d6cee 197
52bd777f 198 if(fFillVertexBC0Histograms)
199 {
ed328e78 200 fhPtVtxOutBC0 = new TH1F ("hPtVtxOutBC0","#it{p}_{T} distribution, vertex in BC=0", nptbins,ptmin,ptmax);
201 fhPtVtxOutBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 202 outputContainer->Add(fhPtVtxOutBC0);
203
ed328e78 204 fhEtaPhiVtxOutBC0 = new TH2F ("hEtaPhiVtxOutBC0","#eta vs #phi of all charges with vertex in BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
52bd777f 205 fhEtaPhiVtxOutBC0->SetXTitle("#eta ");
206 fhEtaPhiVtxOutBC0->SetYTitle("#phi (rad)");
207 outputContainer->Add(fhEtaPhiVtxOutBC0);
208
ed328e78 209 fhPtVtxInBC0 = new TH1F ("hPtVtxInBC0","#it{p}_{T} distribution, vertex in BC=0", nptbins,ptmin,ptmax);
210 fhPtVtxInBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 211 outputContainer->Add(fhPtVtxInBC0);
212
ed328e78 213 fhEtaPhiVtxInBC0 = new TH2F ("hEtaPhiVtxInBC0","#eta vs #phi of all charges with vertex in BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
52bd777f 214 fhEtaPhiVtxInBC0->SetXTitle("#eta ");
215 fhEtaPhiVtxInBC0->SetYTitle("#phi (rad)");
216 outputContainer->Add(fhEtaPhiVtxInBC0);
217 }
218
ed328e78 219 fhPtSPDRefit = new TH1F ("hPtSPDRefit","#it{p}_{T} distribution of tracks with SPD and ITS refit", nptbins,ptmin,ptmax);
220 fhPtSPDRefit->SetXTitle("#it{p}_{T} (GeV/#it{c})");
8f467228 221 outputContainer->Add(fhPtSPDRefit);
222
ed328e78 223 fhEtaPhiSPDRefitPt02 = new TH2F ("hEtaPhiSPDRefitPt02","#eta vs #phi of tracks with SPD and ITS refit, #it{p}_{T}< 2 GeV/#it{c}",
224 netabins,etamin,etamax, nphibins,phimin,phimax);
8f467228 225 fhEtaPhiSPDRefitPt02->SetXTitle("#eta ");
226 fhEtaPhiSPDRefitPt02->SetYTitle("#phi (rad)");
227 outputContainer->Add(fhEtaPhiSPDRefitPt02);
228
ed328e78 229 fhEtaPhiSPDRefitPt3 = new TH2F ("hEtaPhiSPDRefitPt3","#eta vs #phi of tracks with SPD and ITS refit, #it{p}_{T}> 3 GeV/#it{c}",
230 netabins,etamin,etamax, nphibins,phimin,phimax);
8f467228 231 fhEtaPhiSPDRefitPt3->SetXTitle("#eta ");
232 fhEtaPhiSPDRefitPt3->SetYTitle("#phi (rad)");
233 outputContainer->Add(fhEtaPhiSPDRefitPt3);
234
ed328e78 235 fhPtNoSPDRefit = new TH1F ("hPtNoSPDRefit","#it{p}_{T} distribution of constrained tracks no SPD and with ITSRefit",
236 nptbins,ptmin,ptmax);
237 fhPtNoSPDRefit->SetXTitle("#it{p}_{T} (GeV/#it{c})");
8f467228 238 outputContainer->Add(fhPtNoSPDRefit);
239
ed328e78 240 fhEtaPhiNoSPDRefitPt02 = new TH2F ("hEtaPhiNoSPDRefitPt02","#eta vs #phi of constrained tracks no SPD and with ITSRefit, #it{p}_{T}< 2 GeV/#it{c}",
241 netabins,etamin,etamax, nphibins,phimin,phimax);
8f467228 242 fhEtaPhiNoSPDRefitPt02->SetXTitle("#eta ");
243 fhEtaPhiNoSPDRefitPt02->SetYTitle("#phi (rad)");
244 outputContainer->Add(fhEtaPhiNoSPDRefitPt02);
245
ed328e78 246 fhEtaPhiNoSPDRefitPt3 = new TH2F ("hEtaPhiNoSPDRefitPt3","#eta vs #phi of of constrained tracks no SPD and with ITSRefit, #it{p}_{T}> 3 GeV/#it{c}",
247 netabins,etamin,etamax, nphibins,phimin,phimax);
8f467228 248 fhEtaPhiNoSPDRefitPt3->SetXTitle("#eta ");
249 fhEtaPhiNoSPDRefitPt3->SetYTitle("#phi (rad)");
250 outputContainer->Add(fhEtaPhiNoSPDRefitPt3);
251
ed328e78 252 fhPtNoSPDNoRefit = new TH1F ("hPtNoSPDNoRefit","#it{p}_{T} distribution of constrained tracks with no SPD requierement and without ITSRefit",
253 nptbins,ptmin,ptmax);
254 fhPtNoSPDNoRefit->SetXTitle("#it{p}_{T} (GeV/#it{c})");
8f467228 255 outputContainer->Add(fhPtNoSPDNoRefit);
256
ed328e78 257 fhEtaPhiNoSPDNoRefitPt02 = new TH2F ("hEtaPhiNoSPDNoRefitPt02",
258 "#eta vs #phi of constrained tracks with no SPD requierement and without ITSRefit, #it{p}_{T}< 2 GeV/#it{c}",
259 netabins,etamin,etamax, nphibins,phimin,phimax);
8f467228 260 fhEtaPhiNoSPDNoRefitPt02->SetXTitle("#eta ");
261 fhEtaPhiNoSPDNoRefitPt02->SetYTitle("#phi (rad)");
262 outputContainer->Add(fhEtaPhiNoSPDNoRefitPt02);
263
ed328e78 264 fhEtaPhiNoSPDNoRefitPt3 = new TH2F ("hEtaPhiNoSPDNoRefitPt3",
265 "#eta vs #phi of constrained tracks with no SPD requierement and without ITSRefit, #it{p}_{T}> 3 GeV/#it{c}",
266 netabins,etamin,etamax, nphibins,phimin,phimax);
8f467228 267 fhEtaPhiNoSPDNoRefitPt3->SetXTitle("#eta ");
268 fhEtaPhiNoSPDNoRefitPt3->SetYTitle("#phi (rad)");
269 outputContainer->Add(fhEtaPhiNoSPDNoRefitPt3);
270
52bd777f 271 if(fFillVertexBC0Histograms)
272 {
273 fhProductionVertexBC = new TH1F("hProductionVertexBC", "tracks production vertex bunch crossing ", 41 , -20 , 20 ) ;
274 fhProductionVertexBC->SetYTitle("# tracks");
275 fhProductionVertexBC->SetXTitle("Bunch crossing");
276 outputContainer->Add(fhProductionVertexBC);
277 }
8f467228 278
fe9615b9 279 Int_t ntofbins = 1000;
280 Int_t mintof = -500;
281 Int_t maxtof = 500;
fedea415 282
fe9615b9 283 fhTOFSignal = new TH1F ("hTOFSignal","TOF signal", ntofbins,mintof,maxtof);
fedea415 284 fhTOFSignal->SetXTitle("TOF signal (ns)");
fe9615b9 285 outputContainer->Add(fhTOFSignal);
286
9b4a1ee2 287 if(fFillTrackBCHistograms)
288 {
289 fhTOFSignalBCOK = new TH1F ("hTOFSignalBCOK","TOF signal", ntofbins,mintof,maxtof);
290 fhTOFSignalBCOK->SetXTitle("TOF signal (ns)");
291 outputContainer->Add(fhTOFSignalBCOK);
292 }
fedea415 293
fe9615b9 294 fhTOFSignalPtCut = new TH1F ("hTOFSignalPtCut","TOF signal", ntofbins,mintof,maxtof);
fedea415 295 fhTOFSignalPtCut->SetXTitle("TOF signal (ns)");
fe9615b9 296 outputContainer->Add(fhTOFSignalPtCut);
297
298 fhPtTOFSignal = new TH2F ("hPtTOFSignal","TOF signal", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
fedea415 299 fhPtTOFSignal->SetYTitle("TOF signal (ns)");
ed328e78 300 fhPtTOFSignal->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fe9615b9 301 outputContainer->Add(fhPtTOFSignal);
cc944149 302
303 fhPtTOFSignalDCACut = new TH2F ("hPtTOFSignalDCACut","TOF signal after DCA cut", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
304 fhPtTOFSignalDCACut->SetYTitle("TOF signal (ns)");
ed328e78 305 fhPtTOFSignalDCACut->SetXTitle("#it{p}_{T} (GeV/#it{c})");
cc944149 306 outputContainer->Add(fhPtTOFSignalDCACut);
fedea415 307
52bd777f 308 if(fFillVertexBC0Histograms)
309 {
310 fhPtTOFSignalVtxOutBC0 = new TH2F ("hPtTOFSignalVtxOutBC0","TOF signal, vtx BC!=0", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
311 fhPtTOFSignalVtxOutBC0->SetYTitle("TOF signal (ns)");
ed328e78 312 fhPtTOFSignalVtxOutBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 313 outputContainer->Add(fhPtTOFSignalVtxOutBC0);
314
b6c46114 315 fhPtTOFSignalVtxInBC0 = new TH2F ("hPtTOFSignalVtxInBC0","TOF signal, vtx BC=0", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
52bd777f 316 fhPtTOFSignalVtxInBC0->SetYTitle("TOF signal (ns)");
ed328e78 317 fhPtTOFSignalVtxInBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 318 outputContainer->Add(fhPtTOFSignalVtxInBC0);
319 }
320
fedea415 321 if(fFillPileUpHistograms)
322 {
323 TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
324
325 for(Int_t i = 0 ; i < 7 ; i++)
326 {
327 fhPtPileUp[i] = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
ed328e78 328 Form("Track #it{p}_{T}distribution, %s Pile-Up event",pileUpName[i].Data()),
fedea415 329 nptbins,ptmin,ptmax);
ed328e78 330 fhPtPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fedea415 331 outputContainer->Add(fhPtPileUp[i]);
332
333 fhPtTOFSignalPileUp[i] = new TH2F(Form("hPtTOFSignalPileUp%s",pileUpName[i].Data()),
ed328e78 334 Form("Track TOF vs #it{p}_{T}distribution, %s Pile-Up event",pileUpName[i].Data()),
fedea415 335 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
ed328e78 336 fhPtTOFSignalPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fedea415 337 fhPtTOFSignalPileUp[i]->SetXTitle("TOF signal (ns)");
338 outputContainer->Add(fhPtTOFSignalPileUp[i]);
52bd777f 339
340 if(fFillVertexBC0Histograms)
341 {
342 fhPtTOFSignalVtxOutBC0PileUp[i] = new TH2F(Form("hPtTOFSignalVtxOutBC0PileUp%s",pileUpName[i].Data()),
ed328e78 343 Form("Track TOF vs #it{p}_{T}distribution, %s Pile-Up event, vtx BC!=0",pileUpName[i].Data()),
52bd777f 344 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
ed328e78 345 fhPtTOFSignalVtxOutBC0PileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 346 fhPtTOFSignalVtxOutBC0PileUp[i]->SetXTitle("TOF signal (ns)");
347 outputContainer->Add(fhPtTOFSignalVtxOutBC0PileUp[i]);
348
349 fhPtTOFSignalVtxInBC0PileUp[i] = new TH2F(Form("hPtTOFSignalVtxInBC0PileUp%s",pileUpName[i].Data()),
ed328e78 350 Form("Track TOF vs #it{p}_{T}distribution, %s Pile-Up event, vtx BC=0",pileUpName[i].Data()),
52bd777f 351 nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
ed328e78 352 fhPtTOFSignalVtxInBC0PileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
52bd777f 353 fhPtTOFSignalVtxInBC0PileUp[i]->SetXTitle("TOF signal (ns)");
354 outputContainer->Add(fhPtTOFSignalVtxInBC0PileUp[i]);
355 }
356
357 if(fFillVertexBC0Histograms)
358 {
359 fhProductionVertexBCPileUp[i] = new TH1F(Form("hProductionVertexBCPileUp%s",pileUpName[i].Data()),
360 Form("tracks production vertex bunch crossing, %s Pile-Up event",pileUpName[i].Data()),
361 41 , -20 , 20 ) ;
362 fhProductionVertexBCPileUp[i]->SetYTitle("# tracks");
363 fhProductionVertexBCPileUp[i]->SetXTitle("Bunch crossing");
364 outputContainer->Add(fhProductionVertexBCPileUp[i]);
365 }
fedea415 366 }
367
9b4a1ee2 368
369 if(fFillTrackBCHistograms)
370 {
371 fhEtaPhiTOFBC0 = new TH2F ("hEtaPhiTOFBC0","eta-phi for tracks with hit on TOF, and tof corresponding to BC=0",netabins,etamin,etamax, nphibins,phimin,phimax);
372 fhEtaPhiTOFBC0->SetXTitle("#eta ");
373 fhEtaPhiTOFBC0->SetYTitle("#phi (rad)");
374 outputContainer->Add(fhEtaPhiTOFBC0);
375
376 fhEtaPhiTOFBCPlus = new TH2F ("hEtaPhiTOFBCPlus","eta-phi for tracks with hit on TOF, and tof corresponding to BC>0",netabins,etamin,etamax, nphibins,phimin,phimax);
377 fhEtaPhiTOFBCPlus->SetXTitle("#eta ");
378 fhEtaPhiTOFBCPlus->SetYTitle("#phi (rad)");
379 outputContainer->Add(fhEtaPhiTOFBCPlus);
380
381 fhEtaPhiTOFBCMinus = new TH2F ("hEtaPhiTOFBCMinus","eta-phi for tracks with hit on TOF, and tof corresponding to BC<0",netabins,etamin,etamax, nphibins,phimin,phimax);
382 fhEtaPhiTOFBCMinus->SetXTitle("#eta ");
383 fhEtaPhiTOFBCMinus->SetYTitle("#phi (rad)");
384 outputContainer->Add(fhEtaPhiTOFBCMinus);
385
386 if(fFillPileUpHistograms)
387 {
388 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);
389 fhEtaPhiTOFBC0PileUpSPD->SetXTitle("#eta ");
390 fhEtaPhiTOFBC0PileUpSPD->SetYTitle("#phi (rad)");
391 outputContainer->Add(fhEtaPhiTOFBC0PileUpSPD);
392
393 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);
394 fhEtaPhiTOFBCPlusPileUpSPD->SetXTitle("#eta ");
395 fhEtaPhiTOFBCPlusPileUpSPD->SetYTitle("#phi (rad)");
396 outputContainer->Add(fhEtaPhiTOFBCPlusPileUpSPD);
397
398 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);
399 fhEtaPhiTOFBCMinusPileUpSPD->SetXTitle("#eta ");
400 fhEtaPhiTOFBCMinusPileUpSPD->SetYTitle("#phi (rad)");
401 outputContainer->Add(fhEtaPhiTOFBCMinusPileUpSPD);
402 }
403 }
fedea415 404
fe9615b9 405 }
406
ed328e78 407 fhPtTOFStatus0 = new TH1F ("hPtTOFStatus0","#it{p}_{T} distribution of tracks not hitting TOF", nptbins,ptmin,ptmax);
408 fhPtTOFStatus0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
fe9615b9 409 outputContainer->Add(fhPtTOFStatus0);
410
411
fedea415 412 fhEtaPhiTOFStatus0 = new TH2F ("hEtaPhiTOFStatus0","eta-phi for tracks without hit on TOF",netabins,etamin,etamax, nphibins,phimin,phimax);
fe9615b9 413 fhEtaPhiTOFStatus0->SetXTitle("#eta ");
414 fhEtaPhiTOFStatus0->SetYTitle("#phi (rad)");
415 outputContainer->Add(fhEtaPhiTOFStatus0);
416
fedea415 417 TString dcaName[] = {"xy","z","Cons"} ;
418 Int_t ndcabins = 800;
419 Int_t mindca = -4;
420 Int_t maxdca = 4;
421
422 for(Int_t i = 0 ; i < 3 ; i++)
423 {
424
425 fhPtDCA[i] = new TH2F(Form("hPtDCA%s",dcaName[i].Data()),
ed328e78 426 Form("Track DCA%s vs #it{p}_{T}distribution",dcaName[i].Data()),
fedea415 427 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 428 fhPtDCA[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 429 fhPtDCA[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
fedea415 430 outputContainer->Add(fhPtDCA[i]);
431
8f467228 432 fhPtDCASPDRefit[i] = new TH2F(Form("hPtDCA%sSPDRefit",dcaName[i].Data()),
ed328e78 433 Form("Track DCA%s vs #it{p}_{T}distribution of tracks with SPD and ITS refit",dcaName[i].Data()),
8f467228 434 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 435 fhPtDCASPDRefit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 436 fhPtDCASPDRefit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
8f467228 437 outputContainer->Add(fhPtDCASPDRefit[i]);
438
439 fhPtDCANoSPDRefit[i] = new TH2F(Form("hPtDCA%sNoSPDRefit",dcaName[i].Data()),
ed328e78 440 Form("Track DCA%s vs #it{p}_{T}distributionof constrained tracks no SPD and with ITSRefit",dcaName[i].Data()),
8f467228 441 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 442 fhPtDCANoSPDRefit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 443 fhPtDCANoSPDRefit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
8f467228 444 outputContainer->Add(fhPtDCANoSPDRefit[i]);
445
446 fhPtDCANoSPDNoRefit[i] = new TH2F(Form("hPtDCA%sNoSPDNoRefit",dcaName[i].Data()),
ed328e78 447 Form("Track DCA%s vs #it{p}_{T}distribution, constrained tracks with no SPD requierement and without ITSRefit",dcaName[i].Data()),
8f467228 448 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 449 fhPtDCANoSPDNoRefit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 450 fhPtDCANoSPDNoRefit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
8f467228 451 outputContainer->Add(fhPtDCANoSPDNoRefit[i]);
452
9b4a1ee2 453 if(fFillTrackBCHistograms)
454 {
455 fhPtDCATOFBC0[i] = new TH2F(Form("hPtDCA%sTOFBC0",dcaName[i].Data()),
ed328e78 456 Form("Track DCA%s vs #it{p}_{T}distribution, BC=0",dcaName[i].Data()),
9b4a1ee2 457 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 458 fhPtDCATOFBC0[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
9b4a1ee2 459 fhPtDCATOFBC0[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
460 outputContainer->Add(fhPtDCATOFBC0[i]);
461
462 fhPtDCATOFBCOut[i] = new TH2F(Form("hPtDCA%sTOFBCOut",dcaName[i].Data()),
ed328e78 463 Form("Track DCA%s vs #it{p}_{T}distribution, BC!=0",dcaName[i].Data()),
9b4a1ee2 464 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 465 fhPtDCATOFBCOut[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
9b4a1ee2 466 fhPtDCATOFBCOut[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
467 outputContainer->Add(fhPtDCATOFBCOut[i]);
468 }
52bd777f 469
fedea415 470 fhPtDCANoTOFHit[i] = new TH2F(Form("hPtDCA%sNoTOFHit",dcaName[i].Data()),
ed328e78 471 Form("Track (no TOF hit) DCA%s vs #it{p}_{T}distribution",dcaName[i].Data()),
fedea415 472 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 473 fhPtDCANoTOFHit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 474 fhPtDCANoTOFHit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
fedea415 475 outputContainer->Add(fhPtDCANoTOFHit[i]);
476
52bd777f 477 if(fFillVertexBC0Histograms)
478 {
479 fhPtDCAVtxOutBC0[i] = new TH2F(Form("hPtDCA%sVtxOutBC0",dcaName[i].Data()),
ed328e78 480 Form("Track DCA%s vs #it{p}_{T}distribution, vertex with BC!=0",dcaName[i].Data()),
52bd777f 481 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 482 fhPtDCAVtxOutBC0[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 483 fhPtDCAVtxOutBC0[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 484 outputContainer->Add(fhPtDCAVtxOutBC0[i]);
485
486 fhPtDCAVtxOutBC0NoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxOutBC0NoTOFHit",dcaName[i].Data()),
ed328e78 487 Form("Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, vertex with BC!=0",dcaName[i].Data()),
52bd777f 488 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 489 fhPtDCAVtxOutBC0NoTOFHit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 490 fhPtDCAVtxOutBC0NoTOFHit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 491 outputContainer->Add(fhPtDCAVtxOutBC0NoTOFHit[i]);
492
493 fhPtDCAVtxInBC0[i] = new TH2F(Form("hPtDCA%sVtxInBC0",dcaName[i].Data()),
ed328e78 494 Form("Track DCA%s vs #it{p}_{T}distribution, vertex with BC==0",dcaName[i].Data()),
52bd777f 495 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 496 fhPtDCAVtxInBC0[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 497 fhPtDCAVtxInBC0[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 498 outputContainer->Add(fhPtDCAVtxInBC0[i]);
499
500 fhPtDCAVtxInBC0NoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxInBC0NoTOFHit",dcaName[i].Data()),
ed328e78 501 Form("Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, vertex with BC==0",dcaName[i].Data()),
52bd777f 502 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 503 fhPtDCAVtxInBC0NoTOFHit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 504 fhPtDCAVtxInBC0NoTOFHit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 505 outputContainer->Add(fhPtDCAVtxInBC0NoTOFHit[i]);
506 }
fedea415 507
508 if(fFillPileUpHistograms)
509 {
510 fhPtDCAPileUp[i] = new TH2F(Form("hPtDCA%sPileUp",dcaName[i].Data()),
ed328e78 511 Form("Track DCA%s vs #it{p}_{T}distribution, SPD Pile-Up",dcaName[i].Data()),
fedea415 512 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 513 fhPtDCAPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 514 fhPtDCAPileUp[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
fedea415 515 outputContainer->Add(fhPtDCAPileUp[i]);
516
9b4a1ee2 517 if(fFillTrackBCHistograms)
518 {
519 fhPtDCAPileUpTOFBC0[i] = new TH2F(Form("hPtDCA%sPileUpTOFBC0",dcaName[i].Data()),
ed328e78 520 Form("Track DCA%s vs #it{p}_{T}distribution",dcaName[i].Data()),
9b4a1ee2 521 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 522 fhPtDCAPileUpTOFBC0[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
9b4a1ee2 523 fhPtDCAPileUpTOFBC0[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
524 outputContainer->Add(fhPtDCAPileUpTOFBC0[i]);
525 }
fedea415 526
527 fhPtDCAPileUpNoTOFHit[i] = new TH2F(Form("hPtDCA%sPileUpNoTOFHit",dcaName[i].Data()),
ed328e78 528 Form("Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].Data()),
fedea415 529 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 530 fhPtDCAPileUpNoTOFHit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 531 fhPtDCAPileUpNoTOFHit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
fedea415 532 outputContainer->Add(fhPtDCAPileUpNoTOFHit[i]);
533
52bd777f 534 if(fFillVertexBC0Histograms)
535 {
536 fhPtDCAVtxOutBC0PileUp[i] = new TH2F(Form("hPtDCA%sPileUpVtxOutBC0",dcaName[i].Data()),
ed328e78 537 Form("Track DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].Data()),
52bd777f 538 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 539 fhPtDCAVtxOutBC0PileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 540 fhPtDCAVtxOutBC0PileUp[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 541 outputContainer->Add(fhPtDCAVtxOutBC0PileUp[i]);
542
543 fhPtDCAVtxOutBC0PileUpNoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxOutBC0PileUpNoTOFHit",dcaName[i].Data()),
ed328e78 544 Form("Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC!=0",dcaName[i].Data()),
52bd777f 545 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 546 fhPtDCAVtxOutBC0PileUpNoTOFHit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 547 fhPtDCAVtxOutBC0PileUpNoTOFHit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 548 outputContainer->Add(fhPtDCAVtxOutBC0PileUpNoTOFHit[i]);
549
550 fhPtDCAVtxInBC0PileUp[i] = new TH2F(Form("hPtDCA%sPileUpVtxInBC0",dcaName[i].Data()),
ed328e78 551 Form("Track DCA%s vs #it{p}_{T}distribution, SPD Pile-Up,vertex with BC==0",dcaName[i].Data()),
52bd777f 552 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 553 fhPtDCAVtxInBC0PileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 554 fhPtDCAVtxInBC0PileUp[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 555 outputContainer->Add(fhPtDCAVtxInBC0PileUp[i]);
556
557 fhPtDCAVtxInBC0PileUpNoTOFHit[i] = new TH2F(Form("hPtDCA%sVtxInBC0PileUpNoTOFHit",dcaName[i].Data()),
ed328e78 558 Form("Track (no TOF hit) DCA%s vs #it{p}_{T}distribution, SPD Pile-Up, vertex with BC==0",dcaName[i].Data()),
52bd777f 559 nptbins,ptmin,ptmax,ndcabins,mindca,maxdca);
ed328e78 560 fhPtDCAVtxInBC0PileUpNoTOFHit[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
f9a67d4f 561 fhPtDCAVtxInBC0PileUpNoTOFHit[i]->SetYTitle(Form("DCA_{%s}",dcaName[i].Data()));
52bd777f 562 outputContainer->Add(fhPtDCAVtxInBC0PileUpNoTOFHit[i]);
563
564 }
fedea415 565 }
566 }
567
52bd777f 568 if(IsDataMC())
569 {
62c64236 570 //enum mvType{kmcPion = 0, kmcProton = 1, kmcKaon = 2, kmcMuon = 3, kmcElectron = 4, kmcUnknown = 4 };
571
572 TString histoName[] = {"Pion","Proton","Kaon","Muon","Electron","Unknown"};
573 TString titleName[] = {"#pi^{#pm}","p^{#pm}","K^{#pm}","#mu^{#pm}","e^{#pm}","x^{#pm}"};
477d6cee 574
62c64236 575 for(Int_t imcPart = 0; imcPart < 6; imcPart++)
576 {
577 fhPtMCPart[imcPart] = new TH1F (Form("hPtMC%s",histoName[imcPart].Data()),
578 Form("reconstructed #it{p}_{T} distribution from %s",titleName[imcPart].Data()),
579 nptbins,ptmin,ptmax);
580 fhPtMCPart[imcPart]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
581 outputContainer->Add(fhPtMCPart[imcPart]);
582
583 fhPhiMCPart[imcPart] = new TH2F (Form("hPhiMC%s",histoName[imcPart].Data()),
584 Form("reconstructed #phi vs #it{p}_{T} distribution from %s",titleName[imcPart].Data()),
585 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
586 fhPhiMCPart[imcPart]->SetYTitle("#phi (rad)");
587 fhPhiMCPart[imcPart]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
588 outputContainer->Add(fhPhiMCPart[imcPart]);
589
590 fhEtaMCPart[imcPart] = new TH2F (Form("hEtaMC%s",histoName[imcPart].Data()),
591 Form("reconstructed #eta vs #it{p}_{T} distribution from %s",titleName[imcPart].Data()),
592 nptbins,ptmin,ptmax, netabins,etamin,etamax);
593 fhEtaMCPart[imcPart]->SetYTitle("#eta ");
594 fhEtaMCPart[imcPart]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
595 outputContainer->Add(fhEtaMCPart[imcPart]);
596
597 fhPtMCPrimPart[imcPart] = new TH1F (Form("hPtMCPrimary%s",histoName[imcPart].Data()),
598 Form("generated #it{p}_{T} distribution from %s",titleName[imcPart].Data()),
599 nptbins,ptmin,ptmax);
600 fhPtMCPrimPart[imcPart]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
601 outputContainer->Add(fhPtMCPrimPart[imcPart]);
602
603 fhPhiMCPrimPart[imcPart] = new TH2F (Form("hPhiMCPrimary%s",histoName[imcPart].Data()),
604 Form("generated #phi vs #it{p}_{T} distribution from %s",titleName[imcPart].Data()),
605 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
606 fhPhiMCPrimPart[imcPart]->SetYTitle("#phi (rad)");
607 fhPhiMCPrimPart[imcPart]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
608 outputContainer->Add(fhPhiMCPrimPart[imcPart]);
609
610 fhEtaMCPrimPart[imcPart] = new TH2F (Form("hEtaMCPrimary%s",histoName[imcPart].Data()),
611 Form("generated #eta vs #it{p}_{T} distribution from %s",titleName[imcPart].Data()),
612 nptbins,ptmin,ptmax, netabins,etamin,etamax);
613 fhEtaMCPrimPart[imcPart]->SetYTitle("#eta ");
614 fhEtaMCPrimPart[imcPart]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
615 outputContainer->Add(fhEtaMCPrimPart[imcPart]);
616 }
477d6cee 617
477d6cee 618 }
a3aebfff 619
85c4406e 620 fhPtNPileUpSPDVtx = new TH2F ("hPt_NPileUpVertSPD","pT of cluster vs N pile-up SPD vertex",
621 nptbins,ptmin,ptmax,20,0,20);
622 fhPtNPileUpSPDVtx->SetYTitle("# vertex ");
ed328e78 623 fhPtNPileUpSPDVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 624 outputContainer->Add(fhPtNPileUpSPDVtx);
625
626 fhPtNPileUpTrkVtx = new TH2F ("hPt_NPileUpVertTracks","pT of cluster vs N pile-up Tracks vertex",
627 nptbins,ptmin,ptmax, 20,0,20 );
628 fhPtNPileUpTrkVtx->SetYTitle("# vertex ");
ed328e78 629 fhPtNPileUpTrkVtx->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 630 outputContainer->Add(fhPtNPileUpTrkVtx);
631
632 if(fFillVertexBC0Histograms)
633 {
634 fhPtNPileUpSPDVtxBC0 = new TH2F ("hPt_NPileUpVertSPD_BC0","pT of cluster vs N pile-up SPD vertex",
635 nptbins,ptmin,ptmax,20,0,20);
636 fhPtNPileUpSPDVtxBC0->SetYTitle("# vertex ");
ed328e78 637 fhPtNPileUpSPDVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 638 outputContainer->Add(fhPtNPileUpSPDVtxBC0);
639
640 fhPtNPileUpTrkVtxBC0 = new TH2F ("hPt_NPileUpVertTracks_BC0","pT of cluster vs N pile-up Tracks vertex",
641 nptbins,ptmin,ptmax, 20,0,20 );
642 fhPtNPileUpTrkVtxBC0->SetYTitle("# vertex ");
ed328e78 643 fhPtNPileUpTrkVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
85c4406e 644 outputContainer->Add(fhPtNPileUpTrkVtxBC0);
645 }
646
477d6cee 647 return outputContainer;
a3aebfff 648
477d6cee 649}
650
52bd777f 651
05d0d05d 652//___________________________________________
477d6cee 653void AliAnaChargedParticles::InitParameters()
654{
655 //Initialize the parameters of the analysis.
656 SetOutputAODClassName("AliAODPWG4Particle");
a3aebfff 657 SetOutputAODName("PWG4Particle");
658
659 AddToHistogramsName("AnaCharged_");
477d6cee 660
cbd6236f 661
477d6cee 662}
663
05d0d05d 664//____________________________________________________________
477d6cee 665void AliAnaChargedParticles::Print(const Option_t * opt) const
666{
667 //Print some relevant parameters set for the analysis
668 if(! opt)
669 return;
670
a3aebfff 671 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
745913ae 672 AliAnaCaloTrackCorrBaseClass::Print(" ");
a3aebfff 673
477d6cee 674 printf("Min Pt = %3.2f\n", GetMinPt());
675 printf("Max Pt = %3.2f\n", GetMaxPt());
477d6cee 676
677}
678
05d0d05d 679//_________________________________
477d6cee 680void AliAnaChargedParticles::Init()
681{
682 //Init
683 //Do some checks
373ffbac 684
685 if(!GetReader()->IsCTSSwitchedOn())
686 AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
687
477d6cee 688
689}
690
05d0d05d 691//_________________________________________________
477d6cee 692void AliAnaChargedParticles::MakeAnalysisFillAOD()
693{
694 //Do analysis and fill aods
be518ab0 695 if(!GetCTSTracks() || GetCTSTracks()->GetEntriesFast() == 0) return ;
192689a4 696
be518ab0 697 Int_t ntracks = GetCTSTracks()->GetEntriesFast();
2244659d 698 Double_t vert[3] = {0,0,0}; //vertex ;
192689a4 699
477d6cee 700 //Some prints
701 if(GetDebug() > 0)
a3aebfff 702 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);
477d6cee 703
85c4406e 704 AliVEvent * event = GetReader()->GetInputEvent();
705 AliESDEvent* esdEv = dynamic_cast<AliESDEvent*> (event);
706 AliAODEvent* aodEv = dynamic_cast<AliAODEvent*> (event);
707
cc944149 708 Int_t vtxBC = GetReader()->GetVertexBC();
709 if(!GetReader()->IsDCACutOn()) vtxBC = GetReader()->GetVertexBC(event->GetPrimaryVertex());
52bd777f 710
52bd777f 711 if(fFillVertexBC0Histograms)
712 {
713 fhProductionVertexBC->Fill(vtxBC);
714 if(fFillPileUpHistograms)
715 {
716 if(GetReader()->IsPileUpFromSPD()) fhProductionVertexBCPileUp[0]->Fill(vtxBC);
717 if(GetReader()->IsPileUpFromEMCal()) fhProductionVertexBCPileUp[1]->Fill(vtxBC);
718 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhProductionVertexBCPileUp[2]->Fill(vtxBC);
719 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhProductionVertexBCPileUp[3]->Fill(vtxBC);
720 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhProductionVertexBCPileUp[4]->Fill(vtxBC);
721 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhProductionVertexBCPileUp[5]->Fill(vtxBC);
722 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhProductionVertexBCPileUp[6]->Fill(vtxBC);
723 }
724 }
725
85c4406e 726 // N pile up vertices
727 Int_t nVtxSPD = -1;
728 Int_t nVtxTrk = -1;
729
730 if (esdEv)
731 {
732 nVtxSPD = esdEv->GetNumberOfPileupVerticesSPD();
733 nVtxTrk = esdEv->GetNumberOfPileupVerticesTracks();
734
735 }//ESD
736 else if (aodEv)
737 {
738 nVtxSPD = aodEv->GetNumberOfPileupVerticesSPD();
739 nVtxTrk = aodEv->GetNumberOfPileupVerticesTracks();
740 }//AOD
741
742
52bd777f 743 //printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - primary vertex BC %d\n",vtxBC);
744
745 Double_t bz = event->GetMagneticField();
fedea415 746
477d6cee 747 //Fill AODParticle with CTS aods
52bd777f 748 Float_t pt = 0;
749 Float_t phi = 0;
750 Float_t eta = 0;
5025c139 751 Int_t evtIndex = 0;
52bd777f 752 for(Int_t i = 0; i < ntracks; i++)
753 {
88f9563f 754 AliVTrack * track = (AliVTrack*) (GetCTSTracks()->At(i));
52bd777f 755
756 pt = track->Pt();
757 eta = track->Eta();
758 phi = track->Phi();
759
760 fhPtNoCut->Fill(pt);
477d6cee 761
85c4406e 762 fhPtNPileUpSPDVtx->Fill(pt,nVtxSPD);
763 fhPtNPileUpTrkVtx->Fill(pt,nVtxTrk);
764
52bd777f 765 AliAODTrack * aodTrack = dynamic_cast<AliAODTrack*>(track);
766 AliESDtrack * esdTrack = dynamic_cast<AliESDtrack*>(track);
477d6cee 767
fe9615b9 768 //TOF
769 ULong_t status = track->GetStatus();
fedea415 770 Bool_t okTOF = (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ;
52bd777f 771 Double32_t tof = track->GetTOFsignal()*1e-3;
fe9615b9 772
52bd777f 773 //DCA
fedea415 774 Double_t dcaCons = -999;
fedea415 775 if(aodTrack)
776 {
777 dcaCons = aodTrack->DCA();
309684b9 778 //vtxBC = aodTrack->GetProdVertex()->GetBC();
fedea415 779 }
fedea415 780
781 Double_t dca[2] = {1e6,1e6};
782 Double_t covar[3] = {1e6,1e6,1e6};
783 track->PropagateToDCA(GetReader()->GetInputEvent()->GetPrimaryVertex(),bz,100.,dca,covar);
784
52bd777f 785 Float_t trackDCA = dca[0];
786
fedea415 787 if(dcaCons == -999)
788 {
52bd777f 789 fhPtDCA[0]->Fill(pt, dca[0]);
790 fhPtDCA[1]->Fill(pt, dca[1]);
791 }
792 else
793 {
794 trackDCA = dcaCons;
795 fhPtDCA[2]->Fill(pt, dcaCons);
796 }
797
cc944149 798 if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtCutDCA->Fill(pt);
52bd777f 799
800 if(fFillVertexBC0Histograms)
801 {
802 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
803 {
804 fhPtVtxOutBC0->Fill(pt);
805 fhEtaPhiVtxOutBC0->Fill(eta,phi);
806
807 if(dcaCons == -999)
808 {
809 fhPtDCAVtxOutBC0[0]->Fill(pt, dca[0]);
810 fhPtDCAVtxOutBC0[1]->Fill(pt, dca[1]);
811 }
812 else
813 fhPtDCAVtxOutBC0[2]->Fill(pt, dcaCons);
814 }
815 else
816 {
817 fhPtVtxInBC0->Fill(pt);
818 fhEtaPhiVtxInBC0->Fill(eta,phi);
85c4406e 819
820 fhPtNPileUpSPDVtxBC0->Fill(pt,nVtxSPD);
821 fhPtNPileUpTrkVtxBC0->Fill(pt,nVtxTrk);
822
cc944149 823 if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtCutDCABCOK->Fill(pt);
52bd777f 824
825 if(dcaCons == -999)
826 {
827 fhPtDCAVtxInBC0[0]->Fill(pt, dca[0]);
828 fhPtDCAVtxInBC0[1]->Fill(pt, dca[1]);
829 }
830 else
831 fhPtDCAVtxInBC0[2]->Fill(pt, dcaCons);
832
833 }
fedea415 834 }
fedea415 835
836 if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD())
837 {
838 if(dcaCons == -999)
839 {
52bd777f 840 fhPtDCAPileUp[0]->Fill(pt, dca[0]);
841 fhPtDCAPileUp[1]->Fill(pt, dca[1]);
fedea415 842 }
843 else
52bd777f 844 fhPtDCAPileUp[2]->Fill(pt, dcaCons);
845
846 if(fFillVertexBC0Histograms)
847 {
848 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
849 {
850 if(dcaCons == -999)
851 {
852 fhPtDCAVtxOutBC0PileUp[0]->Fill(pt, dca[0]);
853 fhPtDCAVtxOutBC0PileUp[1]->Fill(pt, dca[1]);
854 }
855 else fhPtDCAVtxOutBC0PileUp[2]->Fill(pt, dcaCons);
856 }
857 else
858 {
859 if(dcaCons == -999)
860 {
861 fhPtDCAVtxInBC0PileUp[0]->Fill(pt, dca[0]);
862 fhPtDCAVtxInBC0PileUp[1]->Fill(pt, dca[1]);
863 }
864 else fhPtDCAVtxInBC0PileUp[2]->Fill(pt, dcaCons);
865 }
866 }
fedea415 867 }
868
869 if(!okTOF)
870 {
871 if(dcaCons == -999)
872 {
52bd777f 873 fhPtDCANoTOFHit[0]->Fill(pt, dca[0]);
874 fhPtDCANoTOFHit[1]->Fill(pt, dca[1]);
fedea415 875 }
876 else
52bd777f 877 fhPtDCANoTOFHit[2]->Fill(pt, dcaCons);
fedea415 878
52bd777f 879 if(fFillVertexBC0Histograms)
880 {
881 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
882 {
883 if(dcaCons == -999)
884 {
885 fhPtDCAVtxOutBC0NoTOFHit[0]->Fill(pt, dca[0]);
886 fhPtDCAVtxOutBC0NoTOFHit[1]->Fill(pt, dca[1]);
887 }
888 else
889 fhPtDCAVtxOutBC0NoTOFHit[2]->Fill(pt, dcaCons);
890 }
891 else
892 {
893 if(dcaCons == -999)
894 {
895 fhPtDCAVtxInBC0NoTOFHit[0]->Fill(pt, dca[0]);
896 fhPtDCAVtxInBC0NoTOFHit[1]->Fill(pt, dca[1]);
897 }
898 else
899 fhPtDCAVtxInBC0NoTOFHit[2]->Fill(pt, dcaCons);
900
901 }
902 }
fedea415 903
904 if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD())
905 {
906 if(dcaCons == -999)
907 {
52bd777f 908 fhPtDCAPileUpNoTOFHit[0]->Fill(pt, dca[0]);
909 fhPtDCAPileUpNoTOFHit[1]->Fill(pt, dca[1]);
fedea415 910 }
911 else
52bd777f 912 fhPtDCAPileUpNoTOFHit[2]->Fill(pt, dcaCons);
fedea415 913
52bd777f 914 if(fFillVertexBC0Histograms)
915 {
916 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
917 {
918 if(dcaCons == -999)
919 {
920 fhPtDCAVtxOutBC0PileUpNoTOFHit[0]->Fill(pt, dca[0]);
921 fhPtDCAVtxOutBC0PileUpNoTOFHit[1]->Fill(pt, dca[1]);
922 }
923 else
924 fhPtDCAVtxOutBC0PileUpNoTOFHit[2]->Fill(pt, dcaCons);
925 }
926 else
927 {
928 if(dcaCons == -999)
929 {
930 fhPtDCAVtxInBC0PileUpNoTOFHit[0]->Fill(pt, dca[0]);
931 fhPtDCAVtxInBC0PileUpNoTOFHit[1]->Fill(pt, dca[1]);
932 }
933 else
934 fhPtDCAVtxInBC0PileUpNoTOFHit[2]->Fill(pt, dcaCons);
935
936 }
937 }
fedea415 938 }
939 }
940
941 //printf("track pT %2.2f, DCA Cons %f, DCA1 %f, DCA2 %f, TOFBC %d, oktof %d, tof %f\n",
52bd777f 942 // pt,dcaCons,dca[0],dca[1],track->GetTOFBunchCrossing(bz),okTOF, tof);
fedea415 943
fedea415 944
52bd777f 945// if( vtxBC == 0 && trackBC !=0 && trackBC!=AliVTrack::kTOFBCNA)
946// 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);
947
948
949 if(okTOF)
fedea415 950 {
52bd777f 951 fhTOFSignal ->Fill(tof);
952 fhPtTOFSignal->Fill(pt, tof);
cc944149 953 if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtTOFSignalDCACut->Fill(pt, tof);
954
75af435c 955 if(fFillVertexBC0Histograms)
956 {
957 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
958 fhPtTOFSignalVtxOutBC0->Fill(pt, tof);
959 else
960 fhPtTOFSignalVtxInBC0->Fill(pt, tof);
961 }
fedea415 962
9b4a1ee2 963 Int_t trackBC = 1000;
964
965 if(fFillTrackBCHistograms)
fedea415 966 {
9b4a1ee2 967 trackBC = track->GetTOFBunchCrossing(bz);
968
969 if(trackBC==0)
fedea415 970 {
9b4a1ee2 971 fhTOFSignalBCOK->Fill(tof);
972
973 if(dcaCons == -999)
974 {
975 fhPtDCATOFBC0[0]->Fill(pt, dca[0]);
976 fhPtDCATOFBC0[1]->Fill(pt, dca[1]);
977 }
978 else
979 fhPtDCATOFBC0[2]->Fill(pt, dcaCons);
980
981 if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD())
982 {
983 if(dcaCons == -999)
984 {
985 fhPtDCAPileUpTOFBC0[0]->Fill(pt, dca[0]);
986 fhPtDCAPileUpTOFBC0[1]->Fill(pt, dca[1]);
987 }
988 else
989 fhPtDCAPileUpTOFBC0[2]->Fill(pt, dcaCons);
990 }
fedea415 991 }
9b4a1ee2 992 else if(trackBC!=AliVTrack::kTOFBCNA)
52bd777f 993 {
994 if(dcaCons == -999)
995 {
9b4a1ee2 996 fhPtDCATOFBCOut[0]->Fill(pt, dca[0]);
997 fhPtDCATOFBCOut[1]->Fill(pt, dca[1]);
52bd777f 998 }
999 else
9b4a1ee2 1000 fhPtDCATOFBCOut[2]->Fill(pt, dcaCons);
1001
52bd777f 1002 }
fedea415 1003 }
fedea415 1004
52bd777f 1005 if(fFillPileUpHistograms)
1006 {
1007 if(GetReader()->IsPileUpFromSPD()) fhPtTOFSignalPileUp[0]->Fill(pt, tof);
1008 if(GetReader()->IsPileUpFromEMCal()) fhPtTOFSignalPileUp[1]->Fill(pt, tof);
1009 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTOFSignalPileUp[2]->Fill(pt, tof);
1010 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTOFSignalPileUp[3]->Fill(pt, tof);
1011 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTOFSignalPileUp[4]->Fill(pt, tof);
1012 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTOFSignalPileUp[5]->Fill(pt, tof);
1013 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTOFSignalPileUp[6]->Fill(pt, tof);
1014
9b4a1ee2 1015 if(fFillTrackBCHistograms)
1016 {
1017 if (trackBC ==0) { fhEtaPhiTOFBC0 ->Fill(eta,phi); if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD()) fhEtaPhiTOFBC0PileUpSPD ->Fill(eta,phi); }
1018 else if (trackBC < 0) { fhEtaPhiTOFBCPlus ->Fill(eta,phi); if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD()) fhEtaPhiTOFBCPlusPileUpSPD ->Fill(eta,phi); }
1019 else if (trackBC > 0) { fhEtaPhiTOFBCMinus->Fill(eta,phi); if(fFillPileUpHistograms && GetReader()->IsPileUpFromSPD()) fhEtaPhiTOFBCMinusPileUpSPD->Fill(eta,phi); }
1020 }
fedea415 1021
52bd777f 1022 if(fFillVertexBC0Histograms)
1023 {
1024 if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
1025 {
1026 if(GetReader()->IsPileUpFromSPD()) fhPtTOFSignalVtxOutBC0PileUp[0]->Fill(pt, tof);
1027 if(GetReader()->IsPileUpFromEMCal()) fhPtTOFSignalVtxOutBC0PileUp[1]->Fill(pt, tof);
1028 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTOFSignalVtxOutBC0PileUp[2]->Fill(pt, tof);
1029 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTOFSignalVtxOutBC0PileUp[3]->Fill(pt, tof);
1030 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTOFSignalVtxOutBC0PileUp[4]->Fill(pt, tof);
1031 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTOFSignalVtxOutBC0PileUp[5]->Fill(pt, tof);
1032 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTOFSignalVtxOutBC0PileUp[6]->Fill(pt, tof);
1033 }
1034 else
1035 {
1036 if(GetReader()->IsPileUpFromSPD()) fhPtTOFSignalVtxInBC0PileUp[0]->Fill(pt, tof);
1037 if(GetReader()->IsPileUpFromEMCal()) fhPtTOFSignalVtxInBC0PileUp[1]->Fill(pt, tof);
1038 if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtTOFSignalVtxInBC0PileUp[2]->Fill(pt, tof);
1039 if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtTOFSignalVtxInBC0PileUp[3]->Fill(pt, tof);
1040 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtTOFSignalVtxInBC0PileUp[4]->Fill(pt, tof);
1041 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtTOFSignalVtxInBC0PileUp[5]->Fill(pt, tof);
1042 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtTOFSignalVtxInBC0PileUp[6]->Fill(pt, tof);
1043 }
1044 }
1045 }
1046 }
1047
1048 //Fill AODParticle after some selection
1049 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
1050
192689a4 1051 Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"CTS") ;
1052
05d0d05d 1053 if(GetDebug() > 1)
52bd777f 1054 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Track pt %2.2f, eta %2.2f, phi %2.2f in fiducial cut %d\n",pt,eta,phi,in);
192689a4 1055
1056 //Acceptance selection
1057 if(IsFiducialCutOn() && ! in ) continue ;
1058
1059 // Momentum selection
52bd777f 1060 if(pt < GetMinPt() || pt > GetMaxPt()) continue;
fe9615b9 1061
1062 if(okTOF) fhTOFSignalPtCut->Fill(tof);
1063 else
1064 {
52bd777f 1065 fhPtTOFStatus0 ->Fill(pt);
1066 fhEtaPhiTOFStatus0->Fill(eta,phi);
fe9615b9 1067 }
192689a4 1068
8f467228 1069 Bool_t bITSRefit = (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit;
1070 Bool_t bConstrained = kFALSE;
41ebe136 1071 if (aodTrack) bConstrained = aodTrack->IsGlobalConstrained();
1072 else if(esdTrack) bConstrained = (!esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1));
8f467228 1073 //printf("Track %d, pt %2.2f, eta %2.2f, phi %2.2f, SPDRefit %d, refit %d, dcaCons %2.2f\n",
52bd777f 1074 // i, pt, eta, phi, bConstrained, bITSRefit, dcaCons);
8f467228 1075
1076 if(bConstrained)
1077 {
1078 if(bITSRefit)
1079 {
52bd777f 1080 fhPtNoSPDRefit->Fill(pt);
1081 if(pt < 2)fhEtaPhiNoSPDRefitPt02->Fill(eta,phi);
1082 if(pt > 3)fhEtaPhiNoSPDRefitPt3 ->Fill(eta,phi);
8f467228 1083
1084 if(dcaCons == -999)
1085 {
52bd777f 1086 fhPtDCANoSPDRefit[0]->Fill(pt, dca[0]);
1087 fhPtDCANoSPDRefit[1]->Fill(pt, dca[1]);
8f467228 1088 }
1089 else
52bd777f 1090 fhPtDCANoSPDRefit[2]->Fill(pt, dcaCons);
8f467228 1091
1092 }
1093 else
1094 {
52bd777f 1095 fhPtNoSPDNoRefit->Fill(pt);
1096 if(pt < 2)fhEtaPhiNoSPDNoRefitPt02->Fill(eta,phi);
1097 if(pt > 3)fhEtaPhiNoSPDNoRefitPt3 ->Fill(eta,phi);
8f467228 1098 if(dcaCons == -999)
1099 {
52bd777f 1100 fhPtDCANoSPDNoRefit[0]->Fill(pt, dca[0]);
1101 fhPtDCANoSPDNoRefit[1]->Fill(pt, dca[1]);
8f467228 1102 }
1103 else
52bd777f 1104 fhPtDCANoSPDNoRefit[2]->Fill(pt, dcaCons);
8f467228 1105
1106 }
1107 }
1108 else
1109 {
52bd777f 1110 fhPtSPDRefit->Fill(pt);
1111 if(pt < 2)fhEtaPhiSPDRefitPt02->Fill(eta,phi);
1112 if(pt > 3)fhEtaPhiSPDRefitPt3 ->Fill(eta,phi);
8f467228 1113 if(dcaCons == -999)
1114 {
52bd777f 1115 fhPtDCASPDRefit[0]->Fill(pt, dca[0]);
1116 fhPtDCASPDRefit[1]->Fill(pt, dca[1]);
8f467228 1117 }
1118 else
52bd777f 1119 fhPtDCASPDRefit[2]->Fill(pt, dcaCons);
8f467228 1120 }
52bd777f 1121
192689a4 1122 // Mixed event
fe9615b9 1123 if (GetMixedEvent())
1124 {
192689a4 1125 evtIndex = GetMixedEvent()->EventIndex(track->GetID()) ;
fe9615b9 1126 }
1127
192689a4 1128 GetVertex(vert,evtIndex);
1129 if(TMath::Abs(vert[2])> GetZvertexCut()) return;
1130
1131 AliAODPWG4Particle tr = AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
1132 tr.SetDetector("CTS");
1133 tr.SetLabel(track->GetLabel());
1134 tr.SetTrackLabel(track->GetID(),-1);
1135 tr.SetChargedBit(track->Charge()>0);
7cd4e982 1136
192689a4 1137 AddAODParticle(tr);
1138
477d6cee 1139 }//loop
1140
1141 if(GetDebug() > 0)
a3aebfff 1142 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast());
477d6cee 1143}
1144
1145//__________________________________________________________________
62c64236 1146void AliAnaChargedParticles::MakeAnalysisFillHistograms()
477d6cee 1147{
1148 //Do analysis and fill histograms
1149
1150 //Loop on stored AODParticles
1151 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
05d0d05d 1152
2244659d 1153 fhNtracks->Fill(GetReader()->GetTrackMultiplicity()) ;
05d0d05d 1154
62c64236 1155 if(GetDebug() > 0)
05d0d05d 1156 printf("AliAnaChargedParticles::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);
1157
52bd777f 1158 Float_t pt = 0;
1159 Float_t phi = 0;
1160 Float_t eta = 0;
fedea415 1161
52bd777f 1162 for(Int_t iaod = 0; iaod < naod ; iaod++)
1163 {
1164 AliAODPWG4Particle* track = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
1165
1166 pt = track->Pt();
1167 eta = track->Eta();
1168 phi = track->Phi();
1169
1170 fhPt->Fill(pt);
05d0d05d 1171
52bd777f 1172 if(track->GetChargedBit())
1173 {
1174 fhPhiPos ->Fill(pt, phi);
1175 fhEtaPos ->Fill(pt, eta);
1176 fhEtaPhiPos->Fill(eta,phi);
05d0d05d 1177 }
52bd777f 1178 else
1179 {
1180 fhPhiNeg ->Fill(pt, phi);
1181 fhEtaNeg ->Fill(pt, eta);
1182 fhEtaPhiNeg->Fill(eta,phi);
05d0d05d 1183 }
477d6cee 1184
fedea415 1185 if(fFillPileUpHistograms)
1186 {
52bd777f 1187 if(GetReader()->IsPileUpFromSPD()) {fhPtPileUp[0]->Fill(pt);}
1188 if(GetReader()->IsPileUpFromEMCal()) {fhPtPileUp[1]->Fill(pt);}
1189 if(GetReader()->IsPileUpFromSPDOrEMCal()) {fhPtPileUp[2]->Fill(pt);}
1190 if(GetReader()->IsPileUpFromSPDAndEMCal()) {fhPtPileUp[3]->Fill(pt);}
1191 if(GetReader()->IsPileUpFromSPDAndNotEMCal()) {fhPtPileUp[4]->Fill(pt);}
1192 if(GetReader()->IsPileUpFromEMCalAndNotSPD()) {fhPtPileUp[5]->Fill(pt);}
1193 if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) {fhPtPileUp[6]->Fill(pt);}
fedea415 1194 }
62c64236 1195
fedea415 1196
42b156e0 1197 if(IsDataMC())
1198 {
727a309a 1199 //Play with the MC stack if available
5025c139 1200 Int_t mompdg = -1;
52bd777f 1201 Int_t label = track->GetLabel();
5025c139 1202
62c64236 1203 if(label >= 0)
42b156e0 1204 {
62c64236 1205 if( GetReader()->ReadStack() && label < GetMCStack()->GetNtrack())
1206 {
1207 TParticle * mom = GetMCStack()->Particle(label);
1208 mompdg =TMath::Abs(mom->GetPdgCode());
1209 }
1210 else if(GetReader()->ReadAODMCParticles())
1211 {
1212 AliAODMCParticle * aodmom = 0;
1213 //Get the list of MC particles
1214 aodmom = (AliAODMCParticle*) (GetReader()->GetAODMCParticles())->At(label);
1215 mompdg =TMath::Abs(aodmom->GetPdgCode());
1216 }
477d6cee 1217 }
62c64236 1218
1219 Int_t mcType = kmcUnknown;
1220 if (mompdg==211 ) mcType = kmcPion;
1221 else if(mompdg==2212) mcType = kmcProton;
1222 else if(mompdg==321 ) mcType = kmcKaon;
1223 else if(mompdg==11 ) mcType = kmcElectron;
1224 else if(mompdg==13 ) mcType = kmcMuon;
1225
1226 fhPtMCPart [mcType]->Fill(pt);
1227 fhEtaMCPart[mcType]->Fill(pt,eta);
1228 fhPhiMCPart[mcType]->Fill(pt,phi);
1229
477d6cee 1230 }//Work with stack also
f6661bbc 1231
477d6cee 1232 }// aod branch loop
1233
727a309a 1234 if(IsDataMC())
62c64236 1235 {
1236 Int_t primpdg = -1;
1237 TLorentzVector mom;
1238 if(GetReader()->ReadStack())
727a309a 1239 {
62c64236 1240 AliStack * stack = GetMCStack();
1241 if(stack) {
1242 for(Int_t i=0 ; i<stack->GetNtrack(); i++)
1243 {
1244 TParticle *prim = stack->Particle(i);
1245 if(prim->IsPrimary())
1246 {
1247 primpdg = TMath::Abs(prim->GetPdgCode());
1248
1249 Int_t mcType = kmcUnknown;
1250 if (primpdg==211 ) mcType = kmcPion;
1251 else if(primpdg==2212) mcType = kmcProton;
1252 else if(primpdg==321 ) mcType = kmcKaon;
1253 else if(primpdg==11 ) mcType = kmcElectron;
1254 else if(primpdg==13 ) mcType = kmcMuon;
1255
1256 prim->Momentum(mom);
1257 Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"CTS") ;
1258
1259 Float_t ptPrim = prim->Pt();
1260 if(in) fhPtMCPrimPart [mcType]->Fill(ptPrim);
1261 fhEtaMCPrimPart[mcType]->Fill(ptPrim,prim->Eta());
1262 fhPhiMCPrimPart[mcType]->Fill(ptPrim,prim->Phi());
1263 }
1264 }
727a309a 1265 }
62c64236 1266 }
1267 else if(GetReader()->ReadAODMCParticles())
1268 {
1269 TClonesArray * mcparticles = GetReader()->GetAODMCParticles();
1270 if(mcparticles)
1271 {
1272 Int_t nprim = mcparticles->GetEntriesFast();
1273 for(Int_t i=0; i < nprim; i++)
1274 {
1275 AliAODMCParticle * prim = (AliAODMCParticle *) mcparticles->At(i);
1276
1277 if(prim->IsPrimary())
1278 {
1279 primpdg = TMath::Abs(prim->GetPdgCode());
1280
1281 Int_t mcType = kmcUnknown;
1282 if (primpdg==211 ) mcType = kmcPion;
1283 else if(primpdg==2212) mcType = kmcProton;
1284 else if(primpdg==321 ) mcType = kmcKaon;
1285 else if(primpdg==11 ) mcType = kmcElectron;
1286 else if(primpdg==13 ) mcType = kmcMuon;
1287
1288 mom.SetPxPyPzE(prim->Px(),prim->Py(),prim->Pz(),prim->E());
1289 Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"CTS") ;
1290
1291 Float_t ptPrim = prim->Pt();
1292 if(in) fhPtMCPrimPart [mcType]->Fill(ptPrim);
1293 fhEtaMCPrimPart[mcType]->Fill(ptPrim,prim->Eta());
1294 fhPhiMCPrimPart[mcType]->Fill(ptPrim,prim->Phi());
1295 }
1296 }
727a309a 1297 }
1298 }
1299 }
62c64236 1300}