]>
Commit | Line | Data |
---|---|---|
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 | |
39 | ClassImp(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 | 64 | TList * 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 | 188 | void 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 | 201 | void 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 | 217 | void 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 | 229 | void 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 | //__________________________________________________________________ | |
289 | void 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 | } |