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 AliMUONTrack
//-------------------
// Reconstructed track in ALICE dimuon spectrometer
//-----------------------------------------------------------------------------

#include "AliMUONTrack.h"

#include "AliMUONReconstructor.h"
#include "AliMUONVCluster.h"
#include "AliMUONVClusterStore.h"
#include "AliMUONObjectPair.h"
#include "AliMUONTrackExtrap.h"
#include "AliMUONConstants.h"
#include "AliMUONTrackParam.h"

#include "AliLog.h"

#include <TMath.h>

#include <Riostream.h>

using std::setw;
using std::endl;
using std::cout;
using std::streamsize;
using std::setprecision;
/// \cond CLASSIMP
ClassImp(AliMUONTrack) // Class implementation in ROOT context
/// \endcond


const Double_t AliMUONTrack::fgkMaxChi2 = 1.e10; ///< maximum chi2 above which the track can be considered as abnormal


//__________________________________________________________________________
AliMUONTrack::AliMUONTrack()
  : TObject(),
    fTrackParamAtCluster(0x0),
    fFitWithVertex(kFALSE),
    fVertexErrXY2(),
    fFitWithMCS(kFALSE),
    fClusterWeightsNonBending(0x0),
    fClusterWeightsBending(0x0),
    fGlobalChi2(-1.),
    fImproved(kFALSE),
    fMatchTrigger(-1),
    fChi2MatchTrigger(0.),
    fTrackID(-1),
    fTrackParamAtVertex(0x0),
    fHitsPatternInTrigCh(0),
    fHitsPatternInTrigChTrk(0),
    fLocalTrigger(0),
    fConnected(kFALSE)
{
  /// Default constructor
  fVertexErrXY2[0] = 0.;
  fVertexErrXY2[1] = 0.;
}

  //__________________________________________________________________________
AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDispersion)
  : TObject(),
    fTrackParamAtCluster(new TObjArray(20)),
    fFitWithVertex(kFALSE),
    fVertexErrXY2(),
    fFitWithMCS(kFALSE),
    fClusterWeightsNonBending(0x0),
    fClusterWeightsBending(0x0),
    fGlobalChi2(0.),
    fImproved(kFALSE),
    fMatchTrigger(-1),
    fChi2MatchTrigger(0.),
    fTrackID(-1),
    fTrackParamAtVertex(0x0),
    fHitsPatternInTrigCh(0),
    fHitsPatternInTrigChTrk(0),
    fLocalTrigger(0),
    fConnected(kFALSE)
{
  /// Constructor from two clusters
  
  fTrackParamAtCluster->SetOwner(kTRUE);
  
  fVertexErrXY2[0] = 0.;
  fVertexErrXY2[1] = 0.;
  
  // Pointers to clusters from the segment
  AliMUONVCluster* firstCluster = (AliMUONVCluster*) segment->First();
  AliMUONVCluster* lastCluster = (AliMUONVCluster*) segment->Second();
  
  // Compute track parameters
  Double_t z1 = firstCluster->GetZ();
  Double_t z2 = lastCluster->GetZ();
  Double_t dZ = z1 - z2;
  // Non bending plane
  Double_t nonBendingCoor1 = firstCluster->GetX();
  Double_t nonBendingCoor2 = lastCluster->GetX();
  Double_t nonBendingSlope = (nonBendingCoor1 - nonBendingCoor2) / dZ;
  // Bending plane
  Double_t bendingCoor1 = firstCluster->GetY();
  Double_t bendingCoor2 = lastCluster->GetY();
  Double_t bendingSlope = (bendingCoor1 - bendingCoor2) / dZ;
  // Inverse bending momentum
  Double_t bendingImpact = bendingCoor1 - z1 * bendingSlope;
  Double_t inverseBendingMomentum = 1. / AliMUONTrackExtrap::GetBendingMomentumFromImpactParam(bendingImpact);
  
  // Set track parameters at first cluster
  AliMUONTrackParam trackParamAtFirstCluster;
  trackParamAtFirstCluster.SetZ(z1);
  trackParamAtFirstCluster.SetNonBendingCoor(nonBendingCoor1);
  trackParamAtFirstCluster.SetNonBendingSlope(nonBendingSlope);
  trackParamAtFirstCluster.SetBendingCoor(bendingCoor1);
  trackParamAtFirstCluster.SetBendingSlope(bendingSlope);
  trackParamAtFirstCluster.SetInverseBendingMomentum(inverseBendingMomentum);
  
  // Set track parameters at last cluster
  AliMUONTrackParam trackParamAtLastCluster;
  trackParamAtLastCluster.SetZ(z2);
  trackParamAtLastCluster.SetNonBendingCoor(nonBendingCoor2);
  trackParamAtLastCluster.SetNonBendingSlope(nonBendingSlope);
  trackParamAtLastCluster.SetBendingCoor(bendingCoor2);
  trackParamAtLastCluster.SetBendingSlope(bendingSlope);
  trackParamAtLastCluster.SetInverseBendingMomentum(inverseBendingMomentum);
  
  // Compute and set track parameters covariances at first cluster
  TMatrixD paramCov(5,5);
  paramCov.Zero();
  // Non bending plane
  paramCov(0,0) = firstCluster->GetErrX2();
  paramCov(0,1) = firstCluster->GetErrX2() / dZ;
  paramCov(1,0) = paramCov(0,1);
  paramCov(1,1) = ( firstCluster->GetErrX2() + lastCluster->GetErrX2() ) / dZ / dZ;
  // Bending plane
  paramCov(2,2) = firstCluster->GetErrY2();
  paramCov(2,3) = firstCluster->GetErrY2() / dZ;
  paramCov(3,2) = paramCov(2,3);
  paramCov(3,3) = ( firstCluster->GetErrY2() + lastCluster->GetErrY2() ) / dZ / dZ;
  // Inverse bending momentum (vertex resolution + bending slope resolution + 10% error on dipole parameters+field)
  if (AliMUONTrackExtrap::IsFieldON()) {
    paramCov(4,4) = ( ( bendingVertexDispersion*bendingVertexDispersion +
		       (z1 * z1 * lastCluster->GetErrY2() + z2 * z2 * firstCluster->GetErrY2()) / dZ / dZ) /
		     bendingImpact / bendingImpact + 0.1 * 0.1) * inverseBendingMomentum * inverseBendingMomentum ;
    paramCov(2,4) = - z2 * firstCluster->GetErrY2() * inverseBendingMomentum / bendingImpact / dZ;
    paramCov(4,2) = paramCov(2,4);
    paramCov(3,4) = - (z1 * lastCluster->GetErrY2() + z2 * firstCluster->GetErrY2()) * inverseBendingMomentum / bendingImpact / dZ / dZ;
    paramCov(4,3) = paramCov(3,4);
  } else paramCov(4,4) = inverseBendingMomentum*inverseBendingMomentum;
  trackParamAtFirstCluster.SetCovariances(paramCov);
  
  // Compute and set track parameters covariances at last cluster
  // Non bending plane
  paramCov(0,0) = lastCluster->GetErrX2();
  paramCov(0,1) = - lastCluster->GetErrX2() / dZ;
  paramCov(1,0) = paramCov(0,1);
  // Bending plane
  paramCov(2,2) = lastCluster->GetErrY2();
  paramCov(2,3) = - lastCluster->GetErrY2() / dZ;
  paramCov(3,2) = paramCov(2,3);
  // Inverse bending momentum (vertex resolution + bending slope resolution + 10% error on dipole parameters+field)
  if (AliMUONTrackExtrap::IsFieldON()) {
    paramCov(2,4) = z1 * lastCluster->GetErrY2() * inverseBendingMomentum / bendingImpact / dZ;
    paramCov(4,2) = paramCov(2,4);
  }
  trackParamAtLastCluster.SetCovariances(paramCov);
  
  // Add track parameters at clusters
  AddTrackParamAtCluster(trackParamAtFirstCluster,*firstCluster);
  AddTrackParamAtCluster(trackParamAtLastCluster,*lastCluster);
  
}

