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 AliMUONTrackExtrap
// ------------------------
// Tools for track extrapolation in ALICE dimuon spectrometer
// Author: Philippe Pillot
//-----------------------------------------------------------------------------

#include "AliMUONTrackExtrap.h" 
#include "AliMUONTrackParam.h"
#include "AliMUONConstants.h"
#include "AliMUONReconstructor.h"

#include "AliMagF.h"
#include "AliExternalTrackParam.h"

#include <TGeoGlobalMagField.h>
#include <TGeoManager.h>
#include <TMath.h>
#include <TDatabasePDG.h>

#include <Riostream.h>

using std::endl;
using std::cout;
/// \cond CLASSIMP
ClassImp(AliMUONTrackExtrap) // Class implementation in ROOT context
/// \endcond

const Double_t AliMUONTrackExtrap::fgkSimpleBPosition = 0.5 * (AliMUONConstants::CoilZ() + AliMUONConstants::YokeZ());
const Double_t AliMUONTrackExtrap::fgkSimpleBLength = 0.5 * (AliMUONConstants::CoilL() + AliMUONConstants::YokeL());
      Double_t AliMUONTrackExtrap::fgSimpleBValue = 0.;
      Bool_t   AliMUONTrackExtrap::fgFieldON = kFALSE;
const Bool_t   AliMUONTrackExtrap::fgkUseHelix = kFALSE;
const Int_t    AliMUONTrackExtrap::fgkMaxStepNumber = 5000;
const Double_t AliMUONTrackExtrap::fgkHelixStepLength = 6.;
const Double_t AliMUONTrackExtrap::fgkRungeKuttaMaxResidue = 0.002;

//__________________________________________________________________________
void AliMUONTrackExtrap::SetField()
{
  /// set field on/off flag;  
  /// set field at the centre of the dipole
  const Double_t x[3] = {50.,50.,fgkSimpleBPosition};
  Double_t b[3] = {0.,0.,0.};
  TGeoGlobalMagField::Instance()->Field(x,b);
  fgSimpleBValue = b[0];
  fgFieldON = (TMath::Abs(fgSimpleBValue) > 1.e-10) ? kTRUE : kFALSE;
  
}

//__________________________________________________________________________
Double_t AliMUONTrackExtrap::GetImpactParamFromBendingMomentum(Double_t bendingMomentum)
{
  /// Returns impact parameter at vertex in bending plane (cm),
  /// from the signed bending momentum "BendingMomentum" in bending plane (GeV/c),
  /// using simple values for dipole magnetic field.
  /// The sign of "BendingMomentum" is the sign of the charge.
  
  if (bendingMomentum == 0.) return 1.e10;
  
  const Double_t kCorrectionFactor = 1.1; // impact parameter is 10% underestimated
  
  return kCorrectionFactor * (-0.0003 * fgSimpleBValue * fgkSimpleBLength * fgkSimpleBPosition / bendingMomentum);
}

//__________________________________________________________________________
Double_t 
AliMUONTrackExtrap::GetBendingMomentumFromImpactParam(Double_t impactParam)
{
  /// Returns signed bending momentum in bending plane (GeV/c),
  /// the sign being the sign of the charge for particles moving forward in Z,
  /// from the impact parameter "ImpactParam" at vertex in bending plane (cm),
  /// using simple values for dipole magnetic field.
  
  if (impactParam == 0.) return 1.e10;
  
  const Double_t kCorrectionFactor = 1.1; // bending momentum is 10% underestimated
  
  if (fgFieldON) 
  {
    return kCorrectionFactor * (-0.0003 * fgSimpleBValue * fgkSimpleBLength * fgkSimpleBPosition / impactParam);
  }
  else 
  {
    return AliMUONConstants::GetMostProbBendingMomentum();
  }
}

//__________________________________________________________________________
void AliMUONTrackExtrap::LinearExtrapToZ(AliMUONTrackParam* trackParam, Double_t zEnd)
{
  /// Track parameters linearly extrapolated to the plane at "zEnd".
  /// On return, results from the extrapolation are updated in trackParam.
  
  if (trackParam->GetZ() == zEnd) return; // nothing to be done if same z
  
  // Compute track parameters
  Double_t dZ = zEnd - trackParam->GetZ();
  trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + trackParam->GetNonBendingSlope() * dZ);
  trackParam->SetBendingCoor(trackParam->GetBendingCoor() + trackParam->GetBendingSlope() * dZ);
  trackParam->SetZ(zEnd);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::LinearExtrapToZCov(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator)
{
  /// Track parameters and their covariances linearly extrapolated to the plane at "zEnd".
  /// On return, results from the extrapolation are updated in trackParam.
  
  if (trackParam->GetZ() == zEnd) return; // nothing to be done if same z
  
  // No need to propagate the covariance matrix if it does not exist
  if (!trackParam->CovariancesExist()) {
    cout<<"W-AliMUONTrackExtrap::LinearExtrapToZCov: Covariance matrix does not exist"<<endl;
    // Extrapolate linearly track parameters to "zEnd"
    LinearExtrapToZ(trackParam,zEnd);
    return;
  }
  
  // Compute track parameters
  Double_t dZ = zEnd - trackParam->GetZ();
  trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + trackParam->GetNonBendingSlope() * dZ);
  trackParam->SetBendingCoor(trackParam->GetBendingCoor() + trackParam->GetBendingSlope() * dZ);
  trackParam->SetZ(zEnd);
  
  // Calculate the jacobian related to the track parameters linear extrapolation to "zEnd"
  TMatrixD jacob(5,5);
  jacob.UnitMatrix();
  jacob(0,1) = dZ;
  jacob(2,3) = dZ;
  
  // Extrapolate track parameter covariances to "zEnd"
  TMatrixD tmp(trackParam->GetCovariances(),TMatrixD::kMultTranspose,jacob);
  TMatrixD tmp2(jacob,TMatrixD::kMult,tmp);
  trackParam->SetCovariances(tmp2);
  
  // Update the propagator if required
  if (updatePropagator) trackParam->UpdatePropagator(jacob);
}

//__________________________________________________________________________
Bool_t AliMUONTrackExtrap::ExtrapToZ(AliMUONTrackParam* trackParam, Double_t zEnd)
{
  /// Interface to track parameter extrapolation to the plane at "Z" using Helix or Rungekutta algorithm.
  /// On return, the track parameters resulting from the extrapolation are updated in trackParam.
  if (!fgFieldON) {
    AliMUONTrackExtrap::LinearExtrapToZ(trackParam,zEnd);
    return kTRUE;
  }
  else if (fgkUseHelix) return AliMUONTrackExtrap::ExtrapToZHelix(trackParam,zEnd);
  else return AliMUONTrackExtrap::ExtrapToZRungekutta(trackParam,zEnd);
}

//__________________________________________________________________________
Bool_t AliMUONTrackExtrap::ExtrapToZHelix(AliMUONTrackParam* trackParam, Double_t zEnd)
{
  /// Track parameter extrapolation to the plane at "Z" using Helix algorithm.
  /// On return, the track parameters resulting from the extrapolation are updated in trackParam.
  if (trackParam->GetZ() == zEnd) return kTRUE; // nothing to be done if same Z
  Double_t forwardBackward; // +1 if forward, -1 if backward
  if (zEnd < trackParam->GetZ()) forwardBackward = 1.0; // spectro. z<0 
  else forwardBackward = -1.0;
  Double_t v3[7], v3New[7]; // 7 in parameter ????
  Int_t i3, stepNumber;
  // For safety: return kTRUE or kFALSE ????
  // Parameter vector for calling EXTRAP_ONESTEP
  ConvertTrackParamForExtrap(trackParam, forwardBackward, v3);
  // sign of charge (sign of fInverseBendingMomentum if forward motion)
  // must be changed if backward extrapolation
  Double_t chargeExtrap = forwardBackward * TMath::Sign(Double_t(1.0), trackParam->GetInverseBendingMomentum());
  // Extrapolation loop
  stepNumber = 0;
  while (((-forwardBackward * (v3[2] - zEnd)) <= 0.0) && (stepNumber < fgkMaxStepNumber)) { // spectro. z<0
    stepNumber++;
    ExtrapOneStepHelix(chargeExtrap, fgkHelixStepLength, v3, v3New);
    if ((-forwardBackward * (v3New[2] - zEnd)) > 0.0) break; // one is beyond Z spectro. z<0
							     // better use TArray ????
    for (i3 = 0; i3 < 7; i3++) {v3[i3] = v3New[i3];}
  }
  // check fgkMaxStepNumber ????
  // Interpolation back to exact Z (2nd order)
  // should be in function ???? using TArray ????
  Double_t dZ12 = v3New[2] - v3[2]; // 1->2
  if (TMath::Abs(dZ12) > 0) {
    Double_t dZ1i = zEnd - v3[2]; // 1-i
    Double_t dZi2 = v3New[2] - zEnd; // i->2
    Double_t xPrime = (v3New[0] - v3[0]) / dZ12;
    Double_t xSecond = ((v3New[3] / v3New[5]) - (v3[3] / v3[5])) / dZ12;
    Double_t yPrime = (v3New[1] - v3[1]) / dZ12;
    Double_t ySecond = ((v3New[4] / v3New[5]) - (v3[4] / v3[5])) / dZ12;
    v3[0] = v3[0] + xPrime * dZ1i - 0.5 * xSecond * dZ1i * dZi2; // X
    v3[1] = v3[1] + yPrime * dZ1i - 0.5 * ySecond * dZ1i * dZi2; // Y
    v3[2] = zEnd; // Z
    Double_t xPrimeI = xPrime - 0.5 * xSecond * (dZi2 - dZ1i);
    Double_t yPrimeI = yPrime - 0.5 * ySecond * (dZi2 - dZ1i);
    // (PX, PY, PZ)/PTOT assuming forward motion
    v3[5] = 1.0 / TMath::Sqrt(1.0 + xPrimeI * xPrimeI + yPrimeI * yPrimeI); // PZ/PTOT
    v3[3] = xPrimeI * v3[5]; // PX/PTOT
    v3[4] = yPrimeI * v3[5]; // PY/PTOT
  } else {
    cout<<"W-AliMUONTrackExtrap::ExtrapToZHelix: Extrap. to Z not reached, Z = "<<zEnd<<endl;
  }
  // Recover track parameters (charge back for forward motion)
  RecoverTrackParam(v3, chargeExtrap * forwardBackward, trackParam);
  return kTRUE;
}

//__________________________________________________________________________
Bool_t AliMUONTrackExtrap::ExtrapToZRungekutta(AliMUONTrackParam* trackParam, Double_t zEnd)
{
  /// Track parameter extrapolation to the plane at "Z" using Rungekutta algorithm.
  /// On return, the track parameters resulting from the extrapolation are updated in trackParam.
  if (trackParam->GetZ() == zEnd) return kTRUE; // nothing to be done if same Z
  Double_t forwardBackward; // +1 if forward, -1 if backward
  if (zEnd < trackParam->GetZ()) forwardBackward = 1.0; // spectro. z<0 
  else forwardBackward = -1.0;
  // sign of charge (sign of fInverseBendingMomentum if forward motion)
  // must be changed if backward extrapolation
  Double_t chargeExtrap = forwardBackward * TMath::Sign(Double_t(1.0), trackParam->GetInverseBendingMomentum());
  Double_t v3[7], v3New[7];
  Double_t dZ, step;
  Int_t stepNumber = 0;
  
  // Extrapolation loop (until within tolerance or the track turn around)
  Double_t residue = zEnd - trackParam->GetZ();
  Bool_t uturn = kFALSE;
  Bool_t trackingFailed = kFALSE;
  Bool_t tooManyStep = kFALSE;
  while (TMath::Abs(residue) > fgkRungeKuttaMaxResidue && stepNumber <= fgkMaxStepNumber) {
    
    dZ = zEnd - trackParam->GetZ();
    // step lenght assuming linear trajectory
    step = dZ * TMath::Sqrt(1.0 + trackParam->GetBendingSlope()*trackParam->GetBendingSlope() +
			    trackParam->GetNonBendingSlope()*trackParam->GetNonBendingSlope());
    ConvertTrackParamForExtrap(trackParam, forwardBackward, v3);
    
    do { // reduce step lenght while zEnd oversteped
      if (stepNumber > fgkMaxStepNumber) {
        cout<<"W-AliMUONTrackExtrap::ExtrapToZRungekutta: Too many trials: "<<stepNumber<<endl;
	tooManyStep = kTRUE;
	break;
      }
      stepNumber ++;
      step = TMath::Abs(step);
      if (!AliMUONTrackExtrap::ExtrapOneStepRungekutta(chargeExtrap,step,v3,v3New)) {
	trackingFailed = kTRUE;
	break;
      }
      residue = zEnd - v3New[2];
      step *= dZ/(v3New[2]-trackParam->GetZ());
    } while (residue*dZ < 0 && TMath::Abs(residue) > fgkRungeKuttaMaxResidue);
    
    if (trackingFailed) break;
    else if (v3New[5]*v3[5] < 0) { // the track turned around
      cout<<"W-AliMUONTrackExtrap::ExtrapToZRungekutta: The track turned around"<<endl;
      uturn = kTRUE;
      break;
    } else RecoverTrackParam(v3New, chargeExtrap * forwardBackward, trackParam);
    
  }
  
  // terminate the extropolation with a straight line up to the exact "zEnd" value
  if (trackingFailed || uturn) {
    
    // track ends +-100 meters away in the bending direction
    dZ = zEnd - v3[2];
    Double_t bendingSlope = TMath::Sign(1.e4,-fgSimpleBValue*trackParam->GetInverseBendingMomentum()) / dZ;
    Double_t pZ = TMath::Abs(1. / trackParam->GetInverseBendingMomentum()) / TMath::Sqrt(1.0 + bendingSlope * bendingSlope);
    Double_t nonBendingSlope = TMath::Sign(TMath::Abs(v3[3]) * v3[6] / pZ, trackParam->GetNonBendingSlope());
    trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + dZ * nonBendingSlope);
    trackParam->SetNonBendingSlope(nonBendingSlope);
    trackParam->SetBendingCoor(trackParam->GetBendingCoor() + dZ * bendingSlope);
    trackParam->SetBendingSlope(bendingSlope);
    trackParam->SetZ(zEnd);
    
    return kFALSE;
    
  } else {
    
    // track extrapolated normally
    trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + residue * trackParam->GetNonBendingSlope());
    trackParam->SetBendingCoor(trackParam->GetBendingCoor() + residue * trackParam->GetBendingSlope());
    trackParam->SetZ(zEnd);
    
    return !tooManyStep;
    
  }
  
}

//__________________________________________________________________________
void AliMUONTrackExtrap::ConvertTrackParamForExtrap(AliMUONTrackParam* trackParam, Double_t forwardBackward, Double_t *v3)
{
  /// Set vector of Geant3 parameters pointed to by "v3" from track parameters in trackParam.
  /// Since AliMUONTrackParam is only geometry, one uses "forwardBackward"
  /// to know whether the particle is going forward (+1) or backward (-1).
  v3[0] = trackParam->GetNonBendingCoor(); // X
  v3[1] = trackParam->GetBendingCoor(); // Y
  v3[2] = trackParam->GetZ(); // Z
  Double_t pYZ = TMath::Abs(1.0 / trackParam->GetInverseBendingMomentum());
  Double_t pZ = pYZ / TMath::Sqrt(1.0 + trackParam->GetBendingSlope() * trackParam->GetBendingSlope());
  v3[6] = TMath::Sqrt(pYZ * pYZ + pZ * pZ * trackParam->GetNonBendingSlope() * trackParam->GetNonBendingSlope()); // PTOT
  v3[5] = -forwardBackward * pZ / v3[6]; // PZ/PTOT spectro. z<0
  v3[3] = trackParam->GetNonBendingSlope() * v3[5]; // PX/PTOT
  v3[4] = trackParam->GetBendingSlope() * v3[5]; // PY/PTOT
}

//__________________________________________________________________________
void AliMUONTrackExtrap::RecoverTrackParam(Double_t *v3, Double_t charge, AliMUONTrackParam* trackParam)
{
  /// Set track parameters in trackParam from Geant3 parameters pointed to by "v3",
  /// assumed to be calculated for forward motion in Z.
  /// "InverseBendingMomentum" is signed with "charge".
  trackParam->SetNonBendingCoor(v3[0]); // X
  trackParam->SetBendingCoor(v3[1]); // Y
  trackParam->SetZ(v3[2]); // Z
  Double_t pYZ = v3[6] * TMath::Sqrt((1.-v3[3])*(1.+v3[3]));
  trackParam->SetInverseBendingMomentum(charge/pYZ);
  trackParam->SetBendingSlope(v3[4]/v3[5]);
  trackParam->SetNonBendingSlope(v3[3]/v3[5]);
}

