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$ */

//-------------------------------------------------------------------------
//        Class AliMUONFastTracking 
//
//  Manager for the fast simulation of tracking in the muon spectrometer
//  This class reads the lookup tables containing the parameterization 
//  of the deltap, deltatheta, deltaphi for different background levels
//  and provides the related smeared parameters. 
//  Used by AliFastMuonTrackingEff, AliFastMuonTrackingAcc, 
//  AliFastMuonTrackingRes. 
//-------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <Riostream.h>
#include <TF1.h>
#include <TFile.h>
#include <TH3.h>
#include <TMath.h>
#include <TRandom.h>
#include <TSpline.h>

#include "AliMUONFastTracking.h"
#include "AliMUONFastTrackingEntry.h"

using std::cout;
using std::endl;
ClassImp(AliMUONFastTracking)


AliMUONFastTracking* AliMUONFastTracking::fgMUONFastTracking=NULL;

static Double_t FitP(Double_t *x, Double_t *par){
// Fit function
    Double_t dx = x[0] - par[0];
    Double_t dx2 = x[0] - par[4];
    Double_t sigma = par[1] * ( 1 + par[2] * dx);
    if (sigma == 0) {    

	return 0.;
    }
    Double_t fasymm = TMath::Exp(-0.5 * dx * dx / (sigma * sigma));
    Double_t sigma2 = par[1] * par[5];
    Double_t fgauss = TMath::Exp(-0.5 * dx2 * dx2 / (sigma2 * sigma2));
    Double_t value = fasymm + par[3] * fgauss; 
    return TMath::Abs(value);
} 

AliMUONFastTracking::AliMUONFastTracking(const AliMUONFastTracking & ft):
    TObject(),
    fNbinp(10),
    fPmin(0.),
    fPmax(200.),
    fDeltaP((fPmax-fPmin)/fNbinp),
    fNbintheta(10),
    fThetamin(2.),
    fThetamax(9.),
    fDeltaTheta((fThetamax-fThetamin)/fNbintheta),
    fNbinphi(10),
    fPhimin(-180.),
    fPhimax(180.),
    fDeltaPhi((fPhimax-fPhimin)/fNbinphi),
    fPrintLevel(1),
    fBkg(0.),
    fSpline(0),
    fClusterFinder(kOld)									 
{
// Copy constructor
    ft.Copy(*this);
}


AliMUONFastTracking* AliMUONFastTracking::Instance()
{ 
// Set random number generator 
    if (fgMUONFastTracking) {
	return fgMUONFastTracking;
    } else {
	fgMUONFastTracking = new AliMUONFastTracking();
	return fgMUONFastTracking;
    }
}

AliMUONFastTracking::AliMUONFastTracking():
    fNbinp(10),
    fPmin(0.),
    fPmax(200.),
    fDeltaP((fPmax-fPmin)/fNbinp),
    fNbintheta(10),
    fThetamin(2.),
    fThetamax(9.),
    fDeltaTheta((fThetamax-fThetamin)/fNbintheta),
    fNbinphi(10),
    fPhimin(-180.),
    fPhimax(180.),
    fDeltaPhi((fPhimax-fPhimin)/fNbinphi),
    fPrintLevel(1),
    fBkg(0.),
    fSpline(0),
    fClusterFinder(kOld)
{
//
// constructor
//
  for (Int_t i = 0; i<20;i++) {
    for (Int_t j = 0; j<20; j++) {
      for (Int_t k = 0; k<20; k++) {
	fFitp[i][j][k] = 0x0;
      }
    }
  }
}

void AliMUONFastTracking::Init(Float_t bkg)
{
  //
  //  Initialization
  //
  for (Int_t ip=0; ip< fNbinp; ip++){
    for (Int_t itheta=0; itheta< fNbintheta; itheta++){
      for (Int_t iphi=0; iphi< fNbinphi; iphi++){
	fCurrentEntry[ip][itheta][iphi] = new AliMUONFastTrackingEntry;
	for (Int_t ibkg=0; ibkg<4; ibkg++){
	  fEntry[ip][itheta][iphi][ibkg] = new AliMUONFastTrackingEntry;
	}
      }
    }
  }
  
  char filename [100]; 
  if (fClusterFinder==kOld) snprintf (filename, 100, "$(ALICE_ROOT)/FASTSIM/data/MUONtrackLUT.root"); 
  else snprintf (filename, 100, "$(ALICE_ROOT)/FASTSIM/data/MUONtrackLUT-AZ.root"); 

  TFile *file = new TFile(filename); 
  ReadLUT(file);
  SetBackground(bkg);
  UseSpline(0);
}