//__________________________________________________________________________
AliMUONTrack::AliMUONTrack(const AliMUONTrack& track)
  : TObject(track),
    fTrackParamAtCluster(0x0),
    fFitWithVertex(track.fFitWithVertex),
    fVertexErrXY2(),
    fFitWithMCS(track.fFitWithMCS),
    fClusterWeightsNonBending(0x0),
    fClusterWeightsBending(0x0),
    fGlobalChi2(track.fGlobalChi2),
    fImproved(track.fImproved),
    fMatchTrigger(track.fMatchTrigger),
    fChi2MatchTrigger(track.fChi2MatchTrigger),
    fTrackID(track.fTrackID),
    fTrackParamAtVertex(0x0),
    fHitsPatternInTrigCh(track.fHitsPatternInTrigCh),
    fHitsPatternInTrigChTrk(track.fHitsPatternInTrigChTrk),
    fLocalTrigger(track.fLocalTrigger),
    fConnected(track.fConnected)
{
  ///copy constructor
  
  // necessary to make a copy of the objects and not only the pointers in TObjArray.
  if (track.fTrackParamAtCluster) {
    fTrackParamAtCluster = new TObjArray(track.fTrackParamAtCluster->GetSize());
    fTrackParamAtCluster->SetOwner(kTRUE);
    for (Int_t i = 0; i < track.GetNClusters(); i++)
      fTrackParamAtCluster->AddLast(new AliMUONTrackParam(*static_cast<AliMUONTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(i))));
  }
  
  // copy vertex resolution square used during the tracking procedure
  fVertexErrXY2[0] = track.fVertexErrXY2[0];
  fVertexErrXY2[1] = track.fVertexErrXY2[1];
  
  // copy cluster weights matrices if any
  if (track.fClusterWeightsNonBending) fClusterWeightsNonBending = new TMatrixD(*(track.fClusterWeightsNonBending));
  if (track.fClusterWeightsBending) fClusterWeightsBending = new TMatrixD(*(track.fClusterWeightsBending));
  
  // copy track parameters at vertex if any
  if (track.fTrackParamAtVertex) fTrackParamAtVertex = new AliMUONTrackParam(*(track.fTrackParamAtVertex));
  
}

  //__________________________________________________________________________
AliMUONTrack & AliMUONTrack::operator=(const AliMUONTrack& track)
{
  /// Asignment operator
  // check assignement to self
  if (this == &track)
    return *this;

  // base class assignement
  TObject::operator=(track);
  
  // clear memory
  Clear();
  
  // necessary to make a copy of the objects and not only the pointers in TObjArray
  if (track.fTrackParamAtCluster) {
    fTrackParamAtCluster = new TObjArray(track.fTrackParamAtCluster->GetSize());
    fTrackParamAtCluster->SetOwner(kTRUE);
    for (Int_t i = 0; i < track.GetNClusters(); i++)
      fTrackParamAtCluster->AddLast(new AliMUONTrackParam(*static_cast<AliMUONTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(i))));
  }
  
  // copy cluster weights matrix if any
  if (track.fClusterWeightsNonBending) {
    if (fClusterWeightsNonBending) {
      fClusterWeightsNonBending->ResizeTo(*(track.fClusterWeightsNonBending));
      *fClusterWeightsNonBending = *(track.fClusterWeightsNonBending);
    } else fClusterWeightsNonBending = new TMatrixD(*(track.fClusterWeightsNonBending));
  }
  
  // copy cluster weights matrix if any
  if (track.fClusterWeightsBending) {
    if (fClusterWeightsBending) {
      fClusterWeightsBending->ResizeTo(*(track.fClusterWeightsBending));
      *fClusterWeightsBending = *(track.fClusterWeightsBending);
    } else fClusterWeightsBending = new TMatrixD(*(track.fClusterWeightsBending));
  }
  
  // copy track parameters at vertex if any
  if (track.fTrackParamAtVertex) {
    if (fTrackParamAtVertex) *fTrackParamAtVertex = *(track.fTrackParamAtVertex);
    else fTrackParamAtVertex = new AliMUONTrackParam(*(track.fTrackParamAtVertex));
  }
  
  fFitWithVertex      =  track.fFitWithVertex;
  fVertexErrXY2[0]    =  track.fVertexErrXY2[0];
  fVertexErrXY2[1]    =  track.fVertexErrXY2[1];
  fFitWithMCS         =  track.fFitWithMCS;
  fGlobalChi2         =  track.fGlobalChi2;
  fImproved           =  track.fImproved;
  fMatchTrigger       =  track.fMatchTrigger;
  fChi2MatchTrigger   =  track.fChi2MatchTrigger;
  fTrackID            =  track.fTrackID; 
  fHitsPatternInTrigCh = track.fHitsPatternInTrigCh;
  fHitsPatternInTrigChTrk = track.fHitsPatternInTrigChTrk;
  fLocalTrigger        = track.fLocalTrigger;
  fConnected          =  track.fConnected;

  return *this;
}

  //__________________________________________________________________________
AliMUONTrack::~AliMUONTrack()
{
  /// Destructor
  delete fTrackParamAtCluster;
  delete fClusterWeightsNonBending;
  delete fClusterWeightsBending;
  delete fTrackParamAtVertex;
}

  //__________________________________________________________________________