//__________________________________________________________________________
Bool_t AliMUONTrackExtrap::ExtrapToZCov(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator)
{
  /// Track parameters and their covariances extrapolated to the plane at "zEnd".
  /// On return, results from the extrapolation are updated in trackParam.
  
  if (trackParam->GetZ() == zEnd) return kTRUE; // nothing to be done if same z
  
  if (!fgFieldON) { // linear extrapolation if no magnetic field
    AliMUONTrackExtrap::LinearExtrapToZCov(trackParam,zEnd,updatePropagator);
    return kTRUE;
  }
  
  // No need to propagate the covariance matrix if it does not exist
  if (!trackParam->CovariancesExist()) {
    cout<<"W-AliMUONTrackExtrap::ExtrapToZCov: Covariance matrix does not exist"<<endl;
    // Extrapolate track parameters to "zEnd"
    return ExtrapToZ(trackParam,zEnd);
  }
  
  // Save the actual track parameters
  AliMUONTrackParam trackParamSave(*trackParam);
  TMatrixD paramSave(trackParamSave.GetParameters());
  Double_t zBegin = trackParamSave.GetZ();
  
  // Get reference to the parameter covariance matrix
  const TMatrixD& kParamCov = trackParam->GetCovariances();
	
  // Extrapolate track parameters to "zEnd"
  // Do not update the covariance matrix if the extrapolation failed
  if (!ExtrapToZ(trackParam,zEnd)) return kFALSE;
  
  // Get reference to the extrapolated parameters
  const TMatrixD& extrapParam = trackParam->GetParameters();
  
  // Calculate the jacobian related to the track parameters extrapolation to "zEnd"
  Bool_t extrapStatus = kTRUE;
  TMatrixD jacob(5,5);
  jacob.Zero();
  TMatrixD dParam(5,1);
  Double_t direction[5] = {-1.,-1.,1.,1.,-1.};
  for (Int_t i=0; i<5; i++) {
    // Skip jacobian calculation for parameters with no associated error
    if (kParamCov(i,i) <= 0.) continue;
    
    // Small variation of parameter i only
    for (Int_t j=0; j<5; j++) {
      if (j==i) {
        dParam(j,0) = TMath::Sqrt(kParamCov(i,i));
	dParam(j,0) *= TMath::Sign(1.,direction[j]*paramSave(j,0)); // variation always in the same direction
      } else dParam(j,0) = 0.;
    }
    
    // Set new parameters
    trackParamSave.SetParameters(paramSave);
    trackParamSave.AddParameters(dParam);
    trackParamSave.SetZ(zBegin);
    
    // Extrapolate new track parameters to "zEnd"
    if (!ExtrapToZ(&trackParamSave,zEnd)) {
      cout<<"W-AliMUONTrackExtrap::ExtrapToZCov: Bad covariance matrix"<<endl;
      extrapStatus = kFALSE;
    }
    
    // Calculate the jacobian
    TMatrixD jacobji(trackParamSave.GetParameters(),TMatrixD::kMinus,extrapParam);
    jacobji *= 1. / dParam(i,0);
    jacob.SetSub(0,i,jacobji);
  }
  
  // Extrapolate track parameter covariances to "zEnd"
  TMatrixD tmp(kParamCov,TMatrixD::kMultTranspose,jacob);
  TMatrixD tmp2(jacob,TMatrixD::kMult,tmp);
  trackParam->SetCovariances(tmp2);
  
  // Update the propagator if required
  if (updatePropagator) trackParam->UpdatePropagator(jacob);
  
  return extrapStatus;
}

