ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

#include "AliESDMuonTrackCuts.h"

#include <AliESDMuonTrack.h>
#include <AliESD.h>
#include <AliESDEvent.h>
#include <AliLog.h>

#include <TTree.h>
#include <TStyle.h>
#include <TCanvas.h>
#include <TDirectory.h>

//____________________________________________________________________
ClassImp(AliESDMuonTrackCuts)

// Cut names
const Char_t* AliESDMuonTrackCuts::fgkCutNames[kNCuts] = {
 "p",
 "p_{T}",
 "p_{x}",
 "p_{y}",
 "p_{z}",
 "y",
 "eta"
};

//____________________________________________________________________
AliESDMuonTrackCuts::AliESDMuonTrackCuts(const Char_t* name, const Char_t* title) : AliAnalysisCuts(name,title),
  fPMin(0),
  fPMax(0),
  fPtMin(0),
  fPtMax(0),
  fPxMin(0),
  fPxMax(0),
  fPyMin(0),
  fPyMax(0),
  fPzMin(0),
  fPzMax(0),
  fEtaMin(0),
  fEtaMax(0),
  fRapMin(0),
  fRapMax(0),
  fHistogramsOn(0),
  fhCutStatistics(0),         
  fhCutCorrelation(0)
{
  //
  // constructor
  //
  Init();

  //##############################################################################
  // setting default cuts
  SetPRange();
  SetPtRange();
  SetPxRange();
  SetPyRange();
  SetPzRange();
  SetEtaRange();
  SetRapRange();

  SetHistogramsOn();
}

//_____________________________________________________________________________
AliESDMuonTrackCuts::AliESDMuonTrackCuts(const AliESDMuonTrackCuts &c) : AliAnalysisCuts(c),
  fPMin(0),
  fPMax(0),
  fPtMin(0),
  fPtMax(0),
  fPxMin(0),
  fPxMax(0),
  fPyMin(0),
  fPyMax(0),
  fPzMin(0),
  fPzMax(0),
  fEtaMin(0),
  fEtaMax(0),
  fRapMin(0),
  fRapMax(0),
  fHistogramsOn(0),
  fhCutStatistics(0),         
  fhCutCorrelation(0)
{
  //
  // copy constructor
  //
  ((AliESDMuonTrackCuts &) c).Copy(*this);
}

AliESDMuonTrackCuts::~AliESDMuonTrackCuts()
{
  //
  // destructor
  //
  for (Int_t i=0; i<2; i++) {    
    if (fhPt[i])
      delete fhPt[i];
    if (fhEta[i])
      delete fhEta[i];
  }

  if (fhCutStatistics)
    delete fhCutStatistics;             
  if (fhCutCorrelation)
    delete fhCutCorrelation;            
}

void AliESDMuonTrackCuts::Init()
{
  //
  // sets everything to zero
  //
  fPMin = 0;
  fPMax = 0;
  fPtMin = 0;
  fPtMax = 0;
  fPxMin = 0;
  fPxMax = 0;
  fPyMin = 0;
  fPyMax = 0;
  fPzMin = 0;
  fPzMax = 0;
  fEtaMin = 0;
  fEtaMax = 0;
  fRapMin = 0;
  fRapMax = 0;

  fHistogramsOn = kFALSE;

  for (Int_t i=0; i<2; ++i)
  {
    fhPt[i] = 0;
    fhEta[i] = 0;
  }
  fhCutStatistics = 0;
  fhCutCorrelation = 0;
}

//_____________________________________________________________________________
AliESDMuonTrackCuts &AliESDMuonTrackCuts::operator=(const AliESDMuonTrackCuts &c)
{
  //
  // Assignment operator
  //
  if (this != &c) ((AliESDMuonTrackCuts &) c).Copy(*this);
  return *this;
}

//_____________________________________________________________________________
void AliESDMuonTrackCuts::Copy(TObject &c) const
{
  //
  // Copy function
  //

   AliESDMuonTrackCuts& target = (AliESDMuonTrackCuts &) c;
 
  target.Init();
// 
  target.fPMin = fPMin;
  target.fPMax = fPMax;
  target.fPtMin = fPtMin;
  target.fPtMax = fPtMax;
  target.fPxMin = fPxMin;
  target.fPxMax = fPxMax;
  target.fPyMin = fPyMin;
  target.fPyMax = fPyMax;
  target.fPzMin = fPzMin;
  target.fPzMax = fPzMax;
  target.fEtaMin = fEtaMin;
  target.fEtaMax = fEtaMax;
  target.fRapMin = fRapMin;
  target.fRapMax = fRapMax;

  target.fHistogramsOn = fHistogramsOn;

  for (Int_t i=0; i<2; ++i)
  {     
    if (fhPt[i]) target.fhPt[i] = (TH1F*) fhPt[i]->Clone();
    if (fhEta[i]) target.fhEta[i] = (TH1F*) fhEta[i]->Clone();
  }

  if (fhCutStatistics) target.fhCutStatistics = (TH1F*) fhCutStatistics->Clone();
  if (fhCutCorrelation) target.fhCutCorrelation = (TH2F*) fhCutCorrelation->Clone();

  TNamed::Copy(c);
}

//_____________________________________________________________________________
Long64_t AliESDMuonTrackCuts::Merge(TCollection* list) {
  // Merge a list of AliESDMuonTrackCuts objects with this (needed for PROOF)
  // Returns the number of merged objects (including this)

  if (!list)
    return 0;
  
  if (list->IsEmpty())
    return 1;

  if (!fHistogramsOn)
    return 0;

  TIterator* iter = list->MakeIterator();
  TObject* obj;

  // collection of measured and generated histograms
  Int_t count = 0;
  while ((obj = iter->Next())) {

    AliESDMuonTrackCuts* entry = dynamic_cast<AliESDMuonTrackCuts*>(obj);
    if (entry == 0)
      continue;

    if (!entry->fHistogramsOn)
      continue;
    
    for (Int_t i=0; i<2; i++) {
      fhPt[i]->Add(entry->fhPt[i]); 
      fhEta[i]->Add(entry->fhEta[i]); 
    }      

    fhCutStatistics->Add(entry->fhCutStatistics);        
    fhCutCorrelation ->Add(entry->fhCutCorrelation);      

    count++;
  }

  return count+1;
}