void AliMUONTrack::Clear(Option_t* /*opt*/)
{
  /// Clear arrays
  delete fTrackParamAtCluster; fTrackParamAtCluster = 0x0;
  delete fClusterWeightsNonBending; fClusterWeightsNonBending = 0x0;
  delete fClusterWeightsBending; fClusterWeightsBending = 0x0;
  delete fTrackParamAtVertex; fTrackParamAtVertex = 0x0;
}

  //__________________________________________________________________________
void AliMUONTrack::Reset()
{
  /// Reset to default values
  SetUniqueID(0);
  fFitWithVertex = kFALSE;
  fVertexErrXY2[0] = 0.;
  fVertexErrXY2[1] = 0.;
  fFitWithMCS = kFALSE;
  fGlobalChi2 = -1.;
  fImproved = kFALSE;
  fMatchTrigger = -1;
  fChi2MatchTrigger = 0.;
  fTrackID = -1;
  fHitsPatternInTrigCh = 0;
  fHitsPatternInTrigChTrk = 0;
  fLocalTrigger = 0;
  fConnected = kFALSE;
  delete fTrackParamAtCluster; fTrackParamAtCluster = 0x0;
  delete fClusterWeightsNonBending; fClusterWeightsNonBending = 0x0;
  delete fClusterWeightsBending; fClusterWeightsBending = 0x0;
  delete fTrackParamAtVertex; fTrackParamAtVertex = 0x0;
}

  //__________________________________________________________________________
TObjArray* AliMUONTrack::GetTrackParamAtCluster() const
{
  /// return array of track parameters at cluster (create it if needed)
  if (!fTrackParamAtCluster) {
    fTrackParamAtCluster = new TObjArray(20);
    fTrackParamAtCluster->SetOwner(kTRUE);
  }
  return fTrackParamAtCluster;
}

  //__________________________________________________________________________
void AliMUONTrack::AddTrackParamAtCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster &cluster, Bool_t copy)
{
  /// Copy given track parameters into a new TrackParamAtCluster
  /// Link parameters with the associated cluster
  /// If copy=kTRUE: the cluster is copied then passed the trackParam which become its owner 
  ///     otherwise: make sure to do not delete the cluster until it is used by the track
  
  // check chamber ID of the associated cluster
  if (cluster.GetChamberId() < 0 || cluster.GetChamberId() > AliMUONConstants::NTrackingCh()) {
    AliError(Form("Chamber ID of the associated cluster is not valid (ChamberId=%d)",cluster.GetChamberId()));
    return;
  }
  
  // check whether track parameters are given at the correct cluster z position
  if (TMath::Abs(cluster.GetZ() - trackParam.GetZ())>1.e-5) {   // AU
    AliError("track parameters are given at a different z position than the one of the associated cluster");
    return;
  }
  
  // add parameters to the array of track parameters
  if (!fTrackParamAtCluster) {
    fTrackParamAtCluster = new TObjArray(20);
    fTrackParamAtCluster->SetOwner(kTRUE);
  }
  AliMUONTrackParam* trackParamAtCluster = new AliMUONTrackParam(trackParam);
  fTrackParamAtCluster->AddLast(trackParamAtCluster);
  
  // link parameters with the associated cluster or its copy
  if (copy) {
    AliMUONVCluster *clusterCopy = static_cast<AliMUONVCluster*>(cluster.Clone());
    trackParamAtCluster->SetClusterPtr(clusterCopy, kTRUE);
  } else trackParamAtCluster->SetClusterPtr(&cluster);
  
  // sort the array of track parameters
  fTrackParamAtCluster->Sort();
}

  //__________________________________________________________________________
void AliMUONTrack::RemoveTrackParamAtCluster(AliMUONTrackParam *trackParam)
{
  /// Remove trackParam from the array of TrackParamAtCluster and delete it since the array is owner
  
  if (fTrackParamAtCluster) {
    
    AliMUONTrackParam* trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->Remove(trackParam));
    
    if (trackParamAtCluster) {
      
      // clean memory
      delete trackParamAtCluster;
      
      // remove hole
      fTrackParamAtCluster->Compress();
      
    } else AliWarning("object to remove does not exist in array fTrackParamAtCluster");
    
  } else AliWarning("array fTrackParamAtCluster does not exist");
  
}

  //__________________________________________________________________________
Bool_t AliMUONTrack::UpdateTrackParamAtCluster()
{
  /// Update track parameters at each attached cluster
  /// Return kFALSE in case of failure (i.e. extrapolation problem)
  
  Int_t nClusters = GetNClusters();
  if (nClusters == 0) {
    AliWarning("no cluster attached to the track");
    return kFALSE;
  }
  
  Bool_t extrapStatus = kTRUE;
  AliMUONTrackParam* startingTrackParam = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(0));
  
  for (Int_t i = 1; i < nClusters; i++) {
    AliMUONTrackParam* trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(i));
    
    // reset track parameters and their covariances
    trackParamAtCluster->SetParameters(startingTrackParam->GetParameters());
    trackParamAtCluster->SetZ(startingTrackParam->GetZ());
    
    // extrapolation to the given z
    if (!AliMUONTrackExtrap::ExtrapToZ(trackParamAtCluster, trackParamAtCluster->GetClusterPtr()->GetZ())) extrapStatus = kFALSE;
    
    // prepare next step
    startingTrackParam = trackParamAtCluster;
  }

  // set global chi2 to max value in case of problem during track extrapolation
  if (!extrapStatus) SetGlobalChi2(2.*MaxChi2());
  return extrapStatus;
  
}

  //__________________________________________________________________________
Bool_t AliMUONTrack::UpdateCovTrackParamAtCluster()
{
  /// Update track parameters and their covariances at each attached cluster
  /// Include effects of multiple scattering in chambers
  /// Return kFALSE in case of failure (i.e. extrapolation problem)
  
  Int_t nClusters = GetNClusters();
  if (nClusters == 0) {
    AliWarning("no cluster attached to the track");
    return kFALSE;
  }
  
  Bool_t extrapStatus = kTRUE;
  AliMUONTrackParam* startingTrackParam = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(0));
  Int_t expectedChamber = startingTrackParam->GetClusterPtr()->GetChamberId() + 1;
  Int_t currentChamber;
  
  for (Int_t i = 1; i < nClusters; i++) {
    AliMUONTrackParam* trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(i));
    
    // reset track parameters and their covariances
    trackParamAtCluster->SetParameters(startingTrackParam->GetParameters());
    trackParamAtCluster->SetZ(startingTrackParam->GetZ());
    trackParamAtCluster->SetCovariances(startingTrackParam->GetCovariances());
    
    // add MCS effect
    AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(expectedChamber-1),-1.);
    
    // add MCS in missing chambers if any
    currentChamber = trackParamAtCluster->GetClusterPtr()->GetChamberId();
    while (currentChamber > expectedChamber) {
      // extrapolation to the missing chamber
      if (!AliMUONTrackExtrap::ExtrapToZCov(trackParamAtCluster, AliMUONConstants::DefaultChamberZ(expectedChamber))) extrapStatus = kFALSE;
      // add MCS effect
      AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(expectedChamber),-1.);
      expectedChamber++;
    }
    
    // extrapolation to the z of the current cluster
    if (!AliMUONTrackExtrap::ExtrapToZCov(trackParamAtCluster, trackParamAtCluster->GetClusterPtr()->GetZ())) extrapStatus = kFALSE;
    
    // prepare next step
    expectedChamber = currentChamber + 1;
    startingTrackParam = trackParamAtCluster;
  }
  
  // set global chi2 to max value in case of problem during track extrapolation
  if (!extrapStatus) SetGlobalChi2(2.*MaxChi2());
  return extrapStatus;
  
}

  //__________________________________________________________________________
