]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/CaloTrackCorrelations/AliAnaChargedParticles.cxx
avoid negative MC labels or too large for tracks
[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"
477d6cee 38
39ClassImp(AliAnaChargedParticles)
40
05d0d05d 41//__________________________________________________
477d6cee 42 AliAnaChargedParticles::AliAnaChargedParticles() :
745913ae 43 AliAnaCaloTrackCorrBaseClass(),
05d0d05d 44 fPdg(0),
45 fhNtracks(0), fhPt(0),
46 fhPhiNeg(0), fhEtaNeg(0),
47 fhPhiPos(0), fhEtaPos(0),
48 fhEtaPhiPos(0), fhEtaPhiNeg(0),
49 //MC
50 fhPtPion(0), fhPhiPion(0), fhEtaPion(0),
51 fhPtProton(0), fhPhiProton(0), fhEtaProton(0),
52 fhPtElectron(0),fhPhiElectron(0), fhEtaElectron(0),
53 fhPtKaon(0), fhPhiKaon(0), fhEtaKaon(0),
54 fhPtUnknown(0), fhPhiUnknown(0), fhEtaUnknown(0)
477d6cee 55{
56 //Default Ctor
57
58 //Initialize parameters
59 InitParameters();
477d6cee 60
477d6cee 61}
62
05d0d05d 63//_______________________________________________________
477d6cee 64TList * AliAnaChargedParticles::GetCreateOutputObjects()
65{
66 // Create histograms to be saved in output file and
67 // store them in fOutputContainer
68
69
70 TList * outputContainer = new TList() ;
71 outputContainer->SetName("ExampleHistos") ;
72
745913ae 73 Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
74 Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
75 Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
5025c139 76
77 fhNtracks = new TH1F ("hNtracks","# of tracks", 1000,0,1000);
78 fhNtracks->SetXTitle("# of tracks");
79 outputContainer->Add(fhNtracks);
05d0d05d 80
81 fhPt = new TH1F ("hPt","p_T distribution", nptbins,ptmin,ptmax);
477d6cee 82 fhPt->SetXTitle("p_{T} (GeV/c)");
83 outputContainer->Add(fhPt);
84
05d0d05d 85 fhPhiNeg = new TH2F ("hPhiNegative","#phi of negative charges distribution",
86 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
87 fhPhiNeg->SetYTitle("#phi (rad)");
88 fhPhiNeg->SetXTitle("p_{T} (GeV/c)");
89 outputContainer->Add(fhPhiNeg);
90
91 fhEtaNeg = new TH2F ("hEtaNegative","#eta of negative charges distribution",
92 nptbins,ptmin,ptmax, netabins,etamin,etamax);
93 fhEtaNeg->SetYTitle("#eta ");
94 fhEtaNeg->SetXTitle("p_{T} (GeV/c)");
95 outputContainer->Add(fhEtaNeg);
477d6cee 96
192689a4 97 fhPhiPos = new TH2F ("hPhiPositive","#phi of positive charges distribution",
05d0d05d 98 nptbins,ptmin,ptmax, nphibins,phimin,phimax);
99 fhPhiPos->SetYTitle("#phi (rad)");
100 fhPhiPos->SetXTitle("p_{T} (GeV/c)");
101 outputContainer->Add(fhPhiPos);
477d6cee 102
192689a4 103 fhEtaPos = new TH2F ("hEtaPositive","#eta of positive charges distribution",
05d0d05d 104 nptbins,ptmin,ptmax, netabins,etamin,etamax);
105 fhEtaPos->SetYTitle("#eta ");
106 fhEtaPos->SetXTitle("p_{T} (GeV/c)");
107 outputContainer->Add(fhEtaPos);
5025c139 108
192689a4 109 fhEtaPhiPos = new TH2F ("hEtaPhiPositive","pt/eta/phi of positive charge",netabins,etamin,etamax, nphibins,phimin,phimax);
4bfeae64 110 fhEtaPhiPos->SetXTitle("#eta ");
111 fhEtaPhiPos->SetYTitle("#phi (rad)");
05d0d05d 112 outputContainer->Add(fhEtaPhiPos);
113
114 fhEtaPhiNeg = new TH2F ("hEtaPhiNegative","eta vs phi of negative charge",netabins,etamin,etamax, nphibins,phimin,phimax);
4bfeae64 115 fhEtaPhiNeg->SetXTitle("#eta ");
116 fhEtaPhiNeg->SetYTitle("#phi (rad)");
05d0d05d 117 outputContainer->Add(fhEtaPhiNeg);
477d6cee 118
119 if(IsDataMC()){
120
a3aebfff 121 fhPtPion = new TH1F ("hPtMCPion","p_T distribution from #pi", nptbins,ptmin,ptmax);
477d6cee 122 fhPtPion->SetXTitle("p_{T} (GeV/c)");
123 outputContainer->Add(fhPtPion);
124
a3aebfff 125 fhPhiPion = new TH2F ("hPhiMCPion","#phi distribution from #pi",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
477d6cee 126 fhPhiPion->SetXTitle("#phi (rad)");
127 outputContainer->Add(fhPhiPion);
128
a3aebfff 129 fhEtaPion = new TH2F ("hEtaMCPion","#eta distribution from #pi",nptbins,ptmin,ptmax, netabins,etamin,etamax);
477d6cee 130 fhEtaPion->SetXTitle("#eta ");
131 outputContainer->Add(fhEtaPion);
132
a3aebfff 133 fhPtProton = new TH1F ("hPtMCProton","p_T distribution from proton", nptbins,ptmin,ptmax);
477d6cee 134 fhPtProton->SetXTitle("p_{T} (GeV/c)");
135 outputContainer->Add(fhPtProton);
136
a3aebfff 137 fhPhiProton = new TH2F ("hPhiMCProton","#phi distribution from proton",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
477d6cee 138 fhPhiProton->SetXTitle("#phi (rad)");
139 outputContainer->Add(fhPhiProton);
140
a3aebfff 141 fhEtaProton = new TH2F ("hEtaMCProton","#eta distribution from proton",nptbins,ptmin,ptmax, netabins,etamin,etamax);
477d6cee 142 fhEtaProton->SetXTitle("#eta ");
143 outputContainer->Add(fhEtaProton);
144
a3aebfff 145 fhPtKaon = new TH1F ("hPtMCKaon","p_T distribution from kaon", nptbins,ptmin,ptmax);
477d6cee 146 fhPtKaon->SetXTitle("p_{T} (GeV/c)");
147 outputContainer->Add(fhPtKaon);
148
a3aebfff 149 fhPhiKaon = new TH2F ("hPhiMCKaon","#phi distribution from kaon",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
477d6cee 150 fhPhiKaon->SetXTitle("#phi (rad)");
151 outputContainer->Add(fhPhiKaon);
152
a3aebfff 153 fhEtaKaon = new TH2F ("hEtaMCKaon","#eta distribution from kaon",nptbins,ptmin,ptmax, netabins,etamin,etamax);
477d6cee 154 fhEtaKaon->SetXTitle("#eta ");
155 outputContainer->Add(fhEtaKaon);
156
a3aebfff 157 fhPtElectron = new TH1F ("hPtMCElectron","p_T distribution from electron", nptbins,ptmin,ptmax);
477d6cee 158 fhPtElectron->SetXTitle("p_{T} (GeV/c)");
159 outputContainer->Add(fhPtElectron);
160
a3aebfff 161 fhPhiElectron = new TH2F ("hPhiMCElectron","#phi distribution from electron",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
477d6cee 162 fhPhiElectron->SetXTitle("#phi (rad)");
163 outputContainer->Add(fhPhiElectron);
164
a3aebfff 165 fhEtaElectron = new TH2F ("hEtaMCElectron","#eta distribution from electron",nptbins,ptmin,ptmax, netabins,etamin,etamax);
477d6cee 166 fhEtaElectron->SetXTitle("#eta ");
167 outputContainer->Add(fhEtaElectron);
168
a3aebfff 169 fhPtUnknown = new TH1F ("hPtMCUnknown","p_T distribution from unknown", nptbins,ptmin,ptmax);
477d6cee 170 fhPtUnknown->SetXTitle("p_{T} (GeV/c)");
171 outputContainer->Add(fhPtUnknown);
172
a3aebfff 173 fhPhiUnknown = new TH2F ("hPhiMCUnknown","#phi distribution from unknown",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
477d6cee 174 fhPhiUnknown->SetXTitle("#phi (rad)");
175 outputContainer->Add(fhPhiUnknown);
176
a3aebfff 177 fhEtaUnknown = new TH2F ("hEtaMCUnknown","#eta distribution from unknown",nptbins,ptmin,ptmax, netabins,etamin,etamax);
477d6cee 178 fhEtaUnknown->SetXTitle("#eta ");
179 outputContainer->Add(fhEtaUnknown);
180
181 }
a3aebfff 182
477d6cee 183 return outputContainer;
a3aebfff 184
477d6cee 185}
186
05d0d05d 187//___________________________________________
477d6cee 188void AliAnaChargedParticles::InitParameters()
189{
190 //Initialize the parameters of the analysis.
191 SetOutputAODClassName("AliAODPWG4Particle");
a3aebfff 192 SetOutputAODName("PWG4Particle");
193
194 AddToHistogramsName("AnaCharged_");
195
477d6cee 196 fPdg = -1; //Select all tracks
197
198}
199
05d0d05d 200//____________________________________________________________
477d6cee 201void AliAnaChargedParticles::Print(const Option_t * opt) const
202{
203 //Print some relevant parameters set for the analysis
204 if(! opt)
205 return;
206
a3aebfff 207 printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
745913ae 208 AliAnaCaloTrackCorrBaseClass::Print(" ");
a3aebfff 209
477d6cee 210 printf("Min Pt = %3.2f\n", GetMinPt());
211 printf("Max Pt = %3.2f\n", GetMaxPt());
212 printf("Select clusters with pdg %d \n",fPdg);
213
214}
215
05d0d05d 216//_________________________________
477d6cee 217void AliAnaChargedParticles::Init()
218{
219 //Init
220 //Do some checks
221 if(!GetReader()->IsCTSSwitchedOn()){
7cd4e982 222 printf("AliAnaChargedParticles::Init() - STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
477d6cee 223 abort();
224 }
225
226}
227
05d0d05d 228//_________________________________________________
477d6cee 229void AliAnaChargedParticles::MakeAnalysisFillAOD()
230{
231 //Do analysis and fill aods
be518ab0 232 if(!GetCTSTracks() || GetCTSTracks()->GetEntriesFast() == 0) return ;
192689a4 233
be518ab0 234 Int_t ntracks = GetCTSTracks()->GetEntriesFast();
2244659d 235 Double_t vert[3] = {0,0,0}; //vertex ;
192689a4 236
477d6cee 237 //Some prints
238 if(GetDebug() > 0)
a3aebfff 239 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);
477d6cee 240
241 //Fill AODParticle with CTS aods
242 TVector3 p3;
5025c139 243 Int_t evtIndex = 0;
477d6cee 244 for(Int_t i = 0; i < ntracks; i++){
245
88f9563f 246 AliVTrack * track = (AliVTrack*) (GetCTSTracks()->At(i));
477d6cee 247
248 //Fill AODParticle after some selection
249 Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
250 p3.SetXYZ(mom[0],mom[1],mom[2]);
251
192689a4 252 Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"CTS") ;
253
05d0d05d 254 if(GetDebug() > 1)
192689a4 255 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Track pt %2.2f, phi %2.2f, eta %2.2f in fiducial cut %d\n",p3.Pt(), p3.Phi(), p3.Eta(),in);
256
257 //Acceptance selection
258 if(IsFiducialCutOn() && ! in ) continue ;
259
260 // Momentum selection
261 if(p3.Pt() < GetMinPt() || p3.Pt() > GetMaxPt()) continue;
262
263 //Keep only particles identified with fPdg
264 //Selection not done for the moment
265 //Should be done here.
266
267 // Mixed event
268 if (GetMixedEvent()){
269 evtIndex = GetMixedEvent()->EventIndex(track->GetID()) ;
270 }
271 GetVertex(vert,evtIndex);
272 if(TMath::Abs(vert[2])> GetZvertexCut()) return;
273
274 AliAODPWG4Particle tr = AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
275 tr.SetDetector("CTS");
276 tr.SetLabel(track->GetLabel());
277 tr.SetTrackLabel(track->GetID(),-1);
278 tr.SetChargedBit(track->Charge()>0);
7cd4e982 279
192689a4 280 AddAODParticle(tr);
281
477d6cee 282 }//loop
283
284 if(GetDebug() > 0)
a3aebfff 285 printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast());
477d6cee 286}
287
288//__________________________________________________________________
289void AliAnaChargedParticles::MakeAnalysisFillHistograms()
290{
291 //Do analysis and fill histograms
292
293 //Loop on stored AODParticles
294 Int_t naod = GetOutputAODBranch()->GetEntriesFast();
05d0d05d 295
2244659d 296 fhNtracks->Fill(GetReader()->GetTrackMultiplicity()) ;
05d0d05d 297
298 if(GetDebug() > 0)
299 printf("AliAnaChargedParticles::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);
300
477d6cee 301 for(Int_t iaod = 0; iaod < naod ; iaod++){
302 AliAODPWG4Particle* tr = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
2244659d 303
477d6cee 304 fhPt->Fill(tr->Pt());
05d0d05d 305
306 if(tr->GetChargedBit()){
307 fhPhiPos ->Fill(tr->Pt(), tr->Phi());
b2fbc116 308 fhEtaPos ->Fill(tr->Pt(), tr->Eta());
05d0d05d 309 fhEtaPhiPos->Fill(tr->Eta(),tr->Phi());
310 }
311 else{
b2fbc116 312 fhPhiNeg ->Fill(tr->Pt(), tr->Phi());
05d0d05d 313 fhEtaNeg ->Fill(tr->Pt(), tr->Eta());
314 fhEtaPhiNeg->Fill(tr->Eta(),tr->Phi());
315 }
477d6cee 316
42b156e0 317 if(IsDataMC())
318 {
477d6cee 319 //Play with the MC stack if available
5025c139 320 Int_t mompdg = -1;
42b156e0 321 Int_t label = tr->GetLabel();
322 if(label > 0)
323 {
324 if( GetReader()->ReadStack() && label < GetMCStack()->GetNtrack())
325 {
326 TParticle * mom = GetMCStack()->Particle(label);
327 mompdg =TMath::Abs(mom->GetPdgCode());
328 }
329 else if(GetReader()->ReadAODMCParticles())
330 {
331 AliAODMCParticle * aodmom = 0;
332 //Get the list of MC particles
333 aodmom = (AliAODMCParticle*) (GetReader()->GetAODMCParticles(tr->GetInputFileIndex()))->At(label);
334 mompdg =TMath::Abs(aodmom->GetPdgCode());
335 }
5025c139 336 }
337
42b156e0 338 if(mompdg==211)
339 {
05d0d05d 340 fhPtPion ->Fill(tr->Pt());
5025c139 341 fhPhiPion->Fill(tr->Pt(), tr->Phi());
342 fhEtaPion->Fill(tr->Pt(), tr->Eta());
477d6cee 343 }
42b156e0 344 else if(mompdg==2212)
345 {
05d0d05d 346 fhPtProton ->Fill(tr->Pt());
5025c139 347 fhPhiProton->Fill(tr->Pt(), tr->Phi());
348 fhEtaProton->Fill(tr->Pt(), tr->Eta());
477d6cee 349 }
42b156e0 350 else if(mompdg==321)
351 {
05d0d05d 352 fhPtKaon ->Fill(tr->Pt());
5025c139 353 fhPhiKaon->Fill(tr->Pt(), tr->Phi());
354 fhEtaKaon->Fill(tr->Pt(), tr->Eta());
477d6cee 355 }
42b156e0 356 else if(mompdg==11)
357 {
05d0d05d 358 fhPtElectron ->Fill(tr->Pt());
5025c139 359 fhPhiElectron->Fill(tr->Pt(), tr->Phi());
360 fhEtaElectron->Fill(tr->Pt(), tr->Eta());
477d6cee 361 }
362 else {
5025c139 363 //printf("unknown pdg %d\n",mompdg);
05d0d05d 364 fhPtUnknown ->Fill(tr->Pt());
5025c139 365 fhPhiUnknown->Fill(tr->Pt(), tr->Phi());
366 fhEtaUnknown->Fill(tr->Pt(), tr->Eta());
477d6cee 367 }
05d0d05d 368
477d6cee 369 }//Work with stack also
f6661bbc 370
477d6cee 371 }// aod branch loop
372
373}