void AliESDMuonTrackCuts::EnableNeededBranches(TTree* tree)
{
  // enables the branches needed by AcceptTrack, for a list see comment of AcceptTrack

  tree->SetBranchStatus("fTracks.fFlags", 1);
  tree->SetBranchStatus("fTracks.fP*", 1);
  tree->SetBranchStatus("fTracks.fR*", 1);  //detector response probability
}

//____________________________________________________________________
Bool_t
AliESDMuonTrackCuts::AcceptTrack(AliESDMuonTrack* esdMuTrack) {
  // 
  // figure out if the tracks survives all the track cuts defined
  //
  // the different kinematic values are first
  // retrieved from the track. then it is found out what cuts the
  // track did not survive and finally the cuts are imposed.

  // getting the kinematic variables of the track
  // (assuming the mass is known)
  Double_t p[3];
  esdMuTrack->PxPyPz(p);
  Float_t momentum = TMath::Sqrt(TMath::Power(p[0],2) + TMath::Power(p[1],2) + TMath::Power(p[2],2));
  Float_t pt       = TMath::Sqrt(TMath::Power(p[0],2) + TMath::Power(p[1],2));
  Float_t energy   = TMath::Sqrt(TMath::Power(esdMuTrack->M(),2) + TMath::Power(momentum,2));


  //y-eta related calculations
  Float_t eta = -100.;
  Float_t y   = -100.;
  if((momentum != TMath::Abs(p[2]))&&(momentum != 0))
    eta = 0.5*TMath::Log((momentum + p[2])/(momentum - p[2]));
  if((energy != TMath::Abs(p[2]))&&(momentum != 0))
    y = 0.5*TMath::Log((energy + p[2])/(energy - p[2]));
     
  //########################################################################
  // cut the track?
  
  Bool_t cuts[kNCuts];
  for (Int_t i=0; i<kNCuts; i++) cuts[i]=kFALSE;
  
  // track kinematics cut
  if((momentum < fPMin) || (momentum > fPMax)) 
    cuts[0]=kTRUE;
  if((pt < fPtMin) || (pt > fPtMax)) 
    cuts[1] = kTRUE;
  if((p[0] < fPxMin) || (p[0] > fPxMax)) 
    cuts[2] = kTRUE;
  if((p[1] < fPyMin) || (p[1] > fPyMax)) 
    cuts[3] = kTRUE;
  if((p[2] < fPzMin) || (p[2] > fPzMax))
    cuts[4] = kTRUE;
  if((eta < fEtaMin) || (eta > fEtaMax)) 
    cuts[5] = kTRUE;
  if((y < fRapMin) || (y > fRapMax)) 
    cuts[6] = kTRUE;

  Bool_t cut=kFALSE;
  for (Int_t i=0; i<kNCuts; i++) 
    if (cuts[i]) cut = kTRUE;
  
  //########################################################################
  // filling histograms
  if (fHistogramsOn) {
    fhCutStatistics->Fill(fhCutStatistics->GetBinCenter(fhCutStatistics->GetXaxis()->FindBin("n tracks")));
    
    if (cut)
      fhCutStatistics->Fill(fhCutStatistics->GetBinCenter(fhCutStatistics->GetXaxis()->FindBin("n cut tracks")));
    
    for (Int_t i=0; i<kNCuts; i++) {
      if (cuts[i])
 	fhCutStatistics->Fill(fhCutStatistics->GetBinCenter(fhCutStatistics->GetXaxis()->FindBin(fgkCutNames[i])));
      
      for (Int_t j=i; j<kNCuts; j++) {
 	if (cuts[i] && cuts[j]) {
 	  Float_t xC = fhCutCorrelation->GetXaxis()->GetBinCenter(fhCutCorrelation->GetXaxis()->FindBin(fgkCutNames[i]));
 	  Float_t yC = fhCutCorrelation->GetYaxis()->GetBinCenter(fhCutCorrelation->GetYaxis()->FindBin(fgkCutNames[j]));
 	  fhCutCorrelation->Fill(xC, yC);
 	}
      }
    }
    
    fhPt[0]->Fill(pt);
    fhEta[0]->Fill(eta);

  }

  //########################################################################
  // cut the track!
  if (cut) return kFALSE;

  //########################################################################
  // filling histograms after cut
  if (fHistogramsOn) {
// 
    fhPt[1]->Fill(pt);
    fhEta[1]->Fill(eta);
    
  }

  return kTRUE;
}

//____________________________________________________________________
TObjArray* AliESDMuonTrackCuts::GetAcceptedTracks(AliESD* esd)
{
  //
  // returns an array of all tracks that pass the cuts
  //

  TObjArray* acceptedTracks = new TObjArray();

  // loop over esd tracks
  for (Int_t iTrack = 0; iTrack < esd->GetNumberOfMuonTracks(); iTrack++) {
    AliESDMuonTrack* track = esd->GetMuonTrack(iTrack);

    if (AcceptTrack(track))
      acceptedTracks->Add(track);
  }

  return acceptedTracks;
}

//____________________________________________________________________
Int_t AliESDMuonTrackCuts::CountAcceptedTracks(AliESD* esd)
{
  //
  // returns an the number of tracks that pass the cuts
  //

  Int_t count = 0;

  // loop over esd tracks
  for (Int_t iTrack = 0; iTrack < esd->GetNumberOfMuonTracks(); iTrack++) {
    AliESDMuonTrack* track = esd->GetMuonTrack(iTrack);

    if (AcceptTrack(track))
      count++;
  }

  return count;
}

//____________________________________________________________________
TObjArray* AliESDMuonTrackCuts::GetAcceptedTracks(AliESDEvent* esd)
{
  //
  // returns an array of all tracks that pass the cuts
  //

  TObjArray* acceptedTracks = new TObjArray();

  // loop over esd tracks
  for (Int_t iTrack = 0; iTrack < esd->GetNumberOfMuonTracks(); iTrack++) {
    AliESDMuonTrack* track = esd->GetMuonTrack(iTrack);

    if (AcceptTrack(track))
      acceptedTracks->Add(track);
  }

  return acceptedTracks;
}