Bool_t AliMUONTrack::IsValid(UInt_t requestedStationMask, Bool_t request2ChInSameSt45)
{
  /// check the validity of the current track:
  /// at least one cluster per requested station
  /// and at least 2 chambers in stations 4 & 5 that contain cluster(s)
  /// + if request2ChInSameSt45 = kTRUE: 2 chambers hit in the same station (4 or 5)
  
  Int_t nClusters = GetNClusters();
  AliMUONTrackParam *trackParam;
  Int_t currentCh, currentSt, previousCh = -1, nChHitInSt4 = 0, nChHitInSt5 = 0;
  UInt_t presentStationMask(0);
  
  // first loop over clusters
  for (Int_t i = 0; i < nClusters; i++) {
    trackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(i);
    
    currentCh = trackParam->GetClusterPtr()->GetChamberId();
    currentSt = currentCh/2;
    
    // build present station mask
    presentStationMask |= ( 1 << currentSt );
    
    // count the number of chambers hit in station 4 that contain cluster(s)
    if (currentSt == 3 && currentCh != previousCh) {
      nChHitInSt4++;
      previousCh = currentCh;
    }
    
    // count the number of chambers hit in station 5 that contain cluster(s)
    if (currentSt == 4 && currentCh != previousCh) {
      nChHitInSt5++;
      previousCh = currentCh;
    }
    
  }
  
  // at least one cluster per requested station
  if ((requestedStationMask & presentStationMask) != requestedStationMask) return kFALSE;
  
  // 2 chambers hit in the same station (4 or 5)
  if (request2ChInSameSt45) return (nChHitInSt4 == 2 || nChHitInSt5 == 2);
  // or 2 chambers hit in station 4 & 5 together
  else return (nChHitInSt4+nChHitInSt5 >= 2);
  
}

  //__________________________________________________________________________
void AliMUONTrack::TagRemovableClusters(UInt_t requestedStationMask) {
  /// Identify clusters that can be removed from the track,
  /// with the only requirements to have at least 1 cluster per requested station
  /// and at least 2 chambers over 4 in stations 4 & 5 that contain cluster(s)
  
  Int_t nClusters = GetNClusters();
  AliMUONTrackParam *trackParam, *nextTrackParam;
  Int_t currentCh, nextCh, currentSt, nextSt, previousCh = -1, nChHitInSt45 = 0;
  
  // first loop over clusters
  for (Int_t i = 0; i < nClusters; i++) {
    trackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(i);
    
    currentCh = trackParam->GetClusterPtr()->GetChamberId();
    currentSt = currentCh/2;
    
    // reset flags to kFALSE for all clusters in required station
    if ((1 << currentSt) & requestedStationMask) trackParam->SetRemovable(kFALSE);
    else trackParam->SetRemovable(kTRUE);
    
    // count the number of chambers in station 4 & 5 that contain cluster(s)
    if (currentCh > 5 && currentCh != previousCh) {
      nChHitInSt45++;
      previousCh = currentCh;
    }
    
  }
  
  // second loop over clusters
  for (Int_t i = 0; i < nClusters; i++) {
    trackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(i);
    
    currentCh = trackParam->GetClusterPtr()->GetChamberId();
    currentSt = currentCh/2;
    
    // make sure they are more than 2 clusters in 2 different chambers of stations 4 & 5
    // but 2 clusters in he same chamber will still be flagged as removable
    if (nChHitInSt45 < 3 && currentSt > 2) {
      
      if (i == nClusters-1) {
	
	trackParam->SetRemovable(kFALSE);
      
      } else {
	
	nextTrackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(i+1);
	nextCh = nextTrackParam->GetClusterPtr()->GetChamberId();
	
	// set clusters in the same chamber as being removable
	if (nextCh == currentCh) {
	  trackParam->SetRemovable(kTRUE);
	  nextTrackParam->SetRemovable(kTRUE);
	  i++; // skip cluster already checked
	} else {
	  trackParam->SetRemovable(kFALSE);
	}
	
      }
      
    } else {
      
      // skip clusters already flag as removable
      if (trackParam->IsRemovable()) continue;
      
      // loop over next track parameters
      for (Int_t j = i+1; j < nClusters; j++) {
	nextTrackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(j);
	
	nextCh = nextTrackParam->GetClusterPtr()->GetChamberId();
	nextSt = nextCh/2;
	
	// set clusters in the same station as being removable
	if (nextSt == currentSt) {
	  trackParam->SetRemovable(kTRUE);
	  nextTrackParam->SetRemovable(kTRUE);
	  i++; // skip cluster already checked
	}
	
      }
      
    }
      
  }
    
}

  //__________________________________________________________________________