void AliMUONFastTracking::ReadLUT(TFile* file)
{
  //
  // read the lookup tables from file
  //
  TH3F *heff[5][3], *hacc[5][3], *hmeanp, *hsigmap, *hsigma1p, *hchi2p;
  TH3F *hnormg2, *hmeang2, *hsigmag2, *hmeantheta, *hsigmatheta, *hchi2theta;
  TH3F *hmeanphi, *hsigmaphi, *hchi2phi;
  char tag[40], tag2[40]; 
  
  printf ("Reading parameters from LUT file %s...\n",file->GetName());

  const Float_t kBkg[4] = {0, 0.5, 1, 2};
  for (Int_t ibkg=0; ibkg<4; ibkg++) {
    snprintf (tag, 40, "BKG%g",kBkg[ibkg]); 
    file->cd(tag);
    for (Int_t isplp = 0; isplp<kSplitP; isplp++) { 
      for (Int_t ispltheta = 0; ispltheta<kSplitTheta; ispltheta++) { 
	snprintf (tag2, 40, "heff[%d][%d]",isplp,ispltheta); 
	heff[isplp][ispltheta] = (TH3F*)gDirectory->Get(tag2);
	snprintf (tag2, 40, "hacc[%d][%d]",isplp,ispltheta); 
	hacc[isplp][ispltheta] = (TH3F*)gDirectory->Get(tag2);
      }
    }    
    hmeanp      = (TH3F*)gDirectory->Get("hmeanp");
    hsigmap     = (TH3F*)gDirectory->Get("hsigmap");
    hsigma1p    = (TH3F*)gDirectory->Get("hsigma1p");
    hchi2p      = (TH3F*)gDirectory->Get("hchi2p");
    hnormg2     = (TH3F*)gDirectory->Get("hnormg2");
    hmeang2     = (TH3F*)gDirectory->Get("hmeang2");
    hsigmag2    = (TH3F*)gDirectory->Get("hsigmag2");
    hmeantheta  = (TH3F*)gDirectory->Get("hmeantheta");
    hsigmatheta = (TH3F*)gDirectory->Get("hsigmatheta");
    hchi2theta  = (TH3F*)gDirectory->Get("hchi2theta");
    hmeanphi    = (TH3F*)gDirectory->Get("hmeanphi");
    hsigmaphi   = (TH3F*)gDirectory->Get("hsigmaphi");
    hchi2phi    = (TH3F*)gDirectory->Get("hchi2phi");
    
    for (Int_t ip=0; ip<fNbinp ;ip++) {
      for (Int_t itheta=0; itheta<fNbintheta ;itheta++) {
	for (Int_t iphi=0; iphi<fNbinphi ;iphi++) {
	  Float_t p     = fPmin     + fDeltaP     * (ip     + 0.5);
	  Float_t theta = fThetamin + fDeltaTheta * (itheta + 0.5);
	  Float_t phi   = fPhimin   + fDeltaPhi   * (iphi   + 0.5);
	  
	  fEntry[ip][itheta][iphi][ibkg]->SetP(p);
	  fEntry[ip][itheta][iphi][ibkg]->SetMeanp(hmeanp->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetSigmap(TMath::Abs(hsigmap->GetBinContent(ip+1,itheta+1,iphi+1)));
	  fEntry[ip][itheta][iphi][ibkg]->SetSigma1p(hsigma1p->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetChi2p(hchi2p->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetNormG2(hnormg2->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetMeanG2(hmeang2->GetBinContent(ip+1,itheta+1,iphi+1));
	  if (ibkg == 0)  fEntry[ip][itheta][iphi][ibkg]->SetSigmaG2(9999);
	  else fEntry[ip][itheta][iphi][ibkg]->SetSigmaG2(hsigmag2->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetTheta(theta);
	  fEntry[ip][itheta][iphi][ibkg]->SetMeantheta(hmeantheta->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetSigmatheta(TMath::Abs(hsigmatheta->GetBinContent(ip+1,itheta+1,iphi+1)));
	  fEntry[ip][itheta][iphi][ibkg]->SetChi2theta(hchi2theta->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetPhi(phi);
	  fEntry[ip][itheta][iphi][ibkg]->SetMeanphi(hmeanphi->GetBinContent(ip+1,itheta+1,iphi+1));
	  fEntry[ip][itheta][iphi][ibkg]->SetSigmaphi(TMath::Abs(hsigmaphi->GetBinContent(ip+1,itheta+1,iphi+1)));
	  fEntry[ip][itheta][iphi][ibkg]->SetChi2phi(hchi2phi->GetBinContent(ip+1,itheta+1,iphi+1));
	  for (Int_t i=0; i<kSplitP; i++) { 
	    for (Int_t j=0; j<kSplitTheta; j++) { 
	      fEntry[ip][itheta][iphi][ibkg]->SetAcc(i,j,hacc[i][j]->GetBinContent(ip+1,itheta+1,iphi+1));
	      fEntry[ip][itheta][iphi][ibkg]->SetEff(i,j,heff[i][j]->GetBinContent(ip+1,itheta+1,iphi+1));
	    }
	  }
	} // iphi 
      }  // itheta
    }   // ip
  }    // ibkg

  TGraph *graph = new TGraph(3); 
  TF1 *f = new TF1("f","[0]+[1]*x"); 
  
  for (Int_t ip=0; ip< fNbinp; ip++){
    for (Int_t itheta=0; itheta< fNbintheta; itheta++){
      for (Int_t iphi=0; iphi< fNbinphi; iphi++){
	graph->SetPoint(0,0.5,fEntry[ip][itheta][iphi][1]->GetSigmaG2());
	graph->SetPoint(1,1,fEntry[ip][itheta][iphi][2]->GetSigmaG2());
	graph->SetPoint(2,2,fEntry[ip][itheta][iphi][3]->GetSigmaG2());
	graph->Fit("f","q"); 
	fEntry[ip][itheta][iphi][0]->SetSigmaG2(f->Eval(0)); 
      }
    }
  }
  f->Delete();
  graph->Delete();
  printf ("parameters read. \n");
}

void AliMUONFastTracking::GetBinning(Int_t &nbinp, Float_t &pmin, Float_t &pmax,
				     Int_t &nbintheta, Float_t &thetamin, 
				     Float_t &thetamax,
				     Int_t &nbinphi, Float_t &phimin, Float_t &phimax) const 
{
  //
  // gets the binning for the discrete parametrizations in the lookup table
  //
    nbinp = fNbinp;
    pmin  = fPmin;
    pmax  = fPmax;
    nbintheta = fNbintheta;
    thetamin  = fThetamin;
    thetamax  = fThetamax;
    nbinphi = fNbinphi;
    phimin  = fPhimin;
    phimax  = fPhimax;
}


void AliMUONFastTracking::GetIpIthetaIphi(Float_t p, Float_t theta, Float_t phi, 
					  Int_t charge, Int_t &ip, Int_t &itheta, 
					  Int_t &iphi) const
{
  //
  // gets the id of the cells in the LUT for a given (p,theta,phi, charge)
  //
    if (charge < 0) phi = -phi;
    ip           = Int_t (( p - fPmin ) / fDeltaP);
    itheta       = Int_t (( theta - fThetamin ) / fDeltaTheta);
    iphi         = Int_t (( phi - fPhimin ) / fDeltaPhi);
    
    
    if (ip< 0) 	ip = 0;
    if (ip>= fNbinp) ip = fNbinp-1;
    if (itheta< 0) itheta = 0;
    if (itheta>= fNbintheta) itheta = fNbintheta-1;
    
    if (iphi< 0) iphi = 0;
    if (iphi>= fNbinphi) iphi = fNbinphi-1;
}

void AliMUONFastTracking::GetSplit(Int_t ip, Int_t itheta, 
				   Int_t &nSplitP, Int_t &nSplitTheta) const 
{ 
  //
  // the first cell is splitted in more bins for theta and momentum
  // parameterizations. Get the number of divisions for the splitted bins
  //
  if (ip==0) nSplitP = 5; 
  else nSplitP = 2; 
  if (itheta==0) nSplitTheta = 3; 
  else nSplitTheta = 1; 
}

Float_t AliMUONFastTracking::Efficiency(Float_t p,   Float_t theta, 
					Float_t phi, Int_t charge){
  //
  // gets the tracking efficiency
  //
  Int_t ip=0, itheta=0, iphi=0;
  GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
  Int_t nSplitP, nSplitTheta; 
  GetSplit(ip,itheta,nSplitP,nSplitTheta); 

  Float_t dp = p - fPmin;
  Int_t ibinp  = Int_t(nSplitP*(dp - fDeltaP * Int_t(dp / fDeltaP))/fDeltaP); 
  Float_t dtheta = theta - fThetamin;
  Int_t ibintheta  = Int_t(nSplitTheta*(dtheta - fDeltaTheta * Int_t(dtheta / fDeltaTheta))/fDeltaTheta); 
  Float_t eff = fCurrentEntry[ip][itheta][iphi]->GetEff(ibinp,ibintheta);
  return eff;   
}

Float_t AliMUONFastTracking::Acceptance(Float_t p,   Float_t theta, 
					Float_t phi, Int_t charge){
  //
  // gets the geometrical acceptance
  //
  if (theta<fThetamin || theta>fThetamax) return 0; 
  
  Int_t ip=0, itheta=0, iphi=0;
  GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
  Int_t nSplitP, nSplitTheta; 
  GetSplit(ip,itheta,nSplitP,nSplitTheta); 
  // central value and corrections with spline 
  
  Float_t dp = p - fPmin;
  Int_t ibinp  = Int_t(nSplitP*(dp - fDeltaP * Int_t(dp / fDeltaP))/fDeltaP); 
  Float_t dtheta = theta - fThetamin;
  Int_t ibintheta  = Int_t(nSplitTheta*(dtheta - fDeltaTheta * Int_t(dtheta / fDeltaTheta))/fDeltaTheta); 
  Float_t acc = fCurrentEntry[ip][itheta][iphi]->GetAcc(ibinp,ibintheta);
  return acc;   
}

Float_t AliMUONFastTracking::MeanP(Float_t p,   Float_t theta, 
			    Float_t phi, Int_t charge) const
{
  //
  // gets the mean value of the prec-pgen distribution
  //
    Int_t ip=0, itheta=0, iphi=0;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    return fCurrentEntry[ip][itheta][iphi]->GetMeanp();
}

Float_t AliMUONFastTracking::SigmaP(Float_t p,   Float_t theta, 
				    Float_t phi, Int_t charge) const
{
  //
  // gets the width of the prec-pgen distribution
  //
    Int_t ip=0, itheta=0, iphi=0;
    Int_t index;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    // central value and corrections with spline 
    Float_t sigmap = fCurrentEntry[ip][itheta][iphi]->GetSigmap();
    if (!fSpline) return sigmap;
    // corrections vs p, theta, phi 
    index = iphi + fNbinphi * itheta;
    Double_t xmin,ymin,xmax,ymax;
    Float_t frac1 = fSplineSigmap[index][0]->Eval(p)/sigmap; 
    
    if (p>fPmax-fDeltaP/2.) {
	Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetSigmap();
	Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetSigmap();
	Float_t s3 = fCurrentEntry[fNbinp-3][itheta][iphi]->GetSigmap();
	Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
	Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
	Float_t p3  = fDeltaP * (fNbinp - 3 + 0.5) + fPmin;
	Float_t p12 = p1 * p1, p22 = p2 * p2, p32 = p3 * p3;
	Float_t d = p12*p2 + p1*p32 + p22*p3 - p32*p2 - p3*p12 - p22*p1;
	Float_t a = (s1*p2 + p1*s3 + s2*p3 - s3*p2 - p3*s1 - s2*p1) / d;
	Float_t b = (p12*s2 + s1*p32 + p22*s3 - p32*s2 - s3*p12 - p22*s1)/d;
	Float_t c = (p12*p2*s3 + p1*p32*s2 + p22*p3*s1 
		     - p32*p2*s1 - p3*p12*s2 - p22*p1*s3) / d;
	Float_t sigma = a * p * p + b * p + c;
  	frac1 = sigma/sigmap;
    }
    index = iphi + fNbinphi * ip;
    fSplineEff[index][1]->GetKnot(0,xmin,ymin);
    fSplineEff[index][1]->GetKnot(9,xmax,ymax);
    if (theta>xmax) theta = xmax;
    Float_t frac2 = fSplineSigmap[index][1]->Eval(theta)/sigmap; 
    index = itheta + fNbintheta * ip;
    fSplineEff[index][2]->GetKnot(0,xmin,ymin);
    fSplineEff[index][2]->GetKnot(9,xmax,ymax);
    if (phi>xmax) phi = xmax;
    Float_t frac3 = fSplineSigmap[index][2]->Eval(phi)/sigmap;
    Float_t sigmatot = sigmap * frac1 * frac2 * frac3;
    if (sigmatot<0) sigmatot = sigmap;
    return sigmatot;
}

Float_t AliMUONFastTracking::Sigma1P(Float_t p,   Float_t theta, 
			    Float_t phi, Int_t charge) const
{
  //
  // gets the width correction of the prec-pgen distribution (see FitP)
  //
    Int_t ip=0, itheta=0, iphi=0;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    if (p>fPmax) {
	// linear extrapolation of sigmap for p out of range 
	Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetSigma1p();
	Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetSigma1p();
	Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
	Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
	Float_t sigma = 1./(p1-p2) * ( (s1-s2)*p + (s2-s1)*p1 + s1*(p1-p2) ); 
	return sigma;
    }
    else return fCurrentEntry[ip][itheta][iphi]->GetSigma1p();
}

Float_t AliMUONFastTracking::NormG2(Float_t p,   Float_t theta, 
				    Float_t phi, Int_t charge) const
{
  //
  // gets the relative normalization of the background
  // (gaussian) component in the prec-pgen distribution
  //
    Int_t ip=0, itheta=0, iphi=0;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    if (p>fPmax) {
	// linear extrapolation of sigmap for p out of range 
	Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetNormG2();
	Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetNormG2();
	Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
	Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
	Float_t norm = 1./(p1-p2) * ( (s1-s2)*p + (s2-s1)*p1 + s1*(p1-p2) ); 
	return norm;
    }
    else return fCurrentEntry[ip][itheta][iphi]->GetNormG2();
}

Float_t AliMUONFastTracking::MeanG2(Float_t p,   Float_t theta, 
				    Float_t phi, Int_t charge) const
{
  //
  // gets the mean value of the background
  // (gaussian) component in the prec-pgen distribution
  //
    Int_t ip=0, itheta=0, iphi=0;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    if (p>fPmax) {
	// linear extrapolation of sigmap for p out of range 
	Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetMeanG2();
	Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetMeanG2();
	Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
	Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
	Float_t norm = 1./(p1-p2) * ( (s1-s2)*p + (s2-s1)*p1 + s1*(p1-p2) ); 
	return norm;
    }
    else return fCurrentEntry[ip][itheta][iphi]->GetMeanG2();
}

Float_t AliMUONFastTracking::SigmaG2(Float_t p,   Float_t theta, 
				     Float_t phi, Int_t charge) const
{
  //
  // gets the width of the background
  // (gaussian) component in the prec-pgen distribution
  //
    Int_t ip=0, itheta=0, iphi=0;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    if (p>fPmax) {
	// linear extrapolation of sigmap for p out of range 
	Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetSigmaG2();
	Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetSigmaG2();
	Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
	Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
	Float_t sigma = 1./(p1-p2) * ( (s1-s2)*p + (s2-s1)*p1 + s1*(p1-p2) ); 
	return sigma;
    }
    else return fCurrentEntry[ip][itheta][iphi]->GetSigmaG2();
}


Float_t AliMUONFastTracking::MeanTheta(Float_t p,   Float_t theta, 
				       Float_t phi, Int_t charge) const
{
  //
  // gets the mean value of the thetarec-thetagen distribution
  //
    Int_t ip=0, itheta=0, iphi=0;
    GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
    return fCurrentEntry[ip][itheta][iphi]->GetMeantheta();
}

Float_t AliMUONFastTracking::SigmaTheta(Float_t p,   Float_t theta,  
			    Float_t phi, Int_t charge) const
{
  //
  // gets the width of the thetarec-thetagen distribution
  //
  Int_t ip=0, itheta=0, iphi=0;
  Int_t index;
  GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
  // central value and corrections with spline 
  Float_t sigmatheta = fCurrentEntry[ip][itheta][iphi]->GetSigmatheta();
  if (!fSpline) return sigmatheta;
  // corrections vs p, theta, phi 
  index = iphi + fNbinphi * itheta;
  Double_t xmin,ymin,xmax,ymax;
  Float_t frac1 = fSplineSigmatheta[index][0]->Eval(p)/sigmatheta; 
  if (p>fPmax-fDeltaP/2.) {
    // linear extrapolation of sigmap for p out of range 
    Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetSigmatheta();
    Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetSigmatheta();
    Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
    Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
    Float_t sigma = 1./(p1-p2) * ( (s1-s2)*p + (s2-s1)*p1 + s1*(p1-p2) ); 
    frac1=sigma/sigmatheta;
  }
  index = iphi + fNbinphi * ip;
  fSplineEff[index][1]->GetKnot(0,xmin,ymin);
  fSplineEff[index][1]->GetKnot(9,xmax,ymax);
  if (theta>xmax) theta = xmax;
  Float_t frac2 = fSplineSigmatheta[index][1]->Eval(theta)/sigmatheta; 
  index = itheta + fNbintheta * ip;
  fSplineEff[index][2]->GetKnot(0,xmin,ymin);
  fSplineEff[index][2]->GetKnot(9,xmax,ymax);
  if (phi>xmax) phi = xmax;
  Float_t frac3 = fSplineSigmatheta[index][2]->Eval(phi)/sigmatheta;
  return sigmatheta * frac1 * frac2 * frac3;
}


Float_t AliMUONFastTracking::MeanPhi(Float_t p,   Float_t theta, 
			    Float_t phi, Int_t charge) const
{
  //
  // gets the mean value of the phirec-phigen distribution
  //
  Int_t ip=0, itheta=0, iphi=0;
  GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
  return fCurrentEntry[ip][itheta][iphi]->GetMeanphi();
}

Float_t AliMUONFastTracking::SigmaPhi(Float_t p,   Float_t theta, 
			    Float_t phi, Int_t charge){
  //
  // gets the width of the phirec-phigen distribution
  //
  Int_t ip=0, itheta=0, iphi=0;
  Int_t index;
  GetIpIthetaIphi(p,theta,phi,charge,ip,itheta,iphi);
  // central value and corrections with spline 
  Float_t sigmaphi = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
  if (!fSpline) return sigmaphi;
  // corrections vs p, theta, phi 
  index = iphi + fNbinphi * itheta;
  Float_t frac1 = fSplineSigmaphi[index][0]->Eval(p)/sigmaphi; 
  Double_t xmin,ymin,xmax,ymax;
  if (p>fPmax-fDeltaP/2.) {
    Float_t s1 = fCurrentEntry[fNbinp-1][itheta][iphi]->GetSigmaphi();
    Float_t s2 = fCurrentEntry[fNbinp-2][itheta][iphi]->GetSigmaphi();
    Float_t p1  = fDeltaP * (fNbinp - 1 + 0.5) + fPmin;
    Float_t p2  = fDeltaP * (fNbinp - 2 + 0.5) + fPmin;
    Float_t sigma = 1./(p1-p2) * ( (s1-s2)*p + (s2-s1)*p1 + s1*(p1-p2) ); 
    frac1 = sigma/sigmaphi;
  }
  
  index = iphi + fNbinphi * ip;
  fSplineEff[index][1]->GetKnot(0,xmin,ymin);
  fSplineEff[index][1]->GetKnot(9,xmax,ymax);
  if (theta>xmax) theta = xmax;
  Float_t frac2 = fSplineSigmaphi[index][1]->Eval(theta)/sigmaphi; 
  index = itheta + fNbintheta * ip;
  fSplineEff[index][2]->GetKnot(0,xmin,ymin);
  fSplineEff[index][2]->GetKnot(9,xmax,ymax);
  if (phi>xmax) phi = xmax;
  Float_t frac3 = fSplineSigmaphi[index][2]->Eval(phi)/sigmaphi;
  return sigmaphi * frac1 * frac2 * frac3;
}

void AliMUONFastTracking::SetSpline(){
  //
  // sets the spline functions for a smooth behaviour of the parameters
  // when going from one cell to another
  //
  printf ("Setting spline functions...");
  char splname[40];
  Double_t x[20][3];
  Double_t x2[50][3];
  Int_t nbins[3] = {fNbinp, fNbintheta, fNbinphi};
  Double_t xspl[20],yeff[50],ysigmap[20],ysigma1p[20];
  Double_t yacc[50], ysigmatheta[20],ysigmaphi[20];
  Double_t xsp2[50];
  // let's calculate the x axis for p, theta, phi
  
  Int_t i, ispline, ivar;
  for (i=0; i< fNbinp; i++) x[i][0] = fPmin + fDeltaP * (i + 0.5);
  for (i=0; i< fNbintheta; i++) x[i][1] = fThetamin + fDeltaTheta * (i + 0.5);
  for (i=0; i< fNbinphi; i++) x[i][2] = fPhimin + fDeltaPhi * (i + 0.5);
  
  for (i=0; i< 5 * fNbinp; i++) x2[i][0] = fPmin + fDeltaP * (i + 0.5)/5.;
  for (i=0; i< 5 * fNbintheta; i++) x2[i][1] = fThetamin + fDeltaTheta * (i + 0.5)/5.;
  for (i=0; i< 5 * fNbinphi; i++) x2[i][2] = fPhimin + fDeltaPhi * (i + 0.5)/5.;
  
  // splines in p
  ivar = 0; 
  for (i=0; i<nbins[ivar]; i++) xspl[i] = x[i][ivar];
  for (i=0; i<5 * nbins[ivar]; i++) xsp2[i] = x2[i][ivar];
  ispline=0;
  for (Int_t itheta=0; itheta< fNbintheta; itheta++){
    for (Int_t iphi=0; iphi< fNbinphi; iphi++){
      for (Int_t ip=0; ip<fNbinp; ip++) {
	ysigmap[ip]     = fCurrentEntry[ip][itheta][iphi]->GetSigmap();
	ysigma1p[ip]    = fCurrentEntry[ip][itheta][iphi]->GetSigma1p();
	ysigmatheta[ip] = fCurrentEntry[ip][itheta][iphi]->GetSigmatheta();
	ysigmaphi[ip]   = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
      }
      if (fPrintLevel>3) cout << " creating new spline " << splname << endl;
      snprintf (splname, 40, "fSplineEff[%d][%d]",ispline,ivar);
      fSplineEff[ispline][ivar] = new TSpline3(splname,xsp2,yeff,5 * nbins[ivar]);
      snprintf (splname, 40, "fSplineAcc[%d][%d]",ispline,ivar);
      fSplineAcc[ispline][ivar] = new TSpline3(splname,xsp2,yacc,5 * nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmap[%d][%d]",ispline,ivar);
      fSplineSigmap[ispline][ivar] = new TSpline3(splname,xspl,ysigmap,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigma1p[%d][%d]",ispline,ivar);
      fSplineSigma1p[ispline][ivar] = new TSpline3(splname,xspl,ysigma1p,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmatheta[%d][%d]",ispline,ivar);
      fSplineSigmatheta[ispline][ivar] = new TSpline3(splname,xspl,ysigmatheta,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmaphi[%d][%d]",ispline,ivar);
      fSplineSigmaphi[ispline][ivar] = new TSpline3(splname,xspl,ysigmaphi,nbins[ivar]);
      ispline++;
    }
  }

  ivar = 1; 
  for (i=0; i<nbins[ivar]; i++) xspl[i] = x[i][ivar];
  ispline=0;
  for (Int_t ip=0; ip<fNbinp; ip++) {
    for (Int_t iphi=0; iphi< fNbinphi; iphi++){
      for (Int_t itheta=0; itheta< fNbintheta; itheta++){
	// for efficiency and acceptance let's take the central value
	ysigmap[itheta]     = fCurrentEntry[ip][itheta][iphi]->GetSigmap();
	ysigma1p[itheta]    = fCurrentEntry[ip][itheta][iphi]->GetSigma1p();
	ysigmatheta[itheta] = fCurrentEntry[ip][itheta][iphi]->GetSigmatheta();
	ysigmaphi[itheta]   = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
      }
      if (fPrintLevel>3) cout << " creating new spline " << splname << endl;
      snprintf (splname, 40, "fSplineEff[%d][%d]",ispline,ivar);
      fSplineEff[ispline][ivar] = new TSpline3(splname,xspl,yeff, nbins[ivar]);
      snprintf (splname, 40, "fSplineAcc[%d][%d]",ispline,ivar);
      fSplineAcc[ispline][ivar] = new TSpline3(splname,xspl,yacc, nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmap[%d][%d]",ispline,ivar);
      fSplineSigmap[ispline][ivar] = new TSpline3(splname,xspl,ysigmap,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigma1p[%d][%d]",ispline,ivar);
      fSplineSigma1p[ispline][ivar] = new TSpline3(splname,xspl,ysigma1p,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmatheta[%d][%d]",ispline,ivar);
      fSplineSigmatheta[ispline][ivar] = new TSpline3(splname,xspl,ysigmatheta,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmaphi[%d][%d]",ispline,ivar);
      fSplineSigmaphi[ispline][ivar] = new TSpline3(splname,xspl,ysigmaphi,nbins[ivar]);
      ispline++;
    }
  }

  ivar = 2; 
  for (i=0; i<nbins[ivar]; i++) xspl[i] = x[i][ivar];
  ispline=0;
  for (Int_t ip=0; ip<fNbinp; ip++) {
    for (Int_t itheta=0; itheta< fNbintheta; itheta++){
      for (Int_t iphi=0; iphi< fNbinphi; iphi++){
	// for efficiency and acceptance let's take the central value
	ysigmap[iphi]     = fCurrentEntry[ip][itheta][iphi]->GetSigmap();
	ysigma1p[iphi]    = fCurrentEntry[ip][itheta][iphi]->GetSigma1p();
	ysigmatheta[iphi] = fCurrentEntry[ip][itheta][iphi]->GetSigmatheta();
	ysigmaphi[iphi]   = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
      }
      if (fPrintLevel>3) cout << " creating new spline " << splname << endl;
      snprintf (splname, 40, "fSplineEff[%d][%d]",ispline,ivar);
      fSplineEff[ispline][ivar] = new TSpline3(splname,xspl,yeff, nbins[ivar]);
      snprintf (splname, 40, "fSplineAcc[%d][%d]",ispline,ivar);
      fSplineAcc[ispline][ivar] = new TSpline3(splname,xspl,yacc, nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmap[%d][%d]",ispline,ivar);
      fSplineSigmap[ispline][ivar] = new TSpline3(splname,xspl,ysigmap,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigma1p[%d][%d]",ispline,ivar);
      fSplineSigma1p[ispline][ivar] = new TSpline3(splname,xspl,ysigma1p,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmatheta[%d][%d]",ispline,ivar);
      fSplineSigmatheta[ispline][ivar] = new TSpline3(splname,xspl,ysigmatheta,nbins[ivar]);
      snprintf (splname, 40, "fSplineSigmaphi[%d][%d]",ispline,ivar);
      fSplineSigmaphi[ispline][ivar] = new TSpline3(splname,xspl,ysigmaphi,nbins[ivar]);
      ispline++;
    }
  }
  printf ("...done\n");
}
  
void AliMUONFastTracking::SetBackground(Float_t bkg){
  //
  // linear interpolation of the parameters in the LUT between 2 values where
  // the background has been actually calculated
  //
  if (bkg>2) printf ("WARNING: unsafe extrapolation!\n");
  fBkg = bkg;

  Float_t bkgLevel[4] = {0, 0.5, 1, 2}; // bkg values for which LUT is calculated
  Int_t ibkg;
  for (ibkg=0; ibkg<4; ibkg++) if ( bkg < bkgLevel[ibkg]) break;
  if (ibkg == 4) ibkg--;
  if (ibkg == 0) ibkg++;
  
  Float_t x0 = bkgLevel[ibkg-1];
  Float_t x1 = bkgLevel[ibkg];
  Float_t x = (bkg - x0) / (x1 - x0); 
  
  Float_t y0, y1;

  for (Int_t ip=0; ip< fNbinp; ip++){
    for (Int_t itheta=0; itheta< fNbintheta; itheta++){
      for (Int_t iphi=0; iphi< fNbinphi; iphi++){
	fCurrentEntry[ip][itheta][iphi]->SetP(fEntry[ip][itheta][iphi][ibkg]->GetP());
	fCurrentEntry[ip][itheta][iphi]->SetTheta(fEntry[ip][itheta][iphi][ibkg]->GetTheta());
	fCurrentEntry[ip][itheta][iphi]->SetPhi(fEntry[ip][itheta][iphi][ibkg]->GetPhi());
	fCurrentEntry[ip][itheta][iphi]->SetChi2p(-1);
	fCurrentEntry[ip][itheta][iphi]->SetChi2theta(-1);
	fCurrentEntry[ip][itheta][iphi]->SetChi2phi(-1);

	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetMeanp();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetMeanp();
	fCurrentEntry[ip][itheta][iphi]      ->SetMeanp((y1 - y0) * x + y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetMeantheta();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetMeantheta();
	fCurrentEntry[ip][itheta][iphi]      ->SetMeantheta((y1 - y0) * x +y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetMeanphi();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetMeanphi();
	fCurrentEntry[ip][itheta][iphi]      ->SetMeanphi((y1 - y0) * x + y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetSigmap();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetSigmap();
	fCurrentEntry[ip][itheta][iphi]      ->SetSigmap((y1 - y0) * x + y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetSigmatheta();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetSigmatheta();
	fCurrentEntry[ip][itheta][iphi]      ->SetSigmatheta((y1 - y0) * x+y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetSigmaphi();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetSigmaphi();
	fCurrentEntry[ip][itheta][iphi]      ->SetSigmaphi((y1 - y0) * x + y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetSigma1p();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetSigma1p();
	fCurrentEntry[ip][itheta][iphi]      ->SetSigma1p((y1 - y0) * x + y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetNormG2();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetNormG2();
	fCurrentEntry[ip][itheta][iphi]      ->SetNormG2((y1 - y0) * x + y0);
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetMeanG2();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetMeanG2();
	fCurrentEntry[ip][itheta][iphi]      ->SetMeanG2((y1 - y0) * x + y0);
	
	y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetSigmaG2();
	y1 =   fEntry[ip][itheta][iphi][ibkg]->GetSigmaG2();
	fCurrentEntry[ip][itheta][iphi]      ->SetSigmaG2((y1 - y0) * x + y0);
	for (Int_t i=0; i<kSplitP; i++) {
	  for (Int_t j=0; j<kSplitTheta; j++) {
	    fCurrentEntry[ip][itheta][iphi]->SetAcc(i,j,fEntry[ip][itheta][iphi][ibkg]->GetAcc(i,j));
	    y0 = fEntry[ip][itheta][iphi][ibkg-1]->GetEff(i,j);
	    y1 =   fEntry[ip][itheta][iphi][ibkg]->GetEff(i,j);
	    fCurrentEntry[ip][itheta][iphi]->SetEff(i,j, (y1 - y0) * x + y0);
	  }
	}
      }
    }
  }
  SetSpline();
}

TF1* AliMUONFastTracking::GetFitP(Int_t ip,Int_t itheta,Int_t iphi) { 
  // gets the correct prec-pgen distribution for a given LUT cell 
  if (!fFitp[ip][itheta][iphi]) {
    char name[256];
    snprintf(name, 256, "fit_%d_%d_%d", ip, itheta, iphi);
    fFitp[ip][itheta][iphi] = new TF1(name ,FitP,-20.,20.,6);
    fFitp[ip][itheta][iphi]->SetNpx(500);    
    fFitp[ip][itheta][iphi]->SetParameters(0.,0.,0.,0.,0.,0.);    
  }
  return fFitp[ip][itheta][iphi]; 
}

AliMUONFastTracking& AliMUONFastTracking::operator=(const  AliMUONFastTracking& rhs)
{
// Assignment operator
    rhs.Copy(*this);
    return *this;
}

void AliMUONFastTracking::Copy(TObject&) const
{
    //
    // Copy 
    //
    Fatal("Copy","Not implemented!\n");
}








 AliMUONFastTracking.cxx:1
 AliMUONFastTracking.cxx:2
 AliMUONFastTracking.cxx:3
 AliMUONFastTracking.cxx:4
 AliMUONFastTracking.cxx:5
 AliMUONFastTracking.cxx:6
 AliMUONFastTracking.cxx:7
 AliMUONFastTracking.cxx:8
 AliMUONFastTracking.cxx:9
 AliMUONFastTracking.cxx:10
 AliMUONFastTracking.cxx:11
 AliMUONFastTracking.cxx:12
 AliMUONFastTracking.cxx:13
 AliMUONFastTracking.cxx:14
 AliMUONFastTracking.cxx:15
 AliMUONFastTracking.cxx:16
 AliMUONFastTracking.cxx:17
 AliMUONFastTracking.cxx:18
 AliMUONFastTracking.cxx:19
 AliMUONFastTracking.cxx:20
 AliMUONFastTracking.cxx:21
 AliMUONFastTracking.cxx:22
 AliMUONFastTracking.cxx:23
 AliMUONFastTracking.cxx:24
 AliMUONFastTracking.cxx:25
 AliMUONFastTracking.cxx:26
 AliMUONFastTracking.cxx:27
 AliMUONFastTracking.cxx:28
 AliMUONFastTracking.cxx:29
 AliMUONFastTracking.cxx:30
 AliMUONFastTracking.cxx:31
 AliMUONFastTracking.cxx:32
 AliMUONFastTracking.cxx:33
 AliMUONFastTracking.cxx:34
 AliMUONFastTracking.cxx:35
 AliMUONFastTracking.cxx:36
 AliMUONFastTracking.cxx:37
 AliMUONFastTracking.cxx:38
 AliMUONFastTracking.cxx:39
 AliMUONFastTracking.cxx:40
 AliMUONFastTracking.cxx:41
 AliMUONFastTracking.cxx:42
 AliMUONFastTracking.cxx:43
 AliMUONFastTracking.cxx:44
 AliMUONFastTracking.cxx:45
 AliMUONFastTracking.cxx:46
 AliMUONFastTracking.cxx:47
 AliMUONFastTracking.cxx:48
 AliMUONFastTracking.cxx:49
 AliMUONFastTracking.cxx:50
 AliMUONFastTracking.cxx:51
 AliMUONFastTracking.cxx:52
 AliMUONFastTracking.cxx:53
 AliMUONFastTracking.cxx:54
 AliMUONFastTracking.cxx:55
 AliMUONFastTracking.cxx:56
 AliMUONFastTracking.cxx:57
 AliMUONFastTracking.cxx:58
 AliMUONFastTracking.cxx:59
 AliMUONFastTracking.cxx:60
 AliMUONFastTracking.cxx:61
 AliMUONFastTracking.cxx:62
 AliMUONFastTracking.cxx:63
 AliMUONFastTracking.cxx:64
 AliMUONFastTracking.cxx:65
 AliMUONFastTracking.cxx:66
 AliMUONFastTracking.cxx:67
 AliMUONFastTracking.cxx:68
 AliMUONFastTracking.cxx:69
 AliMUONFastTracking.cxx:70
 AliMUONFastTracking.cxx:71
 AliMUONFastTracking.cxx:72
 AliMUONFastTracking.cxx:73
 AliMUONFastTracking.cxx:74
 AliMUONFastTracking.cxx:75
 AliMUONFastTracking.cxx:76
 AliMUONFastTracking.cxx:77
 AliMUONFastTracking.cxx:78
 AliMUONFastTracking.cxx:79
 AliMUONFastTracking.cxx:80
 AliMUONFastTracking.cxx:81
 AliMUONFastTracking.cxx:82
 AliMUONFastTracking.cxx:83
 AliMUONFastTracking.cxx:84
 AliMUONFastTracking.cxx:85
 AliMUONFastTracking.cxx:86
 AliMUONFastTracking.cxx:87
 AliMUONFastTracking.cxx:88
 AliMUONFastTracking.cxx:89
 AliMUONFastTracking.cxx:90
 AliMUONFastTracking.cxx:91
 AliMUONFastTracking.cxx:92
 AliMUONFastTracking.cxx:93
 AliMUONFastTracking.cxx:94
 AliMUONFastTracking.cxx:95
 AliMUONFastTracking.cxx:96
 AliMUONFastTracking.cxx:97
 AliMUONFastTracking.cxx:98
 AliMUONFastTracking.cxx:99
 AliMUONFastTracking.cxx:100
 AliMUONFastTracking.cxx:101
 AliMUONFastTracking.cxx:102
 AliMUONFastTracking.cxx:103
 AliMUONFastTracking.cxx:104
 AliMUONFastTracking.cxx:105
 AliMUONFastTracking.cxx:106
 AliMUONFastTracking.cxx:107
 AliMUONFastTracking.cxx:108
 AliMUONFastTracking.cxx:109
 AliMUONFastTracking.cxx:110
 AliMUONFastTracking.cxx:111
 AliMUONFastTracking.cxx:112
 AliMUONFastTracking.cxx:113
 AliMUONFastTracking.cxx:114
 AliMUONFastTracking.cxx:115
 AliMUONFastTracking.cxx:116
 AliMUONFastTracking.cxx:117
 AliMUONFastTracking.cxx:118
 AliMUONFastTracking.cxx:119
 AliMUONFastTracking.cxx:120
 AliMUONFastTracking.cxx:121
 AliMUONFastTracking.cxx:122
 AliMUONFastTracking.cxx:123
 AliMUONFastTracking.cxx:124
 AliMUONFastTracking.cxx:125
 AliMUONFastTracking.cxx:126
 AliMUONFastTracking.cxx:127
 AliMUONFastTracking.cxx:128
 AliMUONFastTracking.cxx:129
 AliMUONFastTracking.cxx:130
 AliMUONFastTracking.cxx:131
 AliMUONFastTracking.cxx:132
 AliMUONFastTracking.cxx:133
 AliMUONFastTracking.cxx:134
 AliMUONFastTracking.cxx:135
 AliMUONFastTracking.cxx:136
 AliMUONFastTracking.cxx:137
 AliMUONFastTracking.cxx:138
 AliMUONFastTracking.cxx:139
 AliMUONFastTracking.cxx:140
 AliMUONFastTracking.cxx:141
 AliMUONFastTracking.cxx:142
 AliMUONFastTracking.cxx:143
 AliMUONFastTracking.cxx:144
 AliMUONFastTracking.cxx:145
 AliMUONFastTracking.cxx:146
 AliMUONFastTracking.cxx:147
 AliMUONFastTracking.cxx:148
 AliMUONFastTracking.cxx:149
 AliMUONFastTracking.cxx:150
 AliMUONFastTracking.cxx:151
 AliMUONFastTracking.cxx:152
 AliMUONFastTracking.cxx:153
 AliMUONFastTracking.cxx:154
 AliMUONFastTracking.cxx:155
 AliMUONFastTracking.cxx:156
 AliMUONFastTracking.cxx:157
 AliMUONFastTracking.cxx:158
 AliMUONFastTracking.cxx:159
 AliMUONFastTracking.cxx:160
 AliMUONFastTracking.cxx:161
 AliMUONFastTracking.cxx:162
 AliMUONFastTracking.cxx:163
 AliMUONFastTracking.cxx:164
 AliMUONFastTracking.cxx:165
 AliMUONFastTracking.cxx:166
 AliMUONFastTracking.cxx:167
 AliMUONFastTracking.cxx:168
 AliMUONFastTracking.cxx:169
 AliMUONFastTracking.cxx:170
 AliMUONFastTracking.cxx:171
 AliMUONFastTracking.cxx:172
 AliMUONFastTracking.cxx:173
 AliMUONFastTracking.cxx:174
 AliMUONFastTracking.cxx:175
 AliMUONFastTracking.cxx:176
 AliMUONFastTracking.cxx:177
 AliMUONFastTracking.cxx:178
 AliMUONFastTracking.cxx:179
 AliMUONFastTracking.cxx:180
 AliMUONFastTracking.cxx:181
 AliMUONFastTracking.cxx:182
 AliMUONFastTracking.cxx:183
 AliMUONFastTracking.cxx:184
 AliMUONFastTracking.cxx:185
 AliMUONFastTracking.cxx:186
 AliMUONFastTracking.cxx:187
 AliMUONFastTracking.cxx:188
 AliMUONFastTracking.cxx:189
 AliMUONFastTracking.cxx:190
 AliMUONFastTracking.cxx:191
 AliMUONFastTracking.cxx:192
 AliMUONFastTracking.cxx:193
 AliMUONFastTracking.cxx:194
 AliMUONFastTracking.cxx:195
 AliMUONFastTracking.cxx:196
 AliMUONFastTracking.cxx:197
 AliMUONFastTracking.cxx:198
 AliMUONFastTracking.cxx:199
 AliMUONFastTracking.cxx:200
 AliMUONFastTracking.cxx:201
 AliMUONFastTracking.cxx:202
 AliMUONFastTracking.cxx:203
 AliMUONFastTracking.cxx:204
 AliMUONFastTracking.cxx:205
 AliMUONFastTracking.cxx:206
 AliMUONFastTracking.cxx:207
 AliMUONFastTracking.cxx:208
 AliMUONFastTracking.cxx:209
 AliMUONFastTracking.cxx:210
 AliMUONFastTracking.cxx:211
 AliMUONFastTracking.cxx:212
 AliMUONFastTracking.cxx:213
 AliMUONFastTracking.cxx:214
 AliMUONFastTracking.cxx:215
 AliMUONFastTracking.cxx:216
 AliMUONFastTracking.cxx:217
 AliMUONFastTracking.cxx:218
 AliMUONFastTracking.cxx:219
 AliMUONFastTracking.cxx:220
 AliMUONFastTracking.cxx:221
 AliMUONFastTracking.cxx:222
 AliMUONFastTracking.cxx:223
 AliMUONFastTracking.cxx:224
 AliMUONFastTracking.cxx:225
 AliMUONFastTracking.cxx:226
 AliMUONFastTracking.cxx:227
 AliMUONFastTracking.cxx:228
 AliMUONFastTracking.cxx:229
 AliMUONFastTracking.cxx:230
 AliMUONFastTracking.cxx:231
 AliMUONFastTracking.cxx:232
 AliMUONFastTracking.cxx:233
 AliMUONFastTracking.cxx:234
 AliMUONFastTracking.cxx:235
 AliMUONFastTracking.cxx:236
 AliMUONFastTracking.cxx:237
 AliMUONFastTracking.cxx:238
 AliMUONFastTracking.cxx:239
 AliMUONFastTracking.cxx:240
 AliMUONFastTracking.cxx:241
 AliMUONFastTracking.cxx:242
 AliMUONFastTracking.cxx:243
 AliMUONFastTracking.cxx:244
 AliMUONFastTracking.cxx:245
 AliMUONFastTracking.cxx:246
 AliMUONFastTracking.cxx:247
 AliMUONFastTracking.cxx:248
 AliMUONFastTracking.cxx:249
 AliMUONFastTracking.cxx:250
 AliMUONFastTracking.cxx:251
 AliMUONFastTracking.cxx:252
 AliMUONFastTracking.cxx:253
 AliMUONFastTracking.cxx:254
 AliMUONFastTracking.cxx:255
 AliMUONFastTracking.cxx:256
 AliMUONFastTracking.cxx:257
 AliMUONFastTracking.cxx:258
 AliMUONFastTracking.cxx:259
 AliMUONFastTracking.cxx:260
 AliMUONFastTracking.cxx:261
 AliMUONFastTracking.cxx:262
 AliMUONFastTracking.cxx:263
 AliMUONFastTracking.cxx:264
 AliMUONFastTracking.cxx:265
 AliMUONFastTracking.cxx:266
 AliMUONFastTracking.cxx:267
 AliMUONFastTracking.cxx:268
 AliMUONFastTracking.cxx:269
 AliMUONFastTracking.cxx:270
 AliMUONFastTracking.cxx:271
 AliMUONFastTracking.cxx:272
 AliMUONFastTracking.cxx:273
 AliMUONFastTracking.cxx:274
 AliMUONFastTracking.cxx:275
 AliMUONFastTracking.cxx:276
 AliMUONFastTracking.cxx:277
 AliMUONFastTracking.cxx:278
 AliMUONFastTracking.cxx:279
 AliMUONFastTracking.cxx:280
 AliMUONFastTracking.cxx:281
 AliMUONFastTracking.cxx:282
 AliMUONFastTracking.cxx:283
 AliMUONFastTracking.cxx:284
 AliMUONFastTracking.cxx:285
 AliMUONFastTracking.cxx:286
 AliMUONFastTracking.cxx:287
 AliMUONFastTracking.cxx:288
 AliMUONFastTracking.cxx:289
 AliMUONFastTracking.cxx:290
 AliMUONFastTracking.cxx:291
 AliMUONFastTracking.cxx:292
 AliMUONFastTracking.cxx:293
 AliMUONFastTracking.cxx:294
 AliMUONFastTracking.cxx:295
 AliMUONFastTracking.cxx:296
 AliMUONFastTracking.cxx:297
 AliMUONFastTracking.cxx:298
 AliMUONFastTracking.cxx:299
 AliMUONFastTracking.cxx:300
 AliMUONFastTracking.cxx:301
 AliMUONFastTracking.cxx:302
 AliMUONFastTracking.cxx:303
 AliMUONFastTracking.cxx:304
 AliMUONFastTracking.cxx:305
 AliMUONFastTracking.cxx:306
 AliMUONFastTracking.cxx:307
 AliMUONFastTracking.cxx:308
 AliMUONFastTracking.cxx:309
 AliMUONFastTracking.cxx:310
 AliMUONFastTracking.cxx:311
 AliMUONFastTracking.cxx:312
 AliMUONFastTracking.cxx:313
 AliMUONFastTracking.cxx:314
 AliMUONFastTracking.cxx:315
 AliMUONFastTracking.cxx:316
 AliMUONFastTracking.cxx:317
 AliMUONFastTracking.cxx:318
 AliMUONFastTracking.cxx:319
 AliMUONFastTracking.cxx:320
 AliMUONFastTracking.cxx:321
 AliMUONFastTracking.cxx:322
 AliMUONFastTracking.cxx:323
 AliMUONFastTracking.cxx:324
 AliMUONFastTracking.cxx:325
 AliMUONFastTracking.cxx:326
 AliMUONFastTracking.cxx:327
 AliMUONFastTracking.cxx:328
 AliMUONFastTracking.cxx:329
 AliMUONFastTracking.cxx:330
 AliMUONFastTracking.cxx:331
 AliMUONFastTracking.cxx:332
 AliMUONFastTracking.cxx:333
 AliMUONFastTracking.cxx:334
 AliMUONFastTracking.cxx:335
 AliMUONFastTracking.cxx:336
 AliMUONFastTracking.cxx:337
 AliMUONFastTracking.cxx:338
 AliMUONFastTracking.cxx:339
 AliMUONFastTracking.cxx:340
 AliMUONFastTracking.cxx:341
 AliMUONFastTracking.cxx:342
 AliMUONFastTracking.cxx:343
 AliMUONFastTracking.cxx:344
 AliMUONFastTracking.cxx:345
 AliMUONFastTracking.cxx:346
 AliMUONFastTracking.cxx:347
 AliMUONFastTracking.cxx:348
 AliMUONFastTracking.cxx:349
 AliMUONFastTracking.cxx:350
 AliMUONFastTracking.cxx:351
 AliMUONFastTracking.cxx:352
 AliMUONFastTracking.cxx:353
 AliMUONFastTracking.cxx:354
 AliMUONFastTracking.cxx:355
 AliMUONFastTracking.cxx:356
 AliMUONFastTracking.cxx:357
 AliMUONFastTracking.cxx:358
 AliMUONFastTracking.cxx:359
 AliMUONFastTracking.cxx:360
 AliMUONFastTracking.cxx:361
 AliMUONFastTracking.cxx:362
 AliMUONFastTracking.cxx:363
 AliMUONFastTracking.cxx:364
 AliMUONFastTracking.cxx:365
 AliMUONFastTracking.cxx:366
 AliMUONFastTracking.cxx:367
 AliMUONFastTracking.cxx:368
 AliMUONFastTracking.cxx:369
 AliMUONFastTracking.cxx:370
 AliMUONFastTracking.cxx:371
 AliMUONFastTracking.cxx:372
 AliMUONFastTracking.cxx:373
 AliMUONFastTracking.cxx:374
 AliMUONFastTracking.cxx:375
 AliMUONFastTracking.cxx:376
 AliMUONFastTracking.cxx:377
 AliMUONFastTracking.cxx:378
 AliMUONFastTracking.cxx:379
 AliMUONFastTracking.cxx:380
 AliMUONFastTracking.cxx:381
 AliMUONFastTracking.cxx:382
 AliMUONFastTracking.cxx:383
 AliMUONFastTracking.cxx:384
 AliMUONFastTracking.cxx:385
 AliMUONFastTracking.cxx:386
 AliMUONFastTracking.cxx:387
 AliMUONFastTracking.cxx:388
 AliMUONFastTracking.cxx:389
 AliMUONFastTracking.cxx:390
 AliMUONFastTracking.cxx:391
 AliMUONFastTracking.cxx:392
 AliMUONFastTracking.cxx:393
 AliMUONFastTracking.cxx:394
 AliMUONFastTracking.cxx:395
 AliMUONFastTracking.cxx:396
 AliMUONFastTracking.cxx:397
 AliMUONFastTracking.cxx:398
 AliMUONFastTracking.cxx:399
 AliMUONFastTracking.cxx:400
 AliMUONFastTracking.cxx:401
 AliMUONFastTracking.cxx:402
 AliMUONFastTracking.cxx:403
 AliMUONFastTracking.cxx:404
 AliMUONFastTracking.cxx:405
 AliMUONFastTracking.cxx:406
 AliMUONFastTracking.cxx:407
 AliMUONFastTracking.cxx:408
 AliMUONFastTracking.cxx:409
 AliMUONFastTracking.cxx:410
 AliMUONFastTracking.cxx:411
 AliMUONFastTracking.cxx:412
 AliMUONFastTracking.cxx:413
 AliMUONFastTracking.cxx:414
 AliMUONFastTracking.cxx:415
 AliMUONFastTracking.cxx:416
 AliMUONFastTracking.cxx:417
 AliMUONFastTracking.cxx:418
 AliMUONFastTracking.cxx:419
 AliMUONFastTracking.cxx:420
 AliMUONFastTracking.cxx:421
 AliMUONFastTracking.cxx:422
 AliMUONFastTracking.cxx:423
 AliMUONFastTracking.cxx:424
 AliMUONFastTracking.cxx:425
 AliMUONFastTracking.cxx:426
 AliMUONFastTracking.cxx:427
 AliMUONFastTracking.cxx:428
 AliMUONFastTracking.cxx:429
 AliMUONFastTracking.cxx:430
 AliMUONFastTracking.cxx:431
 AliMUONFastTracking.cxx:432
 AliMUONFastTracking.cxx:433
 AliMUONFastTracking.cxx:434
 AliMUONFastTracking.cxx:435
 AliMUONFastTracking.cxx:436
 AliMUONFastTracking.cxx:437
 AliMUONFastTracking.cxx:438
 AliMUONFastTracking.cxx:439
 AliMUONFastTracking.cxx:440
 AliMUONFastTracking.cxx:441
 AliMUONFastTracking.cxx:442
 AliMUONFastTracking.cxx:443
 AliMUONFastTracking.cxx:444
 AliMUONFastTracking.cxx:445
 AliMUONFastTracking.cxx:446
 AliMUONFastTracking.cxx:447
 AliMUONFastTracking.cxx:448
 AliMUONFastTracking.cxx:449
 AliMUONFastTracking.cxx:450
 AliMUONFastTracking.cxx:451
 AliMUONFastTracking.cxx:452
 AliMUONFastTracking.cxx:453
 AliMUONFastTracking.cxx:454
 AliMUONFastTracking.cxx:455
 AliMUONFastTracking.cxx:456
 AliMUONFastTracking.cxx:457
 AliMUONFastTracking.cxx:458
 AliMUONFastTracking.cxx:459
 AliMUONFastTracking.cxx:460
 AliMUONFastTracking.cxx:461
 AliMUONFastTracking.cxx:462
 AliMUONFastTracking.cxx:463
 AliMUONFastTracking.cxx:464
 AliMUONFastTracking.cxx:465
 AliMUONFastTracking.cxx:466
 AliMUONFastTracking.cxx:467
 AliMUONFastTracking.cxx:468
 AliMUONFastTracking.cxx:469
 AliMUONFastTracking.cxx:470
 AliMUONFastTracking.cxx:471
 AliMUONFastTracking.cxx:472
 AliMUONFastTracking.cxx:473
 AliMUONFastTracking.cxx:474
 AliMUONFastTracking.cxx:475
 AliMUONFastTracking.cxx:476
 AliMUONFastTracking.cxx:477
 AliMUONFastTracking.cxx:478
 AliMUONFastTracking.cxx:479
 AliMUONFastTracking.cxx:480
 AliMUONFastTracking.cxx:481
 AliMUONFastTracking.cxx:482
 AliMUONFastTracking.cxx:483
 AliMUONFastTracking.cxx:484
 AliMUONFastTracking.cxx:485
 AliMUONFastTracking.cxx:486
 AliMUONFastTracking.cxx:487
 AliMUONFastTracking.cxx:488
 AliMUONFastTracking.cxx:489
 AliMUONFastTracking.cxx:490
 AliMUONFastTracking.cxx:491
 AliMUONFastTracking.cxx:492
 AliMUONFastTracking.cxx:493
 AliMUONFastTracking.cxx:494
 AliMUONFastTracking.cxx:495
 AliMUONFastTracking.cxx:496
 AliMUONFastTracking.cxx:497
 AliMUONFastTracking.cxx:498
 AliMUONFastTracking.cxx:499
 AliMUONFastTracking.cxx:500
 AliMUONFastTracking.cxx:501
 AliMUONFastTracking.cxx:502
 AliMUONFastTracking.cxx:503
 AliMUONFastTracking.cxx:504
 AliMUONFastTracking.cxx:505
 AliMUONFastTracking.cxx:506
 AliMUONFastTracking.cxx:507
 AliMUONFastTracking.cxx:508
 AliMUONFastTracking.cxx:509
 AliMUONFastTracking.cxx:510
 AliMUONFastTracking.cxx:511
 AliMUONFastTracking.cxx:512
 AliMUONFastTracking.cxx:513
 AliMUONFastTracking.cxx:514
 AliMUONFastTracking.cxx:515
 AliMUONFastTracking.cxx:516
 AliMUONFastTracking.cxx:517
 AliMUONFastTracking.cxx:518
 AliMUONFastTracking.cxx:519
 AliMUONFastTracking.cxx:520
 AliMUONFastTracking.cxx:521
 AliMUONFastTracking.cxx:522
 AliMUONFastTracking.cxx:523
 AliMUONFastTracking.cxx:524
 AliMUONFastTracking.cxx:525
 AliMUONFastTracking.cxx:526
 AliMUONFastTracking.cxx:527
 AliMUONFastTracking.cxx:528
 AliMUONFastTracking.cxx:529
 AliMUONFastTracking.cxx:530
 AliMUONFastTracking.cxx:531
 AliMUONFastTracking.cxx:532
 AliMUONFastTracking.cxx:533
 AliMUONFastTracking.cxx:534
 AliMUONFastTracking.cxx:535
 AliMUONFastTracking.cxx:536
 AliMUONFastTracking.cxx:537
 AliMUONFastTracking.cxx:538
 AliMUONFastTracking.cxx:539
 AliMUONFastTracking.cxx:540
 AliMUONFastTracking.cxx:541
 AliMUONFastTracking.cxx:542
 AliMUONFastTracking.cxx:543
 AliMUONFastTracking.cxx:544
 AliMUONFastTracking.cxx:545
 AliMUONFastTracking.cxx:546
 AliMUONFastTracking.cxx:547
 AliMUONFastTracking.cxx:548
 AliMUONFastTracking.cxx:549
 AliMUONFastTracking.cxx:550
 AliMUONFastTracking.cxx:551
 AliMUONFastTracking.cxx:552
 AliMUONFastTracking.cxx:553
 AliMUONFastTracking.cxx:554
 AliMUONFastTracking.cxx:555
 AliMUONFastTracking.cxx:556
 AliMUONFastTracking.cxx:557
 AliMUONFastTracking.cxx:558
 AliMUONFastTracking.cxx:559
 AliMUONFastTracking.cxx:560
 AliMUONFastTracking.cxx:561
 AliMUONFastTracking.cxx:562
 AliMUONFastTracking.cxx:563
 AliMUONFastTracking.cxx:564
 AliMUONFastTracking.cxx:565
 AliMUONFastTracking.cxx:566
 AliMUONFastTracking.cxx:567
 AliMUONFastTracking.cxx:568
 AliMUONFastTracking.cxx:569
 AliMUONFastTracking.cxx:570
 AliMUONFastTracking.cxx:571
 AliMUONFastTracking.cxx:572
 AliMUONFastTracking.cxx:573
 AliMUONFastTracking.cxx:574
 AliMUONFastTracking.cxx:575
 AliMUONFastTracking.cxx:576
 AliMUONFastTracking.cxx:577
 AliMUONFastTracking.cxx:578
 AliMUONFastTracking.cxx:579
 AliMUONFastTracking.cxx:580
 AliMUONFastTracking.cxx:581
 AliMUONFastTracking.cxx:582
 AliMUONFastTracking.cxx:583
 AliMUONFastTracking.cxx:584
 AliMUONFastTracking.cxx:585
 AliMUONFastTracking.cxx:586
 AliMUONFastTracking.cxx:587
 AliMUONFastTracking.cxx:588
 AliMUONFastTracking.cxx:589
 AliMUONFastTracking.cxx:590
 AliMUONFastTracking.cxx:591
 AliMUONFastTracking.cxx:592
 AliMUONFastTracking.cxx:593
 AliMUONFastTracking.cxx:594
 AliMUONFastTracking.cxx:595
 AliMUONFastTracking.cxx:596
 AliMUONFastTracking.cxx:597
 AliMUONFastTracking.cxx:598
 AliMUONFastTracking.cxx:599
 AliMUONFastTracking.cxx:600
 AliMUONFastTracking.cxx:601
 AliMUONFastTracking.cxx:602
 AliMUONFastTracking.cxx:603
 AliMUONFastTracking.cxx:604
 AliMUONFastTracking.cxx:605
 AliMUONFastTracking.cxx:606
 AliMUONFastTracking.cxx:607
 AliMUONFastTracking.cxx:608
 AliMUONFastTracking.cxx:609
 AliMUONFastTracking.cxx:610
 AliMUONFastTracking.cxx:611
 AliMUONFastTracking.cxx:612
 AliMUONFastTracking.cxx:613
 AliMUONFastTracking.cxx:614
 AliMUONFastTracking.cxx:615
 AliMUONFastTracking.cxx:616
 AliMUONFastTracking.cxx:617
 AliMUONFastTracking.cxx:618
 AliMUONFastTracking.cxx:619
 AliMUONFastTracking.cxx:620
 AliMUONFastTracking.cxx:621
 AliMUONFastTracking.cxx:622
 AliMUONFastTracking.cxx:623
 AliMUONFastTracking.cxx:624
 AliMUONFastTracking.cxx:625
 AliMUONFastTracking.cxx:626
 AliMUONFastTracking.cxx:627
 AliMUONFastTracking.cxx:628
 AliMUONFastTracking.cxx:629
 AliMUONFastTracking.cxx:630
 AliMUONFastTracking.cxx:631
 AliMUONFastTracking.cxx:632
 AliMUONFastTracking.cxx:633
 AliMUONFastTracking.cxx:634
 AliMUONFastTracking.cxx:635
 AliMUONFastTracking.cxx:636
 AliMUONFastTracking.cxx:637
 AliMUONFastTracking.cxx:638
 AliMUONFastTracking.cxx:639
 AliMUONFastTracking.cxx:640
 AliMUONFastTracking.cxx:641
 AliMUONFastTracking.cxx:642
 AliMUONFastTracking.cxx:643
 AliMUONFastTracking.cxx:644
 AliMUONFastTracking.cxx:645
 AliMUONFastTracking.cxx:646
 AliMUONFastTracking.cxx:647
 AliMUONFastTracking.cxx:648
 AliMUONFastTracking.cxx:649
 AliMUONFastTracking.cxx:650
 AliMUONFastTracking.cxx:651
 AliMUONFastTracking.cxx:652
 AliMUONFastTracking.cxx:653
 AliMUONFastTracking.cxx:654
 AliMUONFastTracking.cxx:655
 AliMUONFastTracking.cxx:656
 AliMUONFastTracking.cxx:657
 AliMUONFastTracking.cxx:658
 AliMUONFastTracking.cxx:659
 AliMUONFastTracking.cxx:660
 AliMUONFastTracking.cxx:661
 AliMUONFastTracking.cxx:662
 AliMUONFastTracking.cxx:663
 AliMUONFastTracking.cxx:664
 AliMUONFastTracking.cxx:665
 AliMUONFastTracking.cxx:666
 AliMUONFastTracking.cxx:667
 AliMUONFastTracking.cxx:668
 AliMUONFastTracking.cxx:669
 AliMUONFastTracking.cxx:670
 AliMUONFastTracking.cxx:671
 AliMUONFastTracking.cxx:672
 AliMUONFastTracking.cxx:673
 AliMUONFastTracking.cxx:674
 AliMUONFastTracking.cxx:675
 AliMUONFastTracking.cxx:676
 AliMUONFastTracking.cxx:677
 AliMUONFastTracking.cxx:678
 AliMUONFastTracking.cxx:679
 AliMUONFastTracking.cxx:680
 AliMUONFastTracking.cxx:681
 AliMUONFastTracking.cxx:682
 AliMUONFastTracking.cxx:683
 AliMUONFastTracking.cxx:684
 AliMUONFastTracking.cxx:685
 AliMUONFastTracking.cxx:686
 AliMUONFastTracking.cxx:687
 AliMUONFastTracking.cxx:688
 AliMUONFastTracking.cxx:689
 AliMUONFastTracking.cxx:690
 AliMUONFastTracking.cxx:691
 AliMUONFastTracking.cxx:692
 AliMUONFastTracking.cxx:693
 AliMUONFastTracking.cxx:694
 AliMUONFastTracking.cxx:695
 AliMUONFastTracking.cxx:696
 AliMUONFastTracking.cxx:697
 AliMUONFastTracking.cxx:698
 AliMUONFastTracking.cxx:699
 AliMUONFastTracking.cxx:700
 AliMUONFastTracking.cxx:701
 AliMUONFastTracking.cxx:702
 AliMUONFastTracking.cxx:703
 AliMUONFastTracking.cxx:704
 AliMUONFastTracking.cxx:705
 AliMUONFastTracking.cxx:706
 AliMUONFastTracking.cxx:707
 AliMUONFastTracking.cxx:708
 AliMUONFastTracking.cxx:709
 AliMUONFastTracking.cxx:710
 AliMUONFastTracking.cxx:711
 AliMUONFastTracking.cxx:712
 AliMUONFastTracking.cxx:713
 AliMUONFastTracking.cxx:714
 AliMUONFastTracking.cxx:715
 AliMUONFastTracking.cxx:716
 AliMUONFastTracking.cxx:717
 AliMUONFastTracking.cxx:718
 AliMUONFastTracking.cxx:719
 AliMUONFastTracking.cxx:720
 AliMUONFastTracking.cxx:721
 AliMUONFastTracking.cxx:722
 AliMUONFastTracking.cxx:723
 AliMUONFastTracking.cxx:724
 AliMUONFastTracking.cxx:725
 AliMUONFastTracking.cxx:726
 AliMUONFastTracking.cxx:727
 AliMUONFastTracking.cxx:728
 AliMUONFastTracking.cxx:729
 AliMUONFastTracking.cxx:730
 AliMUONFastTracking.cxx:731
 AliMUONFastTracking.cxx:732
 AliMUONFastTracking.cxx:733
 AliMUONFastTracking.cxx:734
 AliMUONFastTracking.cxx:735
 AliMUONFastTracking.cxx:736
 AliMUONFastTracking.cxx:737
 AliMUONFastTracking.cxx:738
 AliMUONFastTracking.cxx:739
 AliMUONFastTracking.cxx:740
 AliMUONFastTracking.cxx:741
 AliMUONFastTracking.cxx:742
 AliMUONFastTracking.cxx:743
 AliMUONFastTracking.cxx:744
 AliMUONFastTracking.cxx:745
 AliMUONFastTracking.cxx:746
 AliMUONFastTracking.cxx:747
 AliMUONFastTracking.cxx:748
 AliMUONFastTracking.cxx:749
 AliMUONFastTracking.cxx:750
 AliMUONFastTracking.cxx:751
 AliMUONFastTracking.cxx:752
 AliMUONFastTracking.cxx:753
 AliMUONFastTracking.cxx:754
 AliMUONFastTracking.cxx:755
 AliMUONFastTracking.cxx:756
 AliMUONFastTracking.cxx:757
 AliMUONFastTracking.cxx:758
 AliMUONFastTracking.cxx:759
 AliMUONFastTracking.cxx:760
 AliMUONFastTracking.cxx:761
 AliMUONFastTracking.cxx:762
 AliMUONFastTracking.cxx:763
 AliMUONFastTracking.cxx:764
 AliMUONFastTracking.cxx:765
 AliMUONFastTracking.cxx:766
 AliMUONFastTracking.cxx:767
 AliMUONFastTracking.cxx:768
 AliMUONFastTracking.cxx:769
 AliMUONFastTracking.cxx:770
 AliMUONFastTracking.cxx:771
 AliMUONFastTracking.cxx:772
 AliMUONFastTracking.cxx:773
 AliMUONFastTracking.cxx:774
 AliMUONFastTracking.cxx:775
 AliMUONFastTracking.cxx:776
 AliMUONFastTracking.cxx:777
 AliMUONFastTracking.cxx:778
 AliMUONFastTracking.cxx:779
 AliMUONFastTracking.cxx:780
 AliMUONFastTracking.cxx:781
 AliMUONFastTracking.cxx:782
 AliMUONFastTracking.cxx:783
 AliMUONFastTracking.cxx:784
 AliMUONFastTracking.cxx:785
 AliMUONFastTracking.cxx:786
 AliMUONFastTracking.cxx:787
 AliMUONFastTracking.cxx:788
 AliMUONFastTracking.cxx:789
 AliMUONFastTracking.cxx:790
 AliMUONFastTracking.cxx:791
 AliMUONFastTracking.cxx:792
 AliMUONFastTracking.cxx:793
 AliMUONFastTracking.cxx:794
 AliMUONFastTracking.cxx:795
 AliMUONFastTracking.cxx:796
 AliMUONFastTracking.cxx:797
 AliMUONFastTracking.cxx:798
 AliMUONFastTracking.cxx:799
 AliMUONFastTracking.cxx:800
 AliMUONFastTracking.cxx:801
 AliMUONFastTracking.cxx:802
 AliMUONFastTracking.cxx:803
 AliMUONFastTracking.cxx:804
 AliMUONFastTracking.cxx:805
 AliMUONFastTracking.cxx:806
 AliMUONFastTracking.cxx:807
 AliMUONFastTracking.cxx:808