//____________________________________________________________________
Int_t AliESDMuonTrackCuts::CountAcceptedTracks(AliESDEvent* esd)
{
  //
  // returns an the number of tracks that pass the cuts
  //

  Int_t count = 0;

  // loop over esd tracks
  for (Int_t iTrack = 0; iTrack < esd->GetNumberOfMuonTracks(); iTrack++) {
    AliESDMuonTrack* track = esd->GetMuonTrack(iTrack);

    if (AcceptTrack(track))
      count++;
  }

  return count;
}

//____________________________________________________________________
 void AliESDMuonTrackCuts::DefineHistograms(Int_t color) {
   // 
   // diagnostics histograms are defined
   // 

   fHistogramsOn=kTRUE;
   
   Bool_t oldStatus = TH1::AddDirectoryStatus();
   TH1::AddDirectory(kFALSE);
   
   //###################################################################################
   // defining histograms

   fhCutStatistics = new TH1F("cut_statistics","cut statistics",kNCuts+4,-0.5,kNCuts+3.5);

   fhCutStatistics->GetXaxis()->SetBinLabel(1,"n tracks");
   fhCutStatistics->GetXaxis()->SetBinLabel(2,"n cut tracks");

   fhCutCorrelation = new TH2F("cut_correlation","cut correlation",kNCuts,-0.5,kNCuts-0.5,kNCuts,-0.5,kNCuts-0.5);;
  
   for (Int_t i=0; i<kNCuts; i++) {
     fhCutStatistics->GetXaxis()->SetBinLabel(i+4,fgkCutNames[i]);
     fhCutCorrelation->GetXaxis()->SetBinLabel(i+1,fgkCutNames[i]);
     fhCutCorrelation->GetYaxis()->SetBinLabel(i+1,fgkCutNames[i]);
   } 

  fhCutStatistics  ->SetLineColor(color);
  fhCutCorrelation ->SetLineColor(color);
  fhCutStatistics  ->SetLineWidth(2);
  fhCutCorrelation ->SetLineWidth(2);

  Char_t str[256];
  for (Int_t i=0; i<2; i++) {
    if (i==0) snprintf(str,256," ");
    else snprintf(str,256,"_cut");

    fhPt[i]                  = new TH1F(Form("pt%s",str)     ,"p_{T} distribution;p_{T} (GeV/c)",500,0.0,100.0);
    fhEta[i]                 = new TH1F(Form("eta%s",str)     ,"#eta distribution;#eta",40,-2.0,2.0);
  }

  TH1::AddDirectory(oldStatus);
}

//____________________________________________________________________
Bool_t AliESDMuonTrackCuts::LoadHistograms(const Char_t* dir)
{
  //
  // loads the histograms from a file
  // if dir is empty a directory with the name of this object is taken (like in SaveHistogram)
  //

  if (!dir)
    dir = GetName();

  if (!gDirectory->cd(dir))
    return kFALSE;

  fhCutStatistics = dynamic_cast<TH1F*> (gDirectory->Get("cut_statistics"));
  fhCutCorrelation = dynamic_cast<TH2F*> (gDirectory->Get("cut_correlation"));

  Char_t str[5];
  for (Int_t i=0; i<2; i++) {
    if (i==0)
    {
      gDirectory->cd("before_cuts");
      str[0] = 0;
    }
    else
    {
      gDirectory->cd("after_cuts");
      snprintf(str,5,"_cut");
    }

    fhPt[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("pt%s",str)));
    fhEta[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("eta%s",str)));

    gDirectory->cd("../");
  }

  gDirectory->cd("..");

  return kTRUE;
}

//____________________________________________________________________
void AliESDMuonTrackCuts::SaveHistograms(const Char_t* dir) {
  //
  // saves the histograms in a directory (dir)
  //

  if (!fHistogramsOn) {
    AliDebug(0, "Histograms not on - cannot save histograms!!!");
    return;
  }

  if (!dir)
    dir = GetName();

  gDirectory->mkdir(dir);
  gDirectory->cd(dir);

  gDirectory->mkdir("before_cuts");
  gDirectory->mkdir("after_cuts");

  fhCutStatistics->Write();
  fhCutCorrelation->Write();

  for (Int_t i=0; i<2; i++) {
    if (i==0)
      gDirectory->cd("before_cuts");
    else
      gDirectory->cd("after_cuts");

    fhPt[i]                  ->Write();
    fhEta[i]                 ->Write();
    
    gDirectory->cd("../");
  }

  gDirectory->cd("../");
}