Bool_t AliMUONTrack::ComputeLocalChi2(Bool_t accountForMCS)
{
  /// Compute each cluster contribution to the chi2 of the track
  /// accounting for multiple scattering or not according to the flag
  /// - Also recompute the weight matrices of the attached clusters if accountForMCS=kTRUE
  /// - Assume that track parameters at each cluster are corrects
  /// - Return kFALSE if computation failed
  AliDebug(1,"Enter ComputeLocalChi2");
  
  if (!fTrackParamAtCluster) {
    AliWarning("no cluster attached to this track");
    return kFALSE;
  }
  
  if (accountForMCS) { // Compute local chi2 taking into account multiple scattering effects
      
    // Compute MCS covariance matrix only once
    Int_t nClusters = GetNClusters();
    TMatrixD mcsCovariances(nClusters,nClusters);
    ComputeMCSCovariances(mcsCovariances);
    
    // Make sure cluster weights are consistent with following calculations
    if (!ComputeClusterWeights(&mcsCovariances)) {
      AliWarning("cannot take into account the multiple scattering effects");
      return ComputeLocalChi2(kFALSE);
    }
    
    // Compute chi2 of the track
    Double_t globalChi2 = ComputeGlobalChi2(kTRUE);
    if (globalChi2 < 0.) return kFALSE;
    
    // Loop over removable clusters and compute their local chi2
    AliMUONTrackParam* trackParamAtCluster;
    AliMUONTrackParam* trackParamAtCluster1;
    AliMUONVCluster *cluster, *discardedCluster;
    Int_t iCluster1, iCluster2, iCurrentCluster1, iCurrentCluster2;
    TMatrixD clusterWeightsNB(nClusters-1,nClusters-1);
    TMatrixD clusterWeightsB(nClusters-1,nClusters-1);
    Double_t *dX = new Double_t[nClusters-1];
    Double_t *dY = new Double_t[nClusters-1];
    Double_t globalChi2b;
    for (Int_t iCluster = 0; iCluster < nClusters ; iCluster++) { 
      trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(iCluster));
      
      discardedCluster = trackParamAtCluster->GetClusterPtr();
      
      // Recompute cluster weights without the current cluster
      if (!ComputeClusterWeights(clusterWeightsNB, clusterWeightsB, &mcsCovariances, discardedCluster)) {
  	AliWarning("cannot take into account the multiple scattering effects");
	delete [] dX;
	delete [] dY;
	return ComputeLocalChi2(kFALSE);
      }
      
      // Compute track chi2 without the current cluster
      globalChi2b = 0.;
      iCurrentCluster1 = 0;
      for (iCluster1 = 0; iCluster1 < nClusters ; iCluster1++) { 
    	trackParamAtCluster1 = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster1);
    	cluster = trackParamAtCluster1->GetClusterPtr();
        
        if (cluster == discardedCluster) continue;
        
        // Compute and save residuals
    	dX[iCurrentCluster1] = cluster->GetX() - trackParamAtCluster1->GetNonBendingCoor();
    	dY[iCurrentCluster1] = cluster->GetY() - trackParamAtCluster1->GetBendingCoor();
        
        iCurrentCluster2 = 0;
    	for (iCluster2 = 0; iCluster2 < iCluster1; iCluster2++) {
    	  cluster = ((AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster2))->GetClusterPtr();
          
          if (cluster == discardedCluster) continue;
          
          // Add contribution from covariances
          globalChi2b += (clusterWeightsNB(iCurrentCluster1, iCurrentCluster2) +
        		  clusterWeightsNB(iCurrentCluster2, iCurrentCluster1)) * dX[iCurrentCluster1] * dX[iCurrentCluster2] +
        		 (clusterWeightsB(iCurrentCluster1, iCurrentCluster2) +
        		  clusterWeightsB(iCurrentCluster2, iCurrentCluster1)) * dY[iCurrentCluster1] * dY[iCurrentCluster2];
          
          iCurrentCluster2++;
    	}
        
        // Add contribution from variances
    	globalChi2b += clusterWeightsNB(iCurrentCluster1, iCurrentCluster1) * dX[iCurrentCluster1] * dX[iCurrentCluster1] +
        	       clusterWeightsB(iCurrentCluster1, iCurrentCluster1) * dY[iCurrentCluster1] * dY[iCurrentCluster1];
    	
        iCurrentCluster1++;
      }

      // Set local chi2
      trackParamAtCluster->SetLocalChi2(globalChi2 - globalChi2b);
    }
    
    delete [] dX;
    delete [] dY;
    
  } else { // without multiple scattering effects
    
    Int_t nClusters = GetNClusters();
    AliMUONTrackParam* trackParamAtCluster;
    AliMUONVCluster *discardedCluster;
    Double_t dX, dY;
    for (Int_t iCluster = 0; iCluster < nClusters ; iCluster++) { 
      trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(iCluster));
      
      discardedCluster = trackParamAtCluster->GetClusterPtr();
      
      // Compute residuals
      dX = discardedCluster->GetX() - trackParamAtCluster->GetNonBendingCoor();
      dY = discardedCluster->GetY() - trackParamAtCluster->GetBendingCoor();
      
      // Set local chi2
      trackParamAtCluster->SetLocalChi2(dX * dX / discardedCluster->GetErrX2() + dY * dY / discardedCluster->GetErrY2());
    }
  
  }
  
  return kTRUE;
  
}

  //__________________________________________________________________________
Double_t AliMUONTrack::ComputeGlobalChi2(Bool_t accountForMCS)
{
  /// Compute the chi2 of the track accounting for multiple scattering or not according to the flag
  /// - Assume that track parameters at each cluster are corrects
  /// - Assume the cluster weights matrices are corrects
  /// - Return a value of chi2 higher than the maximum allowed if computation failed
  AliDebug(1,"Enter ComputeGlobalChi2");
  
  if (!fTrackParamAtCluster) {
    AliWarning("no cluster attached to this track");
    return 2.*MaxChi2();
  }
  
  Double_t chi2 = 0.;
  
  if (accountForMCS) {
    
    // Check the weight matrices. If weight matrices are not available compute chi2 without MCS
    if (!fClusterWeightsNonBending || !fClusterWeightsBending) {
      AliWarning("cluster weights including multiple scattering effects are not available\n\t\t --> compute chi2 WITHOUT multiple scattering");
      return ComputeGlobalChi2(kFALSE);
    }
    Int_t nClusters = GetNClusters();
    if (fClusterWeightsNonBending->GetNrows() != nClusters || fClusterWeightsBending->GetNcols() != nClusters) {
      AliWarning("cluster weights including multiple scattering effects are not available\n\t\t --> compute chi2 WITHOUT multiple scattering");
      return ComputeGlobalChi2(kFALSE);
    }
    
    // Compute chi2
    AliMUONVCluster *cluster;
    Double_t *dX = new Double_t[nClusters];
    Double_t *dY = new Double_t[nClusters];
    AliMUONTrackParam* trackParamAtCluster;
    for (Int_t iCluster1 = 0; iCluster1 < nClusters; iCluster1++) { 
      trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster1);
      cluster = trackParamAtCluster->GetClusterPtr();
      dX[iCluster1] = cluster->GetX() - trackParamAtCluster->GetNonBendingCoor();
      dY[iCluster1] = cluster->GetY() - trackParamAtCluster->GetBendingCoor();
      for (Int_t iCluster2 = 0; iCluster2 < iCluster1; iCluster2++) {
        chi2 += ((*fClusterWeightsNonBending)(iCluster1, iCluster2) + (*fClusterWeightsNonBending)(iCluster2, iCluster1)) * dX[iCluster1] * dX[iCluster2] +
		((*fClusterWeightsBending)(iCluster1, iCluster2) + (*fClusterWeightsBending)(iCluster2, iCluster1)) * dY[iCluster1] * dY[iCluster2];
      }
      chi2 += ((*fClusterWeightsNonBending)(iCluster1, iCluster1) * dX[iCluster1] * dX[iCluster1]) +
	      ((*fClusterWeightsBending)(iCluster1, iCluster1) * dY[iCluster1] * dY[iCluster1]);
    }
    delete [] dX;
    delete [] dY;
    
  } else {
    
    AliMUONVCluster *cluster;
    Double_t dX, dY;
    AliMUONTrackParam* trackParamAtCluster;
    Int_t nClusters = GetNClusters();
    for (Int_t iCluster = 0; iCluster < nClusters ; iCluster++) { 
      trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster);
      cluster = trackParamAtCluster->GetClusterPtr();
      dX = cluster->GetX() - trackParamAtCluster->GetNonBendingCoor();
      dY = cluster->GetY() - trackParamAtCluster->GetBendingCoor();
      chi2 += dX * dX / cluster->GetErrX2() + dY * dY / cluster->GetErrY2();
    }
    
  }
  
  return chi2;
  
}

  //__________________________________________________________________________
