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 //-----------------------------------------------------------------
29 #include <TPaveText.h>
35 #include "AliESDtrack.h"
38 #include "AliAnalysisTrackCuts.h"
40 ClassImp(AliAnalysisTrackCuts)
42 //----------------------------------------//
43 AliAnalysisTrackCuts::AliAnalysisTrackCuts()
48 //----------------------------------------//
49 AliAnalysisTrackCuts::~AliAnalysisTrackCuts()
53 //----------------------------------------//
54 void AliAnalysisTrackCuts::Reset()
98 //----------------------------------------//
99 void AliAnalysisTrackCuts::SetPxRange(Float_t r1, Float_t r2)
106 //----------------------------------------//
107 void AliAnalysisTrackCuts::SetPyRange(Float_t r1, Float_t r2)
114 //----------------------------------------//
115 void AliAnalysisTrackCuts::SetPzRange(Float_t r1, Float_t r2)
122 //----------------------------------------//
123 void AliAnalysisTrackCuts::SetPRange(Float_t r1, Float_t r2)
130 //----------------------------------------//
131 void AliAnalysisTrackCuts::SetPtRange(Float_t r1, Float_t r2)
138 //----------------------------------------//
139 void AliAnalysisTrackCuts::SetBrRange(Float_t r1, Float_t r2)
146 //----------------------------------------//
147 void AliAnalysisTrackCuts::SetBzRange(Float_t r1, Float_t r2)
154 //----------------------------------------//
155 void AliAnalysisTrackCuts::SetEtaRange(Float_t r1, Float_t r2)
162 //----------------------------------------//
163 void AliAnalysisTrackCuts::SetRapRange(Float_t r1, Float_t r2)
170 //----------------------------------------//
171 void AliAnalysisTrackCuts::GetTrackStats()
173 AliInfo(Form("Total number of tracks: %d",fTotalTracks));
174 AliInfo(Form("Total number of accepted tracks: %d",fAcceptedTracks));
177 //----------------------------------------//
178 void AliAnalysisTrackCuts::GetPStats()
180 AliInfo(Form("P range: [%f,%f]",fPMin,fPMax));
181 if(fTotalTracks != 0)
182 AliInfo(Form("Tracks rejected: %f",100.0*fP/fTotalTracks));
185 //----------------------------------------//
186 void AliAnalysisTrackCuts::GetPtStats()
188 AliInfo(Form("Pt range: [%f,%f]",fPtMin,fPtMax));
189 if(fTotalTracks != 0)
190 AliInfo(Form("Tracks rejected: %f",100.0*fPt/fTotalTracks));
193 //----------------------------------------//
194 void AliAnalysisTrackCuts::GetPxStats()
196 AliInfo(Form("Px range: [%f,%f]",fPxMin,fPxMax));
197 if(fTotalTracks != 0)
198 AliInfo(Form("Tracks rejected: %f",100.0*fPx/fTotalTracks));
201 //----------------------------------------//
202 void AliAnalysisTrackCuts::GetPyStats()
204 AliInfo(Form("Py range: [%f,%f]",fPyMin,fPyMax));
205 if(fTotalTracks != 0)
206 AliInfo(Form("Tracks rejected: %f",100.0*fPy/fTotalTracks));
209 //----------------------------------------//
210 void AliAnalysisTrackCuts::GetPzStats()
212 AliInfo(Form("Pz range: [%f,%f]",fPzMin,fPzMax));
213 if(fTotalTracks != 0)
214 AliInfo(Form("Tracks rejected: %f",100.0*fPz/fTotalTracks));
217 //----------------------------------------//
218 void AliAnalysisTrackCuts::GetEtaStats()
220 AliInfo(Form("eta range: [%f,%f]",fEtaMin,fEtaMax));
221 if(fTotalTracks != 0)
222 AliInfo(Form("Tracks rejected: %f",100.0*fEta/fTotalTracks));
225 //----------------------------------------//
226 void AliAnalysisTrackCuts::GetRapStats()
228 AliInfo(Form("y range: [%f,%f]",fRapMin,fRapMax));
229 if(fTotalTracks != 0)
230 AliInfo(Form("Tracks rejected: %f",100.0*fRap/fTotalTracks));
233 //----------------------------------------//
234 void AliAnalysisTrackCuts::GetBrStats()
236 AliInfo(Form("br range: [%f,%f]",fBrMin,fBrMax));
237 if(fTotalTracks != 0)
238 AliInfo(Form("Tracks rejected: %f",100.0*fbr/fTotalTracks));
241 //----------------------------------------//
242 void AliAnalysisTrackCuts::GetBzStats()
244 AliInfo(Form("bz range: [%f,%f]",fBzMin,fBzMax));
245 if(fTotalTracks != 0)
246 AliInfo(Form("Tracks rejected: %f",100.0*fbz/fTotalTracks));
250 //----------------------------------------//
251 Bool_t AliAnalysisTrackCuts::IsAccepted(AliESD *esd ,AliESDtrack *esdtrack)
255 //momentum related calculations
257 esdtrack->GetPxPyPz(p);
258 Float_t P = sqrt(pow(p[0],2) + pow(p[1],2) + pow(p[2],2));
259 Float_t Pt = sqrt(pow(p[0],2) + pow(p[1],2));
260 Float_t E = sqrt(pow(esdtrack->GetMass(),2) + pow(P,2));
262 //y-eta related calculations
263 Float_t eta = 0.5*log((P - p[2])/(P + p[2]));
264 Float_t y = 0.5*log((E - p[2])/(E + p[2]));
266 //impact parameter related calculations
267 Double_t TrackPosition[3];
268 esdtrack->GetXYZ(TrackPosition);
269 const AliESDVertex * VertexIn = esd->GetVertex();
270 Double_t VertexPosition[3];
271 VertexIn->GetXYZ(VertexPosition);
272 for (Int_t ii=0; ii<3; ii++) TrackPosition[ii] -= VertexPosition[ii];
274 Float_t br = Float_t(TMath::Sqrt(pow(TrackPosition[0],2) + pow(TrackPosition[1],2)));
275 Float_t bz = Float_t(TMath::Abs(TrackPosition[2]));
277 if((P < fPMin) || (P > fPMax))
282 if((Pt < fPtMin) || (Pt > fPtMax))
287 if((p[0] < fPxMin) || (p[0] > fPxMax))
292 if((p[1] < fPyMin) || (p[1] > fPyMax))
297 if((p[2] < fPzMin) || (p[2] > fPzMax))
302 if((br < fBrMin) || (br > fBrMax))
307 if((bz < fBzMin) || (bz > fBzMax))
312 if((eta < fEtaMin) || (eta > fEtaMax))
317 if((y < fRapMin) || (y > fRapMax))
329 //----------------------------------------//
330 TPaveText *AliAnalysisTrackCuts::GetTrackCuts()
332 TCanvas *ccuts2 = new TCanvas("ccuts2","Track cuts",410,10,400,400);
333 ccuts2->SetFillColor(10);
334 ccuts2->SetHighLightColor(10);
336 TPaveText *pave = new TPaveText(0.01,0.01,0.98,0.98);
337 pave->SetFillColor(3);
340 TLine *l1 = pave->AddLine(0,0.89,1,0.89);
342 TLine *l2 = pave->AddLine(0,0.79,1,0.79);
344 TLine *l3 = pave->AddLine(0,0.69,1,0.69);
346 TLine *l4 = pave->AddLine(0,0.59,1,0.59);
348 TLine *l5 = pave->AddLine(0,0.49,1,0.49);
350 TLine *l6 = pave->AddLine(0,0.39,1,0.39);
352 TLine *l7 = pave->AddLine(0,0.29,1,0.29);
354 TLine *l8 = pave->AddLine(0,0.19,1,0.19);
356 TLine *l9 = pave->AddLine(0,0.09,1,0.09);
359 sprintf(CutName,"Total number of tracks: %d",fTotalTracks);
360 TText *t1 = pave->AddText(CutName);
362 t1->SetTextSize(0.04);
363 t1->SetTextAlign(11);
365 sprintf(CutName,"Total number of accepted tracks: %d",fAcceptedTracks);
366 t1 = pave->AddText(CutName);
368 t1->SetTextSize(0.04);
369 t1->SetTextAlign(11);
371 sprintf(CutName,"P range: [%f,%f]",fPMin,fPMax);
372 t1 = pave->AddText(CutName);
374 t1->SetTextSize(0.04);
375 t1->SetTextAlign(11);
376 sprintf(CutName,"Tracks rejected: %f",100.0*fP/fTotalTracks);
377 t1 = pave->AddText(CutName);
379 t1->SetTextSize(0.04);
380 t1->SetTextAlign(11);
382 sprintf(CutName,"Pt range: [%f,%f]",fPtMin,fPtMax);
383 t1 = pave->AddText(CutName);
385 t1->SetTextSize(0.04);
386 t1->SetTextAlign(11);
387 sprintf(CutName,"Tracks rejected: %f",100.0*fPt/fTotalTracks);
388 t1 = pave->AddText(CutName);
390 t1->SetTextSize(0.04);
391 t1->SetTextAlign(11);
393 sprintf(CutName,"Px range: [%f,%f]",fPxMin,fPxMax);
394 t1 = pave->AddText(CutName);
396 t1->SetTextSize(0.04);
397 t1->SetTextAlign(11);
398 sprintf(CutName,"Tracks rejected: %f",100.0*fPx/fTotalTracks);
399 t1 = pave->AddText(CutName);
401 t1->SetTextSize(0.04);
402 t1->SetTextAlign(11);
404 sprintf(CutName,"Py range: [%f,%f]",fPyMin,fPyMax);
405 t1 = pave->AddText(CutName);
407 t1->SetTextSize(0.04);
408 t1->SetTextAlign(11);
409 sprintf(CutName,"Tracks rejected: %f",100.0*fPy/fTotalTracks);
410 t1 = pave->AddText(CutName);
412 t1->SetTextSize(0.04);
413 t1->SetTextAlign(11);
415 sprintf(CutName,"Pz range: [%f,%f]",fPzMin,fPzMax);
416 t1 = pave->AddText(CutName);
418 t1->SetTextSize(0.04);
419 t1->SetTextAlign(11);
420 sprintf(CutName,"Tracks rejected: %f",100.0*fPz/fTotalTracks);
421 t1 = pave->AddText(CutName);
423 t1->SetTextSize(0.04);
424 t1->SetTextAlign(11);
426 sprintf(CutName,"br range: [%f,%f]",fBrMin,fBrMax);
427 t1 = pave->AddText(CutName);
429 t1->SetTextSize(0.04);
430 t1->SetTextAlign(11);
431 sprintf(CutName,"Tracks rejected: %f",100.0*fbr/fTotalTracks);
432 t1 = pave->AddText(CutName);
434 t1->SetTextSize(0.04);
435 t1->SetTextAlign(11);
437 sprintf(CutName,"bz range: [%f,%f]",fBzMin,fBzMax);
438 t1 = pave->AddText(CutName);
440 t1->SetTextSize(0.04);
441 t1->SetTextAlign(11);
442 sprintf(CutName,"Tracks rejected: %f",100.0*fbz/fTotalTracks);
443 t1 = pave->AddText(CutName);
445 t1->SetTextSize(0.04);
446 t1->SetTextAlign(11);
448 sprintf(CutName,"eta range: [%f,%f]",fEtaMin,fEtaMax);
449 t1 = pave->AddText(CutName);
451 t1->SetTextSize(0.04);
452 t1->SetTextAlign(11);
453 sprintf(CutName,"Tracks rejected: %f",100.0*fEta/fTotalTracks);
454 t1 = pave->AddText(CutName);
456 t1->SetTextSize(0.04);
457 t1->SetTextAlign(11);
459 sprintf(CutName,"y range: [%f,%f]",fRapMin,fRapMax);
460 t1 = pave->AddText(CutName);
462 t1->SetTextSize(0.04);
463 t1->SetTextAlign(11);
464 sprintf(CutName,"Tracks rejected: %f",100.0*fRap/fTotalTracks);
465 t1 = pave->AddText(CutName);
467 t1->SetTextSize(0.04);
468 t1->SetTextAlign(11);
473 //----------------------------------------//
474 void AliAnalysisTrackCuts::PrintTrackCuts()
476 //GetTrackCuts()->Draw();
478 AliInfo(Form("**************TRACK CUTS**************"));
498 AliInfo(Form("**************************************"));