]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/AliAnalysisTrackCuts.cxx
Coding conventions (Annalisa)
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTrackCuts.cxx
1 /**************************************************************************
2  * Author: Panos Christakoglou.                                           *
3  * Contributors are mentioned in the code where appropriate.              *
4  *                                                                        *
5  * Permission to use, copy, modify and distribute this software and its   *
6  * documentation strictly for non-commercial purposes is hereby granted   *
7  * without fee, provided that the above copyright notice appears in all   *
8  * copies and that both the copyright notice and this permission notice   *
9  * appear in the supporting documentation. The authors make no claims     *
10  * about the suitability of this software for any purpose. It is          *
11  * provided "as is" without express or implied warranty.                  *
12  **************************************************************************/
13
14 /* $Id$ */
15
16 //-----------------------------------------------------------------
17 //           AliAnalysisTrackCuts class
18 //   This is the class to deal with the event and track level cuts
19 //   Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
20 //-----------------------------------------------------------------
21
22
23
24 //ROOT
25 #include <TPaveText.h>
26 #include <TText.h>
27 #include <TLine.h>
28 #include <TCanvas.h>
29 #include <TObjArray.h>
30 #include <Riostream.h>
31
32 #include "AliLog.h"
33
34 #include "AliESDtrack.h"
35 #include "AliESD.h"
36
37 #include "AliAnalysisTrackCuts.h"
38
39 ClassImp(AliAnalysisTrackCuts)
40
41 //----------------------------------------//
42 AliAnalysisTrackCuts::AliAnalysisTrackCuts()
43 {
44   //Default constructor.
45   //Calls the Reset method.
46   Reset();
47 }
48
49 //----------------------------------------//
50 AliAnalysisTrackCuts::~AliAnalysisTrackCuts()
51 {
52   //Destructor.
53   delete fAcceptedParticleList;
54 }
55
56 //----------------------------------------//
57 void AliAnalysisTrackCuts::Reset()
58 {
59   //Assigns dummy values to every private member.
60   fPxMin = -1000.0;
61   fPxMax = 1000.0; 
62   fPyMin = -1000.0;
63   fPyMax = 1000.0;  
64   fPzMin = -1000.0;
65   fPzMax = 1000.0;
66   fPtMin = 0.0;
67   fPtMax = 1000.0;
68   fPMin = 0.0;
69   fPMax = 1000.0;
70   fBrMin = 0.0;
71   fBrMax = 1000.0;
72   fBzMin = 0.0;
73   fBzMax = 1000.0;
74   fEtaMin = -100.0;
75   fEtaMax = 100.0;
76   fRapMin = -100.0;
77   fRapMax = 100.0;
78   
79   fP = 0;  
80   fPt = 0; 
81   fPx = 0;  
82   fPy = 0; 
83   fPz = 0; 
84   fbr = 0; 
85   fbz = 0; 
86   fEta = 0;  
87   fRap = 0; 
88   fTotalTracks = 0; 
89   fAcceptedTracks = 0; 
90
91   fFlagP = 0;  
92   fFlagPt = 0;  
93   fFlagPx = 0;  
94   fFlagPy = 0;  
95   fFlagPz = 0;  
96   fFlagEta = 0;  
97   fFlagRap = 0;  
98   fFlagbr = 0;  
99   fFlagbz = 0;  
100
101   fAcceptedParticleList = new TObjArray();
102 }
103
104
105 //----------------------------------------//
106 void AliAnalysisTrackCuts::SetPxRange(Float_t r1, Float_t r2)
107 {
108   //Sets the range for the momentum x component. 
109   fPxMin = r1;
110   fPxMax = r2;
111   fFlagPx = 1;
112 }
113
114 //----------------------------------------//
115 void AliAnalysisTrackCuts::SetPyRange(Float_t r1, Float_t r2)
116 {
117   //Sets the range for the momentum y component. 
118   fPyMin = r1;
119   fPyMax = r2; 
120   fFlagPy = 1;
121 }
122
123 //----------------------------------------//
124 void AliAnalysisTrackCuts::SetPzRange(Float_t r1, Float_t r2)
125 {
126   //Sets the range for the momentum z component. 
127   fPzMin = r1;
128   fPzMax = r2; 
129   fFlagPy = 1;
130 }
131
132 //----------------------------------------//
133 void AliAnalysisTrackCuts::SetPRange(Float_t r1, Float_t r2)
134 {
135   //Sets the range for the momentum. 
136   fPMin = r1;
137   fPMax = r2; 
138   fFlagPz = 1;
139 }
140
141 //----------------------------------------//
142 void AliAnalysisTrackCuts::SetPtRange(Float_t r1, Float_t r2)
143 {
144   //Sets the range for the teransverse momentum. 
145   fPtMin = r1;
146   fPtMax = r2; 
147   fFlagPt = 1;
148 }
149
150 //----------------------------------------//
151 void AliAnalysisTrackCuts::SetBrRange(Float_t r1, Float_t r2)
152 {
153   //Sets the range of the closest approach of the track 
154   //to the primary vertex in the r-phi plane. 
155   fBrMin = r1;
156   fBrMax = r2; 
157   fFlagbr = 1;
158 }
159
160 //----------------------------------------//
161 void AliAnalysisTrackCuts::SetBzRange(Float_t r1, Float_t r2)
162 {
163   //Sets the range of the closest approach of the track 
164   //to the primary vertex in the beam axis. 
165   fBzMin = r1;
166   fBzMax = r2; 
167   fFlagbz = 1;
168 }
169
170 //----------------------------------------//
171 void AliAnalysisTrackCuts::SetEtaRange(Float_t r1, Float_t r2)
172 {
173   //Sets the range of the pseudo-rapidity. 
174   fEtaMin = r1;
175   fEtaMax = r2; 
176   fFlagEta = 1;
177 }
178
179 //----------------------------------------//
180 void AliAnalysisTrackCuts::SetRapRange(Float_t r1, Float_t r2)
181 {
182   //Sets the range of the rapidity. 
183   fRapMin = r1;
184   fRapMax = r2; 
185   fFlagRap = 1;
186 }
187
188 //----------------------------------------//
189 void AliAnalysisTrackCuts::GetTrackStats()
190 {
191   //Gets the statistics.
192   //fTotalTracks is the total number of tracks.
193   //fAcceptedTracks is the number of accepted tracks after the cuts. 
194   AliInfo(Form("Total number of tracks: %d",fTotalTracks));
195   AliInfo(Form("Total number of accepted tracks: %d",fAcceptedTracks)); 
196 }
197
198 //----------------------------------------//
199 void AliAnalysisTrackCuts::GetPStats()
200 {
201   //Gets the momentum statistics.
202   //Prints the percentage of tracks rejected due to this cut. 
203    AliInfo(Form("P range: [%f,%f]",fPMin,fPMax));
204   if(fTotalTracks != 0)
205     AliInfo(Form("Tracks rejected: %f",100.0*fP/fTotalTracks)); 
206 }
207
208 //----------------------------------------//
209 void AliAnalysisTrackCuts::GetPtStats()
210 {
211   //Gets the transverse momentum statistics.
212   //Prints the percentage of tracks rejected due to this cut. 
213   AliInfo(Form("Pt range: [%f,%f]",fPtMin,fPtMax));
214   if(fTotalTracks != 0) 
215     AliInfo(Form("Tracks rejected: %f",100.0*fPt/fTotalTracks)); 
216 }
217
218 //----------------------------------------//
219 void AliAnalysisTrackCuts::GetPxStats()
220 {
221   //Gets the x momentum statistics.
222   //Prints the percentage of tracks rejected due to this cut. 
223   AliInfo(Form("Px range: [%f,%f]",fPxMin,fPxMax));
224   if(fTotalTracks != 0) 
225     AliInfo(Form("Tracks rejected: %f",100.0*fPx/fTotalTracks)); 
226 }
227
228 //----------------------------------------//
229 void AliAnalysisTrackCuts::GetPyStats()
230 {
231   //Gets the y momentum statistics.
232   //Prints the percentage of tracks rejected due to this cut. 
233   AliInfo(Form("Py range: [%f,%f]",fPyMin,fPyMax));
234   if(fTotalTracks != 0) 
235     AliInfo(Form("Tracks rejected: %f",100.0*fPy/fTotalTracks)); 
236 }
237
238 //----------------------------------------//
239 void AliAnalysisTrackCuts::GetPzStats()
240 {
241   //Gets the z momentum statistics.
242   //Prints the percentage of tracks rejected due to this cut. 
243   AliInfo(Form("Pz range: [%f,%f]",fPzMin,fPzMax));
244   if(fTotalTracks != 0) 
245     AliInfo(Form("Tracks rejected: %f",100.0*fPz/fTotalTracks)); 
246 }
247
248 //----------------------------------------//
249 void AliAnalysisTrackCuts::GetEtaStats()
250 {
251   //Gets the pseudo-rapidity statistics.
252   //Prints the percentage of tracks rejected due to this cut. 
253   AliInfo(Form("eta range: [%f,%f]",fEtaMin,fEtaMax));
254   if(fTotalTracks != 0)
255     AliInfo(Form("Tracks rejected: %f",100.0*fEta/fTotalTracks)); 
256 }
257
258 //----------------------------------------//
259 void AliAnalysisTrackCuts::GetRapStats()
260 {
261   //Gets the rapidity statistics.
262   //Prints the percentage of tracks rejected due to this cut. 
263   AliInfo(Form("y range: [%f,%f]",fRapMin,fRapMax));
264   if(fTotalTracks != 0)
265     AliInfo(Form("Tracks rejected: %f",100.0*fRap/fTotalTracks)); 
266 }
267
268 //----------------------------------------//
269 void AliAnalysisTrackCuts::GetBrStats()
270 {
271   //Gets the statistics fro the closest distance of 
272   //the track to the primary vertex in the r-phi plane.
273   //Prints the percentage of tracks rejected due to this cut. 
274   AliInfo(Form("br range: [%f,%f]",fBrMin,fBrMax));
275   if(fTotalTracks != 0) 
276     AliInfo(Form("Tracks rejected: %f",100.0*fbr/fTotalTracks)); 
277 }
278
279 //----------------------------------------//
280 void AliAnalysisTrackCuts::GetBzStats()
281 {
282   //Gets the statistics fro the closest distance of 
283   //the track to the primary vertex in the beam axis.
284   //Prints the percentage of tracks rejected due to this cut. 
285   AliInfo(Form("bz range: [%f,%f]",fBzMin,fBzMax));
286   if(fTotalTracks != 0)
287     AliInfo(Form("Tracks rejected: %f",100.0*fbz/fTotalTracks)); 
288 }
289
290
291 //----------------------------------------//
292 Bool_t AliAnalysisTrackCuts::IsAccepted(AliESD *esd ,AliESDtrack *esdtrack)
293 {
294   //Returns true if the tracks is accepted otherwise false.
295   fTotalTracks++;
296   
297   //momentum related calculations
298   Double_t p[3];
299   esdtrack->GetPxPyPz(p);
300   Float_t momentum = TMath::Sqrt(pow(p[0],2) + pow(p[1],2) + pow(p[2],2));
301   Float_t pt = TMath::Sqrt(pow(p[0],2) + pow(p[1],2));
302   Float_t energy = TMath::Sqrt(pow(esdtrack->GetMass(),2) + pow(momentum,2));
303
304   //y-eta related calculations
305   Float_t eta = -100.;
306   Float_t y = -100.;
307   if((momentum != TMath::Abs(p[2]))&&(momentum != 0))
308     eta = 0.5*TMath::Log((momentum + p[2])/(momentum - p[2]));
309   if((energy != TMath::Abs(p[2]))&&(momentum != 0))
310     y = 0.5*TMath::Log((energy + p[2])/(energy - p[2]));
311  
312   //impact parameter related calculations
313   Double_t trackPosition[3];
314   esdtrack->GetXYZ(trackPosition);
315   const AliESDVertex * vertexIn = esd->GetVertex();
316   Double_t vertexPosition[3];
317   vertexIn->GetXYZ(vertexPosition);                 
318   for (Int_t ii=0; ii<3; ii++) trackPosition[ii] -= vertexPosition[ii];
319                     
320   Float_t br = Float_t(TMath::Sqrt(pow(trackPosition[0],2) + pow(trackPosition[1],2)));
321   Float_t bz = Float_t(TMath::Abs(trackPosition[2]));
322  
323   if((momentum < fPMin) || (momentum > fPMax)) {
324     fP++;
325     return kFALSE;
326   }
327   if((pt < fPtMin) || (pt > fPtMax)) {
328     fPt++;
329     return kFALSE;
330   }
331   if((p[0] < fPxMin) || (p[0] > fPxMax)) {
332     fPx++;
333     return kFALSE;
334   }
335   if((p[1] < fPyMin) || (p[1] > fPyMax)) {
336     fPy++;
337     return kFALSE;
338   }
339   if((p[2] < fPzMin) || (p[2] > fPzMax)) {
340     fPz++;
341     return kFALSE;
342   } 
343   if((br < fBrMin) || (br > fBrMax)) {
344     fbr++;
345     return kFALSE;
346   }
347   if((bz < fBzMin) || (bz > fBzMax)) {
348     fbz++;
349     return kFALSE;
350   }
351   if((eta < fEtaMin) || (eta > fEtaMax)) {
352     fEta++;
353     return kFALSE;
354   }
355   if((y < fRapMin) || (y > fRapMax)) {
356     fRap++;
357     return kFALSE;
358   }
359   
360   fAcceptedTracks++;
361   
362   return kTRUE;
363 }
364
365
366 //----------------------------------------//
367 TObjArray *AliAnalysisTrackCuts::GetAcceptedParticles(AliESD *esd)
368 {
369   // Returns a list of all tracks that pass the cuts
370   fAcceptedParticleList->Clear();
371   for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) {
372     AliESDtrack* track = esd->GetTrack(iTrack);
373
374     if(IsAccepted(esd,track)) fAcceptedParticleList->Add(track);            
375   }
376   
377   return fAcceptedParticleList;
378 }
379
380 //----------------------------------------//
381 TPaveText *AliAnalysisTrackCuts::GetTrackCuts()
382 {
383   //Shows a TPaveText with all the track cuts stats.
384   TCanvas *ccuts2 = new TCanvas("ccuts2","Track cuts",410,10,400,400);
385   ccuts2->SetFillColor(10);
386   ccuts2->SetHighLightColor(10);
387
388   TPaveText *pave = new TPaveText(0.01,0.01,0.98,0.98);
389   pave->SetFillColor(3);
390   Char_t cutName[256];
391  
392   TLine *l1 = pave->AddLine(0,0.89,1,0.89);
393   l1->SetLineWidth(2);
394   TLine *l2 = pave->AddLine(0,0.79,1,0.79);
395   l2->SetLineWidth(2);
396   TLine *l3 = pave->AddLine(0,0.69,1,0.69);
397   l3->SetLineWidth(2);
398   TLine *l4 = pave->AddLine(0,0.59,1,0.59);
399   l4->SetLineWidth(2);
400   TLine *l5 = pave->AddLine(0,0.49,1,0.49);
401   l5->SetLineWidth(2);
402   TLine *l6 = pave->AddLine(0,0.39,1,0.39);
403   l6->SetLineWidth(2);
404   TLine *l7 = pave->AddLine(0,0.29,1,0.29);
405   l7->SetLineWidth(2);
406   TLine *l8 = pave->AddLine(0,0.19,1,0.19);
407   l8->SetLineWidth(2);
408   TLine *l9 = pave->AddLine(0,0.09,1,0.09);
409   l9->SetLineWidth(2);
410
411   sprintf(cutName,"Total number of tracks: %d",fTotalTracks);
412   TText *t1 = pave->AddText(cutName);
413   t1->SetTextColor(1);
414   t1->SetTextSize(0.04);
415   t1->SetTextAlign(11);
416  
417   sprintf(cutName,"Total number of accepted tracks: %d",fAcceptedTracks);
418   t1 = pave->AddText(cutName);
419   t1->SetTextColor(1);
420   t1->SetTextSize(0.04);
421   t1->SetTextAlign(11);
422  
423   sprintf(cutName,"P range: [%f,%f]",fPMin,fPMax);
424   t1 = pave->AddText(cutName);
425   t1->SetTextColor(1);
426   t1->SetTextSize(0.04);
427   t1->SetTextAlign(11);
428   sprintf(cutName,"Tracks rejected: %f",100.0*fP/fTotalTracks);
429   t1 = pave->AddText(cutName);
430   t1->SetTextColor(1);
431   t1->SetTextSize(0.04);
432   t1->SetTextAlign(11);
433  
434   sprintf(cutName,"Pt range: [%f,%f]",fPtMin,fPtMax);
435   t1 = pave->AddText(cutName);
436   t1->SetTextColor(1);
437   t1->SetTextSize(0.04);
438   t1->SetTextAlign(11);
439   sprintf(cutName,"Tracks rejected: %f",100.0*fPt/fTotalTracks);
440   t1 = pave->AddText(cutName);
441   t1->SetTextColor(1);
442   t1->SetTextSize(0.04);
443   t1->SetTextAlign(11);
444
445   sprintf(cutName,"Px range: [%f,%f]",fPxMin,fPxMax);
446   t1 = pave->AddText(cutName);
447   t1->SetTextColor(1);
448   t1->SetTextSize(0.04);
449   t1->SetTextAlign(11);
450   sprintf(cutName,"Tracks rejected: %f",100.0*fPx/fTotalTracks);
451   t1 = pave->AddText(cutName);
452   t1->SetTextColor(1);
453   t1->SetTextSize(0.04);
454   t1->SetTextAlign(11);
455  
456   sprintf(cutName,"Py range: [%f,%f]",fPyMin,fPyMax);
457   t1 = pave->AddText(cutName);
458   t1->SetTextColor(1);
459   t1->SetTextSize(0.04);
460   t1->SetTextAlign(11);
461   sprintf(cutName,"Tracks rejected: %f",100.0*fPy/fTotalTracks);
462   t1 = pave->AddText(cutName);
463   t1->SetTextColor(1);
464   t1->SetTextSize(0.04);
465   t1->SetTextAlign(11);
466  
467   sprintf(cutName,"Pz range: [%f,%f]",fPzMin,fPzMax);
468   t1 = pave->AddText(cutName);
469   t1->SetTextColor(1);
470   t1->SetTextSize(0.04);
471   t1->SetTextAlign(11);
472   sprintf(cutName,"Tracks rejected: %f",100.0*fPz/fTotalTracks);
473   t1 = pave->AddText(cutName);
474   t1->SetTextColor(1);
475   t1->SetTextSize(0.04);
476   t1->SetTextAlign(11);
477   
478   sprintf(cutName,"br range: [%f,%f]",fBrMin,fBrMax);
479   t1 = pave->AddText(cutName);
480   t1->SetTextColor(1);
481   t1->SetTextSize(0.04);
482   t1->SetTextAlign(11);
483   sprintf(cutName,"Tracks rejected: %f",100.0*fbr/fTotalTracks);
484   t1 = pave->AddText(cutName);
485   t1->SetTextColor(1);
486   t1->SetTextSize(0.04);
487   t1->SetTextAlign(11);
488  
489   sprintf(cutName,"bz range: [%f,%f]",fBzMin,fBzMax);
490   t1 = pave->AddText(cutName);
491   t1->SetTextColor(1);
492   t1->SetTextSize(0.04);
493   t1->SetTextAlign(11);
494   sprintf(cutName,"Tracks rejected: %f",100.0*fbz/fTotalTracks);
495   t1 = pave->AddText(cutName);
496   t1->SetTextColor(1);
497   t1->SetTextSize(0.04);
498   t1->SetTextAlign(11);
499
500   sprintf(cutName,"eta range: [%f,%f]",fEtaMin,fEtaMax);
501   t1 = pave->AddText(cutName);
502   t1->SetTextColor(1);
503   t1->SetTextSize(0.04);
504   t1->SetTextAlign(11);
505   sprintf(cutName,"Tracks rejected: %f",100.0*fEta/fTotalTracks);
506   t1 = pave->AddText(cutName);
507   t1->SetTextColor(1);
508   t1->SetTextSize(0.04);
509   t1->SetTextAlign(11);
510
511   sprintf(cutName,"y range: [%f,%f]",fRapMin,fRapMax);
512   t1 = pave->AddText(cutName);
513   t1->SetTextColor(1);
514   t1->SetTextSize(0.04);
515   t1->SetTextAlign(11);
516   sprintf(cutName,"Tracks rejected: %f",100.0*fRap/fTotalTracks);
517   t1 = pave->AddText(cutName);
518   t1->SetTextColor(1);
519   t1->SetTextSize(0.04);
520   t1->SetTextAlign(11);
521
522   return pave;
523 }
524
525 //----------------------------------------//
526 void AliAnalysisTrackCuts::PrintTrackCuts()
527 {
528   //Prints the track cut stats.
529   //GetTrackCuts()->Draw();
530
531   AliInfo(Form("**************TRACK CUTS**************"));
532   GetTrackStats();
533   if(fFlagP)
534     GetPStats();
535   if(fFlagPt)
536     GetPtStats();
537   if(fFlagPx)
538     GetPxStats();
539   if(fFlagPy)
540     GetPyStats();
541   if(fFlagPz)
542     GetPzStats();
543   if(fFlagEta)
544     GetEtaStats();
545   if(fFlagRap)
546     GetRapStats();
547   if(fFlagbr)
548     GetBrStats();
549   if(fFlagbz)
550     GetBzStats(); 
551   AliInfo(Form("**************************************"));
552 }