Bool_t AliMUONTrack::ComputeClusterWeights(TMatrixD* mcsCovariances)
{
  /// Compute the weight matrices of the attached clusters, in non bending and bending direction,
  /// accounting for multiple scattering correlations and cluster resolution
  /// - Use the provided MCS covariance matrix if any (otherwise build it temporarily)
  /// - Assume that track parameters at each cluster are corrects
  /// - Return kFALSE if computation failed
  AliDebug(1,"Enter ComputeClusterWeights1");
  
  if (!fTrackParamAtCluster) {
    AliWarning("no cluster attached to this track");
    return kFALSE;
  }
  
  // Alocate memory
  Int_t nClusters = GetNClusters();
  if (!fClusterWeightsNonBending) fClusterWeightsNonBending = new TMatrixD(nClusters,nClusters);
  if (!fClusterWeightsBending) fClusterWeightsBending = new TMatrixD(nClusters,nClusters);
  
  // Compute weights matrices
  if (!ComputeClusterWeights(*fClusterWeightsNonBending, *fClusterWeightsBending, mcsCovariances)) return kFALSE;
  
  return kTRUE;
  
}

  //__________________________________________________________________________
Bool_t AliMUONTrack::ComputeClusterWeights(TMatrixD& clusterWeightsNB, TMatrixD& clusterWeightsB,
					   TMatrixD* mcsCovariances, const AliMUONVCluster* discardedCluster) const
{
  /// Compute the weight matrices, in non bending and bending direction,
  /// of the other attached clusters assuming the discarded one does not exist
  /// accounting for multiple scattering correlations and cluster resolution
  /// - Use the provided MCS covariance matrix if any (otherwise build it temporarily)
  /// - Return kFALSE if computation failed
  AliDebug(1,"Enter ComputeClusterWeights2");
  
  // Check MCS covariance matrix and recompute it if need
  Int_t nClusters = GetNClusters();
  Bool_t deleteMCSCov = kFALSE;
  if (!mcsCovariances) {
    mcsCovariances = new TMatrixD(nClusters,nClusters);
    deleteMCSCov = kTRUE;
    ComputeMCSCovariances(*mcsCovariances);
  }
  
  // Resize the weights matrices; alocate memory
  if (discardedCluster) {
    clusterWeightsNB.ResizeTo(nClusters-1,nClusters-1);
    clusterWeightsB.ResizeTo(nClusters-1,nClusters-1);
  } else {
    clusterWeightsNB.ResizeTo(nClusters,nClusters);
    clusterWeightsB.ResizeTo(nClusters,nClusters);
  }
  
  // Define variables
  AliMUONVCluster *cluster1, *cluster2;
  Int_t iCurrentCluster1, iCurrentCluster2;
  
  // Compute the covariance matrices
  iCurrentCluster1 = 0;
  for (Int_t iCluster1 = 0; iCluster1 < nClusters; iCluster1++) { 
    cluster1 = ((AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster1))->GetClusterPtr();
    
    if (cluster1 == discardedCluster) continue;
    
    // Loop over next clusters
    iCurrentCluster2 = iCurrentCluster1;
    for (Int_t iCluster2 = iCluster1; iCluster2 < nClusters; iCluster2++) {
      cluster2 = ((AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster2))->GetClusterPtr();
      
      if (cluster2 == discardedCluster) continue;
      
      // Fill with MCS covariances
      clusterWeightsNB(iCurrentCluster1, iCurrentCluster2) = (*mcsCovariances)(iCluster1,iCluster2);
      
      // Equal contribution from multiple scattering in non bending and bending directions
      clusterWeightsB(iCurrentCluster1, iCurrentCluster2) = clusterWeightsNB(iCurrentCluster1, iCurrentCluster2);
      
      // Add contribution from cluster resolution to diagonal element and symmetrize the matrix
      if (iCurrentCluster1 == iCurrentCluster2) {
	
	// In non bending plane
        clusterWeightsNB(iCurrentCluster1, iCurrentCluster1) += cluster1->GetErrX2();
	// In bending plane
	clusterWeightsB(iCurrentCluster1, iCurrentCluster1) += cluster1->GetErrY2();
	
      } else {
	
	// In non bending plane
	clusterWeightsNB(iCurrentCluster2, iCurrentCluster1) = clusterWeightsNB(iCurrentCluster1, iCurrentCluster2);
	// In bending plane
	clusterWeightsB(iCurrentCluster2, iCurrentCluster1) = clusterWeightsB(iCurrentCluster1, iCurrentCluster2);
	
      }
      
      iCurrentCluster2++;
    }
    
    iCurrentCluster1++;
  }
    
  // Inversion of covariance matrices to get the weights
  if (clusterWeightsNB.Determinant() != 0 && clusterWeightsB.Determinant() != 0) {
    clusterWeightsNB.Invert();
    clusterWeightsB.Invert();
  } else {
    AliWarning(" Determinant = 0");
    clusterWeightsNB.ResizeTo(0,0);
    clusterWeightsB.ResizeTo(0,0);
    if(deleteMCSCov) delete mcsCovariances;
    return kFALSE;
  }
  
  if(deleteMCSCov) delete mcsCovariances;
  
  return kTRUE;
  
}

  //__________________________________________________________________________