//__________________________________________________________________________
void AliMUONTrackExtrap::AddMCSEffectInAbsorber(AliMUONTrackParam* param, Double_t signedPathLength, Double_t f0, Double_t f1, Double_t f2)
{
  /// Add to the track parameter covariances the effects of multiple Coulomb scattering
  /// signedPathLength must have the sign of (zOut - zIn) where all other parameters are assumed to be given at zOut.
  
  // absorber related covariance parameters
  Double_t bendingSlope = param->GetBendingSlope();
  Double_t nonBendingSlope = param->GetNonBendingSlope();
  Double_t inverseBendingMomentum = param->GetInverseBendingMomentum();
  Double_t alpha2 = 0.0136 * 0.0136 * inverseBendingMomentum * inverseBendingMomentum * (1.0 + bendingSlope * bendingSlope) /
                    (1.0 + bendingSlope *bendingSlope + nonBendingSlope * nonBendingSlope); // velocity = 1
  Double_t pathLength = TMath::Abs(signedPathLength);
  Double_t varCoor = alpha2 * (pathLength * pathLength * f0 - 2. * pathLength * f1 + f2);
  Double_t covCorrSlope = TMath::Sign(1.,signedPathLength) * alpha2 * (pathLength * f0 - f1);
  Double_t varSlop = alpha2 * f0;
  
  // Set MCS covariance matrix
  TMatrixD newParamCov(param->GetCovariances());
  // Non bending plane
  newParamCov(0,0) += varCoor;       newParamCov(0,1) += covCorrSlope;
  newParamCov(1,0) += covCorrSlope;  newParamCov(1,1) += varSlop;
  // Bending plane
  newParamCov(2,2) += varCoor;       newParamCov(2,3) += covCorrSlope;
  newParamCov(3,2) += covCorrSlope;  newParamCov(3,3) += varSlop;
  
  // Set momentum related covariances if B!=0
  if (fgFieldON) {
    // compute derivative d(q/Pxy) / dSlopeX and d(q/Pxy) / dSlopeY
    Double_t dqPxydSlopeX = inverseBendingMomentum * nonBendingSlope / (1. + nonBendingSlope*nonBendingSlope + bendingSlope*bendingSlope);
    Double_t dqPxydSlopeY = - inverseBendingMomentum * nonBendingSlope*nonBendingSlope * bendingSlope /
                              (1. + bendingSlope*bendingSlope) / (1. + nonBendingSlope*nonBendingSlope + bendingSlope*bendingSlope);
    // Inverse bending momentum (due to dependences with bending and non bending slopes)
    newParamCov(4,0) += dqPxydSlopeX * covCorrSlope; newParamCov(0,4) += dqPxydSlopeX * covCorrSlope;
    newParamCov(4,1) += dqPxydSlopeX * varSlop;      newParamCov(1,4) += dqPxydSlopeX * varSlop;
    newParamCov(4,2) += dqPxydSlopeY * covCorrSlope; newParamCov(2,4) += dqPxydSlopeY * covCorrSlope;
    newParamCov(4,3) += dqPxydSlopeY * varSlop;      newParamCov(3,4) += dqPxydSlopeY * varSlop;
    newParamCov(4,4) += (dqPxydSlopeX*dqPxydSlopeX + dqPxydSlopeY*dqPxydSlopeY) * varSlop;
  }
  
  // Set new covariances
  param->SetCovariances(newParamCov);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::CorrectMCSEffectInAbsorber(AliMUONTrackParam* param,
						    Double_t xVtx, Double_t yVtx, Double_t zVtx,
						    Double_t errXVtx, Double_t errYVtx,
						    Double_t absZBeg, Double_t pathLength, Double_t f0, Double_t f1, Double_t f2)
{
  /// Correct parameters and corresponding covariances using Branson correction
  /// - input param are parameters and covariances at the end of absorber
  /// - output param are parameters and covariances at vertex
  /// Absorber correction parameters are supposed to be calculated at the current track z-position
  
  // Position of the Branson plane (spectro. (z<0))
  Double_t zB = (f1>0.) ? absZBeg - f2/f1 : 0.;
  
  // Add MCS effects to current parameter covariances (spectro. (z<0))
  AddMCSEffectInAbsorber(param, -pathLength, f0, f1, f2);
  
  // Get track parameters and covariances in the Branson plane corrected for magnetic field effect
  ExtrapToZCov(param,zVtx);
  LinearExtrapToZCov(param,zB);
  
  // compute track parameters at vertex
  TMatrixD newParam(5,1);
  newParam(0,0) = xVtx;
  newParam(1,0) = (param->GetNonBendingCoor() - xVtx) / (zB - zVtx);
  newParam(2,0) = yVtx;
  newParam(3,0) = (param->GetBendingCoor() - yVtx) / (zB - zVtx);
  newParam(4,0) = param->GetCharge() / param->P() *
                  TMath::Sqrt(1.0 + newParam(1,0)*newParam(1,0) + newParam(3,0)*newParam(3,0)) /
		  TMath::Sqrt(1.0 + newParam(3,0)*newParam(3,0));
  
  // Get covariances in (X, SlopeX, Y, SlopeY, q*PTot) coordinate system
  TMatrixD paramCovP(param->GetCovariances());
  Cov2CovP(param->GetParameters(),paramCovP);
  
  // Get the covariance matrix in the (XVtx, X, YVtx, Y, q*PTot) coordinate system
  TMatrixD paramCovVtx(5,5);
  paramCovVtx.Zero();
  paramCovVtx(0,0) = errXVtx * errXVtx;
  paramCovVtx(1,1) = paramCovP(0,0);
  paramCovVtx(2,2) = errYVtx * errYVtx;
  paramCovVtx(3,3) = paramCovP(2,2);
  paramCovVtx(4,4) = paramCovP(4,4);
  paramCovVtx(1,3) = paramCovP(0,2);
  paramCovVtx(3,1) = paramCovP(2,0);
  paramCovVtx(1,4) = paramCovP(0,4);
  paramCovVtx(4,1) = paramCovP(4,0);
  paramCovVtx(3,4) = paramCovP(2,4);
  paramCovVtx(4,3) = paramCovP(4,2);
  
  // Jacobian of the transformation (XVtx, X, YVtx, Y, q*PTot) -> (XVtx, SlopeXVtx, YVtx, SlopeYVtx, q*PTotVtx)
  TMatrixD jacob(5,5);
  jacob.UnitMatrix();
  jacob(1,0) = - 1. / (zB - zVtx);
  jacob(1,1) = 1. / (zB - zVtx);
  jacob(3,2) = - 1. / (zB - zVtx);
  jacob(3,3) = 1. / (zB - zVtx);
  
  // Compute covariances at vertex in the (XVtx, SlopeXVtx, YVtx, SlopeYVtx, q*PTotVtx) coordinate system
  TMatrixD tmp(paramCovVtx,TMatrixD::kMultTranspose,jacob);
  TMatrixD newParamCov(jacob,TMatrixD::kMult,tmp);
  
  // Compute covariances at vertex in the (XVtx, SlopeXVtx, YVtx, SlopeYVtx, q/PyzVtx) coordinate system
  CovP2Cov(newParam,newParamCov);
  
  // Set parameters and covariances at vertex
  param->SetParameters(newParam);
  param->SetZ(zVtx);
  param->SetCovariances(newParamCov);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::CorrectELossEffectInAbsorber(AliMUONTrackParam* param, Double_t eLoss, Double_t sigmaELoss2)
{
  /// Correct parameters for energy loss and add energy loss fluctuation effect to covariances
  
  // Get parameter covariances in (X, SlopeX, Y, SlopeY, q*PTot) coordinate system
  TMatrixD newParamCov(param->GetCovariances());
  Cov2CovP(param->GetParameters(),newParamCov);
  
  // Compute new parameters corrected for energy loss
  Double_t muMass = TDatabasePDG::Instance()->GetParticle("mu-")->Mass(); // GeV
  Double_t p = param->P();
  Double_t e = TMath::Sqrt(p*p + muMass*muMass);
  Double_t eCorr = e + eLoss;
  Double_t pCorr = TMath::Sqrt(eCorr*eCorr - muMass*muMass);
  Double_t nonBendingSlope = param->GetNonBendingSlope();
  Double_t bendingSlope = param->GetBendingSlope();
  param->SetInverseBendingMomentum(param->GetCharge() / pCorr *
				   TMath::Sqrt(1.0 + nonBendingSlope*nonBendingSlope + bendingSlope*bendingSlope) /
				   TMath::Sqrt(1.0 + bendingSlope*bendingSlope));
  
  // Add effects of energy loss fluctuation to covariances
  newParamCov(4,4) += eCorr * eCorr / pCorr / pCorr * sigmaELoss2;
  
  // Get new parameter covariances in (X, SlopeX, Y, SlopeY, q/Pyz) coordinate system
  CovP2Cov(param->GetParameters(),newParamCov);
  
  // Set new parameter covariances
  param->SetCovariances(newParamCov);
}

//__________________________________________________________________________
Bool_t AliMUONTrackExtrap::GetAbsorberCorrectionParam(Double_t trackXYZIn[3], Double_t trackXYZOut[3], Double_t pTotal,
						      Double_t &pathLength, Double_t &f0, Double_t &f1, Double_t &f2,
						      Double_t &meanRho, Double_t &totalELoss, Double_t &sigmaELoss2)
{
  /// Parameters used to correct for Multiple Coulomb Scattering and energy loss in absorber
  /// Calculated assuming a linear propagation from trackXYZIn to trackXYZOut (order is important)
  // pathLength: path length between trackXYZIn and trackXYZOut (cm)
  // f0:         0th moment of z calculated with the inverse radiation-length distribution
  // f1:         1st moment of z calculated with the inverse radiation-length distribution
  // f2:         2nd moment of z calculated with the inverse radiation-length distribution
  // meanRho:    average density of crossed material (g/cm3)
  // totalELoss: total energy loss in absorber
  
  // Reset absorber's parameters
  pathLength = 0.;
  f0 = 0.;
  f1 = 0.;
  f2 = 0.;
  meanRho = 0.;
  totalELoss = 0.;
  sigmaELoss2 = 0.;
  
  // Check whether the geometry is available
  if (!gGeoManager) {
    cout<<"E-AliMUONTrackExtrap::GetAbsorberCorrectionParam: no TGeo"<<endl;
    return kFALSE;
  }
  
  // Initialize starting point and direction
  pathLength = TMath::Sqrt((trackXYZOut[0] - trackXYZIn[0])*(trackXYZOut[0] - trackXYZIn[0])+
			   (trackXYZOut[1] - trackXYZIn[1])*(trackXYZOut[1] - trackXYZIn[1])+
			   (trackXYZOut[2] - trackXYZIn[2])*(trackXYZOut[2] - trackXYZIn[2]));
  if (pathLength < TGeoShape::Tolerance()) return kFALSE;
  Double_t b[3];
  b[0] = (trackXYZOut[0] - trackXYZIn[0]) / pathLength;
  b[1] = (trackXYZOut[1] - trackXYZIn[1]) / pathLength;
  b[2] = (trackXYZOut[2] - trackXYZIn[2]) / pathLength;
  TGeoNode *currentnode = gGeoManager->InitTrack(trackXYZIn, b);
  if (!currentnode) {
    cout<<"E-AliMUONTrackExtrap::GetAbsorberCorrectionParam: start point out of geometry"<<endl;
    return kFALSE;
  }
  
  // loop over absorber slices and calculate absorber's parameters
  Double_t rho = 0.; // material density (g/cm3)
  Double_t x0 = 0.;  // radiation-length (cm-1)
  Double_t atomicA = 0.; // A of material
  Double_t atomicZ = 0.; // Z of material
  Double_t atomicZoverA = 0.; // Z/A of material
  Double_t localPathLength = 0;
  Double_t remainingPathLength = pathLength;
  Double_t sigmaELoss = 0.;
  Double_t zB = trackXYZIn[2];
  Double_t zE, dzB, dzE;
  do {
    // Get material properties
    TGeoMaterial *material = currentnode->GetVolume()->GetMedium()->GetMaterial();
    rho = material->GetDensity();
    x0 = material->GetRadLen();
    atomicA = material->GetA();
    atomicZ = material->GetZ();
    if(material->IsMixture()){
      TGeoMixture * mixture = (TGeoMixture*)material;
      atomicZoverA = 0.;
      Double_t sum = 0.;
      for (Int_t iel=0;iel<mixture->GetNelements();iel++){
	sum  += mixture->GetWmixt()[iel];
	atomicZoverA += mixture->GetZmixt()[iel]*mixture->GetWmixt()[iel]/mixture->GetAmixt()[iel];
      }
      atomicZoverA/=sum;
    }
    else atomicZoverA = atomicZ/atomicA;
    
    // Get path length within this material
    gGeoManager->FindNextBoundary(remainingPathLength);
    localPathLength = gGeoManager->GetStep() + 1.e-6;
    // Check if boundary within remaining path length. If so, make sure to cross the boundary to prepare the next step
    if (localPathLength >= remainingPathLength) localPathLength = remainingPathLength;
    else {
      currentnode = gGeoManager->Step();
      if (!currentnode) {
        cout<<"E-AliMUONTrackExtrap::GetAbsorberCorrectionParam: navigation failed"<<endl;
	f0 = f1 = f2 = meanRho = totalELoss = sigmaELoss2 = 0.;
	return kFALSE;
      }
      if (!gGeoManager->IsEntering()) {
        // make another small step to try to enter in new absorber slice
        gGeoManager->SetStep(0.001);
	currentnode = gGeoManager->Step();
	if (!gGeoManager->IsEntering() || !currentnode) {
          cout<<"E-AliMUONTrackExtrap::GetAbsorberCorrectionParam: navigation failed"<<endl;
	  f0 = f1 = f2 = meanRho = totalELoss = sigmaELoss2 = 0.;
	  return kFALSE;
	}
        localPathLength += 0.001;
      }
    }
    
    // calculate absorber's parameters
    zE = b[2] * localPathLength + zB;
    dzB = zB - trackXYZIn[2];
    dzE = zE - trackXYZIn[2];
    f0 += localPathLength / x0;
    f1 += (dzE*dzE - dzB*dzB) / b[2] / b[2] / x0 / 2.;
    f2 += (dzE*dzE*dzE - dzB*dzB*dzB) / b[2] / b[2] / b[2] / x0 / 3.;
    meanRho += localPathLength * rho;
    totalELoss += BetheBloch(pTotal, localPathLength, rho, atomicZ, atomicZoverA);
    sigmaELoss += EnergyLossFluctuation(pTotal, localPathLength, rho, atomicZoverA);
    
    // prepare next step
    zB = zE;
    remainingPathLength -= localPathLength;
  } while (remainingPathLength > TGeoShape::Tolerance());
  
  meanRho /= pathLength;
  sigmaELoss2 = sigmaELoss*sigmaELoss;
  
  return kTRUE;
}

//__________________________________________________________________________
Double_t AliMUONTrackExtrap::GetMCSAngle2(const AliMUONTrackParam& param, Double_t dZ, Double_t x0)
{
  /// Return the angular dispersion square due to multiple Coulomb scattering
  /// through a material of thickness "dZ" and of radiation length "x0"
  /// assuming linear propagation and using the small angle approximation.
  
  Double_t bendingSlope = param.GetBendingSlope();
  Double_t nonBendingSlope = param.GetNonBendingSlope();
  Double_t inverseTotalMomentum2 = param.GetInverseBendingMomentum() * param.GetInverseBendingMomentum() *
                                   (1.0 + bendingSlope * bendingSlope) /
                                   (1.0 + bendingSlope *bendingSlope + nonBendingSlope * nonBendingSlope); 
  // Path length in the material
  Double_t pathLength = TMath::Abs(dZ) * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
  // relativistic velocity
  Double_t velo = 1.;
  // Angular dispersion square of the track (variance) in a plane perpendicular to the trajectory
  Double_t theta02 = 0.0136 / velo * (1 + 0.038 * TMath::Log(pathLength/x0));
  
  return theta02 * theta02 * inverseTotalMomentum2 * pathLength / x0;
}

//__________________________________________________________________________
void AliMUONTrackExtrap::AddMCSEffect(AliMUONTrackParam *param, Double_t dZ, Double_t x0)
{
  /// Add to the track parameter covariances the effects of multiple Coulomb scattering
  /// through a material of thickness "Abs(dZ)" and of radiation length "x0"
  /// assuming linear propagation and using the small angle approximation.
  /// dZ = zOut - zIn (sign is important) and "param" is assumed to be given zOut.
  /// If x0 <= 0., assume dZ = pathLength/x0 and consider the material thickness as negligible.
  
  Double_t bendingSlope = param->GetBendingSlope();
  Double_t nonBendingSlope = param->GetNonBendingSlope();
  Double_t inverseBendingMomentum = param->GetInverseBendingMomentum();
  Double_t inverseTotalMomentum2 = inverseBendingMomentum * inverseBendingMomentum *
                                   (1.0 + bendingSlope * bendingSlope) /
                                   (1.0 + bendingSlope *bendingSlope + nonBendingSlope * nonBendingSlope); 
  // Path length in the material
  Double_t signedPathLength = dZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
  Double_t pathLengthOverX0 = (x0 > 0.) ? TMath::Abs(signedPathLength) / x0 : TMath::Abs(signedPathLength);
  // relativistic velocity
  Double_t velo = 1.;
  // Angular dispersion square of the track (variance) in a plane perpendicular to the trajectory
  Double_t theta02 = 0.0136 / velo * (1 + 0.038 * TMath::Log(pathLengthOverX0));
  theta02 *= theta02 * inverseTotalMomentum2 * pathLengthOverX0;
  
  Double_t varCoor 	= (x0 > 0.) ? signedPathLength * signedPathLength * theta02 / 3. : 0.;
  Double_t varSlop 	= theta02;
  Double_t covCorrSlope = (x0 > 0.) ? signedPathLength * theta02 / 2. : 0.;
  
  // Set MCS covariance matrix
  TMatrixD newParamCov(param->GetCovariances());
  // Non bending plane
  newParamCov(0,0) += varCoor;       newParamCov(0,1) += covCorrSlope;
  newParamCov(1,0) += covCorrSlope;  newParamCov(1,1) += varSlop;
  // Bending plane
  newParamCov(2,2) += varCoor;       newParamCov(2,3) += covCorrSlope;
  newParamCov(3,2) += covCorrSlope;  newParamCov(3,3) += varSlop;
  
  // Set momentum related covariances if B!=0
  if (fgFieldON) {
    // compute derivative d(q/Pxy) / dSlopeX and d(q/Pxy) / dSlopeY
    Double_t dqPxydSlopeX = inverseBendingMomentum * nonBendingSlope / (1. + nonBendingSlope*nonBendingSlope + bendingSlope*bendingSlope);
    Double_t dqPxydSlopeY = - inverseBendingMomentum * nonBendingSlope*nonBendingSlope * bendingSlope /
                              (1. + bendingSlope*bendingSlope) / (1. + nonBendingSlope*nonBendingSlope + bendingSlope*bendingSlope);
    // Inverse bending momentum (due to dependences with bending and non bending slopes)
    newParamCov(4,0) += dqPxydSlopeX * covCorrSlope; newParamCov(0,4) += dqPxydSlopeX * covCorrSlope;
    newParamCov(4,1) += dqPxydSlopeX * varSlop;      newParamCov(1,4) += dqPxydSlopeX * varSlop;
    newParamCov(4,2) += dqPxydSlopeY * covCorrSlope; newParamCov(2,4) += dqPxydSlopeY * covCorrSlope;
    newParamCov(4,3) += dqPxydSlopeY * varSlop;      newParamCov(3,4) += dqPxydSlopeY * varSlop;
    newParamCov(4,4) += (dqPxydSlopeX*dqPxydSlopeX + dqPxydSlopeY*dqPxydSlopeY) * varSlop;
  }
  
  // Set new covariances
  param->SetCovariances(newParamCov);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapToVertex(AliMUONTrackParam* trackParam,
					Double_t xVtx, Double_t yVtx, Double_t zVtx,
					Double_t errXVtx, Double_t errYVtx,
					Bool_t correctForMCS, Bool_t correctForEnergyLoss)
{
  /// Main method for extrapolation to the vertex:
  /// Returns the track parameters and covariances resulting from the extrapolation of the current trackParam
  /// Changes parameters and covariances according to multiple scattering and energy loss corrections:
  /// if correctForMCS=kTRUE:  compute parameters using Branson correction and add correction resolution to covariances
  /// if correctForMCS=kFALSE: add parameter dispersion due to MCS in parameter covariances
  /// if correctForEnergyLoss=kTRUE:  correct parameters for energy loss and add energy loss fluctuation to covariances
  /// if correctForEnergyLoss=kFALSE: do nothing about energy loss
  
  if (trackParam->GetZ() == zVtx) return; // nothing to be done if already at vertex
  
  if (trackParam->GetZ() > zVtx) { // spectro. (z<0)
    cout<<"E-AliMUONTrackExtrap::ExtrapToVertex: Starting Z ("<<trackParam->GetZ()
        <<") upstream the vertex (zVtx = "<<zVtx<<")"<<endl;
    return;
  }
  
  // Check the vertex position relatively to the absorber
  if (zVtx < AliMUONConstants::AbsZBeg() && zVtx > AliMUONConstants::AbsZEnd()) { // spectro. (z<0)
    cout<<"W-AliMUONTrackExtrap::ExtrapToVertex: Ending Z ("<<zVtx
        <<") inside the front absorber ("<<AliMUONConstants::AbsZBeg()<<","<<AliMUONConstants::AbsZEnd()<<")"<<endl;
  } else if (zVtx < AliMUONConstants::AbsZEnd() ) { // spectro. (z<0)
    cout<<"W-AliMUONTrackExtrap::ExtrapToVertex: Ending Z ("<<zVtx
        <<") downstream the front absorber (zAbsorberEnd = "<<AliMUONConstants::AbsZEnd()<<")"<<endl;
    if (trackParam->CovariancesExist()) ExtrapToZCov(trackParam,zVtx);
    else ExtrapToZ(trackParam,zVtx);
    return;
  }
  
  // Check the track position relatively to the absorber and extrapolate track parameters to the end of the absorber if needed
  if (trackParam->GetZ() > AliMUONConstants::AbsZBeg()) { // spectro. (z<0)
    cout<<"W-AliMUONTrackExtrap::ExtrapToVertex: Starting Z ("<<trackParam->GetZ()
        <<") upstream the front absorber (zAbsorberBegin = "<<AliMUONConstants::AbsZBeg()<<")"<<endl;
    if (trackParam->CovariancesExist()) ExtrapToZCov(trackParam,zVtx);
    else ExtrapToZ(trackParam,zVtx);
    return;
  } else if (trackParam->GetZ() > AliMUONConstants::AbsZEnd()) { // spectro. (z<0)
    cout<<"W-AliMUONTrackExtrap::ExtrapToVertex: Starting Z ("<<trackParam->GetZ()
        <<") inside the front absorber ("<<AliMUONConstants::AbsZBeg()<<","<<AliMUONConstants::AbsZEnd()<<")"<<endl;
  } else {
    if (trackParam->CovariancesExist()) ExtrapToZCov(trackParam,AliMUONConstants::AbsZEnd());
    else ExtrapToZ(trackParam,AliMUONConstants::AbsZEnd());
  }
  
  // Get absorber correction parameters assuming linear propagation in absorber
  Double_t trackXYZOut[3];
  trackXYZOut[0] = trackParam->GetNonBendingCoor();
  trackXYZOut[1] = trackParam->GetBendingCoor();
  trackXYZOut[2] = trackParam->GetZ();
  Double_t trackXYZIn[3];
  if (correctForMCS) { // assume linear propagation until the vertex
    trackXYZIn[2] = TMath::Min(zVtx, AliMUONConstants::AbsZBeg()); // spectro. (z<0)
    trackXYZIn[0] = trackXYZOut[0] + (xVtx - trackXYZOut[0]) / (zVtx - trackXYZOut[2]) * (trackXYZIn[2] - trackXYZOut[2]);
    trackXYZIn[1] = trackXYZOut[1] + (yVtx - trackXYZOut[1]) / (zVtx - trackXYZOut[2]) * (trackXYZIn[2] - trackXYZOut[2]);
  } else {
    AliMUONTrackParam trackParamIn(*trackParam);
    ExtrapToZ(&trackParamIn, TMath::Min(zVtx, AliMUONConstants::AbsZBeg()));
    trackXYZIn[0] = trackParamIn.GetNonBendingCoor();
    trackXYZIn[1] = trackParamIn.GetBendingCoor();
    trackXYZIn[2] = trackParamIn.GetZ();
  }
  Double_t pTot = trackParam->P();
  Double_t pathLength, f0, f1, f2, meanRho, totalELoss, sigmaELoss2;
  if (!GetAbsorberCorrectionParam(trackXYZIn,trackXYZOut,pTot,pathLength,f0,f1,f2,meanRho,totalELoss,sigmaELoss2)) {
    cout<<"E-AliMUONTrackExtrap::ExtrapToVertex: Unable to take into account the absorber effects"<<endl;
    if (trackParam->CovariancesExist()) ExtrapToZCov(trackParam,zVtx);
    else ExtrapToZ(trackParam,zVtx);
    return;
  }
  
  // Compute track parameters and covariances at vertex according to correctForMCS and correctForEnergyLoss flags
  if (correctForMCS) {
    
    if (correctForEnergyLoss) {
      
      // Correct for multiple scattering and energy loss
      CorrectELossEffectInAbsorber(trackParam, 0.5*totalELoss, 0.5*sigmaELoss2);
      CorrectMCSEffectInAbsorber(trackParam, xVtx, yVtx, zVtx, errXVtx, errYVtx,
				 trackXYZIn[2], pathLength, f0, f1, f2);
      CorrectELossEffectInAbsorber(trackParam, 0.5*totalELoss, 0.5*sigmaELoss2);
      
    } else {
      
      // Correct for multiple scattering
      CorrectMCSEffectInAbsorber(trackParam, xVtx, yVtx, zVtx, errXVtx, errYVtx,
				 trackXYZIn[2], pathLength, f0, f1, f2);
    }
    
  } else {
    
    if (correctForEnergyLoss) {
      
      // Correct for energy loss add multiple scattering dispersion in covariance matrix
      CorrectELossEffectInAbsorber(trackParam, 0.5*totalELoss, 0.5*sigmaELoss2);
      AddMCSEffectInAbsorber(trackParam, -pathLength, f0, f1, f2); // (spectro. (z<0))
      ExtrapToZCov(trackParam, trackXYZIn[2]);
      CorrectELossEffectInAbsorber(trackParam, 0.5*totalELoss, 0.5*sigmaELoss2);
      ExtrapToZCov(trackParam, zVtx);
      
    } else {
      
      // add multiple scattering dispersion in covariance matrix
      AddMCSEffectInAbsorber(trackParam, -pathLength, f0, f1, f2); // (spectro. (z<0))
      ExtrapToZCov(trackParam, zVtx);
      
    }
    
  }
  
}

//__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapToVertex(AliMUONTrackParam* trackParam,
					Double_t xVtx, Double_t yVtx, Double_t zVtx,
					Double_t errXVtx, Double_t errYVtx)
{
  /// Extrapolate track parameters to vertex, corrected for multiple scattering and energy loss effects
  /// Add branson correction resolution and energy loss fluctuation to parameter covariances
  ExtrapToVertex(trackParam, xVtx, yVtx, zVtx, errXVtx, errYVtx, kTRUE, kTRUE);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapToVertexWithoutELoss(AliMUONTrackParam* trackParam,
						    Double_t xVtx, Double_t yVtx, Double_t zVtx,
						    Double_t errXVtx, Double_t errYVtx)
{
  /// Extrapolate track parameters to vertex, corrected for multiple scattering effects only
  /// Add branson correction resolution to parameter covariances
  ExtrapToVertex(trackParam, xVtx, yVtx, zVtx, errXVtx, errYVtx, kTRUE, kFALSE);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapToVertexWithoutBranson(AliMUONTrackParam* trackParam, Double_t zVtx)
{
  /// Extrapolate track parameters to vertex, corrected for energy loss effects only
  /// Add dispersion due to multiple scattering and energy loss fluctuation to parameter covariances
  ExtrapToVertex(trackParam, 0., 0., zVtx, 0., 0., kFALSE, kTRUE);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapToVertexUncorrected(AliMUONTrackParam* trackParam, Double_t zVtx)
{
  /// Extrapolate track parameters to vertex without multiple scattering and energy loss corrections
  /// Add dispersion due to multiple scattering to parameter covariances
  ExtrapToVertex(trackParam, 0., 0., zVtx, 0., 0., kFALSE, kFALSE);
}

//__________________________________________________________________________
Double_t AliMUONTrackExtrap::TotalMomentumEnergyLoss(AliMUONTrackParam* trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx)
{
  /// Calculate the total momentum energy loss in-between the track position and the vertex assuming a linear propagation
  
  if (trackParam->GetZ() == zVtx) return 0.; // nothing to be done if already at vertex
  
  // Check whether the geometry is available
  if (!gGeoManager) {
    cout<<"E-AliMUONTrackExtrap::TotalMomentumEnergyLoss: no TGeo"<<endl;
    return 0.;
  }
  
  // Get encountered material correction parameters assuming linear propagation from vertex to the track position
  Double_t trackXYZOut[3];
  trackXYZOut[0] = trackParam->GetNonBendingCoor();
  trackXYZOut[1] = trackParam->GetBendingCoor();
  trackXYZOut[2] = trackParam->GetZ();
  Double_t trackXYZIn[3];
  trackXYZIn[0] = xVtx;
  trackXYZIn[1] = yVtx;
  trackXYZIn[2] = zVtx;
  Double_t pTot = trackParam->P();
  Double_t pathLength, f0, f1, f2, meanRho, totalELoss, sigmaELoss2;
  GetAbsorberCorrectionParam(trackXYZIn,trackXYZOut,pTot,pathLength,f0,f1,f2,meanRho,totalELoss,sigmaELoss2);
  
  // total momentum corrected for energy loss
  Double_t muMass = TDatabasePDG::Instance()->GetParticle("mu-")->Mass(); // GeV
  Double_t e = TMath::Sqrt(pTot*pTot + muMass*muMass);
  Double_t eCorr = e + totalELoss;
  Double_t pTotCorr = TMath::Sqrt(eCorr*eCorr - muMass*muMass);
  
  return pTotCorr - pTot;
}

//__________________________________________________________________________
Double_t AliMUONTrackExtrap::BetheBloch(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZ, Double_t atomicZoverA)
{
  /// Returns the mean total momentum energy loss of muon with total momentum='pTotal'
  /// in the absorber layer of lenght='pathLength', density='rho', A='atomicA' and Z='atomicZ'
  Double_t muMass = TDatabasePDG::Instance()->GetParticle("mu-")->Mass(); // GeV
  
  // mean exitation energy (GeV)
  Double_t i;
  if (atomicZ < 13) i = (12. * atomicZ + 7.) * 1.e-9;
  else i = (9.76 * atomicZ + 58.8 * TMath::Power(atomicZ,-0.19)) * 1.e-9;
  
  return pathLength * rho * AliExternalTrackParam::BetheBlochGeant(pTotal/muMass, rho, 0.20, 3.00, i, atomicZoverA);
}

//__________________________________________________________________________
Double_t AliMUONTrackExtrap::EnergyLossFluctuation(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZoverA)
{
  /// Returns the total momentum energy loss fluctuation of muon with total momentum='pTotal'
  /// in the absorber layer of lenght='pathLength', density='rho', A='atomicA' and Z='atomicZ'
  Double_t muMass = TDatabasePDG::Instance()->GetParticle("mu-")->Mass(); // GeV
  //Double_t eMass = 0.510998918e-3; // GeV
  Double_t k = 0.307075e-3; // GeV.g^-1.cm^2
  Double_t p2=pTotal*pTotal;
  Double_t beta2=p2/(p2 + muMass*muMass);
  
  Double_t fwhm = 2. * k * rho * pathLength * atomicZoverA / beta2; // FWHM of the energy loss Landau distribution
  Double_t sigma = fwhm / TMath::Sqrt(8.*log(2.)); // gaussian: fwmh = 2 * srqt(2*ln(2)) * sigma (i.e. fwmh = 2.35 * sigma)
  
  //sigma2 = k * rho * pathLength * atomicZ / atomicA * eMass; // sigma2 of the energy loss gaussian distribution
  
  return sigma;
}

//__________________________________________________________________________
void AliMUONTrackExtrap::Cov2CovP(const TMatrixD &param, TMatrixD &cov)
{
  /// change coordinate system: (X, SlopeX, Y, SlopeY, q/Pyz) -> (X, SlopeX, Y, SlopeY, q*PTot)
  /// parameters (param) are given in the (X, SlopeX, Y, SlopeY, q/Pyz) coordinate system
  
  // charge * total momentum
  Double_t qPTot = TMath::Sqrt(1. + param(1,0)*param(1,0) + param(3,0)*param(3,0)) /
                   TMath::Sqrt(1. + param(3,0)*param(3,0)) / param(4,0);
  
  // Jacobian of the opposite transformation
  TMatrixD jacob(5,5);
  jacob.UnitMatrix();
  jacob(4,1) = qPTot * param(1,0) / (1. + param(1,0)*param(1,0) + param(3,0)*param(3,0));
  jacob(4,3) = - qPTot * param(1,0) * param(1,0) * param(3,0) /
                 (1. + param(3,0)*param(3,0)) / (1. + param(1,0)*param(1,0) + param(3,0)*param(3,0));
  jacob(4,4) = - qPTot / param(4,0);
  
  // compute covariances in new coordinate system
  TMatrixD tmp(cov,TMatrixD::kMultTranspose,jacob);
  cov.Mult(jacob,tmp);
}

//__________________________________________________________________________
void AliMUONTrackExtrap::CovP2Cov(const TMatrixD &param, TMatrixD &covP)
{
  /// change coordinate system: (X, SlopeX, Y, SlopeY, q*PTot) -> (X, SlopeX, Y, SlopeY, q/Pyz)
  /// parameters (param) are given in the (X, SlopeX, Y, SlopeY, q/Pyz) coordinate system
  
  // charge * total momentum
  Double_t qPTot = TMath::Sqrt(1. + param(1,0)*param(1,0) + param(3,0)*param(3,0)) /
                   TMath::Sqrt(1. + param(3,0)*param(3,0)) / param(4,0);
  
  // Jacobian of the transformation
  TMatrixD jacob(5,5);
  jacob.UnitMatrix();
  jacob(4,1) = param(4,0) * param(1,0) / (1. + param(1,0)*param(1,0) + param(3,0)*param(3,0));
  jacob(4,3) = - param(4,0) * param(1,0) * param(1,0) * param(3,0) /
                 (1. + param(3,0)*param(3,0)) / (1. + param(1,0)*param(1,0) + param(3,0)*param(3,0));
  jacob(4,4) = - param(4,0) / qPTot;
  
  // compute covariances in new coordinate system
  TMatrixD tmp(covP,TMatrixD::kMultTranspose,jacob);
  covP.Mult(jacob,tmp);
}

 //__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapOneStepHelix(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout)
{
/// <pre>
///    ******************************************************************
///    *                                                                *
///    *  Performs the tracking of one step in a magnetic field         *
///    *  The trajectory is assumed to be a helix in a constant field   *
///    *  taken at the mid point of the step.                           *
///    *  Parameters:                                                   *
///    *   input                                                        *
///    *     STEP =arc length of the step asked                         *
///    *     VECT =input vector (position,direction cos and momentum)   *
///    *     CHARGE=  electric charge of the particle                   *
///    *   output                                                       *
///    *     VOUT = same as VECT after completion of the step           *
///    *                                                                *
///    *    ==>Called by : USER, GUSWIM                               *
///    *       Author    m.hansroul  *********                          *
///    *       modified  s.egli, s.v.levonian                           *
///    *       modified  v.perevoztchikov
///    *                                                                *
///    ******************************************************************
/// </pre>

// modif: everything in double precision

    Double_t xyz[3], h[4], hxp[3];
    Double_t h2xy, hp, rho, tet;
    Double_t sint, sintt, tsint, cos1t;
    Double_t f1, f2, f3, f4, f5, f6;

    const Int_t kix  = 0;
    const Int_t kiy  = 1;
    const Int_t kiz  = 2;
    const Int_t kipx = 3;
    const Int_t kipy = 4;
    const Int_t kipz = 5;
    const Int_t kipp = 6;

    const Double_t kec = 2.9979251e-4;
    //
    //    ------------------------------------------------------------------
    //
    //       units are kgauss,centimeters,gev/c
    //
    vout[kipp] = vect[kipp];
    if (TMath::Abs(charge) < 0.00001) {
      for (Int_t i = 0; i < 3; i++) {
	vout[i] = vect[i] + step * vect[i+3];
	vout[i+3] = vect[i+3];
      }
      return;
    }
    xyz[0]    = vect[kix] + 0.5 * step * vect[kipx];
    xyz[1]    = vect[kiy] + 0.5 * step * vect[kipy];
    xyz[2]    = vect[kiz] + 0.5 * step * vect[kipz];

    //cmodif: call gufld (xyz, h) changed into:
    TGeoGlobalMagField::Instance()->Field(xyz,h);
 
    h2xy = h[0]*h[0] + h[1]*h[1];
    h[3] = h[2]*h[2]+ h2xy;
    if (h[3] < 1.e-12) {
      for (Int_t i = 0; i < 3; i++) {
	vout[i] = vect[i] + step * vect[i+3];
	vout[i+3] = vect[i+3];
      }
      return;
    }
    if (h2xy < 1.e-12*h[3]) {
      ExtrapOneStepHelix3(charge*h[2], step, vect, vout);
      return;
    }
    h[3] = TMath::Sqrt(h[3]);
    h[0] /= h[3];
    h[1] /= h[3];
    h[2] /= h[3];
    h[3] *= kec;

    hxp[0] = h[1]*vect[kipz] - h[2]*vect[kipy];
    hxp[1] = h[2]*vect[kipx] - h[0]*vect[kipz];
    hxp[2] = h[0]*vect[kipy] - h[1]*vect[kipx];
 
    hp = h[0]*vect[kipx] + h[1]*vect[kipy] + h[2]*vect[kipz];

    rho = -charge*h[3]/vect[kipp];
    tet = rho * step;

    if (TMath::Abs(tet) > 0.15) {
      sint = TMath::Sin(tet);
      sintt = (sint/tet);
      tsint = (tet-sint)/tet;
      cos1t = 2.*(TMath::Sin(0.5*tet))*(TMath::Sin(0.5*tet))/tet;
    } else {
      tsint = tet*tet/36.;
      sintt = (1. - tsint);
      sint = tet*sintt;
      cos1t = 0.5*tet;
    }

    f1 = step * sintt;
    f2 = step * cos1t;
    f3 = step * tsint * hp;
    f4 = -tet*cos1t;
    f5 = sint;
    f6 = tet * cos1t * hp;
 
    vout[kix] = vect[kix] + f1*vect[kipx] + f2*hxp[0] + f3*h[0];
    vout[kiy] = vect[kiy] + f1*vect[kipy] + f2*hxp[1] + f3*h[1];
    vout[kiz] = vect[kiz] + f1*vect[kipz] + f2*hxp[2] + f3*h[2];
 
    vout[kipx] = vect[kipx] + f4*vect[kipx] + f5*hxp[0] + f6*h[0];
    vout[kipy] = vect[kipy] + f4*vect[kipy] + f5*hxp[1] + f6*h[1];
    vout[kipz] = vect[kipz] + f4*vect[kipz] + f5*hxp[2] + f6*h[2];
 
    return;
}

 //__________________________________________________________________________
void AliMUONTrackExtrap::ExtrapOneStepHelix3(Double_t field, Double_t step, const Double_t *vect, Double_t *vout)
{
/// <pre>
///	******************************************************************
///	*								 *
///	*	Tracking routine in a constant field oriented		 *
///	*	along axis 3						 *
///	*	Tracking is performed with a conventional		 *
///	*	helix step method					 *
///	*								 *
///	*    ==>Called by : USER, GUSWIM				 *
///	*	Authors    R.Brun, M.Hansroul  *********		 *
///	*	Rewritten  V.Perevoztchikov
///	*								 *
///	******************************************************************
/// </pre>

    Double_t hxp[3];
    Double_t h4, hp, rho, tet;
    Double_t sint, sintt, tsint, cos1t;
    Double_t f1, f2, f3, f4, f5, f6;

    const Int_t kix  = 0;
    const Int_t kiy  = 1;
    const Int_t kiz  = 2;
    const Int_t kipx = 3;
    const Int_t kipy = 4;
    const Int_t kipz = 5;
    const Int_t kipp = 6;

    const Double_t kec = 2.9979251e-4;

// 
//     ------------------------------------------------------------------
// 
//       units are kgauss,centimeters,gev/c
// 
    vout[kipp] = vect[kipp];
    h4 = field * kec;

    hxp[0] = - vect[kipy];
    hxp[1] = + vect[kipx];
 
    hp = vect[kipz];

    rho = -h4/vect[kipp];
    tet = rho * step;
    if (TMath::Abs(tet) > 0.15) {
      sint = TMath::Sin(tet);
      sintt = (sint/tet);
      tsint = (tet-sint)/tet;
      cos1t = 2.* TMath::Sin(0.5*tet) * TMath::Sin(0.5*tet)/tet;
    } else {
      tsint = tet*tet/36.;
      sintt = (1. - tsint);
      sint = tet*sintt;
      cos1t = 0.5*tet;
    }

    f1 = step * sintt;
    f2 = step * cos1t;
    f3 = step * tsint * hp;
    f4 = -tet*cos1t;
    f5 = sint;
    f6 = tet * cos1t * hp;
 
    vout[kix] = vect[kix] + f1*vect[kipx] + f2*hxp[0];
    vout[kiy] = vect[kiy] + f1*vect[kipy] + f2*hxp[1];
    vout[kiz] = vect[kiz] + f1*vect[kipz] + f3;
 
    vout[kipx] = vect[kipx] + f4*vect[kipx] + f5*hxp[0];
    vout[kipy] = vect[kipy] + f4*vect[kipy] + f5*hxp[1];
    vout[kipz] = vect[kipz] + f4*vect[kipz] + f6;

    return;
}

 //__________________________________________________________________________
Bool_t AliMUONTrackExtrap::ExtrapOneStepRungekutta(Double_t charge, Double_t step, const Double_t* vect, Double_t* vout)
{
/// <pre>
///	******************************************************************
///	*								 *
///	*  Runge-Kutta method for tracking a particle through a magnetic *
///	*  field. Uses Nystroem algorithm (See Handbook Nat. Bur. of	 *
///	*  Standards, procedure 25.5.20)				 *
///	*								 *
///	*  Input parameters						 *
///	*	CHARGE    Particle charge				 *
///	*	STEP	  Step size					 *
///	*	VECT	  Initial co-ords,direction cosines,momentum	 *
///	*  Output parameters						 *
///	*	VOUT	  Output co-ords,direction cosines,momentum	 *
///	*  User routine called  					 *
///	*	CALL GUFLD(X,F) 					 *
///	*								 *
///	*    ==>Called by : USER, GUSWIM				 *
///	*	Authors    R.Brun, M.Hansroul  *********		 *
///	*		   V.Perevoztchikov (CUT STEP implementation)	 *
///	*								 *
///	*								 *
///	******************************************************************
/// </pre>

    Double_t h2, h4, f[4];
    Double_t xyzt[3] = {FLT_MAX, FLT_MAX, FLT_MAX};
    Double_t a, b, c, ph,ph2;
    Double_t secxs[4],secys[4],seczs[4],hxp[3];
    Double_t g1, g2, g3, g4, g5, g6, ang2, dxt, dyt, dzt;
    Double_t est, at, bt, ct, cba;
    Double_t f1, f2, f3, f4, rho, tet, hnorm, hp, rho1, sint, cost;
    
    Double_t x;
    Double_t y;
    Double_t z;
    
    Double_t xt;
    Double_t yt;
    Double_t zt;

    Double_t maxit = 1992;
    Double_t maxcut = 11;

    const Double_t kdlt   = 1e-4;
    const Double_t kdlt32 = kdlt/32.;
    const Double_t kthird = 1./3.;
    const Double_t khalf  = 0.5;
    const Double_t kec = 2.9979251e-4;

    const Double_t kpisqua = 9.86960440109;
    const Int_t kix  = 0;
    const Int_t kiy  = 1;
    const Int_t kiz  = 2;
    const Int_t kipx = 3;
    const Int_t kipy = 4;
    const Int_t kipz = 5;
  
    // *.
    // *.    ------------------------------------------------------------------
    // *.
    // *             this constant is for units cm,gev/c and kgauss
    // *
    Int_t iter = 0;
    Int_t ncut = 0;
    for(Int_t j = 0; j < 7; j++)
      vout[j] = vect[j];

    Double_t  pinv   = kec * charge / vect[6];
    Double_t tl = 0.;
    Double_t h = step;
    Double_t rest;

 
    do {
      rest  = step - tl;
      if (TMath::Abs(h) > TMath::Abs(rest)) h = rest;
      //cmodif: call gufld(vout,f) changed into:
      TGeoGlobalMagField::Instance()->Field(vout,f);

      // *
      // *             start of integration
      // *
      x      = vout[0];
      y      = vout[1];
      z      = vout[2];
      a      = vout[3];
      b      = vout[4];
      c      = vout[5];

      h2     = khalf * h;
      h4     = khalf * h2;
      ph     = pinv * h;
      ph2    = khalf * ph;
      secxs[0] = (b * f[2] - c * f[1]) * ph2;
      secys[0] = (c * f[0] - a * f[2]) * ph2;
      seczs[0] = (a * f[1] - b * f[0]) * ph2;
      ang2 = (secxs[0]*secxs[0] + secys[0]*secys[0] + seczs[0]*seczs[0]);
      if (ang2 > kpisqua) break;

      dxt    = h2 * a + h4 * secxs[0];
      dyt    = h2 * b + h4 * secys[0];
      dzt    = h2 * c + h4 * seczs[0];
      xt     = x + dxt;
      yt     = y + dyt;
      zt     = z + dzt;
      // *
      // *              second intermediate point
      // *

      est = TMath::Abs(dxt) + TMath::Abs(dyt) + TMath::Abs(dzt);
      if (est > h) {
	if (ncut++ > maxcut) break;
	h *= khalf;
	continue;
      }
 
      xyzt[0] = xt;
      xyzt[1] = yt;
      xyzt[2] = zt;

      //cmodif: call gufld(xyzt,f) changed into:
      TGeoGlobalMagField::Instance()->Field(xyzt,f);

      at     = a + secxs[0];
      bt     = b + secys[0];
      ct     = c + seczs[0];

      secxs[1] = (bt * f[2] - ct * f[1]) * ph2;
      secys[1] = (ct * f[0] - at * f[2]) * ph2;
      seczs[1] = (at * f[1] - bt * f[0]) * ph2;
      at     = a + secxs[1];
      bt     = b + secys[1];
      ct     = c + seczs[1];
      secxs[2] = (bt * f[2] - ct * f[1]) * ph2;
      secys[2] = (ct * f[0] - at * f[2]) * ph2;
      seczs[2] = (at * f[1] - bt * f[0]) * ph2;
      dxt    = h * (a + secxs[2]);
      dyt    = h * (b + secys[2]);
      dzt    = h * (c + seczs[2]);
      xt     = x + dxt;
      yt     = y + dyt;
      zt     = z + dzt;
      at     = a + 2.*secxs[2];
      bt     = b + 2.*secys[2];
      ct     = c + 2.*seczs[2];

      est = TMath::Abs(dxt)+TMath::Abs(dyt)+TMath::Abs(dzt);
      if (est > 2.*TMath::Abs(h)) {
	if (ncut++ > maxcut) break;
	h *= khalf;
	continue;
      }
 
      xyzt[0] = xt;
      xyzt[1] = yt;
      xyzt[2] = zt;

      //cmodif: call gufld(xyzt,f) changed into:
      TGeoGlobalMagField::Instance()->Field(xyzt,f);

      z      = z + (c + (seczs[0] + seczs[1] + seczs[2]) * kthird) * h;
      y      = y + (b + (secys[0] + secys[1] + secys[2]) * kthird) * h;
      x      = x + (a + (secxs[0] + secxs[1] + secxs[2]) * kthird) * h;

      secxs[3] = (bt*f[2] - ct*f[1])* ph2;
      secys[3] = (ct*f[0] - at*f[2])* ph2;
      seczs[3] = (at*f[1] - bt*f[0])* ph2;
      a      = a+(secxs[0]+secxs[3]+2. * (secxs[1]+secxs[2])) * kthird;
      b      = b+(secys[0]+secys[3]+2. * (secys[1]+secys[2])) * kthird;
      c      = c+(seczs[0]+seczs[3]+2. * (seczs[1]+seczs[2])) * kthird;

      est    = TMath::Abs(secxs[0]+secxs[3] - (secxs[1]+secxs[2]))
	+ TMath::Abs(secys[0]+secys[3] - (secys[1]+secys[2]))
	+ TMath::Abs(seczs[0]+seczs[3] - (seczs[1]+seczs[2]));

      if (est > kdlt && TMath::Abs(h) > 1.e-4) {
	if (ncut++ > maxcut) break;
	h *= khalf;
	continue;
      }

      ncut = 0;
      // *               if too many iterations, go to helix
      if (iter++ > maxit) break;

      tl += h;
      if (est < kdlt32) 
	h *= 2.;
      cba    = 1./ TMath::Sqrt(a*a + b*b + c*c);
      vout[0] = x;
      vout[1] = y;
      vout[2] = z;
      vout[3] = cba*a;
      vout[4] = cba*b;
      vout[5] = cba*c;
      rest = step - tl;
      if (step < 0.) rest = -rest;
      if (rest < 1.e-5*TMath::Abs(step)) return kTRUE;

    } while(1);

    // angle too big, use helix
    cout<<"W-AliMUONTrackExtrap::ExtrapOneStepRungekutta: Ruge-Kutta failed: switch to helix"<<endl;

    f1  = f[0];
    f2  = f[1];
    f3  = f[2];
    f4  = TMath::Sqrt(f1*f1+f2*f2+f3*f3);
    if (f4 < 1.e-10) {
      cout<<"E-AliMUONTrackExtrap::ExtrapOneStepRungekutta: magnetic field at (";
      cout<<xyzt[0]<<", "<<xyzt[1]<<", "<<xyzt[2]<<") = "<<f4<<": giving up"<<endl;
      return kFALSE;
    }
    rho = -f4*pinv;
    tet = rho * step;
 
    hnorm = 1./f4;
    f1 = f1*hnorm;
    f2 = f2*hnorm;
    f3 = f3*hnorm;

    hxp[0] = f2*vect[kipz] - f3*vect[kipy];
    hxp[1] = f3*vect[kipx] - f1*vect[kipz];
    hxp[2] = f1*vect[kipy] - f2*vect[kipx];
 
    hp = f1*vect[kipx] + f2*vect[kipy] + f3*vect[kipz];

    rho1 = 1./rho;
    sint = TMath::Sin(tet);
    cost = 2.*TMath::Sin(khalf*tet)*TMath::Sin(khalf*tet);

    g1 = sint*rho1;
    g2 = cost*rho1;
    g3 = (tet-sint) * hp*rho1;
    g4 = -cost;
    g5 = sint;
    g6 = cost * hp;
 
    vout[kix] = vect[kix] + g1*vect[kipx] + g2*hxp[0] + g3*f1;
    vout[kiy] = vect[kiy] + g1*vect[kipy] + g2*hxp[1] + g3*f2;
    vout[kiz] = vect[kiz] + g1*vect[kipz] + g2*hxp[2] + g3*f3;
 
    vout[kipx] = vect[kipx] + g4*vect[kipx] + g5*hxp[0] + g6*f1;
    vout[kipy] = vect[kipy] + g4*vect[kipy] + g5*hxp[1] + g6*f2;
    vout[kipz] = vect[kipz] + g4*vect[kipz] + g5*hxp[2] + g6*f3;

    return kTRUE;
}

 AliMUONTrackExtrap.cxx:1
 AliMUONTrackExtrap.cxx:2
 AliMUONTrackExtrap.cxx:3
 AliMUONTrackExtrap.cxx:4
 AliMUONTrackExtrap.cxx:5
 AliMUONTrackExtrap.cxx:6
 AliMUONTrackExtrap.cxx:7
 AliMUONTrackExtrap.cxx:8
 AliMUONTrackExtrap.cxx:9
 AliMUONTrackExtrap.cxx:10
 AliMUONTrackExtrap.cxx:11
 AliMUONTrackExtrap.cxx:12
 AliMUONTrackExtrap.cxx:13
 AliMUONTrackExtrap.cxx:14
 AliMUONTrackExtrap.cxx:15
 AliMUONTrackExtrap.cxx:16
 AliMUONTrackExtrap.cxx:17
 AliMUONTrackExtrap.cxx:18
 AliMUONTrackExtrap.cxx:19
 AliMUONTrackExtrap.cxx:20
 AliMUONTrackExtrap.cxx:21
 AliMUONTrackExtrap.cxx:22
 AliMUONTrackExtrap.cxx:23
 AliMUONTrackExtrap.cxx:24
 AliMUONTrackExtrap.cxx:25
 AliMUONTrackExtrap.cxx:26
 AliMUONTrackExtrap.cxx:27
 AliMUONTrackExtrap.cxx:28
 AliMUONTrackExtrap.cxx:29
 AliMUONTrackExtrap.cxx:30
 AliMUONTrackExtrap.cxx:31
 AliMUONTrackExtrap.cxx:32
 AliMUONTrackExtrap.cxx:33
 AliMUONTrackExtrap.cxx:34
 AliMUONTrackExtrap.cxx:35
 AliMUONTrackExtrap.cxx:36
 AliMUONTrackExtrap.cxx:37
 AliMUONTrackExtrap.cxx:38
 AliMUONTrackExtrap.cxx:39
 AliMUONTrackExtrap.cxx:40
 AliMUONTrackExtrap.cxx:41
 AliMUONTrackExtrap.cxx:42
 AliMUONTrackExtrap.cxx:43
 AliMUONTrackExtrap.cxx:44
 AliMUONTrackExtrap.cxx:45
 AliMUONTrackExtrap.cxx:46
 AliMUONTrackExtrap.cxx:47
 AliMUONTrackExtrap.cxx:48
 AliMUONTrackExtrap.cxx:49
 AliMUONTrackExtrap.cxx:50
 AliMUONTrackExtrap.cxx:51
 AliMUONTrackExtrap.cxx:52
 AliMUONTrackExtrap.cxx:53
 AliMUONTrackExtrap.cxx:54
 AliMUONTrackExtrap.cxx:55
 AliMUONTrackExtrap.cxx:56
 AliMUONTrackExtrap.cxx:57
 AliMUONTrackExtrap.cxx:58
 AliMUONTrackExtrap.cxx:59
 AliMUONTrackExtrap.cxx:60
 AliMUONTrackExtrap.cxx:61
 AliMUONTrackExtrap.cxx:62
 AliMUONTrackExtrap.cxx:63
 AliMUONTrackExtrap.cxx:64
 AliMUONTrackExtrap.cxx:65
 AliMUONTrackExtrap.cxx:66
 AliMUONTrackExtrap.cxx:67
 AliMUONTrackExtrap.cxx:68
 AliMUONTrackExtrap.cxx:69
 AliMUONTrackExtrap.cxx:70
 AliMUONTrackExtrap.cxx:71
 AliMUONTrackExtrap.cxx:72
 AliMUONTrackExtrap.cxx:73
 AliMUONTrackExtrap.cxx:74
 AliMUONTrackExtrap.cxx:75
 AliMUONTrackExtrap.cxx:76
 AliMUONTrackExtrap.cxx:77
 AliMUONTrackExtrap.cxx:78
 AliMUONTrackExtrap.cxx:79
 AliMUONTrackExtrap.cxx:80
 AliMUONTrackExtrap.cxx:81
 AliMUONTrackExtrap.cxx:82
 AliMUONTrackExtrap.cxx:83
 AliMUONTrackExtrap.cxx:84
 AliMUONTrackExtrap.cxx:85
 AliMUONTrackExtrap.cxx:86
 AliMUONTrackExtrap.cxx:87
 AliMUONTrackExtrap.cxx:88
 AliMUONTrackExtrap.cxx:89
 AliMUONTrackExtrap.cxx:90
 AliMUONTrackExtrap.cxx:91
 AliMUONTrackExtrap.cxx:92
 AliMUONTrackExtrap.cxx:93
 AliMUONTrackExtrap.cxx:94
 AliMUONTrackExtrap.cxx:95
 AliMUONTrackExtrap.cxx:96
 AliMUONTrackExtrap.cxx:97
 AliMUONTrackExtrap.cxx:98
 AliMUONTrackExtrap.cxx:99
 AliMUONTrackExtrap.cxx:100
 AliMUONTrackExtrap.cxx:101
 AliMUONTrackExtrap.cxx:102
 AliMUONTrackExtrap.cxx:103
 AliMUONTrackExtrap.cxx:104
 AliMUONTrackExtrap.cxx:105
 AliMUONTrackExtrap.cxx:106
 AliMUONTrackExtrap.cxx:107
 AliMUONTrackExtrap.cxx:108
 AliMUONTrackExtrap.cxx:109
 AliMUONTrackExtrap.cxx:110
 AliMUONTrackExtrap.cxx:111
 AliMUONTrackExtrap.cxx:112
 AliMUONTrackExtrap.cxx:113
 AliMUONTrackExtrap.cxx:114
 AliMUONTrackExtrap.cxx:115
 AliMUONTrackExtrap.cxx:116
 AliMUONTrackExtrap.cxx:117
 AliMUONTrackExtrap.cxx:118
 AliMUONTrackExtrap.cxx:119
 AliMUONTrackExtrap.cxx:120
 AliMUONTrackExtrap.cxx:121
 AliMUONTrackExtrap.cxx:122
 AliMUONTrackExtrap.cxx:123
 AliMUONTrackExtrap.cxx:124
 AliMUONTrackExtrap.cxx:125
 AliMUONTrackExtrap.cxx:126
 AliMUONTrackExtrap.cxx:127
 AliMUONTrackExtrap.cxx:128
 AliMUONTrackExtrap.cxx:129
 AliMUONTrackExtrap.cxx:130
 AliMUONTrackExtrap.cxx:131
 AliMUONTrackExtrap.cxx:132
 AliMUONTrackExtrap.cxx:133
 AliMUONTrackExtrap.cxx:134
 AliMUONTrackExtrap.cxx:135
 AliMUONTrackExtrap.cxx:136
 AliMUONTrackExtrap.cxx:137
 AliMUONTrackExtrap.cxx:138
 AliMUONTrackExtrap.cxx:139
 AliMUONTrackExtrap.cxx:140
 AliMUONTrackExtrap.cxx:141
 AliMUONTrackExtrap.cxx:142
 AliMUONTrackExtrap.cxx:143
 AliMUONTrackExtrap.cxx:144
 AliMUONTrackExtrap.cxx:145
 AliMUONTrackExtrap.cxx:146
 AliMUONTrackExtrap.cxx:147
 AliMUONTrackExtrap.cxx:148
 AliMUONTrackExtrap.cxx:149
 AliMUONTrackExtrap.cxx:150
 AliMUONTrackExtrap.cxx:151
 AliMUONTrackExtrap.cxx:152
 AliMUONTrackExtrap.cxx:153
 AliMUONTrackExtrap.cxx:154
 AliMUONTrackExtrap.cxx:155
 AliMUONTrackExtrap.cxx:156
 AliMUONTrackExtrap.cxx:157
 AliMUONTrackExtrap.cxx:158
 AliMUONTrackExtrap.cxx:159
 AliMUONTrackExtrap.cxx:160
 AliMUONTrackExtrap.cxx:161
 AliMUONTrackExtrap.cxx:162
 AliMUONTrackExtrap.cxx:163
 AliMUONTrackExtrap.cxx:164
 AliMUONTrackExtrap.cxx:165
 AliMUONTrackExtrap.cxx:166
 AliMUONTrackExtrap.cxx:167
 AliMUONTrackExtrap.cxx:168
 AliMUONTrackExtrap.cxx:169
 AliMUONTrackExtrap.cxx:170
 AliMUONTrackExtrap.cxx:171
 AliMUONTrackExtrap.cxx:172
 AliMUONTrackExtrap.cxx:173
 AliMUONTrackExtrap.cxx:174
 AliMUONTrackExtrap.cxx:175
 AliMUONTrackExtrap.cxx:176
 AliMUONTrackExtrap.cxx:177
 AliMUONTrackExtrap.cxx:178
 AliMUONTrackExtrap.cxx:179
 AliMUONTrackExtrap.cxx:180
 AliMUONTrackExtrap.cxx:181
 AliMUONTrackExtrap.cxx:182
 AliMUONTrackExtrap.cxx:183
 AliMUONTrackExtrap.cxx:184
 AliMUONTrackExtrap.cxx:185
 AliMUONTrackExtrap.cxx:186
 AliMUONTrackExtrap.cxx:187
 AliMUONTrackExtrap.cxx:188
 AliMUONTrackExtrap.cxx:189
 AliMUONTrackExtrap.cxx:190
 AliMUONTrackExtrap.cxx:191
 AliMUONTrackExtrap.cxx:192
 AliMUONTrackExtrap.cxx:193
 AliMUONTrackExtrap.cxx:194
 AliMUONTrackExtrap.cxx:195
 AliMUONTrackExtrap.cxx:196
 AliMUONTrackExtrap.cxx:197
 AliMUONTrackExtrap.cxx:198
 AliMUONTrackExtrap.cxx:199
 AliMUONTrackExtrap.cxx:200
 AliMUONTrackExtrap.cxx:201
 AliMUONTrackExtrap.cxx:202
 AliMUONTrackExtrap.cxx:203
 AliMUONTrackExtrap.cxx:204
 AliMUONTrackExtrap.cxx:205
 AliMUONTrackExtrap.cxx:206
 AliMUONTrackExtrap.cxx:207
 AliMUONTrackExtrap.cxx:208
 AliMUONTrackExtrap.cxx:209
 AliMUONTrackExtrap.cxx:210
 AliMUONTrackExtrap.cxx:211
 AliMUONTrackExtrap.cxx:212
 AliMUONTrackExtrap.cxx:213
 AliMUONTrackExtrap.cxx:214
 AliMUONTrackExtrap.cxx:215
 AliMUONTrackExtrap.cxx:216
 AliMUONTrackExtrap.cxx:217
 AliMUONTrackExtrap.cxx:218
 AliMUONTrackExtrap.cxx:219
 AliMUONTrackExtrap.cxx:220
 AliMUONTrackExtrap.cxx:221
 AliMUONTrackExtrap.cxx:222
 AliMUONTrackExtrap.cxx:223
 AliMUONTrackExtrap.cxx:224
 AliMUONTrackExtrap.cxx:225
 AliMUONTrackExtrap.cxx:226
 AliMUONTrackExtrap.cxx:227
 AliMUONTrackExtrap.cxx:228
 AliMUONTrackExtrap.cxx:229
 AliMUONTrackExtrap.cxx:230
 AliMUONTrackExtrap.cxx:231
 AliMUONTrackExtrap.cxx:232
 AliMUONTrackExtrap.cxx:233
 AliMUONTrackExtrap.cxx:234
 AliMUONTrackExtrap.cxx:235
 AliMUONTrackExtrap.cxx:236
 AliMUONTrackExtrap.cxx:237
 AliMUONTrackExtrap.cxx:238
 AliMUONTrackExtrap.cxx:239
 AliMUONTrackExtrap.cxx:240
 AliMUONTrackExtrap.cxx:241
 AliMUONTrackExtrap.cxx:242
 AliMUONTrackExtrap.cxx:243
 AliMUONTrackExtrap.cxx:244
 AliMUONTrackExtrap.cxx:245
 AliMUONTrackExtrap.cxx:246
 AliMUONTrackExtrap.cxx:247
 AliMUONTrackExtrap.cxx:248
 AliMUONTrackExtrap.cxx:249
 AliMUONTrackExtrap.cxx:250
 AliMUONTrackExtrap.cxx:251
 AliMUONTrackExtrap.cxx:252
 AliMUONTrackExtrap.cxx:253
 AliMUONTrackExtrap.cxx:254
 AliMUONTrackExtrap.cxx:255
 AliMUONTrackExtrap.cxx:256
 AliMUONTrackExtrap.cxx:257
 AliMUONTrackExtrap.cxx:258
 AliMUONTrackExtrap.cxx:259
 AliMUONTrackExtrap.cxx:260
 AliMUONTrackExtrap.cxx:261
 AliMUONTrackExtrap.cxx:262
 AliMUONTrackExtrap.cxx:263
 AliMUONTrackExtrap.cxx:264
 AliMUONTrackExtrap.cxx:265
 AliMUONTrackExtrap.cxx:266
 AliMUONTrackExtrap.cxx:267
 AliMUONTrackExtrap.cxx:268
 AliMUONTrackExtrap.cxx:269
 AliMUONTrackExtrap.cxx:270
 AliMUONTrackExtrap.cxx:271
 AliMUONTrackExtrap.cxx:272
 AliMUONTrackExtrap.cxx:273
 AliMUONTrackExtrap.cxx:274
 AliMUONTrackExtrap.cxx:275
 AliMUONTrackExtrap.cxx:276
 AliMUONTrackExtrap.cxx:277
 AliMUONTrackExtrap.cxx:278
 AliMUONTrackExtrap.cxx:279
 AliMUONTrackExtrap.cxx:280
 AliMUONTrackExtrap.cxx:281
 AliMUONTrackExtrap.cxx:282
 AliMUONTrackExtrap.cxx:283
 AliMUONTrackExtrap.cxx:284
 AliMUONTrackExtrap.cxx:285
 AliMUONTrackExtrap.cxx:286
 AliMUONTrackExtrap.cxx:287
 AliMUONTrackExtrap.cxx:288
 AliMUONTrackExtrap.cxx:289
 AliMUONTrackExtrap.cxx:290
 AliMUONTrackExtrap.cxx:291
 AliMUONTrackExtrap.cxx:292
 AliMUONTrackExtrap.cxx:293
 AliMUONTrackExtrap.cxx:294
 AliMUONTrackExtrap.cxx:295
 AliMUONTrackExtrap.cxx:296
 AliMUONTrackExtrap.cxx:297
 AliMUONTrackExtrap.cxx:298
 AliMUONTrackExtrap.cxx:299
 AliMUONTrackExtrap.cxx:300
 AliMUONTrackExtrap.cxx:301
 AliMUONTrackExtrap.cxx:302
 AliMUONTrackExtrap.cxx:303
 AliMUONTrackExtrap.cxx:304
 AliMUONTrackExtrap.cxx:305
 AliMUONTrackExtrap.cxx:306
 AliMUONTrackExtrap.cxx:307
 AliMUONTrackExtrap.cxx:308
 AliMUONTrackExtrap.cxx:309
 AliMUONTrackExtrap.cxx:310
 AliMUONTrackExtrap.cxx:311
 AliMUONTrackExtrap.cxx:312
 AliMUONTrackExtrap.cxx:313
 AliMUONTrackExtrap.cxx:314
 AliMUONTrackExtrap.cxx:315
 AliMUONTrackExtrap.cxx:316
 AliMUONTrackExtrap.cxx:317
 AliMUONTrackExtrap.cxx:318
 AliMUONTrackExtrap.cxx:319
 AliMUONTrackExtrap.cxx:320
 AliMUONTrackExtrap.cxx:321
 AliMUONTrackExtrap.cxx:322
 AliMUONTrackExtrap.cxx:323
 AliMUONTrackExtrap.cxx:324
 AliMUONTrackExtrap.cxx:325
 AliMUONTrackExtrap.cxx:326
 AliMUONTrackExtrap.cxx:327
 AliMUONTrackExtrap.cxx:328
 AliMUONTrackExtrap.cxx:329
 AliMUONTrackExtrap.cxx:330
 AliMUONTrackExtrap.cxx:331
 AliMUONTrackExtrap.cxx:332
 AliMUONTrackExtrap.cxx:333
 AliMUONTrackExtrap.cxx:334
 AliMUONTrackExtrap.cxx:335
 AliMUONTrackExtrap.cxx:336
 AliMUONTrackExtrap.cxx:337
 AliMUONTrackExtrap.cxx:338
 AliMUONTrackExtrap.cxx:339
 AliMUONTrackExtrap.cxx:340
 AliMUONTrackExtrap.cxx:341
 AliMUONTrackExtrap.cxx:342
 AliMUONTrackExtrap.cxx:343
 AliMUONTrackExtrap.cxx:344
 AliMUONTrackExtrap.cxx:345
 AliMUONTrackExtrap.cxx:346
 AliMUONTrackExtrap.cxx:347
 AliMUONTrackExtrap.cxx:348
 AliMUONTrackExtrap.cxx:349
 AliMUONTrackExtrap.cxx:350
 AliMUONTrackExtrap.cxx:351
 AliMUONTrackExtrap.cxx:352
 AliMUONTrackExtrap.cxx:353
 AliMUONTrackExtrap.cxx:354
 AliMUONTrackExtrap.cxx:355
 AliMUONTrackExtrap.cxx:356
 AliMUONTrackExtrap.cxx:357
 AliMUONTrackExtrap.cxx:358
 AliMUONTrackExtrap.cxx:359
 AliMUONTrackExtrap.cxx:360
 AliMUONTrackExtrap.cxx:361
 AliMUONTrackExtrap.cxx:362
 AliMUONTrackExtrap.cxx:363
 AliMUONTrackExtrap.cxx:364
 AliMUONTrackExtrap.cxx:365
 AliMUONTrackExtrap.cxx:366
 AliMUONTrackExtrap.cxx:367
 AliMUONTrackExtrap.cxx:368
 AliMUONTrackExtrap.cxx:369
 AliMUONTrackExtrap.cxx:370
 AliMUONTrackExtrap.cxx:371
 AliMUONTrackExtrap.cxx:372
 AliMUONTrackExtrap.cxx:373
 AliMUONTrackExtrap.cxx:374
 AliMUONTrackExtrap.cxx:375
 AliMUONTrackExtrap.cxx:376
 AliMUONTrackExtrap.cxx:377
 AliMUONTrackExtrap.cxx:378
 AliMUONTrackExtrap.cxx:379
 AliMUONTrackExtrap.cxx:380
 AliMUONTrackExtrap.cxx:381
 AliMUONTrackExtrap.cxx:382
 AliMUONTrackExtrap.cxx:383
 AliMUONTrackExtrap.cxx:384
 AliMUONTrackExtrap.cxx:385
 AliMUONTrackExtrap.cxx:386
 AliMUONTrackExtrap.cxx:387
 AliMUONTrackExtrap.cxx:388
 AliMUONTrackExtrap.cxx:389
 AliMUONTrackExtrap.cxx:390
 AliMUONTrackExtrap.cxx:391
 AliMUONTrackExtrap.cxx:392
 AliMUONTrackExtrap.cxx:393
 AliMUONTrackExtrap.cxx:394
 AliMUONTrackExtrap.cxx:395
 AliMUONTrackExtrap.cxx:396
 AliMUONTrackExtrap.cxx:397
 AliMUONTrackExtrap.cxx:398
 AliMUONTrackExtrap.cxx:399
 AliMUONTrackExtrap.cxx:400
 AliMUONTrackExtrap.cxx:401
 AliMUONTrackExtrap.cxx:402
 AliMUONTrackExtrap.cxx:403
 AliMUONTrackExtrap.cxx:404
 AliMUONTrackExtrap.cxx:405
 AliMUONTrackExtrap.cxx:406
 AliMUONTrackExtrap.cxx:407
 AliMUONTrackExtrap.cxx:408
 AliMUONTrackExtrap.cxx:409
 AliMUONTrackExtrap.cxx:410
 AliMUONTrackExtrap.cxx:411
 AliMUONTrackExtrap.cxx:412
 AliMUONTrackExtrap.cxx:413
 AliMUONTrackExtrap.cxx:414
 AliMUONTrackExtrap.cxx:415
 AliMUONTrackExtrap.cxx:416
 AliMUONTrackExtrap.cxx:417
 AliMUONTrackExtrap.cxx:418
 AliMUONTrackExtrap.cxx:419
 AliMUONTrackExtrap.cxx:420
 AliMUONTrackExtrap.cxx:421
 AliMUONTrackExtrap.cxx:422
 AliMUONTrackExtrap.cxx:423
 AliMUONTrackExtrap.cxx:424
 AliMUONTrackExtrap.cxx:425
 AliMUONTrackExtrap.cxx:426
 AliMUONTrackExtrap.cxx:427
 AliMUONTrackExtrap.cxx:428
 AliMUONTrackExtrap.cxx:429
 AliMUONTrackExtrap.cxx:430
 AliMUONTrackExtrap.cxx:431
 AliMUONTrackExtrap.cxx:432
 AliMUONTrackExtrap.cxx:433
 AliMUONTrackExtrap.cxx:434
 AliMUONTrackExtrap.cxx:435
 AliMUONTrackExtrap.cxx:436
 AliMUONTrackExtrap.cxx:437
 AliMUONTrackExtrap.cxx:438
 AliMUONTrackExtrap.cxx:439
 AliMUONTrackExtrap.cxx:440
 AliMUONTrackExtrap.cxx:441
 AliMUONTrackExtrap.cxx:442
 AliMUONTrackExtrap.cxx:443
 AliMUONTrackExtrap.cxx:444
 AliMUONTrackExtrap.cxx:445
 AliMUONTrackExtrap.cxx:446
 AliMUONTrackExtrap.cxx:447
 AliMUONTrackExtrap.cxx:448
 AliMUONTrackExtrap.cxx:449
 AliMUONTrackExtrap.cxx:450
 AliMUONTrackExtrap.cxx:451
 AliMUONTrackExtrap.cxx:452
 AliMUONTrackExtrap.cxx:453
 AliMUONTrackExtrap.cxx:454
 AliMUONTrackExtrap.cxx:455
 AliMUONTrackExtrap.cxx:456
 AliMUONTrackExtrap.cxx:457
 AliMUONTrackExtrap.cxx:458
 AliMUONTrackExtrap.cxx:459
 AliMUONTrackExtrap.cxx:460
 AliMUONTrackExtrap.cxx:461
 AliMUONTrackExtrap.cxx:462
 AliMUONTrackExtrap.cxx:463
 AliMUONTrackExtrap.cxx:464
 AliMUONTrackExtrap.cxx:465
 AliMUONTrackExtrap.cxx:466
 AliMUONTrackExtrap.cxx:467
 AliMUONTrackExtrap.cxx:468
 AliMUONTrackExtrap.cxx:469
 AliMUONTrackExtrap.cxx:470
 AliMUONTrackExtrap.cxx:471
 AliMUONTrackExtrap.cxx:472
 AliMUONTrackExtrap.cxx:473
 AliMUONTrackExtrap.cxx:474
 AliMUONTrackExtrap.cxx:475
 AliMUONTrackExtrap.cxx:476
 AliMUONTrackExtrap.cxx:477
 AliMUONTrackExtrap.cxx:478
 AliMUONTrackExtrap.cxx:479
 AliMUONTrackExtrap.cxx:480
 AliMUONTrackExtrap.cxx:481
 AliMUONTrackExtrap.cxx:482
 AliMUONTrackExtrap.cxx:483
 AliMUONTrackExtrap.cxx:484
 AliMUONTrackExtrap.cxx:485
 AliMUONTrackExtrap.cxx:486
 AliMUONTrackExtrap.cxx:487
 AliMUONTrackExtrap.cxx:488
 AliMUONTrackExtrap.cxx:489
 AliMUONTrackExtrap.cxx:490
 AliMUONTrackExtrap.cxx:491
 AliMUONTrackExtrap.cxx:492
 AliMUONTrackExtrap.cxx:493
 AliMUONTrackExtrap.cxx:494
 AliMUONTrackExtrap.cxx:495
 AliMUONTrackExtrap.cxx:496
 AliMUONTrackExtrap.cxx:497
 AliMUONTrackExtrap.cxx:498
 AliMUONTrackExtrap.cxx:499
 AliMUONTrackExtrap.cxx:500
 AliMUONTrackExtrap.cxx:501
 AliMUONTrackExtrap.cxx:502
 AliMUONTrackExtrap.cxx:503
 AliMUONTrackExtrap.cxx:504
 AliMUONTrackExtrap.cxx:505
 AliMUONTrackExtrap.cxx:506
 AliMUONTrackExtrap.cxx:507
 AliMUONTrackExtrap.cxx:508
 AliMUONTrackExtrap.cxx:509
 AliMUONTrackExtrap.cxx:510
 AliMUONTrackExtrap.cxx:511
 AliMUONTrackExtrap.cxx:512
 AliMUONTrackExtrap.cxx:513
 AliMUONTrackExtrap.cxx:514
 AliMUONTrackExtrap.cxx:515
 AliMUONTrackExtrap.cxx:516
 AliMUONTrackExtrap.cxx:517
 AliMUONTrackExtrap.cxx:518
 AliMUONTrackExtrap.cxx:519
 AliMUONTrackExtrap.cxx:520
 AliMUONTrackExtrap.cxx:521
 AliMUONTrackExtrap.cxx:522
 AliMUONTrackExtrap.cxx:523
 AliMUONTrackExtrap.cxx:524
 AliMUONTrackExtrap.cxx:525
 AliMUONTrackExtrap.cxx:526
 AliMUONTrackExtrap.cxx:527
 AliMUONTrackExtrap.cxx:528
 AliMUONTrackExtrap.cxx:529
 AliMUONTrackExtrap.cxx:530
 AliMUONTrackExtrap.cxx:531
 AliMUONTrackExtrap.cxx:532
 AliMUONTrackExtrap.cxx:533
 AliMUONTrackExtrap.cxx:534
 AliMUONTrackExtrap.cxx:535
 AliMUONTrackExtrap.cxx:536
 AliMUONTrackExtrap.cxx:537
 AliMUONTrackExtrap.cxx:538
 AliMUONTrackExtrap.cxx:539
 AliMUONTrackExtrap.cxx:540
 AliMUONTrackExtrap.cxx:541
 AliMUONTrackExtrap.cxx:542
 AliMUONTrackExtrap.cxx:543
 AliMUONTrackExtrap.cxx:544
 AliMUONTrackExtrap.cxx:545
 AliMUONTrackExtrap.cxx:546
 AliMUONTrackExtrap.cxx:547
 AliMUONTrackExtrap.cxx:548
 AliMUONTrackExtrap.cxx:549
 AliMUONTrackExtrap.cxx:550
 AliMUONTrackExtrap.cxx:551
 AliMUONTrackExtrap.cxx:552
 AliMUONTrackExtrap.cxx:553
 AliMUONTrackExtrap.cxx:554
 AliMUONTrackExtrap.cxx:555
 AliMUONTrackExtrap.cxx:556
 AliMUONTrackExtrap.cxx:557
 AliMUONTrackExtrap.cxx:558
 AliMUONTrackExtrap.cxx:559
 AliMUONTrackExtrap.cxx:560
 AliMUONTrackExtrap.cxx:561
 AliMUONTrackExtrap.cxx:562
 AliMUONTrackExtrap.cxx:563
 AliMUONTrackExtrap.cxx:564
 AliMUONTrackExtrap.cxx:565
 AliMUONTrackExtrap.cxx:566
 AliMUONTrackExtrap.cxx:567
 AliMUONTrackExtrap.cxx:568
 AliMUONTrackExtrap.cxx:569
 AliMUONTrackExtrap.cxx:570
 AliMUONTrackExtrap.cxx:571
 AliMUONTrackExtrap.cxx:572
 AliMUONTrackExtrap.cxx:573
 AliMUONTrackExtrap.cxx:574
 AliMUONTrackExtrap.cxx:575
 AliMUONTrackExtrap.cxx:576
 AliMUONTrackExtrap.cxx:577
 AliMUONTrackExtrap.cxx:578
 AliMUONTrackExtrap.cxx:579
 AliMUONTrackExtrap.cxx:580
 AliMUONTrackExtrap.cxx:581
 AliMUONTrackExtrap.cxx:582
 AliMUONTrackExtrap.cxx:583
 AliMUONTrackExtrap.cxx:584
 AliMUONTrackExtrap.cxx:585
 AliMUONTrackExtrap.cxx:586
 AliMUONTrackExtrap.cxx:587
 AliMUONTrackExtrap.cxx:588
 AliMUONTrackExtrap.cxx:589
 AliMUONTrackExtrap.cxx:590
 AliMUONTrackExtrap.cxx:591
 AliMUONTrackExtrap.cxx:592
 AliMUONTrackExtrap.cxx:593
 AliMUONTrackExtrap.cxx:594
 AliMUONTrackExtrap.cxx:595
 AliMUONTrackExtrap.cxx:596
 AliMUONTrackExtrap.cxx:597
 AliMUONTrackExtrap.cxx:598
 AliMUONTrackExtrap.cxx:599
 AliMUONTrackExtrap.cxx:600
 AliMUONTrackExtrap.cxx:601
 AliMUONTrackExtrap.cxx:602
 AliMUONTrackExtrap.cxx:603
 AliMUONTrackExtrap.cxx:604
 AliMUONTrackExtrap.cxx:605
 AliMUONTrackExtrap.cxx:606
 AliMUONTrackExtrap.cxx:607
 AliMUONTrackExtrap.cxx:608
 AliMUONTrackExtrap.cxx:609
 AliMUONTrackExtrap.cxx:610
 AliMUONTrackExtrap.cxx:611
 AliMUONTrackExtrap.cxx:612
 AliMUONTrackExtrap.cxx:613
 AliMUONTrackExtrap.cxx:614
 AliMUONTrackExtrap.cxx:615
 AliMUONTrackExtrap.cxx:616
 AliMUONTrackExtrap.cxx:617
 AliMUONTrackExtrap.cxx:618
 AliMUONTrackExtrap.cxx:619
 AliMUONTrackExtrap.cxx:620
 AliMUONTrackExtrap.cxx:621
 AliMUONTrackExtrap.cxx:622
 AliMUONTrackExtrap.cxx:623
 AliMUONTrackExtrap.cxx:624
 AliMUONTrackExtrap.cxx:625
 AliMUONTrackExtrap.cxx:626
 AliMUONTrackExtrap.cxx:627
 AliMUONTrackExtrap.cxx:628
 AliMUONTrackExtrap.cxx:629
 AliMUONTrackExtrap.cxx:630
 AliMUONTrackExtrap.cxx:631
 AliMUONTrackExtrap.cxx:632
 AliMUONTrackExtrap.cxx:633
 AliMUONTrackExtrap.cxx:634
 AliMUONTrackExtrap.cxx:635
 AliMUONTrackExtrap.cxx:636
 AliMUONTrackExtrap.cxx:637
 AliMUONTrackExtrap.cxx:638
 AliMUONTrackExtrap.cxx:639
 AliMUONTrackExtrap.cxx:640
 AliMUONTrackExtrap.cxx:641
 AliMUONTrackExtrap.cxx:642
 AliMUONTrackExtrap.cxx:643
 AliMUONTrackExtrap.cxx:644
 AliMUONTrackExtrap.cxx:645
 AliMUONTrackExtrap.cxx:646
 AliMUONTrackExtrap.cxx:647
 AliMUONTrackExtrap.cxx:648
 AliMUONTrackExtrap.cxx:649
 AliMUONTrackExtrap.cxx:650
 AliMUONTrackExtrap.cxx:651
 AliMUONTrackExtrap.cxx:652
 AliMUONTrackExtrap.cxx:653
 AliMUONTrackExtrap.cxx:654
 AliMUONTrackExtrap.cxx:655
 AliMUONTrackExtrap.cxx:656
 AliMUONTrackExtrap.cxx:657
 AliMUONTrackExtrap.cxx:658
 AliMUONTrackExtrap.cxx:659
 AliMUONTrackExtrap.cxx:660
 AliMUONTrackExtrap.cxx:661
 AliMUONTrackExtrap.cxx:662
 AliMUONTrackExtrap.cxx:663
 AliMUONTrackExtrap.cxx:664
 AliMUONTrackExtrap.cxx:665
 AliMUONTrackExtrap.cxx:666
 AliMUONTrackExtrap.cxx:667
 AliMUONTrackExtrap.cxx:668
 AliMUONTrackExtrap.cxx:669
 AliMUONTrackExtrap.cxx:670
 AliMUONTrackExtrap.cxx:671
 AliMUONTrackExtrap.cxx:672
 AliMUONTrackExtrap.cxx:673
 AliMUONTrackExtrap.cxx:674
 AliMUONTrackExtrap.cxx:675
 AliMUONTrackExtrap.cxx:676
 AliMUONTrackExtrap.cxx:677
 AliMUONTrackExtrap.cxx:678
 AliMUONTrackExtrap.cxx:679
 AliMUONTrackExtrap.cxx:680
 AliMUONTrackExtrap.cxx:681
 AliMUONTrackExtrap.cxx:682
 AliMUONTrackExtrap.cxx:683
 AliMUONTrackExtrap.cxx:684
 AliMUONTrackExtrap.cxx:685
 AliMUONTrackExtrap.cxx:686
 AliMUONTrackExtrap.cxx:687
 AliMUONTrackExtrap.cxx:688
 AliMUONTrackExtrap.cxx:689
 AliMUONTrackExtrap.cxx:690
 AliMUONTrackExtrap.cxx:691
 AliMUONTrackExtrap.cxx:692
 AliMUONTrackExtrap.cxx:693
 AliMUONTrackExtrap.cxx:694
 AliMUONTrackExtrap.cxx:695
 AliMUONTrackExtrap.cxx:696
 AliMUONTrackExtrap.cxx:697
 AliMUONTrackExtrap.cxx:698
 AliMUONTrackExtrap.cxx:699
 AliMUONTrackExtrap.cxx:700
 AliMUONTrackExtrap.cxx:701
 AliMUONTrackExtrap.cxx:702
 AliMUONTrackExtrap.cxx:703
 AliMUONTrackExtrap.cxx:704
 AliMUONTrackExtrap.cxx:705
 AliMUONTrackExtrap.cxx:706
 AliMUONTrackExtrap.cxx:707
 AliMUONTrackExtrap.cxx:708
 AliMUONTrackExtrap.cxx:709
 AliMUONTrackExtrap.cxx:710
 AliMUONTrackExtrap.cxx:711
 AliMUONTrackExtrap.cxx:712
 AliMUONTrackExtrap.cxx:713
 AliMUONTrackExtrap.cxx:714
 AliMUONTrackExtrap.cxx:715
 AliMUONTrackExtrap.cxx:716
 AliMUONTrackExtrap.cxx:717
 AliMUONTrackExtrap.cxx:718
 AliMUONTrackExtrap.cxx:719
 AliMUONTrackExtrap.cxx:720
 AliMUONTrackExtrap.cxx:721
 AliMUONTrackExtrap.cxx:722
 AliMUONTrackExtrap.cxx:723
 AliMUONTrackExtrap.cxx:724
 AliMUONTrackExtrap.cxx:725
 AliMUONTrackExtrap.cxx:726
 AliMUONTrackExtrap.cxx:727
 AliMUONTrackExtrap.cxx:728
 AliMUONTrackExtrap.cxx:729
 AliMUONTrackExtrap.cxx:730
 AliMUONTrackExtrap.cxx:731
 AliMUONTrackExtrap.cxx:732
 AliMUONTrackExtrap.cxx:733
 AliMUONTrackExtrap.cxx:734
 AliMUONTrackExtrap.cxx:735
 AliMUONTrackExtrap.cxx:736
 AliMUONTrackExtrap.cxx:737
 AliMUONTrackExtrap.cxx:738
 AliMUONTrackExtrap.cxx:739
 AliMUONTrackExtrap.cxx:740
 AliMUONTrackExtrap.cxx:741
 AliMUONTrackExtrap.cxx:742
 AliMUONTrackExtrap.cxx:743
 AliMUONTrackExtrap.cxx:744
 AliMUONTrackExtrap.cxx:745
 AliMUONTrackExtrap.cxx:746
 AliMUONTrackExtrap.cxx:747
 AliMUONTrackExtrap.cxx:748
 AliMUONTrackExtrap.cxx:749
 AliMUONTrackExtrap.cxx:750
 AliMUONTrackExtrap.cxx:751
 AliMUONTrackExtrap.cxx:752
 AliMUONTrackExtrap.cxx:753
 AliMUONTrackExtrap.cxx:754
 AliMUONTrackExtrap.cxx:755
 AliMUONTrackExtrap.cxx:756
 AliMUONTrackExtrap.cxx:757
 AliMUONTrackExtrap.cxx:758
 AliMUONTrackExtrap.cxx:759
 AliMUONTrackExtrap.cxx:760
 AliMUONTrackExtrap.cxx:761
 AliMUONTrackExtrap.cxx:762
 AliMUONTrackExtrap.cxx:763
 AliMUONTrackExtrap.cxx:764
 AliMUONTrackExtrap.cxx:765
 AliMUONTrackExtrap.cxx:766
 AliMUONTrackExtrap.cxx:767
 AliMUONTrackExtrap.cxx:768
 AliMUONTrackExtrap.cxx:769
 AliMUONTrackExtrap.cxx:770
 AliMUONTrackExtrap.cxx:771
 AliMUONTrackExtrap.cxx:772
 AliMUONTrackExtrap.cxx:773
 AliMUONTrackExtrap.cxx:774
 AliMUONTrackExtrap.cxx:775
 AliMUONTrackExtrap.cxx:776
 AliMUONTrackExtrap.cxx:777
 AliMUONTrackExtrap.cxx:778
 AliMUONTrackExtrap.cxx:779
 AliMUONTrackExtrap.cxx:780
 AliMUONTrackExtrap.cxx:781
 AliMUONTrackExtrap.cxx:782
 AliMUONTrackExtrap.cxx:783
 AliMUONTrackExtrap.cxx:784
 AliMUONTrackExtrap.cxx:785
 AliMUONTrackExtrap.cxx:786
 AliMUONTrackExtrap.cxx:787
 AliMUONTrackExtrap.cxx:788
 AliMUONTrackExtrap.cxx:789
 AliMUONTrackExtrap.cxx:790
 AliMUONTrackExtrap.cxx:791
 AliMUONTrackExtrap.cxx:792
 AliMUONTrackExtrap.cxx:793
 AliMUONTrackExtrap.cxx:794
 AliMUONTrackExtrap.cxx:795
 AliMUONTrackExtrap.cxx:796
 AliMUONTrackExtrap.cxx:797
 AliMUONTrackExtrap.cxx:798
 AliMUONTrackExtrap.cxx:799
 AliMUONTrackExtrap.cxx:800
 AliMUONTrackExtrap.cxx:801
 AliMUONTrackExtrap.cxx:802
 AliMUONTrackExtrap.cxx:803
 AliMUONTrackExtrap.cxx:804
 AliMUONTrackExtrap.cxx:805
 AliMUONTrackExtrap.cxx:806
 AliMUONTrackExtrap.cxx:807
 AliMUONTrackExtrap.cxx:808
 AliMUONTrackExtrap.cxx:809
 AliMUONTrackExtrap.cxx:810
 AliMUONTrackExtrap.cxx:811
 AliMUONTrackExtrap.cxx:812
 AliMUONTrackExtrap.cxx:813
 AliMUONTrackExtrap.cxx:814
 AliMUONTrackExtrap.cxx:815
 AliMUONTrackExtrap.cxx:816
 AliMUONTrackExtrap.cxx:817
 AliMUONTrackExtrap.cxx:818
 AliMUONTrackExtrap.cxx:819
 AliMUONTrackExtrap.cxx:820
 AliMUONTrackExtrap.cxx:821
 AliMUONTrackExtrap.cxx:822
 AliMUONTrackExtrap.cxx:823
 AliMUONTrackExtrap.cxx:824
 AliMUONTrackExtrap.cxx:825
 AliMUONTrackExtrap.cxx:826
 AliMUONTrackExtrap.cxx:827
 AliMUONTrackExtrap.cxx:828
 AliMUONTrackExtrap.cxx:829
 AliMUONTrackExtrap.cxx:830
 AliMUONTrackExtrap.cxx:831
 AliMUONTrackExtrap.cxx:832
 AliMUONTrackExtrap.cxx:833
 AliMUONTrackExtrap.cxx:834
 AliMUONTrackExtrap.cxx:835
 AliMUONTrackExtrap.cxx:836
 AliMUONTrackExtrap.cxx:837
 AliMUONTrackExtrap.cxx:838
 AliMUONTrackExtrap.cxx:839
 AliMUONTrackExtrap.cxx:840
 AliMUONTrackExtrap.cxx:841
 AliMUONTrackExtrap.cxx:842
 AliMUONTrackExtrap.cxx:843
 AliMUONTrackExtrap.cxx:844
 AliMUONTrackExtrap.cxx:845
 AliMUONTrackExtrap.cxx:846
 AliMUONTrackExtrap.cxx:847
 AliMUONTrackExtrap.cxx:848
 AliMUONTrackExtrap.cxx:849
 AliMUONTrackExtrap.cxx:850
 AliMUONTrackExtrap.cxx:851
 AliMUONTrackExtrap.cxx:852
 AliMUONTrackExtrap.cxx:853
 AliMUONTrackExtrap.cxx:854
 AliMUONTrackExtrap.cxx:855
 AliMUONTrackExtrap.cxx:856
 AliMUONTrackExtrap.cxx:857
 AliMUONTrackExtrap.cxx:858
 AliMUONTrackExtrap.cxx:859
 AliMUONTrackExtrap.cxx:860
 AliMUONTrackExtrap.cxx:861
 AliMUONTrackExtrap.cxx:862
 AliMUONTrackExtrap.cxx:863
 AliMUONTrackExtrap.cxx:864
 AliMUONTrackExtrap.cxx:865
 AliMUONTrackExtrap.cxx:866
 AliMUONTrackExtrap.cxx:867
 AliMUONTrackExtrap.cxx:868
 AliMUONTrackExtrap.cxx:869
 AliMUONTrackExtrap.cxx:870
 AliMUONTrackExtrap.cxx:871
 AliMUONTrackExtrap.cxx:872
 AliMUONTrackExtrap.cxx:873
 AliMUONTrackExtrap.cxx:874
 AliMUONTrackExtrap.cxx:875
 AliMUONTrackExtrap.cxx:876
 AliMUONTrackExtrap.cxx:877
 AliMUONTrackExtrap.cxx:878
 AliMUONTrackExtrap.cxx:879
 AliMUONTrackExtrap.cxx:880
 AliMUONTrackExtrap.cxx:881
 AliMUONTrackExtrap.cxx:882
 AliMUONTrackExtrap.cxx:883
 AliMUONTrackExtrap.cxx:884
 AliMUONTrackExtrap.cxx:885
 AliMUONTrackExtrap.cxx:886
 AliMUONTrackExtrap.cxx:887
 AliMUONTrackExtrap.cxx:888
 AliMUONTrackExtrap.cxx:889
 AliMUONTrackExtrap.cxx:890
 AliMUONTrackExtrap.cxx:891
 AliMUONTrackExtrap.cxx:892
 AliMUONTrackExtrap.cxx:893
 AliMUONTrackExtrap.cxx:894
 AliMUONTrackExtrap.cxx:895
 AliMUONTrackExtrap.cxx:896
 AliMUONTrackExtrap.cxx:897
 AliMUONTrackExtrap.cxx:898
 AliMUONTrackExtrap.cxx:899
 AliMUONTrackExtrap.cxx:900
 AliMUONTrackExtrap.cxx:901
 AliMUONTrackExtrap.cxx:902
 AliMUONTrackExtrap.cxx:903
 AliMUONTrackExtrap.cxx:904
 AliMUONTrackExtrap.cxx:905
 AliMUONTrackExtrap.cxx:906
 AliMUONTrackExtrap.cxx:907
 AliMUONTrackExtrap.cxx:908
 AliMUONTrackExtrap.cxx:909
 AliMUONTrackExtrap.cxx:910
 AliMUONTrackExtrap.cxx:911
 AliMUONTrackExtrap.cxx:912
 AliMUONTrackExtrap.cxx:913
 AliMUONTrackExtrap.cxx:914
 AliMUONTrackExtrap.cxx:915
 AliMUONTrackExtrap.cxx:916
 AliMUONTrackExtrap.cxx:917
 AliMUONTrackExtrap.cxx:918
 AliMUONTrackExtrap.cxx:919
 AliMUONTrackExtrap.cxx:920
 AliMUONTrackExtrap.cxx:921
 AliMUONTrackExtrap.cxx:922
 AliMUONTrackExtrap.cxx:923
 AliMUONTrackExtrap.cxx:924
 AliMUONTrackExtrap.cxx:925
 AliMUONTrackExtrap.cxx:926
 AliMUONTrackExtrap.cxx:927
 AliMUONTrackExtrap.cxx:928
 AliMUONTrackExtrap.cxx:929
 AliMUONTrackExtrap.cxx:930
 AliMUONTrackExtrap.cxx:931
 AliMUONTrackExtrap.cxx:932
 AliMUONTrackExtrap.cxx:933
 AliMUONTrackExtrap.cxx:934
 AliMUONTrackExtrap.cxx:935
 AliMUONTrackExtrap.cxx:936
 AliMUONTrackExtrap.cxx:937
 AliMUONTrackExtrap.cxx:938
 AliMUONTrackExtrap.cxx:939
 AliMUONTrackExtrap.cxx:940
 AliMUONTrackExtrap.cxx:941
 AliMUONTrackExtrap.cxx:942
 AliMUONTrackExtrap.cxx:943
 AliMUONTrackExtrap.cxx:944
 AliMUONTrackExtrap.cxx:945
 AliMUONTrackExtrap.cxx:946
 AliMUONTrackExtrap.cxx:947
 AliMUONTrackExtrap.cxx:948
 AliMUONTrackExtrap.cxx:949
 AliMUONTrackExtrap.cxx:950
 AliMUONTrackExtrap.cxx:951
 AliMUONTrackExtrap.cxx:952
 AliMUONTrackExtrap.cxx:953
 AliMUONTrackExtrap.cxx:954
 AliMUONTrackExtrap.cxx:955
 AliMUONTrackExtrap.cxx:956
 AliMUONTrackExtrap.cxx:957
 AliMUONTrackExtrap.cxx:958
 AliMUONTrackExtrap.cxx:959
 AliMUONTrackExtrap.cxx:960
 AliMUONTrackExtrap.cxx:961
 AliMUONTrackExtrap.cxx:962
 AliMUONTrackExtrap.cxx:963
 AliMUONTrackExtrap.cxx:964
 AliMUONTrackExtrap.cxx:965
 AliMUONTrackExtrap.cxx:966
 AliMUONTrackExtrap.cxx:967
 AliMUONTrackExtrap.cxx:968
 AliMUONTrackExtrap.cxx:969
 AliMUONTrackExtrap.cxx:970
 AliMUONTrackExtrap.cxx:971
 AliMUONTrackExtrap.cxx:972
 AliMUONTrackExtrap.cxx:973
 AliMUONTrackExtrap.cxx:974
 AliMUONTrackExtrap.cxx:975
 AliMUONTrackExtrap.cxx:976
 AliMUONTrackExtrap.cxx:977
 AliMUONTrackExtrap.cxx:978
 AliMUONTrackExtrap.cxx:979
 AliMUONTrackExtrap.cxx:980
 AliMUONTrackExtrap.cxx:981
 AliMUONTrackExtrap.cxx:982
 AliMUONTrackExtrap.cxx:983
 AliMUONTrackExtrap.cxx:984
 AliMUONTrackExtrap.cxx:985
 AliMUONTrackExtrap.cxx:986
 AliMUONTrackExtrap.cxx:987
 AliMUONTrackExtrap.cxx:988
 AliMUONTrackExtrap.cxx:989
 AliMUONTrackExtrap.cxx:990
 AliMUONTrackExtrap.cxx:991
 AliMUONTrackExtrap.cxx:992
 AliMUONTrackExtrap.cxx:993
 AliMUONTrackExtrap.cxx:994
 AliMUONTrackExtrap.cxx:995
 AliMUONTrackExtrap.cxx:996
 AliMUONTrackExtrap.cxx:997
 AliMUONTrackExtrap.cxx:998
 AliMUONTrackExtrap.cxx:999
 AliMUONTrackExtrap.cxx:1000
 AliMUONTrackExtrap.cxx:1001
 AliMUONTrackExtrap.cxx:1002
 AliMUONTrackExtrap.cxx:1003
 AliMUONTrackExtrap.cxx:1004
 AliMUONTrackExtrap.cxx:1005
 AliMUONTrackExtrap.cxx:1006
 AliMUONTrackExtrap.cxx:1007
 AliMUONTrackExtrap.cxx:1008
 AliMUONTrackExtrap.cxx:1009
 AliMUONTrackExtrap.cxx:1010
 AliMUONTrackExtrap.cxx:1011
 AliMUONTrackExtrap.cxx:1012
 AliMUONTrackExtrap.cxx:1013
 AliMUONTrackExtrap.cxx:1014
 AliMUONTrackExtrap.cxx:1015
 AliMUONTrackExtrap.cxx:1016
 AliMUONTrackExtrap.cxx:1017
 AliMUONTrackExtrap.cxx:1018
 AliMUONTrackExtrap.cxx:1019
 AliMUONTrackExtrap.cxx:1020
 AliMUONTrackExtrap.cxx:1021
 AliMUONTrackExtrap.cxx:1022
 AliMUONTrackExtrap.cxx:1023
 AliMUONTrackExtrap.cxx:1024
 AliMUONTrackExtrap.cxx:1025
 AliMUONTrackExtrap.cxx:1026
 AliMUONTrackExtrap.cxx:1027
 AliMUONTrackExtrap.cxx:1028
 AliMUONTrackExtrap.cxx:1029
 AliMUONTrackExtrap.cxx:1030
 AliMUONTrackExtrap.cxx:1031
 AliMUONTrackExtrap.cxx:1032
 AliMUONTrackExtrap.cxx:1033
 AliMUONTrackExtrap.cxx:1034
 AliMUONTrackExtrap.cxx:1035
 AliMUONTrackExtrap.cxx:1036
 AliMUONTrackExtrap.cxx:1037
 AliMUONTrackExtrap.cxx:1038
 AliMUONTrackExtrap.cxx:1039
 AliMUONTrackExtrap.cxx:1040
 AliMUONTrackExtrap.cxx:1041
 AliMUONTrackExtrap.cxx:1042
 AliMUONTrackExtrap.cxx:1043
 AliMUONTrackExtrap.cxx:1044
 AliMUONTrackExtrap.cxx:1045
 AliMUONTrackExtrap.cxx:1046
 AliMUONTrackExtrap.cxx:1047
 AliMUONTrackExtrap.cxx:1048
 AliMUONTrackExtrap.cxx:1049
 AliMUONTrackExtrap.cxx:1050
 AliMUONTrackExtrap.cxx:1051
 AliMUONTrackExtrap.cxx:1052
 AliMUONTrackExtrap.cxx:1053
 AliMUONTrackExtrap.cxx:1054
 AliMUONTrackExtrap.cxx:1055
 AliMUONTrackExtrap.cxx:1056
 AliMUONTrackExtrap.cxx:1057
 AliMUONTrackExtrap.cxx:1058
 AliMUONTrackExtrap.cxx:1059
 AliMUONTrackExtrap.cxx:1060
 AliMUONTrackExtrap.cxx:1061
 AliMUONTrackExtrap.cxx:1062
 AliMUONTrackExtrap.cxx:1063
 AliMUONTrackExtrap.cxx:1064
 AliMUONTrackExtrap.cxx:1065
 AliMUONTrackExtrap.cxx:1066
 AliMUONTrackExtrap.cxx:1067
 AliMUONTrackExtrap.cxx:1068
 AliMUONTrackExtrap.cxx:1069
 AliMUONTrackExtrap.cxx:1070
 AliMUONTrackExtrap.cxx:1071
 AliMUONTrackExtrap.cxx:1072
 AliMUONTrackExtrap.cxx:1073
 AliMUONTrackExtrap.cxx:1074
 AliMUONTrackExtrap.cxx:1075
 AliMUONTrackExtrap.cxx:1076
 AliMUONTrackExtrap.cxx:1077
 AliMUONTrackExtrap.cxx:1078
 AliMUONTrackExtrap.cxx:1079
 AliMUONTrackExtrap.cxx:1080
 AliMUONTrackExtrap.cxx:1081
 AliMUONTrackExtrap.cxx:1082
 AliMUONTrackExtrap.cxx:1083
 AliMUONTrackExtrap.cxx:1084
 AliMUONTrackExtrap.cxx:1085
 AliMUONTrackExtrap.cxx:1086
 AliMUONTrackExtrap.cxx:1087
 AliMUONTrackExtrap.cxx:1088
 AliMUONTrackExtrap.cxx:1089
 AliMUONTrackExtrap.cxx:1090
 AliMUONTrackExtrap.cxx:1091
 AliMUONTrackExtrap.cxx:1092
 AliMUONTrackExtrap.cxx:1093
 AliMUONTrackExtrap.cxx:1094
 AliMUONTrackExtrap.cxx:1095
 AliMUONTrackExtrap.cxx:1096
 AliMUONTrackExtrap.cxx:1097
 AliMUONTrackExtrap.cxx:1098
 AliMUONTrackExtrap.cxx:1099
 AliMUONTrackExtrap.cxx:1100
 AliMUONTrackExtrap.cxx:1101
 AliMUONTrackExtrap.cxx:1102
 AliMUONTrackExtrap.cxx:1103
 AliMUONTrackExtrap.cxx:1104
 AliMUONTrackExtrap.cxx:1105
 AliMUONTrackExtrap.cxx:1106
 AliMUONTrackExtrap.cxx:1107
 AliMUONTrackExtrap.cxx:1108
 AliMUONTrackExtrap.cxx:1109
 AliMUONTrackExtrap.cxx:1110
 AliMUONTrackExtrap.cxx:1111
 AliMUONTrackExtrap.cxx:1112
 AliMUONTrackExtrap.cxx:1113
 AliMUONTrackExtrap.cxx:1114
 AliMUONTrackExtrap.cxx:1115
 AliMUONTrackExtrap.cxx:1116
 AliMUONTrackExtrap.cxx:1117
 AliMUONTrackExtrap.cxx:1118
 AliMUONTrackExtrap.cxx:1119
 AliMUONTrackExtrap.cxx:1120
 AliMUONTrackExtrap.cxx:1121
 AliMUONTrackExtrap.cxx:1122
 AliMUONTrackExtrap.cxx:1123
 AliMUONTrackExtrap.cxx:1124
 AliMUONTrackExtrap.cxx:1125
 AliMUONTrackExtrap.cxx:1126
 AliMUONTrackExtrap.cxx:1127
 AliMUONTrackExtrap.cxx:1128
 AliMUONTrackExtrap.cxx:1129
 AliMUONTrackExtrap.cxx:1130
 AliMUONTrackExtrap.cxx:1131
 AliMUONTrackExtrap.cxx:1132
 AliMUONTrackExtrap.cxx:1133
 AliMUONTrackExtrap.cxx:1134
 AliMUONTrackExtrap.cxx:1135
 AliMUONTrackExtrap.cxx:1136
 AliMUONTrackExtrap.cxx:1137
 AliMUONTrackExtrap.cxx:1138
 AliMUONTrackExtrap.cxx:1139
 AliMUONTrackExtrap.cxx:1140
 AliMUONTrackExtrap.cxx:1141
 AliMUONTrackExtrap.cxx:1142
 AliMUONTrackExtrap.cxx:1143
 AliMUONTrackExtrap.cxx:1144
 AliMUONTrackExtrap.cxx:1145
 AliMUONTrackExtrap.cxx:1146
 AliMUONTrackExtrap.cxx:1147
 AliMUONTrackExtrap.cxx:1148
 AliMUONTrackExtrap.cxx:1149
 AliMUONTrackExtrap.cxx:1150
 AliMUONTrackExtrap.cxx:1151
 AliMUONTrackExtrap.cxx:1152
 AliMUONTrackExtrap.cxx:1153
 AliMUONTrackExtrap.cxx:1154
 AliMUONTrackExtrap.cxx:1155
 AliMUONTrackExtrap.cxx:1156
 AliMUONTrackExtrap.cxx:1157
 AliMUONTrackExtrap.cxx:1158
 AliMUONTrackExtrap.cxx:1159
 AliMUONTrackExtrap.cxx:1160
 AliMUONTrackExtrap.cxx:1161
 AliMUONTrackExtrap.cxx:1162
 AliMUONTrackExtrap.cxx:1163
 AliMUONTrackExtrap.cxx:1164
 AliMUONTrackExtrap.cxx:1165
 AliMUONTrackExtrap.cxx:1166
 AliMUONTrackExtrap.cxx:1167
 AliMUONTrackExtrap.cxx:1168
 AliMUONTrackExtrap.cxx:1169
 AliMUONTrackExtrap.cxx:1170
 AliMUONTrackExtrap.cxx:1171
 AliMUONTrackExtrap.cxx:1172
 AliMUONTrackExtrap.cxx:1173
 AliMUONTrackExtrap.cxx:1174
 AliMUONTrackExtrap.cxx:1175
 AliMUONTrackExtrap.cxx:1176
 AliMUONTrackExtrap.cxx:1177
 AliMUONTrackExtrap.cxx:1178
 AliMUONTrackExtrap.cxx:1179
 AliMUONTrackExtrap.cxx:1180
 AliMUONTrackExtrap.cxx:1181
 AliMUONTrackExtrap.cxx:1182
 AliMUONTrackExtrap.cxx:1183
 AliMUONTrackExtrap.cxx:1184
 AliMUONTrackExtrap.cxx:1185
 AliMUONTrackExtrap.cxx:1186
 AliMUONTrackExtrap.cxx:1187
 AliMUONTrackExtrap.cxx:1188
 AliMUONTrackExtrap.cxx:1189
 AliMUONTrackExtrap.cxx:1190
 AliMUONTrackExtrap.cxx:1191
 AliMUONTrackExtrap.cxx:1192
 AliMUONTrackExtrap.cxx:1193
 AliMUONTrackExtrap.cxx:1194
 AliMUONTrackExtrap.cxx:1195
 AliMUONTrackExtrap.cxx:1196
 AliMUONTrackExtrap.cxx:1197
 AliMUONTrackExtrap.cxx:1198
 AliMUONTrackExtrap.cxx:1199
 AliMUONTrackExtrap.cxx:1200
 AliMUONTrackExtrap.cxx:1201
 AliMUONTrackExtrap.cxx:1202
 AliMUONTrackExtrap.cxx:1203
 AliMUONTrackExtrap.cxx:1204
 AliMUONTrackExtrap.cxx:1205
 AliMUONTrackExtrap.cxx:1206
 AliMUONTrackExtrap.cxx:1207
 AliMUONTrackExtrap.cxx:1208
 AliMUONTrackExtrap.cxx:1209
 AliMUONTrackExtrap.cxx:1210
 AliMUONTrackExtrap.cxx:1211
 AliMUONTrackExtrap.cxx:1212
 AliMUONTrackExtrap.cxx:1213
 AliMUONTrackExtrap.cxx:1214
 AliMUONTrackExtrap.cxx:1215
 AliMUONTrackExtrap.cxx:1216
 AliMUONTrackExtrap.cxx:1217
 AliMUONTrackExtrap.cxx:1218
 AliMUONTrackExtrap.cxx:1219
 AliMUONTrackExtrap.cxx:1220
 AliMUONTrackExtrap.cxx:1221
 AliMUONTrackExtrap.cxx:1222
 AliMUONTrackExtrap.cxx:1223
 AliMUONTrackExtrap.cxx:1224
 AliMUONTrackExtrap.cxx:1225
 AliMUONTrackExtrap.cxx:1226
 AliMUONTrackExtrap.cxx:1227
 AliMUONTrackExtrap.cxx:1228
 AliMUONTrackExtrap.cxx:1229
 AliMUONTrackExtrap.cxx:1230
 AliMUONTrackExtrap.cxx:1231
 AliMUONTrackExtrap.cxx:1232
 AliMUONTrackExtrap.cxx:1233
 AliMUONTrackExtrap.cxx:1234
 AliMUONTrackExtrap.cxx:1235
 AliMUONTrackExtrap.cxx:1236
 AliMUONTrackExtrap.cxx:1237
 AliMUONTrackExtrap.cxx:1238
 AliMUONTrackExtrap.cxx:1239
 AliMUONTrackExtrap.cxx:1240
 AliMUONTrackExtrap.cxx:1241
 AliMUONTrackExtrap.cxx:1242
 AliMUONTrackExtrap.cxx:1243
 AliMUONTrackExtrap.cxx:1244
 AliMUONTrackExtrap.cxx:1245
 AliMUONTrackExtrap.cxx:1246
 AliMUONTrackExtrap.cxx:1247
 AliMUONTrackExtrap.cxx:1248
 AliMUONTrackExtrap.cxx:1249
 AliMUONTrackExtrap.cxx:1250
 AliMUONTrackExtrap.cxx:1251
 AliMUONTrackExtrap.cxx:1252
 AliMUONTrackExtrap.cxx:1253
 AliMUONTrackExtrap.cxx:1254
 AliMUONTrackExtrap.cxx:1255
 AliMUONTrackExtrap.cxx:1256
 AliMUONTrackExtrap.cxx:1257
 AliMUONTrackExtrap.cxx:1258
 AliMUONTrackExtrap.cxx:1259
 AliMUONTrackExtrap.cxx:1260
 AliMUONTrackExtrap.cxx:1261
 AliMUONTrackExtrap.cxx:1262
 AliMUONTrackExtrap.cxx:1263
 AliMUONTrackExtrap.cxx:1264
 AliMUONTrackExtrap.cxx:1265
 AliMUONTrackExtrap.cxx:1266
 AliMUONTrackExtrap.cxx:1267
 AliMUONTrackExtrap.cxx:1268
 AliMUONTrackExtrap.cxx:1269
 AliMUONTrackExtrap.cxx:1270
 AliMUONTrackExtrap.cxx:1271
 AliMUONTrackExtrap.cxx:1272
 AliMUONTrackExtrap.cxx:1273
 AliMUONTrackExtrap.cxx:1274
 AliMUONTrackExtrap.cxx:1275
 AliMUONTrackExtrap.cxx:1276
 AliMUONTrackExtrap.cxx:1277
 AliMUONTrackExtrap.cxx:1278
 AliMUONTrackExtrap.cxx:1279
 AliMUONTrackExtrap.cxx:1280
 AliMUONTrackExtrap.cxx:1281
 AliMUONTrackExtrap.cxx:1282
 AliMUONTrackExtrap.cxx:1283
 AliMUONTrackExtrap.cxx:1284
 AliMUONTrackExtrap.cxx:1285
 AliMUONTrackExtrap.cxx:1286
 AliMUONTrackExtrap.cxx:1287
 AliMUONTrackExtrap.cxx:1288
 AliMUONTrackExtrap.cxx:1289
 AliMUONTrackExtrap.cxx:1290
 AliMUONTrackExtrap.cxx:1291
 AliMUONTrackExtrap.cxx:1292
 AliMUONTrackExtrap.cxx:1293
 AliMUONTrackExtrap.cxx:1294
 AliMUONTrackExtrap.cxx:1295
 AliMUONTrackExtrap.cxx:1296
 AliMUONTrackExtrap.cxx:1297
 AliMUONTrackExtrap.cxx:1298
 AliMUONTrackExtrap.cxx:1299
 AliMUONTrackExtrap.cxx:1300
 AliMUONTrackExtrap.cxx:1301
 AliMUONTrackExtrap.cxx:1302
 AliMUONTrackExtrap.cxx:1303
 AliMUONTrackExtrap.cxx:1304
 AliMUONTrackExtrap.cxx:1305
 AliMUONTrackExtrap.cxx:1306
 AliMUONTrackExtrap.cxx:1307
 AliMUONTrackExtrap.cxx:1308
 AliMUONTrackExtrap.cxx:1309
 AliMUONTrackExtrap.cxx:1310
 AliMUONTrackExtrap.cxx:1311
 AliMUONTrackExtrap.cxx:1312
 AliMUONTrackExtrap.cxx:1313
 AliMUONTrackExtrap.cxx:1314
 AliMUONTrackExtrap.cxx:1315
 AliMUONTrackExtrap.cxx:1316
 AliMUONTrackExtrap.cxx:1317
 AliMUONTrackExtrap.cxx:1318
 AliMUONTrackExtrap.cxx:1319
 AliMUONTrackExtrap.cxx:1320
 AliMUONTrackExtrap.cxx:1321
 AliMUONTrackExtrap.cxx:1322
 AliMUONTrackExtrap.cxx:1323
 AliMUONTrackExtrap.cxx:1324
 AliMUONTrackExtrap.cxx:1325
 AliMUONTrackExtrap.cxx:1326
 AliMUONTrackExtrap.cxx:1327
 AliMUONTrackExtrap.cxx:1328
 AliMUONTrackExtrap.cxx:1329
 AliMUONTrackExtrap.cxx:1330
 AliMUONTrackExtrap.cxx:1331
 AliMUONTrackExtrap.cxx:1332
 AliMUONTrackExtrap.cxx:1333
 AliMUONTrackExtrap.cxx:1334
 AliMUONTrackExtrap.cxx:1335
 AliMUONTrackExtrap.cxx:1336
 AliMUONTrackExtrap.cxx:1337
 AliMUONTrackExtrap.cxx:1338
 AliMUONTrackExtrap.cxx:1339
 AliMUONTrackExtrap.cxx:1340
 AliMUONTrackExtrap.cxx:1341
 AliMUONTrackExtrap.cxx:1342
 AliMUONTrackExtrap.cxx:1343
 AliMUONTrackExtrap.cxx:1344
 AliMUONTrackExtrap.cxx:1345
 AliMUONTrackExtrap.cxx:1346
 AliMUONTrackExtrap.cxx:1347
 AliMUONTrackExtrap.cxx:1348
 AliMUONTrackExtrap.cxx:1349
 AliMUONTrackExtrap.cxx:1350
 AliMUONTrackExtrap.cxx:1351
 AliMUONTrackExtrap.cxx:1352
 AliMUONTrackExtrap.cxx:1353
 AliMUONTrackExtrap.cxx:1354
 AliMUONTrackExtrap.cxx:1355
 AliMUONTrackExtrap.cxx:1356
 AliMUONTrackExtrap.cxx:1357
 AliMUONTrackExtrap.cxx:1358
 AliMUONTrackExtrap.cxx:1359
 AliMUONTrackExtrap.cxx:1360
 AliMUONTrackExtrap.cxx:1361
 AliMUONTrackExtrap.cxx:1362
 AliMUONTrackExtrap.cxx:1363
 AliMUONTrackExtrap.cxx:1364
 AliMUONTrackExtrap.cxx:1365
 AliMUONTrackExtrap.cxx:1366
 AliMUONTrackExtrap.cxx:1367
 AliMUONTrackExtrap.cxx:1368
 AliMUONTrackExtrap.cxx:1369
 AliMUONTrackExtrap.cxx:1370
 AliMUONTrackExtrap.cxx:1371
 AliMUONTrackExtrap.cxx:1372
 AliMUONTrackExtrap.cxx:1373
 AliMUONTrackExtrap.cxx:1374
 AliMUONTrackExtrap.cxx:1375
 AliMUONTrackExtrap.cxx:1376
 AliMUONTrackExtrap.cxx:1377
 AliMUONTrackExtrap.cxx:1378
 AliMUONTrackExtrap.cxx:1379
 AliMUONTrackExtrap.cxx:1380
 AliMUONTrackExtrap.cxx:1381
 AliMUONTrackExtrap.cxx:1382
 AliMUONTrackExtrap.cxx:1383
 AliMUONTrackExtrap.cxx:1384
 AliMUONTrackExtrap.cxx:1385
 AliMUONTrackExtrap.cxx:1386
 AliMUONTrackExtrap.cxx:1387
 AliMUONTrackExtrap.cxx:1388
 AliMUONTrackExtrap.cxx:1389
 AliMUONTrackExtrap.cxx:1390
 AliMUONTrackExtrap.cxx:1391
 AliMUONTrackExtrap.cxx:1392
 AliMUONTrackExtrap.cxx:1393
 AliMUONTrackExtrap.cxx:1394
 AliMUONTrackExtrap.cxx:1395
 AliMUONTrackExtrap.cxx:1396
 AliMUONTrackExtrap.cxx:1397
 AliMUONTrackExtrap.cxx:1398
 AliMUONTrackExtrap.cxx:1399
 AliMUONTrackExtrap.cxx:1400
 AliMUONTrackExtrap.cxx:1401
 AliMUONTrackExtrap.cxx:1402
 AliMUONTrackExtrap.cxx:1403
 AliMUONTrackExtrap.cxx:1404
 AliMUONTrackExtrap.cxx:1405
 AliMUONTrackExtrap.cxx:1406
 AliMUONTrackExtrap.cxx:1407
 AliMUONTrackExtrap.cxx:1408
 AliMUONTrackExtrap.cxx:1409
 AliMUONTrackExtrap.cxx:1410
 AliMUONTrackExtrap.cxx:1411
 AliMUONTrackExtrap.cxx:1412
 AliMUONTrackExtrap.cxx:1413
 AliMUONTrackExtrap.cxx:1414
 AliMUONTrackExtrap.cxx:1415
 AliMUONTrackExtrap.cxx:1416
 AliMUONTrackExtrap.cxx:1417
 AliMUONTrackExtrap.cxx:1418
 AliMUONTrackExtrap.cxx:1419
 AliMUONTrackExtrap.cxx:1420
 AliMUONTrackExtrap.cxx:1421
 AliMUONTrackExtrap.cxx:1422
 AliMUONTrackExtrap.cxx:1423
 AliMUONTrackExtrap.cxx:1424
 AliMUONTrackExtrap.cxx:1425
 AliMUONTrackExtrap.cxx:1426
 AliMUONTrackExtrap.cxx:1427
 AliMUONTrackExtrap.cxx:1428
 AliMUONTrackExtrap.cxx:1429
 AliMUONTrackExtrap.cxx:1430
 AliMUONTrackExtrap.cxx:1431
 AliMUONTrackExtrap.cxx:1432
 AliMUONTrackExtrap.cxx:1433
 AliMUONTrackExtrap.cxx:1434
 AliMUONTrackExtrap.cxx:1435
 AliMUONTrackExtrap.cxx:1436
 AliMUONTrackExtrap.cxx:1437
 AliMUONTrackExtrap.cxx:1438
 AliMUONTrackExtrap.cxx:1439
 AliMUONTrackExtrap.cxx:1440
 AliMUONTrackExtrap.cxx:1441
 AliMUONTrackExtrap.cxx:1442
 AliMUONTrackExtrap.cxx:1443
 AliMUONTrackExtrap.cxx:1444
 AliMUONTrackExtrap.cxx:1445
 AliMUONTrackExtrap.cxx:1446
 AliMUONTrackExtrap.cxx:1447
 AliMUONTrackExtrap.cxx:1448
 AliMUONTrackExtrap.cxx:1449
 AliMUONTrackExtrap.cxx:1450
 AliMUONTrackExtrap.cxx:1451
 AliMUONTrackExtrap.cxx:1452
 AliMUONTrackExtrap.cxx:1453
 AliMUONTrackExtrap.cxx:1454
 AliMUONTrackExtrap.cxx:1455
 AliMUONTrackExtrap.cxx:1456
 AliMUONTrackExtrap.cxx:1457
 AliMUONTrackExtrap.cxx:1458
 AliMUONTrackExtrap.cxx:1459
 AliMUONTrackExtrap.cxx:1460
 AliMUONTrackExtrap.cxx:1461
 AliMUONTrackExtrap.cxx:1462
 AliMUONTrackExtrap.cxx:1463
 AliMUONTrackExtrap.cxx:1464
 AliMUONTrackExtrap.cxx:1465
 AliMUONTrackExtrap.cxx:1466
 AliMUONTrackExtrap.cxx:1467
 AliMUONTrackExtrap.cxx:1468
 AliMUONTrackExtrap.cxx:1469
 AliMUONTrackExtrap.cxx:1470
 AliMUONTrackExtrap.cxx:1471
 AliMUONTrackExtrap.cxx:1472
 AliMUONTrackExtrap.cxx:1473
 AliMUONTrackExtrap.cxx:1474
 AliMUONTrackExtrap.cxx:1475
 AliMUONTrackExtrap.cxx:1476
 AliMUONTrackExtrap.cxx:1477
 AliMUONTrackExtrap.cxx:1478
 AliMUONTrackExtrap.cxx:1479
 AliMUONTrackExtrap.cxx:1480