1 /**************************************************************************
2 * Author: Panos Christakoglou. *
3 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
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 //-----------------------------------------------------------------
25 #include <TPaveText.h>
29 #include <TObjArray.h>
30 #include <Riostream.h>
34 #include "AliESDtrack.h"
37 #include "AliAnalysisTrackCuts.h"
39 ClassImp(AliAnalysisTrackCuts)
41 //----------------------------------------//
42 AliAnalysisTrackCuts::AliAnalysisTrackCuts() :
44 fPMin(0), fPMax(0), fPtMin(0), fPtMax(0),
45 fPxMin(0), fPxMax(0), fPyMin(0), fPyMax(0),
46 fPzMin(0), fPzMax(0), fEtaMin(0), fEtaMax(0),
47 fRapMin(0), fRapMax(0), fBrMin(0), fBrMax(0),
49 fP(0), fPt(0), fPx(0), fPy(0), fPz(0),
52 fTotalTracks(0), fAcceptedTracks(0),
53 fFlagP(0), fFlagPt(0), fFlagPx(0), fFlagPy(0), fFlagPz(0),
54 fFlagEta(0), fFlagRap(0), fFlagbr(0), fFlagbz(0),
55 fAcceptedParticleList(0) {
56 //Default constructor.
57 //Calls the Reset method.
61 //----------------------------------------//
62 AliAnalysisTrackCuts::~AliAnalysisTrackCuts()
65 delete fAcceptedParticleList;
68 //----------------------------------------//
69 void AliAnalysisTrackCuts::Reset()
71 //Assigns dummy values to every private member.
113 fAcceptedParticleList = new TObjArray();
117 //----------------------------------------//
118 void AliAnalysisTrackCuts::SetPxRange(Float_t r1, Float_t r2)
120 //Sets the range for the momentum x component.
126 //----------------------------------------//
127 void AliAnalysisTrackCuts::SetPyRange(Float_t r1, Float_t r2)
129 //Sets the range for the momentum y component.
135 //----------------------------------------//
136 void AliAnalysisTrackCuts::SetPzRange(Float_t r1, Float_t r2)
138 //Sets the range for the momentum z component.
144 //----------------------------------------//
145 void AliAnalysisTrackCuts::SetPRange(Float_t r1, Float_t r2)
147 //Sets the range for the momentum.
153 //----------------------------------------//
154 void AliAnalysisTrackCuts::SetPtRange(Float_t r1, Float_t r2)
156 //Sets the range for the teransverse momentum.
162 //----------------------------------------//
163 void AliAnalysisTrackCuts::SetBrRange(Float_t r1, Float_t r2)
165 //Sets the range of the closest approach of the track
166 //to the primary vertex in the r-phi plane.
172 //----------------------------------------//
173 void AliAnalysisTrackCuts::SetBzRange(Float_t r1, Float_t r2)
175 //Sets the range of the closest approach of the track
176 //to the primary vertex in the beam axis.
182 //----------------------------------------//
183 void AliAnalysisTrackCuts::SetEtaRange(Float_t r1, Float_t r2)
185 //Sets the range of the pseudo-rapidity.
191 //----------------------------------------//
192 void AliAnalysisTrackCuts::SetRapRange(Float_t r1, Float_t r2)
194 //Sets the range of the rapidity.
200 //----------------------------------------//
201 void AliAnalysisTrackCuts::GetTrackStats()
203 //Gets the statistics.
204 //fTotalTracks is the total number of tracks.
205 //fAcceptedTracks is the number of accepted tracks after the cuts.
206 AliInfo(Form("Total number of tracks: %d",fTotalTracks));
207 AliInfo(Form("Total number of accepted tracks: %d",fAcceptedTracks));
210 //----------------------------------------//
211 void AliAnalysisTrackCuts::GetPStats()
213 //Gets the momentum statistics.
214 //Prints the percentage of tracks rejected due to this cut.
215 AliInfo(Form("P range: [%f,%f]",fPMin,fPMax));
216 if(fTotalTracks != 0)
217 AliInfo(Form("Tracks rejected: %f",100.0*fP/fTotalTracks));
220 //----------------------------------------//
221 void AliAnalysisTrackCuts::GetPtStats()
223 //Gets the transverse momentum statistics.
224 //Prints the percentage of tracks rejected due to this cut.
225 AliInfo(Form("Pt range: [%f,%f]",fPtMin,fPtMax));
226 if(fTotalTracks != 0)
227 AliInfo(Form("Tracks rejected: %f",100.0*fPt/fTotalTracks));
230 //----------------------------------------//
231 void AliAnalysisTrackCuts::GetPxStats()
233 //Gets the x momentum statistics.
234 //Prints the percentage of tracks rejected due to this cut.
235 AliInfo(Form("Px range: [%f,%f]",fPxMin,fPxMax));
236 if(fTotalTracks != 0)
237 AliInfo(Form("Tracks rejected: %f",100.0*fPx/fTotalTracks));
240 //----------------------------------------//
241 void AliAnalysisTrackCuts::GetPyStats()
243 //Gets the y momentum statistics.
244 //Prints the percentage of tracks rejected due to this cut.
245 AliInfo(Form("Py range: [%f,%f]",fPyMin,fPyMax));
246 if(fTotalTracks != 0)
247 AliInfo(Form("Tracks rejected: %f",100.0*fPy/fTotalTracks));
250 //----------------------------------------//
251 void AliAnalysisTrackCuts::GetPzStats()
253 //Gets the z momentum statistics.
254 //Prints the percentage of tracks rejected due to this cut.
255 AliInfo(Form("Pz range: [%f,%f]",fPzMin,fPzMax));
256 if(fTotalTracks != 0)
257 AliInfo(Form("Tracks rejected: %f",100.0*fPz/fTotalTracks));
260 //----------------------------------------//
261 void AliAnalysisTrackCuts::GetEtaStats()
263 //Gets the pseudo-rapidity statistics.
264 //Prints the percentage of tracks rejected due to this cut.
265 AliInfo(Form("eta range: [%f,%f]",fEtaMin,fEtaMax));
266 if(fTotalTracks != 0)
267 AliInfo(Form("Tracks rejected: %f",100.0*fEta/fTotalTracks));
270 //----------------------------------------//
271 void AliAnalysisTrackCuts::GetRapStats()
273 //Gets the rapidity statistics.
274 //Prints the percentage of tracks rejected due to this cut.
275 AliInfo(Form("y range: [%f,%f]",fRapMin,fRapMax));
276 if(fTotalTracks != 0)
277 AliInfo(Form("Tracks rejected: %f",100.0*fRap/fTotalTracks));
280 //----------------------------------------//
281 void AliAnalysisTrackCuts::GetBrStats()
283 //Gets the statistics fro the closest distance of
284 //the track to the primary vertex in the r-phi plane.
285 //Prints the percentage of tracks rejected due to this cut.
286 AliInfo(Form("br range: [%f,%f]",fBrMin,fBrMax));
287 if(fTotalTracks != 0)
288 AliInfo(Form("Tracks rejected: %f",100.0*fbr/fTotalTracks));
291 //----------------------------------------//
292 void AliAnalysisTrackCuts::GetBzStats()
294 //Gets the statistics fro the closest distance of
295 //the track to the primary vertex in the beam axis.
296 //Prints the percentage of tracks rejected due to this cut.
297 AliInfo(Form("bz range: [%f,%f]",fBzMin,fBzMax));
298 if(fTotalTracks != 0)
299 AliInfo(Form("Tracks rejected: %f",100.0*fbz/fTotalTracks));
303 //----------------------------------------//
304 Bool_t AliAnalysisTrackCuts::IsAccepted(AliESD *esd ,AliESDtrack *esdtrack)
306 //Returns true if the tracks is accepted otherwise false.
309 //momentum related calculations
311 esdtrack->GetPxPyPz(p);
312 Float_t momentum = TMath::Sqrt(pow(p[0],2) + pow(p[1],2) + pow(p[2],2));
313 Float_t pt = TMath::Sqrt(pow(p[0],2) + pow(p[1],2));
314 Float_t energy = TMath::Sqrt(pow(esdtrack->GetMass(),2) + pow(momentum,2));
316 //y-eta related calculations
319 if((momentum != TMath::Abs(p[2]))&&(momentum != 0))
320 eta = 0.5*TMath::Log((momentum + p[2])/(momentum - p[2]));
321 if((energy != TMath::Abs(p[2]))&&(momentum != 0))
322 y = 0.5*TMath::Log((energy + p[2])/(energy - p[2]));
324 //impact parameter related calculations
325 Double_t trackPosition[3];
326 esdtrack->GetXYZ(trackPosition);
327 const AliESDVertex * vertexIn = esd->GetVertex();
328 Double_t vertexPosition[3];
329 vertexIn->GetXYZ(vertexPosition);
330 for (Int_t ii=0; ii<3; ii++) trackPosition[ii] -= vertexPosition[ii];
332 Float_t br = Float_t(TMath::Sqrt(pow(trackPosition[0],2) + pow(trackPosition[1],2)));
333 Float_t bz = Float_t(TMath::Abs(trackPosition[2]));
335 if((momentum < fPMin) || (momentum > fPMax)) {
339 if((pt < fPtMin) || (pt > fPtMax)) {
343 if((p[0] < fPxMin) || (p[0] > fPxMax)) {
347 if((p[1] < fPyMin) || (p[1] > fPyMax)) {
351 if((p[2] < fPzMin) || (p[2] > fPzMax)) {
355 if((br < fBrMin) || (br > fBrMax)) {
359 if((bz < fBzMin) || (bz > fBzMax)) {
363 if((eta < fEtaMin) || (eta > fEtaMax)) {
367 if((y < fRapMin) || (y > fRapMax)) {
378 //----------------------------------------//
379 TObjArray *AliAnalysisTrackCuts::GetAcceptedParticles(AliESD *esd)
381 // Returns a list of all tracks that pass the cuts
382 fAcceptedParticleList->Clear();
383 for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) {
384 AliESDtrack* track = esd->GetTrack(iTrack);
386 if(IsAccepted(esd,track)) fAcceptedParticleList->Add(track);
389 return fAcceptedParticleList;
392 //----------------------------------------//
393 TPaveText *AliAnalysisTrackCuts::GetTrackCuts()
395 //Shows a TPaveText with all the track cuts stats.
396 TCanvas *ccuts2 = new TCanvas("ccuts2","Track cuts",410,10,400,400);
397 ccuts2->SetFillColor(10);
398 ccuts2->SetHighLightColor(10);
400 TPaveText *pave = new TPaveText(0.01,0.01,0.98,0.98);
401 pave->SetFillColor(3);
404 TLine *l1 = pave->AddLine(0,0.89,1,0.89);
406 TLine *l2 = pave->AddLine(0,0.79,1,0.79);
408 TLine *l3 = pave->AddLine(0,0.69,1,0.69);
410 TLine *l4 = pave->AddLine(0,0.59,1,0.59);
412 TLine *l5 = pave->AddLine(0,0.49,1,0.49);
414 TLine *l6 = pave->AddLine(0,0.39,1,0.39);
416 TLine *l7 = pave->AddLine(0,0.29,1,0.29);
418 TLine *l8 = pave->AddLine(0,0.19,1,0.19);
420 TLine *l9 = pave->AddLine(0,0.09,1,0.09);
423 sprintf(cutName,"Total number of tracks: %d",fTotalTracks);
424 TText *t1 = pave->AddText(cutName);
426 t1->SetTextSize(0.04);
427 t1->SetTextAlign(11);
429 sprintf(cutName,"Total number of accepted tracks: %d",fAcceptedTracks);
430 t1 = pave->AddText(cutName);
432 t1->SetTextSize(0.04);
433 t1->SetTextAlign(11);
435 sprintf(cutName,"P range: [%f,%f]",fPMin,fPMax);
436 t1 = pave->AddText(cutName);
438 t1->SetTextSize(0.04);
439 t1->SetTextAlign(11);
440 sprintf(cutName,"Tracks rejected: %f",100.0*fP/fTotalTracks);
441 t1 = pave->AddText(cutName);
443 t1->SetTextSize(0.04);
444 t1->SetTextAlign(11);
446 sprintf(cutName,"Pt range: [%f,%f]",fPtMin,fPtMax);
447 t1 = pave->AddText(cutName);
449 t1->SetTextSize(0.04);
450 t1->SetTextAlign(11);
451 sprintf(cutName,"Tracks rejected: %f",100.0*fPt/fTotalTracks);
452 t1 = pave->AddText(cutName);
454 t1->SetTextSize(0.04);
455 t1->SetTextAlign(11);
457 sprintf(cutName,"Px range: [%f,%f]",fPxMin,fPxMax);
458 t1 = pave->AddText(cutName);
460 t1->SetTextSize(0.04);
461 t1->SetTextAlign(11);
462 sprintf(cutName,"Tracks rejected: %f",100.0*fPx/fTotalTracks);
463 t1 = pave->AddText(cutName);
465 t1->SetTextSize(0.04);
466 t1->SetTextAlign(11);
468 sprintf(cutName,"Py range: [%f,%f]",fPyMin,fPyMax);
469 t1 = pave->AddText(cutName);
471 t1->SetTextSize(0.04);
472 t1->SetTextAlign(11);
473 sprintf(cutName,"Tracks rejected: %f",100.0*fPy/fTotalTracks);
474 t1 = pave->AddText(cutName);
476 t1->SetTextSize(0.04);
477 t1->SetTextAlign(11);
479 sprintf(cutName,"Pz range: [%f,%f]",fPzMin,fPzMax);
480 t1 = pave->AddText(cutName);
482 t1->SetTextSize(0.04);
483 t1->SetTextAlign(11);
484 sprintf(cutName,"Tracks rejected: %f",100.0*fPz/fTotalTracks);
485 t1 = pave->AddText(cutName);
487 t1->SetTextSize(0.04);
488 t1->SetTextAlign(11);
490 sprintf(cutName,"br range: [%f,%f]",fBrMin,fBrMax);
491 t1 = pave->AddText(cutName);
493 t1->SetTextSize(0.04);
494 t1->SetTextAlign(11);
495 sprintf(cutName,"Tracks rejected: %f",100.0*fbr/fTotalTracks);
496 t1 = pave->AddText(cutName);
498 t1->SetTextSize(0.04);
499 t1->SetTextAlign(11);
501 sprintf(cutName,"bz range: [%f,%f]",fBzMin,fBzMax);
502 t1 = pave->AddText(cutName);
504 t1->SetTextSize(0.04);
505 t1->SetTextAlign(11);
506 sprintf(cutName,"Tracks rejected: %f",100.0*fbz/fTotalTracks);
507 t1 = pave->AddText(cutName);
509 t1->SetTextSize(0.04);
510 t1->SetTextAlign(11);
512 sprintf(cutName,"eta range: [%f,%f]",fEtaMin,fEtaMax);
513 t1 = pave->AddText(cutName);
515 t1->SetTextSize(0.04);
516 t1->SetTextAlign(11);
517 sprintf(cutName,"Tracks rejected: %f",100.0*fEta/fTotalTracks);
518 t1 = pave->AddText(cutName);
520 t1->SetTextSize(0.04);
521 t1->SetTextAlign(11);
523 sprintf(cutName,"y range: [%f,%f]",fRapMin,fRapMax);
524 t1 = pave->AddText(cutName);
526 t1->SetTextSize(0.04);
527 t1->SetTextAlign(11);
528 sprintf(cutName,"Tracks rejected: %f",100.0*fRap/fTotalTracks);
529 t1 = pave->AddText(cutName);
531 t1->SetTextSize(0.04);
532 t1->SetTextAlign(11);
537 //----------------------------------------//
538 void AliAnalysisTrackCuts::PrintTrackCuts()
540 //Prints the track cut stats.
541 //GetTrackCuts()->Draw();
543 AliInfo(Form("**************TRACK CUTS**************"));
563 AliInfo(Form("**************************************"));