void AliMUONTrack::ComputeMCSCovariances(TMatrixD& mcsCovariances) const
{
  /// Compute the multiple scattering covariance matrix
  /// (assume that track parameters at each cluster are corrects)
  AliDebug(1,"Enter ComputeMCSCovariances");
  
  // Reset the size of the covariance matrix if needed
  Int_t nClusters = GetNClusters();
  if (mcsCovariances.GetNrows() != nClusters) mcsCovariances.ResizeTo(nClusters,nClusters);
  
  // Define variables
  Int_t nChambers = AliMUONConstants::NTrackingCh();
  AliMUONTrackParam* trackParamAtCluster;
  AliMUONTrackParam extrapTrackParam;
  Int_t currentChamber = 0, expectedChamber = 0, size = 0;
  Double_t *mcsAngle2 = new Double_t[2*nChambers];
  Double_t *zMCS = new Double_t[2*nChambers];
  Int_t *indices = new Int_t[2*nClusters];
  
  // Compute multiple scattering dispersion angle at each chamber
  // and save the z position where it is calculated
  for (Int_t iCluster = 0; iCluster < nClusters; iCluster++) {
    trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster);
    
    // look for missing chambers if any
    currentChamber = trackParamAtCluster->GetClusterPtr()->GetChamberId();
    while (currentChamber > expectedChamber) {
      
      // Save the z position where MCS dispersion is calculated
      zMCS[size] = AliMUONConstants::DefaultChamberZ(expectedChamber);
      
      // Do not take into account MCS in chambers prior the first cluster
      if (iCluster > 0) {
        
        // Get track parameters at missing chamber z
        extrapTrackParam = *trackParamAtCluster;
        AliMUONTrackExtrap::ExtrapToZ(&extrapTrackParam, zMCS[size]);
        
        // Save multiple scattering dispersion angle in missing chamber
        mcsAngle2[size] = AliMUONTrackExtrap::GetMCSAngle2(extrapTrackParam,AliMUONConstants::ChamberThicknessInX0(expectedChamber),1.);
        
      } else mcsAngle2[size] = 0.;
      
      expectedChamber++;
      size++;
    }
    
    // Save z position where MCS dispersion is calculated
    zMCS[size] = trackParamAtCluster->GetZ();
    
    // Save multiple scattering dispersion angle in current chamber
    mcsAngle2[size] = AliMUONTrackExtrap::GetMCSAngle2(*trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(currentChamber),1.);
    
    // Save indice in zMCS array corresponding to the current cluster
    indices[iCluster] = size;
    
    expectedChamber = currentChamber + 1;
    size++;
  }
  
  // complete array of z if last cluster is on the last but one chamber
  if (currentChamber != nChambers-1) zMCS[size++] = AliMUONConstants::DefaultChamberZ(nChambers-1);
  
  // Compute the covariance matrix
  for (Int_t iCluster1 = 0; iCluster1 < nClusters; iCluster1++) { 
    
    for (Int_t iCluster2 = iCluster1; iCluster2 < nClusters; iCluster2++) {
      
      // Initialization to 0 (diagonal plus upper triangular part)
      mcsCovariances(iCluster1,iCluster2) = 0.;
      
      // Compute contribution from multiple scattering in upstream chambers
      for (Int_t k = 0; k < indices[iCluster1]; k++) { 	
	mcsCovariances(iCluster1,iCluster2) += (zMCS[indices[iCluster1]] - zMCS[k]) * (zMCS[indices[iCluster2]] - zMCS[k]) * mcsAngle2[k];
      }
      
      // Symetrize the matrix
      mcsCovariances(iCluster2,iCluster1) = mcsCovariances(iCluster1,iCluster2);
    }
    
  }
    
  delete [] mcsAngle2;
  delete [] zMCS;
  delete [] indices;
  
}

  //__________________________________________________________________________
Int_t AliMUONTrack::ClustersInCommon(AliMUONTrack* track, Int_t stMin, Int_t stMax) const
{
  /// Returns the number of clusters in common in stations [stMin, stMax]
  /// between the current track ("this") and the track pointed to by "track".
  
  if (!track || !track->fTrackParamAtCluster || !this->fTrackParamAtCluster) return 0;
  
  Int_t chMin = 2 * stMin;
  Int_t chMax = 2 * stMax + 1;
  Int_t clustersInCommon = 0;
  
  // Loop over clusters of first track
  Int_t nCl1 = this->GetNClusters();
  for(Int_t iCl1 = 0; iCl1 < nCl1; iCl1++) {
    AliMUONVCluster* cl1 = ((AliMUONTrackParam*) this->fTrackParamAtCluster->UncheckedAt(iCl1))->GetClusterPtr();
    
    Int_t chCl1 = cl1->GetChamberId();
    if (chCl1 < chMin || chCl1 > chMax) continue;
    
    // Loop over clusters of second track
    Int_t nCl2 = track->GetNClusters();
    for(Int_t iCl2 = 0; iCl2 < nCl2; iCl2++) {
      AliMUONVCluster* cl2 = ((AliMUONTrackParam*) track->fTrackParamAtCluster->UncheckedAt(iCl2))->GetClusterPtr();
      
      Int_t chCl2 = cl2->GetChamberId();
      if (chCl2 < chMin || chCl2 > chMax) continue;
      
      // Increment "clustersInCommon" if both clusters have the same ID
      if (cl1->GetUniqueID() == cl2->GetUniqueID()) {
	clustersInCommon++;
	break;
      }
      
    }
    
  }
  
  return clustersInCommon;
}

  //__________________________________________________________________________
Int_t AliMUONTrack::GetNDF() const
{
  /// return the number of degrees of freedom
  
  Int_t ndf = 2 * GetNClusters() - 5;
  return (ndf > 0) ? ndf : 0;
}

  //__________________________________________________________________________
Double_t AliMUONTrack::GetNormalizedChi2() const
{
  /// return the chi2 value divided by the number of degrees of freedom (or FLT_MAX if ndf <= 0)
  
  Double_t ndf = (Double_t) GetNDF();
  return (ndf > 0.) ? fGlobalChi2 / ndf : 2.*MaxChi2();
}

  //__________________________________________________________________________