//____________________________________________________________________
void AliESDMuonTrackCuts::DrawHistograms()
{
  gStyle->SetPalette(1);
  gStyle->SetFrameFillColor(10);
  gStyle->SetCanvasColor(10);
  
  TCanvas* canvas1 = new TCanvas(Form("%s_1", GetName()), "Track Cut Results", 800, 500);
  canvas1->Divide(2, 1);

  canvas1->cd(1);
  fhCutStatistics->SetStats(kFALSE);
  fhCutStatistics->LabelsOption("v");
  gPad->SetBottomMargin(0.3);
  fhCutStatistics->Draw();

  canvas1->cd(2);
  fhCutCorrelation->SetStats(kFALSE);
  fhCutCorrelation->LabelsOption("v");
  gPad->SetBottomMargin(0.3);
  gPad->SetLeftMargin(0.3);
  fhCutCorrelation->Draw("COLZ");
  canvas1->Update();
  canvas1->SaveAs(Form("%s_%s.gif", GetName(), canvas1->GetName()));
  
}

 AliESDMuonTrackCuts.cxx:1
 AliESDMuonTrackCuts.cxx:2
 AliESDMuonTrackCuts.cxx:3
 AliESDMuonTrackCuts.cxx:4
 AliESDMuonTrackCuts.cxx:5
 AliESDMuonTrackCuts.cxx:6
 AliESDMuonTrackCuts.cxx:7
 AliESDMuonTrackCuts.cxx:8
 AliESDMuonTrackCuts.cxx:9
 AliESDMuonTrackCuts.cxx:10
 AliESDMuonTrackCuts.cxx:11
 AliESDMuonTrackCuts.cxx:12
 AliESDMuonTrackCuts.cxx:13
 AliESDMuonTrackCuts.cxx:14
 AliESDMuonTrackCuts.cxx:15
 AliESDMuonTrackCuts.cxx:16
 AliESDMuonTrackCuts.cxx:17
 AliESDMuonTrackCuts.cxx:18
 AliESDMuonTrackCuts.cxx:19
 AliESDMuonTrackCuts.cxx:20
 AliESDMuonTrackCuts.cxx:21
 AliESDMuonTrackCuts.cxx:22
 AliESDMuonTrackCuts.cxx:23
 AliESDMuonTrackCuts.cxx:24
 AliESDMuonTrackCuts.cxx:25
 AliESDMuonTrackCuts.cxx:26
 AliESDMuonTrackCuts.cxx:27
 AliESDMuonTrackCuts.cxx:28
 AliESDMuonTrackCuts.cxx:29
 AliESDMuonTrackCuts.cxx:30
 AliESDMuonTrackCuts.cxx:31
 AliESDMuonTrackCuts.cxx:32
 AliESDMuonTrackCuts.cxx:33
 AliESDMuonTrackCuts.cxx:34
 AliESDMuonTrackCuts.cxx:35
 AliESDMuonTrackCuts.cxx:36
 AliESDMuonTrackCuts.cxx:37
 AliESDMuonTrackCuts.cxx:38
 AliESDMuonTrackCuts.cxx:39
 AliESDMuonTrackCuts.cxx:40
 AliESDMuonTrackCuts.cxx:41
 AliESDMuonTrackCuts.cxx:42
 AliESDMuonTrackCuts.cxx:43
 AliESDMuonTrackCuts.cxx:44
 AliESDMuonTrackCuts.cxx:45
 AliESDMuonTrackCuts.cxx:46
 AliESDMuonTrackCuts.cxx:47
 AliESDMuonTrackCuts.cxx:48
 AliESDMuonTrackCuts.cxx:49
 AliESDMuonTrackCuts.cxx:50
 AliESDMuonTrackCuts.cxx:51
 AliESDMuonTrackCuts.cxx:52
 AliESDMuonTrackCuts.cxx:53
 AliESDMuonTrackCuts.cxx:54
 AliESDMuonTrackCuts.cxx:55
 AliESDMuonTrackCuts.cxx:56
 AliESDMuonTrackCuts.cxx:57
 AliESDMuonTrackCuts.cxx:58
 AliESDMuonTrackCuts.cxx:59
 AliESDMuonTrackCuts.cxx:60
 AliESDMuonTrackCuts.cxx:61
 AliESDMuonTrackCuts.cxx:62
 AliESDMuonTrackCuts.cxx:63
 AliESDMuonTrackCuts.cxx:64
 AliESDMuonTrackCuts.cxx:65
 AliESDMuonTrackCuts.cxx:66
 AliESDMuonTrackCuts.cxx:67
 AliESDMuonTrackCuts.cxx:68
 AliESDMuonTrackCuts.cxx:69
 AliESDMuonTrackCuts.cxx:70
 AliESDMuonTrackCuts.cxx:71
 AliESDMuonTrackCuts.cxx:72
 AliESDMuonTrackCuts.cxx:73
 AliESDMuonTrackCuts.cxx:74
 AliESDMuonTrackCuts.cxx:75
 AliESDMuonTrackCuts.cxx:76
 AliESDMuonTrackCuts.cxx:77
 AliESDMuonTrackCuts.cxx:78
 AliESDMuonTrackCuts.cxx:79
 AliESDMuonTrackCuts.cxx:80
 AliESDMuonTrackCuts.cxx:81
 AliESDMuonTrackCuts.cxx:82
 AliESDMuonTrackCuts.cxx:83
 AliESDMuonTrackCuts.cxx:84
 AliESDMuonTrackCuts.cxx:85
 AliESDMuonTrackCuts.cxx:86
 AliESDMuonTrackCuts.cxx:87
 AliESDMuonTrackCuts.cxx:88
 AliESDMuonTrackCuts.cxx:89
 AliESDMuonTrackCuts.cxx:90
 AliESDMuonTrackCuts.cxx:91
 AliESDMuonTrackCuts.cxx:92
 AliESDMuonTrackCuts.cxx:93
 AliESDMuonTrackCuts.cxx:94
 AliESDMuonTrackCuts.cxx:95
 AliESDMuonTrackCuts.cxx:96
 AliESDMuonTrackCuts.cxx:97
 AliESDMuonTrackCuts.cxx:98
 AliESDMuonTrackCuts.cxx:99
 AliESDMuonTrackCuts.cxx:100
 AliESDMuonTrackCuts.cxx:101
 AliESDMuonTrackCuts.cxx:102
 AliESDMuonTrackCuts.cxx:103
 AliESDMuonTrackCuts.cxx:104
 AliESDMuonTrackCuts.cxx:105
 AliESDMuonTrackCuts.cxx:106
 AliESDMuonTrackCuts.cxx:107
 AliESDMuonTrackCuts.cxx:108
 AliESDMuonTrackCuts.cxx:109
 AliESDMuonTrackCuts.cxx:110
 AliESDMuonTrackCuts.cxx:111
 AliESDMuonTrackCuts.cxx:112
 AliESDMuonTrackCuts.cxx:113
 AliESDMuonTrackCuts.cxx:114
 AliESDMuonTrackCuts.cxx:115
 AliESDMuonTrackCuts.cxx:116
 AliESDMuonTrackCuts.cxx:117
 AliESDMuonTrackCuts.cxx:118
 AliESDMuonTrackCuts.cxx:119
 AliESDMuonTrackCuts.cxx:120
 AliESDMuonTrackCuts.cxx:121
 AliESDMuonTrackCuts.cxx:122
 AliESDMuonTrackCuts.cxx:123
 AliESDMuonTrackCuts.cxx:124
 AliESDMuonTrackCuts.cxx:125
 AliESDMuonTrackCuts.cxx:126
 AliESDMuonTrackCuts.cxx:127
 AliESDMuonTrackCuts.cxx:128
 AliESDMuonTrackCuts.cxx:129
 AliESDMuonTrackCuts.cxx:130
 AliESDMuonTrackCuts.cxx:131
 AliESDMuonTrackCuts.cxx:132
 AliESDMuonTrackCuts.cxx:133
 AliESDMuonTrackCuts.cxx:134
 AliESDMuonTrackCuts.cxx:135
 AliESDMuonTrackCuts.cxx:136
 AliESDMuonTrackCuts.cxx:137
 AliESDMuonTrackCuts.cxx:138
 AliESDMuonTrackCuts.cxx:139
 AliESDMuonTrackCuts.cxx:140
 AliESDMuonTrackCuts.cxx:141
 AliESDMuonTrackCuts.cxx:142
 AliESDMuonTrackCuts.cxx:143
 AliESDMuonTrackCuts.cxx:144
 AliESDMuonTrackCuts.cxx:145
 AliESDMuonTrackCuts.cxx:146
 AliESDMuonTrackCuts.cxx:147
 AliESDMuonTrackCuts.cxx:148
 AliESDMuonTrackCuts.cxx:149
 AliESDMuonTrackCuts.cxx:150
 AliESDMuonTrackCuts.cxx:151
 AliESDMuonTrackCuts.cxx:152
 AliESDMuonTrackCuts.cxx:153
 AliESDMuonTrackCuts.cxx:154
 AliESDMuonTrackCuts.cxx:155
 AliESDMuonTrackCuts.cxx:156
 AliESDMuonTrackCuts.cxx:157
 AliESDMuonTrackCuts.cxx:158
 AliESDMuonTrackCuts.cxx:159
 AliESDMuonTrackCuts.cxx:160
 AliESDMuonTrackCuts.cxx:161
 AliESDMuonTrackCuts.cxx:162
 AliESDMuonTrackCuts.cxx:163
 AliESDMuonTrackCuts.cxx:164
 AliESDMuonTrackCuts.cxx:165
 AliESDMuonTrackCuts.cxx:166
 AliESDMuonTrackCuts.cxx:167
 AliESDMuonTrackCuts.cxx:168
 AliESDMuonTrackCuts.cxx:169
 AliESDMuonTrackCuts.cxx:170
 AliESDMuonTrackCuts.cxx:171
 AliESDMuonTrackCuts.cxx:172
 AliESDMuonTrackCuts.cxx:173
 AliESDMuonTrackCuts.cxx:174
 AliESDMuonTrackCuts.cxx:175
 AliESDMuonTrackCuts.cxx:176
 AliESDMuonTrackCuts.cxx:177
 AliESDMuonTrackCuts.cxx:178
 AliESDMuonTrackCuts.cxx:179
 AliESDMuonTrackCuts.cxx:180
 AliESDMuonTrackCuts.cxx:181
 AliESDMuonTrackCuts.cxx:182
 AliESDMuonTrackCuts.cxx:183
 AliESDMuonTrackCuts.cxx:184
 AliESDMuonTrackCuts.cxx:185
 AliESDMuonTrackCuts.cxx:186
 AliESDMuonTrackCuts.cxx:187
 AliESDMuonTrackCuts.cxx:188
 AliESDMuonTrackCuts.cxx:189
 AliESDMuonTrackCuts.cxx:190
 AliESDMuonTrackCuts.cxx:191
 AliESDMuonTrackCuts.cxx:192
 AliESDMuonTrackCuts.cxx:193
 AliESDMuonTrackCuts.cxx:194
 AliESDMuonTrackCuts.cxx:195
 AliESDMuonTrackCuts.cxx:196
 AliESDMuonTrackCuts.cxx:197
 AliESDMuonTrackCuts.cxx:198
 AliESDMuonTrackCuts.cxx:199
 AliESDMuonTrackCuts.cxx:200
 AliESDMuonTrackCuts.cxx:201
 AliESDMuonTrackCuts.cxx:202
 AliESDMuonTrackCuts.cxx:203
 AliESDMuonTrackCuts.cxx:204
 AliESDMuonTrackCuts.cxx:205
 AliESDMuonTrackCuts.cxx:206
 AliESDMuonTrackCuts.cxx:207
 AliESDMuonTrackCuts.cxx:208
 AliESDMuonTrackCuts.cxx:209
 AliESDMuonTrackCuts.cxx:210
 AliESDMuonTrackCuts.cxx:211
 AliESDMuonTrackCuts.cxx:212
 AliESDMuonTrackCuts.cxx:213
 AliESDMuonTrackCuts.cxx:214
 AliESDMuonTrackCuts.cxx:215
 AliESDMuonTrackCuts.cxx:216
 AliESDMuonTrackCuts.cxx:217
 AliESDMuonTrackCuts.cxx:218
 AliESDMuonTrackCuts.cxx:219
 AliESDMuonTrackCuts.cxx:220
 AliESDMuonTrackCuts.cxx:221
 AliESDMuonTrackCuts.cxx:222
 AliESDMuonTrackCuts.cxx:223
 AliESDMuonTrackCuts.cxx:224
 AliESDMuonTrackCuts.cxx:225
 AliESDMuonTrackCuts.cxx:226
 AliESDMuonTrackCuts.cxx:227
 AliESDMuonTrackCuts.cxx:228
 AliESDMuonTrackCuts.cxx:229
 AliESDMuonTrackCuts.cxx:230
 AliESDMuonTrackCuts.cxx:231
 AliESDMuonTrackCuts.cxx:232
 AliESDMuonTrackCuts.cxx:233
 AliESDMuonTrackCuts.cxx:234
 AliESDMuonTrackCuts.cxx:235
 AliESDMuonTrackCuts.cxx:236
 AliESDMuonTrackCuts.cxx:237
 AliESDMuonTrackCuts.cxx:238
 AliESDMuonTrackCuts.cxx:239
 AliESDMuonTrackCuts.cxx:240
 AliESDMuonTrackCuts.cxx:241
 AliESDMuonTrackCuts.cxx:242
 AliESDMuonTrackCuts.cxx:243
 AliESDMuonTrackCuts.cxx:244
 AliESDMuonTrackCuts.cxx:245
 AliESDMuonTrackCuts.cxx:246
 AliESDMuonTrackCuts.cxx:247
 AliESDMuonTrackCuts.cxx:248
 AliESDMuonTrackCuts.cxx:249
 AliESDMuonTrackCuts.cxx:250
 AliESDMuonTrackCuts.cxx:251
 AliESDMuonTrackCuts.cxx:252
 AliESDMuonTrackCuts.cxx:253
 AliESDMuonTrackCuts.cxx:254
 AliESDMuonTrackCuts.cxx:255
 AliESDMuonTrackCuts.cxx:256
 AliESDMuonTrackCuts.cxx:257
 AliESDMuonTrackCuts.cxx:258
 AliESDMuonTrackCuts.cxx:259
 AliESDMuonTrackCuts.cxx:260
 AliESDMuonTrackCuts.cxx:261
 AliESDMuonTrackCuts.cxx:262
 AliESDMuonTrackCuts.cxx:263
 AliESDMuonTrackCuts.cxx:264
 AliESDMuonTrackCuts.cxx:265
 AliESDMuonTrackCuts.cxx:266
 AliESDMuonTrackCuts.cxx:267
 AliESDMuonTrackCuts.cxx:268
 AliESDMuonTrackCuts.cxx:269
 AliESDMuonTrackCuts.cxx:270
 AliESDMuonTrackCuts.cxx:271
 AliESDMuonTrackCuts.cxx:272
 AliESDMuonTrackCuts.cxx:273
 AliESDMuonTrackCuts.cxx:274
 AliESDMuonTrackCuts.cxx:275
 AliESDMuonTrackCuts.cxx:276
 AliESDMuonTrackCuts.cxx:277
 AliESDMuonTrackCuts.cxx:278
 AliESDMuonTrackCuts.cxx:279
 AliESDMuonTrackCuts.cxx:280
 AliESDMuonTrackCuts.cxx:281
 AliESDMuonTrackCuts.cxx:282
 AliESDMuonTrackCuts.cxx:283
 AliESDMuonTrackCuts.cxx:284
 AliESDMuonTrackCuts.cxx:285
 AliESDMuonTrackCuts.cxx:286
 AliESDMuonTrackCuts.cxx:287
 AliESDMuonTrackCuts.cxx:288
 AliESDMuonTrackCuts.cxx:289
 AliESDMuonTrackCuts.cxx:290
 AliESDMuonTrackCuts.cxx:291
 AliESDMuonTrackCuts.cxx:292
 AliESDMuonTrackCuts.cxx:293
 AliESDMuonTrackCuts.cxx:294
 AliESDMuonTrackCuts.cxx:295
 AliESDMuonTrackCuts.cxx:296
 AliESDMuonTrackCuts.cxx:297
 AliESDMuonTrackCuts.cxx:298
 AliESDMuonTrackCuts.cxx:299
 AliESDMuonTrackCuts.cxx:300
 AliESDMuonTrackCuts.cxx:301
 AliESDMuonTrackCuts.cxx:302
 AliESDMuonTrackCuts.cxx:303
 AliESDMuonTrackCuts.cxx:304
 AliESDMuonTrackCuts.cxx:305
 AliESDMuonTrackCuts.cxx:306
 AliESDMuonTrackCuts.cxx:307
 AliESDMuonTrackCuts.cxx:308
 AliESDMuonTrackCuts.cxx:309
 AliESDMuonTrackCuts.cxx:310
 AliESDMuonTrackCuts.cxx:311
 AliESDMuonTrackCuts.cxx:312
 AliESDMuonTrackCuts.cxx:313
 AliESDMuonTrackCuts.cxx:314
 AliESDMuonTrackCuts.cxx:315
 AliESDMuonTrackCuts.cxx:316
 AliESDMuonTrackCuts.cxx:317
 AliESDMuonTrackCuts.cxx:318
 AliESDMuonTrackCuts.cxx:319
 AliESDMuonTrackCuts.cxx:320
 AliESDMuonTrackCuts.cxx:321
 AliESDMuonTrackCuts.cxx:322
 AliESDMuonTrackCuts.cxx:323
 AliESDMuonTrackCuts.cxx:324
 AliESDMuonTrackCuts.cxx:325
 AliESDMuonTrackCuts.cxx:326
 AliESDMuonTrackCuts.cxx:327
 AliESDMuonTrackCuts.cxx:328
 AliESDMuonTrackCuts.cxx:329
 AliESDMuonTrackCuts.cxx:330
 AliESDMuonTrackCuts.cxx:331
 AliESDMuonTrackCuts.cxx:332
 AliESDMuonTrackCuts.cxx:333
 AliESDMuonTrackCuts.cxx:334
 AliESDMuonTrackCuts.cxx:335
 AliESDMuonTrackCuts.cxx:336
 AliESDMuonTrackCuts.cxx:337
 AliESDMuonTrackCuts.cxx:338
 AliESDMuonTrackCuts.cxx:339
 AliESDMuonTrackCuts.cxx:340
 AliESDMuonTrackCuts.cxx:341
 AliESDMuonTrackCuts.cxx:342
 AliESDMuonTrackCuts.cxx:343
 AliESDMuonTrackCuts.cxx:344
 AliESDMuonTrackCuts.cxx:345
 AliESDMuonTrackCuts.cxx:346
 AliESDMuonTrackCuts.cxx:347
 AliESDMuonTrackCuts.cxx:348
 AliESDMuonTrackCuts.cxx:349
 AliESDMuonTrackCuts.cxx:350
 AliESDMuonTrackCuts.cxx:351
 AliESDMuonTrackCuts.cxx:352
 AliESDMuonTrackCuts.cxx:353
 AliESDMuonTrackCuts.cxx:354
 AliESDMuonTrackCuts.cxx:355
 AliESDMuonTrackCuts.cxx:356
 AliESDMuonTrackCuts.cxx:357
 AliESDMuonTrackCuts.cxx:358
 AliESDMuonTrackCuts.cxx:359
 AliESDMuonTrackCuts.cxx:360
 AliESDMuonTrackCuts.cxx:361
 AliESDMuonTrackCuts.cxx:362
 AliESDMuonTrackCuts.cxx:363
 AliESDMuonTrackCuts.cxx:364
 AliESDMuonTrackCuts.cxx:365
 AliESDMuonTrackCuts.cxx:366
 AliESDMuonTrackCuts.cxx:367
 AliESDMuonTrackCuts.cxx:368
 AliESDMuonTrackCuts.cxx:369
 AliESDMuonTrackCuts.cxx:370
 AliESDMuonTrackCuts.cxx:371
 AliESDMuonTrackCuts.cxx:372
 AliESDMuonTrackCuts.cxx:373
 AliESDMuonTrackCuts.cxx:374
 AliESDMuonTrackCuts.cxx:375
 AliESDMuonTrackCuts.cxx:376
 AliESDMuonTrackCuts.cxx:377
 AliESDMuonTrackCuts.cxx:378
 AliESDMuonTrackCuts.cxx:379
 AliESDMuonTrackCuts.cxx:380
 AliESDMuonTrackCuts.cxx:381
 AliESDMuonTrackCuts.cxx:382
 AliESDMuonTrackCuts.cxx:383
 AliESDMuonTrackCuts.cxx:384
 AliESDMuonTrackCuts.cxx:385
 AliESDMuonTrackCuts.cxx:386
 AliESDMuonTrackCuts.cxx:387
 AliESDMuonTrackCuts.cxx:388
 AliESDMuonTrackCuts.cxx:389
 AliESDMuonTrackCuts.cxx:390
 AliESDMuonTrackCuts.cxx:391
 AliESDMuonTrackCuts.cxx:392
 AliESDMuonTrackCuts.cxx:393
 AliESDMuonTrackCuts.cxx:394
 AliESDMuonTrackCuts.cxx:395
 AliESDMuonTrackCuts.cxx:396
 AliESDMuonTrackCuts.cxx:397
 AliESDMuonTrackCuts.cxx:398
 AliESDMuonTrackCuts.cxx:399
 AliESDMuonTrackCuts.cxx:400
 AliESDMuonTrackCuts.cxx:401
 AliESDMuonTrackCuts.cxx:402
 AliESDMuonTrackCuts.cxx:403
 AliESDMuonTrackCuts.cxx:404
 AliESDMuonTrackCuts.cxx:405
 AliESDMuonTrackCuts.cxx:406
 AliESDMuonTrackCuts.cxx:407
 AliESDMuonTrackCuts.cxx:408
 AliESDMuonTrackCuts.cxx:409
 AliESDMuonTrackCuts.cxx:410
 AliESDMuonTrackCuts.cxx:411
 AliESDMuonTrackCuts.cxx:412
 AliESDMuonTrackCuts.cxx:413
 AliESDMuonTrackCuts.cxx:414
 AliESDMuonTrackCuts.cxx:415
 AliESDMuonTrackCuts.cxx:416
 AliESDMuonTrackCuts.cxx:417
 AliESDMuonTrackCuts.cxx:418
 AliESDMuonTrackCuts.cxx:419
 AliESDMuonTrackCuts.cxx:420
 AliESDMuonTrackCuts.cxx:421
 AliESDMuonTrackCuts.cxx:422
 AliESDMuonTrackCuts.cxx:423
 AliESDMuonTrackCuts.cxx:424
 AliESDMuonTrackCuts.cxx:425
 AliESDMuonTrackCuts.cxx:426
 AliESDMuonTrackCuts.cxx:427
 AliESDMuonTrackCuts.cxx:428
 AliESDMuonTrackCuts.cxx:429
 AliESDMuonTrackCuts.cxx:430
 AliESDMuonTrackCuts.cxx:431
 AliESDMuonTrackCuts.cxx:432
 AliESDMuonTrackCuts.cxx:433
 AliESDMuonTrackCuts.cxx:434
 AliESDMuonTrackCuts.cxx:435
 AliESDMuonTrackCuts.cxx:436
 AliESDMuonTrackCuts.cxx:437
 AliESDMuonTrackCuts.cxx:438
 AliESDMuonTrackCuts.cxx:439
 AliESDMuonTrackCuts.cxx:440
 AliESDMuonTrackCuts.cxx:441
 AliESDMuonTrackCuts.cxx:442
 AliESDMuonTrackCuts.cxx:443
 AliESDMuonTrackCuts.cxx:444
 AliESDMuonTrackCuts.cxx:445
 AliESDMuonTrackCuts.cxx:446
 AliESDMuonTrackCuts.cxx:447
 AliESDMuonTrackCuts.cxx:448
 AliESDMuonTrackCuts.cxx:449
 AliESDMuonTrackCuts.cxx:450
 AliESDMuonTrackCuts.cxx:451
 AliESDMuonTrackCuts.cxx:452
 AliESDMuonTrackCuts.cxx:453
 AliESDMuonTrackCuts.cxx:454
 AliESDMuonTrackCuts.cxx:455
 AliESDMuonTrackCuts.cxx:456
 AliESDMuonTrackCuts.cxx:457
 AliESDMuonTrackCuts.cxx:458
 AliESDMuonTrackCuts.cxx:459
 AliESDMuonTrackCuts.cxx:460
 AliESDMuonTrackCuts.cxx:461
 AliESDMuonTrackCuts.cxx:462
 AliESDMuonTrackCuts.cxx:463
 AliESDMuonTrackCuts.cxx:464
 AliESDMuonTrackCuts.cxx:465
 AliESDMuonTrackCuts.cxx:466
 AliESDMuonTrackCuts.cxx:467
 AliESDMuonTrackCuts.cxx:468
 AliESDMuonTrackCuts.cxx:469
 AliESDMuonTrackCuts.cxx:470
 AliESDMuonTrackCuts.cxx:471
 AliESDMuonTrackCuts.cxx:472
 AliESDMuonTrackCuts.cxx:473
 AliESDMuonTrackCuts.cxx:474
 AliESDMuonTrackCuts.cxx:475
 AliESDMuonTrackCuts.cxx:476
 AliESDMuonTrackCuts.cxx:477
 AliESDMuonTrackCuts.cxx:478
 AliESDMuonTrackCuts.cxx:479
 AliESDMuonTrackCuts.cxx:480
 AliESDMuonTrackCuts.cxx:481
 AliESDMuonTrackCuts.cxx:482
 AliESDMuonTrackCuts.cxx:483
 AliESDMuonTrackCuts.cxx:484
 AliESDMuonTrackCuts.cxx:485
 AliESDMuonTrackCuts.cxx:486
 AliESDMuonTrackCuts.cxx:487
 AliESDMuonTrackCuts.cxx:488
 AliESDMuonTrackCuts.cxx:489
 AliESDMuonTrackCuts.cxx:490
 AliESDMuonTrackCuts.cxx:491
 AliESDMuonTrackCuts.cxx:492
 AliESDMuonTrackCuts.cxx:493
 AliESDMuonTrackCuts.cxx:494
 AliESDMuonTrackCuts.cxx:495
 AliESDMuonTrackCuts.cxx:496
 AliESDMuonTrackCuts.cxx:497
 AliESDMuonTrackCuts.cxx:498
 AliESDMuonTrackCuts.cxx:499
 AliESDMuonTrackCuts.cxx:500
 AliESDMuonTrackCuts.cxx:501
 AliESDMuonTrackCuts.cxx:502
 AliESDMuonTrackCuts.cxx:503
 AliESDMuonTrackCuts.cxx:504
 AliESDMuonTrackCuts.cxx:505
 AliESDMuonTrackCuts.cxx:506
 AliESDMuonTrackCuts.cxx:507
 AliESDMuonTrackCuts.cxx:508
 AliESDMuonTrackCuts.cxx:509
 AliESDMuonTrackCuts.cxx:510
 AliESDMuonTrackCuts.cxx:511
 AliESDMuonTrackCuts.cxx:512
 AliESDMuonTrackCuts.cxx:513
 AliESDMuonTrackCuts.cxx:514
 AliESDMuonTrackCuts.cxx:515
 AliESDMuonTrackCuts.cxx:516
 AliESDMuonTrackCuts.cxx:517
 AliESDMuonTrackCuts.cxx:518
 AliESDMuonTrackCuts.cxx:519
 AliESDMuonTrackCuts.cxx:520
 AliESDMuonTrackCuts.cxx:521
 AliESDMuonTrackCuts.cxx:522
 AliESDMuonTrackCuts.cxx:523
 AliESDMuonTrackCuts.cxx:524
 AliESDMuonTrackCuts.cxx:525
 AliESDMuonTrackCuts.cxx:526
 AliESDMuonTrackCuts.cxx:527
 AliESDMuonTrackCuts.cxx:528
 AliESDMuonTrackCuts.cxx:529
 AliESDMuonTrackCuts.cxx:530
 AliESDMuonTrackCuts.cxx:531
 AliESDMuonTrackCuts.cxx:532
 AliESDMuonTrackCuts.cxx:533
 AliESDMuonTrackCuts.cxx:534
 AliESDMuonTrackCuts.cxx:535
 AliESDMuonTrackCuts.cxx:536
 AliESDMuonTrackCuts.cxx:537
 AliESDMuonTrackCuts.cxx:538
 AliESDMuonTrackCuts.cxx:539
 AliESDMuonTrackCuts.cxx:540
 AliESDMuonTrackCuts.cxx:541
 AliESDMuonTrackCuts.cxx:542
 AliESDMuonTrackCuts.cxx:543
 AliESDMuonTrackCuts.cxx:544
 AliESDMuonTrackCuts.cxx:545
 AliESDMuonTrackCuts.cxx:546
 AliESDMuonTrackCuts.cxx:547
 AliESDMuonTrackCuts.cxx:548
 AliESDMuonTrackCuts.cxx:549
 AliESDMuonTrackCuts.cxx:550
 AliESDMuonTrackCuts.cxx:551
 AliESDMuonTrackCuts.cxx:552
 AliESDMuonTrackCuts.cxx:553
 AliESDMuonTrackCuts.cxx:554
 AliESDMuonTrackCuts.cxx:555
 AliESDMuonTrackCuts.cxx:556
 AliESDMuonTrackCuts.cxx:557
 AliESDMuonTrackCuts.cxx:558
 AliESDMuonTrackCuts.cxx:559
 AliESDMuonTrackCuts.cxx:560
 AliESDMuonTrackCuts.cxx:561
 AliESDMuonTrackCuts.cxx:562
 AliESDMuonTrackCuts.cxx:563
 AliESDMuonTrackCuts.cxx:564
 AliESDMuonTrackCuts.cxx:565
 AliESDMuonTrackCuts.cxx:566
 AliESDMuonTrackCuts.cxx:567
 AliESDMuonTrackCuts.cxx:568
 AliESDMuonTrackCuts.cxx:569
 AliESDMuonTrackCuts.cxx:570
 AliESDMuonTrackCuts.cxx:571
 AliESDMuonTrackCuts.cxx:572
 AliESDMuonTrackCuts.cxx:573
 AliESDMuonTrackCuts.cxx:574
 AliESDMuonTrackCuts.cxx:575
 AliESDMuonTrackCuts.cxx:576
 AliESDMuonTrackCuts.cxx:577
 AliESDMuonTrackCuts.cxx:578
 AliESDMuonTrackCuts.cxx:579
 AliESDMuonTrackCuts.cxx:580
 AliESDMuonTrackCuts.cxx:581
 AliESDMuonTrackCuts.cxx:582