]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/AliAnalysisTrackCuts.cxx
Added a cut on PtHard at 2.76 GeV/c (Nicole)
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTrackCuts.cxx
CommitLineData
cd286c84 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
cd286c84 25#include <TPaveText.h>
26#include <TText.h>
27#include <TLine.h>
28#include <TCanvas.h>
bb2f4e93 29#include <TObjArray.h>
30#include <Riostream.h>
cd286c84 31
32#include "AliLog.h"
7fe612db 33
cd286c84 34#include "AliESDtrack.h"
35#include "AliESD.h"
36
37#include "AliAnalysisTrackCuts.h"
38
39ClassImp(AliAnalysisTrackCuts)
40
41//----------------------------------------//
42AliAnalysisTrackCuts::AliAnalysisTrackCuts()
43{
7fe612db 44 //Default constructor.
45 //Calls the Reset method.
cd286c84 46 Reset();
47}
48
49//----------------------------------------//
50AliAnalysisTrackCuts::~AliAnalysisTrackCuts()
51{
7fe612db 52 //Destructor.
bb2f4e93 53 delete fAcceptedParticleList;
cd286c84 54}
55
56//----------------------------------------//
57void AliAnalysisTrackCuts::Reset()
58{
7fe612db 59 //Assigns dummy values to every private member.
cd286c84 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;
bb2f4e93 100
101 fAcceptedParticleList = new TObjArray();
cd286c84 102}
103
bb2f4e93 104
cd286c84 105//----------------------------------------//
106void AliAnalysisTrackCuts::SetPxRange(Float_t r1, Float_t r2)
107{
7fe612db 108 //Sets the range for the momentum x component.
cd286c84 109 fPxMin = r1;
110 fPxMax = r2;
111 fFlagPx = 1;
112}
113
114//----------------------------------------//
115void AliAnalysisTrackCuts::SetPyRange(Float_t r1, Float_t r2)
116{
7fe612db 117 //Sets the range for the momentum y component.
cd286c84 118 fPyMin = r1;
119 fPyMax = r2;
120 fFlagPy = 1;
121}
122
123//----------------------------------------//
124void AliAnalysisTrackCuts::SetPzRange(Float_t r1, Float_t r2)
125{
7fe612db 126 //Sets the range for the momentum z component.
cd286c84 127 fPzMin = r1;
128 fPzMax = r2;
129 fFlagPy = 1;
130}
131
132//----------------------------------------//
133void AliAnalysisTrackCuts::SetPRange(Float_t r1, Float_t r2)
134{
7fe612db 135 //Sets the range for the momentum.
cd286c84 136 fPMin = r1;
137 fPMax = r2;
138 fFlagPz = 1;
139}
140
141//----------------------------------------//
142void AliAnalysisTrackCuts::SetPtRange(Float_t r1, Float_t r2)
143{
7fe612db 144 //Sets the range for the teransverse momentum.
cd286c84 145 fPtMin = r1;
146 fPtMax = r2;
147 fFlagPt = 1;
148}
149
150//----------------------------------------//
151void AliAnalysisTrackCuts::SetBrRange(Float_t r1, Float_t r2)
152{
7fe612db 153 //Sets the range of the closest approach of the track
154 //to the primary vertex in the r-phi plane.
cd286c84 155 fBrMin = r1;
156 fBrMax = r2;
157 fFlagbr = 1;
158}
159
160//----------------------------------------//
161void AliAnalysisTrackCuts::SetBzRange(Float_t r1, Float_t r2)
162{
7fe612db 163 //Sets the range of the closest approach of the track
164 //to the primary vertex in the beam axis.
cd286c84 165 fBzMin = r1;
166 fBzMax = r2;
167 fFlagbz = 1;
168}
169
170//----------------------------------------//
171void AliAnalysisTrackCuts::SetEtaRange(Float_t r1, Float_t r2)
172{
7fe612db 173 //Sets the range of the pseudo-rapidity.
cd286c84 174 fEtaMin = r1;
175 fEtaMax = r2;
176 fFlagEta = 1;
177}
178
179//----------------------------------------//
180void AliAnalysisTrackCuts::SetRapRange(Float_t r1, Float_t r2)
181{
7fe612db 182 //Sets the range of the rapidity.
cd286c84 183 fRapMin = r1;
184 fRapMax = r2;
185 fFlagRap = 1;
186}
187
188//----------------------------------------//
189void AliAnalysisTrackCuts::GetTrackStats()
190{
7fe612db 191 //Gets the statistics.
192 //fTotalTracks is the total number of tracks.
193 //fAcceptedTracks is the number of accepted tracks after the cuts.
cd286c84 194 AliInfo(Form("Total number of tracks: %d",fTotalTracks));
195 AliInfo(Form("Total number of accepted tracks: %d",fAcceptedTracks));
196}
197
198//----------------------------------------//
199void AliAnalysisTrackCuts::GetPStats()
200{
7fe612db 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));
cd286c84 204 if(fTotalTracks != 0)
205 AliInfo(Form("Tracks rejected: %f",100.0*fP/fTotalTracks));
206}
207
208//----------------------------------------//
209void AliAnalysisTrackCuts::GetPtStats()
210{
7fe612db 211 //Gets the transverse momentum statistics.
212 //Prints the percentage of tracks rejected due to this cut.
cd286c84 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//----------------------------------------//
219void AliAnalysisTrackCuts::GetPxStats()
220{
7fe612db 221 //Gets the x momentum statistics.
222 //Prints the percentage of tracks rejected due to this cut.
cd286c84 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//----------------------------------------//
229void AliAnalysisTrackCuts::GetPyStats()
230{
7fe612db 231 //Gets the y momentum statistics.
232 //Prints the percentage of tracks rejected due to this cut.
cd286c84 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//----------------------------------------//
239void AliAnalysisTrackCuts::GetPzStats()
240{
7fe612db 241 //Gets the z momentum statistics.
242 //Prints the percentage of tracks rejected due to this cut.
cd286c84 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//----------------------------------------//
249void AliAnalysisTrackCuts::GetEtaStats()
250{
7fe612db 251 //Gets the pseudo-rapidity statistics.
252 //Prints the percentage of tracks rejected due to this cut.
cd286c84 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//----------------------------------------//
259void AliAnalysisTrackCuts::GetRapStats()
260{
7fe612db 261 //Gets the rapidity statistics.
262 //Prints the percentage of tracks rejected due to this cut.
cd286c84 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//----------------------------------------//
269void AliAnalysisTrackCuts::GetBrStats()
270{
7fe612db 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.
cd286c84 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//----------------------------------------//
280void AliAnalysisTrackCuts::GetBzStats()
281{
7fe612db 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.
cd286c84 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//----------------------------------------//
292Bool_t AliAnalysisTrackCuts::IsAccepted(AliESD *esd ,AliESDtrack *esdtrack)
293{
7fe612db 294 //Returns true if the tracks is accepted otherwise false.
cd286c84 295 fTotalTracks++;
296
297 //momentum related calculations
298 Double_t p[3];
299 esdtrack->GetPxPyPz(p);
bb2f4e93 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));
cd286c84 303
304 //y-eta related calculations
bb2f4e93 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]));
cd286c84 311
312 //impact parameter related calculations
7fe612db 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];
cd286c84 319
7fe612db 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]));
cd286c84 322
bb2f4e93 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 }
cd286c84 359
360 fAcceptedTracks++;
361
362 return kTRUE;
363}
364
365
bb2f4e93 366//----------------------------------------//
367TObjArray *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
cd286c84 380//----------------------------------------//
381TPaveText *AliAnalysisTrackCuts::GetTrackCuts()
382{
7fe612db 383 //Shows a TPaveText with all the track cuts stats.
cd286c84 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);
7fe612db 390 Char_t cutName[256];
cd286c84 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
7fe612db 411 sprintf(cutName,"Total number of tracks: %d",fTotalTracks);
412 TText *t1 = pave->AddText(cutName);
cd286c84 413 t1->SetTextColor(1);
414 t1->SetTextSize(0.04);
415 t1->SetTextAlign(11);
416
7fe612db 417 sprintf(cutName,"Total number of accepted tracks: %d",fAcceptedTracks);
418 t1 = pave->AddText(cutName);
cd286c84 419 t1->SetTextColor(1);
420 t1->SetTextSize(0.04);
421 t1->SetTextAlign(11);
422
7fe612db 423 sprintf(cutName,"P range: [%f,%f]",fPMin,fPMax);
424 t1 = pave->AddText(cutName);
cd286c84 425 t1->SetTextColor(1);
426 t1->SetTextSize(0.04);
427 t1->SetTextAlign(11);
7fe612db 428 sprintf(cutName,"Tracks rejected: %f",100.0*fP/fTotalTracks);
429 t1 = pave->AddText(cutName);
cd286c84 430 t1->SetTextColor(1);
431 t1->SetTextSize(0.04);
432 t1->SetTextAlign(11);
433
7fe612db 434 sprintf(cutName,"Pt range: [%f,%f]",fPtMin,fPtMax);
435 t1 = pave->AddText(cutName);
cd286c84 436 t1->SetTextColor(1);
437 t1->SetTextSize(0.04);
438 t1->SetTextAlign(11);
7fe612db 439 sprintf(cutName,"Tracks rejected: %f",100.0*fPt/fTotalTracks);
440 t1 = pave->AddText(cutName);
cd286c84 441 t1->SetTextColor(1);
442 t1->SetTextSize(0.04);
443 t1->SetTextAlign(11);
444
7fe612db 445 sprintf(cutName,"Px range: [%f,%f]",fPxMin,fPxMax);
446 t1 = pave->AddText(cutName);
cd286c84 447 t1->SetTextColor(1);
448 t1->SetTextSize(0.04);
449 t1->SetTextAlign(11);
7fe612db 450 sprintf(cutName,"Tracks rejected: %f",100.0*fPx/fTotalTracks);
451 t1 = pave->AddText(cutName);
cd286c84 452 t1->SetTextColor(1);
453 t1->SetTextSize(0.04);
454 t1->SetTextAlign(11);
455
7fe612db 456 sprintf(cutName,"Py range: [%f,%f]",fPyMin,fPyMax);
457 t1 = pave->AddText(cutName);
cd286c84 458 t1->SetTextColor(1);
459 t1->SetTextSize(0.04);
460 t1->SetTextAlign(11);
7fe612db 461 sprintf(cutName,"Tracks rejected: %f",100.0*fPy/fTotalTracks);
462 t1 = pave->AddText(cutName);
cd286c84 463 t1->SetTextColor(1);
464 t1->SetTextSize(0.04);
465 t1->SetTextAlign(11);
466
7fe612db 467 sprintf(cutName,"Pz range: [%f,%f]",fPzMin,fPzMax);
468 t1 = pave->AddText(cutName);
cd286c84 469 t1->SetTextColor(1);
470 t1->SetTextSize(0.04);
471 t1->SetTextAlign(11);
7fe612db 472 sprintf(cutName,"Tracks rejected: %f",100.0*fPz/fTotalTracks);
473 t1 = pave->AddText(cutName);
cd286c84 474 t1->SetTextColor(1);
475 t1->SetTextSize(0.04);
476 t1->SetTextAlign(11);
477
7fe612db 478 sprintf(cutName,"br range: [%f,%f]",fBrMin,fBrMax);
479 t1 = pave->AddText(cutName);
cd286c84 480 t1->SetTextColor(1);
481 t1->SetTextSize(0.04);
482 t1->SetTextAlign(11);
7fe612db 483 sprintf(cutName,"Tracks rejected: %f",100.0*fbr/fTotalTracks);
484 t1 = pave->AddText(cutName);
cd286c84 485 t1->SetTextColor(1);
486 t1->SetTextSize(0.04);
487 t1->SetTextAlign(11);
488
7fe612db 489 sprintf(cutName,"bz range: [%f,%f]",fBzMin,fBzMax);
490 t1 = pave->AddText(cutName);
cd286c84 491 t1->SetTextColor(1);
492 t1->SetTextSize(0.04);
493 t1->SetTextAlign(11);
7fe612db 494 sprintf(cutName,"Tracks rejected: %f",100.0*fbz/fTotalTracks);
495 t1 = pave->AddText(cutName);
cd286c84 496 t1->SetTextColor(1);
497 t1->SetTextSize(0.04);
498 t1->SetTextAlign(11);
499
7fe612db 500 sprintf(cutName,"eta range: [%f,%f]",fEtaMin,fEtaMax);
501 t1 = pave->AddText(cutName);
cd286c84 502 t1->SetTextColor(1);
503 t1->SetTextSize(0.04);
504 t1->SetTextAlign(11);
7fe612db 505 sprintf(cutName,"Tracks rejected: %f",100.0*fEta/fTotalTracks);
506 t1 = pave->AddText(cutName);
cd286c84 507 t1->SetTextColor(1);
508 t1->SetTextSize(0.04);
509 t1->SetTextAlign(11);
510
7fe612db 511 sprintf(cutName,"y range: [%f,%f]",fRapMin,fRapMax);
512 t1 = pave->AddText(cutName);
cd286c84 513 t1->SetTextColor(1);
514 t1->SetTextSize(0.04);
515 t1->SetTextAlign(11);
7fe612db 516 sprintf(cutName,"Tracks rejected: %f",100.0*fRap/fTotalTracks);
517 t1 = pave->AddText(cutName);
cd286c84 518 t1->SetTextColor(1);
519 t1->SetTextSize(0.04);
520 t1->SetTextAlign(11);
521
522 return pave;
523}
524
525//----------------------------------------//
526void AliAnalysisTrackCuts::PrintTrackCuts()
527{
7fe612db 528 //Prints the track cut stats.
cd286c84 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}