Int_t AliMUONTrack::FindCompatibleClusters(const AliMUONTrack &track, Double_t sigmaCut, Bool_t compatibleCluster[10]) const
{
  /// Try to match clusters from this track with clusters from the given track within the provided sigma cut:
  /// - Fill the array compatibleCluster[iCh] with kTRUE if a compatible cluster has been found in chamber iCh.
  /// - Return the number of clusters of "this" track matched with one cluster of the given track.
  AliMUONVCluster *cluster1, *cluster2;
  Double_t chi2, dX, dY;
  Double_t chi2Max = sigmaCut * sigmaCut;
  
  // initialization
  Int_t nMatchClusters = 0;
  for ( Int_t ch = 0; ch < AliMUONConstants::NTrackingCh(); ch++) compatibleCluster[ch] = kFALSE;

  if (!track.fTrackParamAtCluster || !this->fTrackParamAtCluster) return nMatchClusters;
  
  // Loop over clusters of first track
  Int_t nCl1 = this->GetNClusters();
  for(Int_t iCl1 = 0; iCl1 < nCl1; iCl1++) {
    cluster1 = static_cast<AliMUONTrackParam*>(this->fTrackParamAtCluster->UncheckedAt(iCl1))->GetClusterPtr();
    
    // Loop over clusters of second track
    Int_t nCl2 = track.GetNClusters();
    for(Int_t iCl2 = 0; iCl2 < nCl2; iCl2++) {
      cluster2 = static_cast<AliMUONTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(iCl2))->GetClusterPtr();
      
      // check DE Id
      if (cluster1->GetDetElemId() != cluster2->GetDetElemId()) continue;
      
      // check local chi2
      dX = cluster1->GetX() - cluster2->GetX();
      dY = cluster1->GetY() - cluster2->GetY();
      chi2 = dX * dX / (cluster1->GetErrX2() + cluster2->GetErrX2()) + dY * dY / (cluster1->GetErrY2() + cluster2->GetErrY2());
      if (chi2 > 2. * chi2Max) continue; // 2 because 2 quantities in chi2
      
      compatibleCluster[cluster1->GetChamberId()] = kTRUE;
      nMatchClusters++;
      break;
    }
    
  }
  
  return nMatchClusters;
}

//__________________________________________________________________________
Bool_t AliMUONTrack::Match(AliMUONTrack &track, Double_t sigmaCut, Int_t &nMatchClusters) const
{
  /// Try to match this track with the given track. Matching conditions:
  /// - more than 50% of clusters from this track matched with clusters from the given track
  /// - at least 1 cluster matched before and 1 cluster matched after the dipole
  
  Bool_t compTrack[10];
  nMatchClusters = FindCompatibleClusters(track, sigmaCut, compTrack);
  
  if ((compTrack[0] || compTrack[1] || compTrack[2] || compTrack[3]) && // at least 1 cluster matched in st 1 & 2
      (compTrack[6] || compTrack[7] || compTrack[8] || compTrack[9]) && // at least 1 cluster matched in st 4 & 5
      2 * nMatchClusters > GetNClusters()) return kTRUE;                // more than 50% of clusters matched
  else return kFALSE;
  
}

//__________________________________________________________________________
void AliMUONTrack::SetTrackParamAtVertex(const AliMUONTrackParam* trackParam)
{
  /// set track parameters at vertex
  if (trackParam == 0x0) return;
  if (fTrackParamAtVertex) *fTrackParamAtVertex = *trackParam;
  else fTrackParamAtVertex = new AliMUONTrackParam(*trackParam);
}

//__________________________________________________________________________
void AliMUONTrack::RecursiveDump() const
{
  /// Recursive dump of AliMUONTrack, i.e. with dump of trackParamAtCluster and attached clusters
  AliMUONTrackParam *trackParamAtCluster;
  AliMUONVCluster *cluster;
  cout << "Recursive dump of Track: " << this << endl;
  // Track
  this->Dump();
  for (Int_t iCluster = 0; iCluster < GetNClusters(); iCluster++) {
    trackParamAtCluster = (AliMUONTrackParam*) ((*fTrackParamAtCluster)[iCluster]);
    // trackParamAtCluster
    cout << "trackParamAtCluster: " << trackParamAtCluster << " (index: " << iCluster << ")" << endl;
    trackParamAtCluster->Dump();
    cluster = trackParamAtCluster->GetClusterPtr();
    // cluster
    cout << "cluster: " << cluster << endl;
    cluster->Print();
  }
  return;
}
  
//_____________________________________________-
void AliMUONTrack::Print(Option_t*) const
{
  /// Printing Track information 

  streamsize curW = cout.width();
  streamsize curPrecision = cout.precision();
  cout << "<AliMUONTrack> No.Clusters=" << setw(2)   << GetNClusters() << 
      ", Match2Trig=" << setw(1) << GetMatchTrigger()  << 
      ", LoTrgNum=" << setw(3) << LoCircuit()  << 
    ", Chi2-tracking-trigger=" << setw(8) << setprecision(5) <<  GetChi2MatchTrigger();
  cout << Form(" HitTriggerPattern trig %x  track %x",fHitsPatternInTrigCh, fHitsPatternInTrigChTrk);
  cout << Form(" MClabel=%d",fTrackID) << endl;
  if (fTrackParamAtCluster) fTrackParamAtCluster->First()->Print("FULL");
  cout.width(curW);
  cout.precision(curPrecision);
}

//__________________________________________________________________________
void AliMUONTrack::SetLocalTrigger(Int_t loCirc, Int_t loStripX, Int_t loStripY, Int_t loDev, Int_t loLpt, Int_t loHpt, UChar_t respWithoutChamber)
{
  /// pack the local trigger information and store

  if (loCirc < 0) return;

  fLocalTrigger = 0;
  fLocalTrigger += loCirc;
  fLocalTrigger += loStripX << 8;
  fLocalTrigger += loStripY << 13;
  fLocalTrigger += loDev    << 17;
  fLocalTrigger += loLpt    << 22;
  fLocalTrigger += loHpt    << 24;
  fLocalTrigger += respWithoutChamber << 26;

}

//__________________________________________________________________________
void AliMUONTrack::FindMCLabel()
{
  /// Determine the MC label from the label of the attached clusters and fill fMCLabel data member:
  /// More than 50% of clusters, including 1 before and 1 after the dipole, must share the same label
  
  Int_t nClusters = GetNClusters();
  Int_t halfCluster = nClusters/2;
  
  // reset MC label
  fTrackID = -1;
  
  // loop over first clusters (if nClusters left < (nClusters-halfCluster) the conditions cannot be fulfilled)
  for (Int_t iCluster1 = 0; iCluster1 < nClusters-halfCluster; iCluster1++) {
    AliMUONVCluster* cluster1 = ((AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster1))->GetClusterPtr();
    
    // if the first cluster is not on station 1 or 2 the conditions cannot be fulfilled
    if (cluster1->GetChamberId() > 3) return;
    
    Int_t label1 = cluster1->GetMCLabel();
    if (label1 < 0) continue;
    
    Int_t nIdenticalLabel = 1;
    
    // Loop over next clusters
    for (Int_t iCluster2 = iCluster1+1; iCluster2 < nClusters; iCluster2++) {
      AliMUONVCluster* cluster2 = ((AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(iCluster2))->GetClusterPtr();
      
      if (cluster2->GetMCLabel() != label1) continue;
      
      nIdenticalLabel++;
      
      // stop as soon as conditions are fulfilled
      if (nIdenticalLabel > halfCluster && cluster2->GetChamberId() > 5) {
        fTrackID = label1;
	return;
      }
      
    }
    
  }
  
}

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