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 AliESDMuonTrack
///  Class to describe the MUON tracks in the Event Summary Data class
///  This is where the results of reconstruction are stored for the muons
///
/// \author G.Martinez
//
///////////////////////////////////////////////////////////////////////////////

#include "AliESDMuonTrack.h"
#include "AliESDMuonCluster.h"
#include "AliESDEvent.h"

#include <TClonesArray.h>
#include <TLorentzVector.h>
#include <TMath.h>

ClassImp(AliESDMuonTrack)

//_____________________________________________________________________________
AliESDMuonTrack::AliESDMuonTrack ():
  AliVParticle(),
  fInverseBendingMomentum(FLT_MAX),
  fThetaX(0),
  fThetaY(0),
  fZ(0),
  fBendingCoor(0),
  fNonBendingCoor(0),
  fInverseBendingMomentumAtDCA(FLT_MAX),
  fThetaXAtDCA(0),
  fThetaYAtDCA(0),
  fBendingCoorAtDCA(0),
  fNonBendingCoorAtDCA(0),
  fInverseBendingMomentumUncorrected(FLT_MAX),
  fThetaXUncorrected(0),
  fThetaYUncorrected(0),
  fZUncorrected(0),
  fBendingCoorUncorrected(0),
  fNonBendingCoorUncorrected(0),
  fRAtAbsorberEnd(0),
  fChi2(0),
  fChi2MatchTrigger(0),
  fLocalTrigger(0),
  fX1Pattern(0),
  fY1Pattern(0),
  fX2Pattern(0),
  fY2Pattern(0),
  fX3Pattern(0),
  fY3Pattern(0),
  fX4Pattern(0),
  fY4Pattern(0),
  fMuonClusterMap(0),
  fHitsPatternInTrigCh(0),
  fHitsPatternInTrigChTrk(0),
  fNHit(0),
  fClusters(0x0),
  fClustersId(0x0),
  fLabel(-1),
  fESDEvent(0)

{
  //
  /// Default constructor
  //
  for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0;
}


//_____________________________________________________________________________
AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& muonTrack):
  AliVParticle(muonTrack),
  fInverseBendingMomentum(muonTrack.fInverseBendingMomentum),
  fThetaX(muonTrack.fThetaX),
  fThetaY(muonTrack.fThetaY),
  fZ(muonTrack.fZ),
  fBendingCoor(muonTrack.fBendingCoor),
  fNonBendingCoor(muonTrack.fNonBendingCoor),
  fInverseBendingMomentumAtDCA(muonTrack.fInverseBendingMomentumAtDCA),
  fThetaXAtDCA(muonTrack.fThetaXAtDCA),
  fThetaYAtDCA(muonTrack.fThetaYAtDCA),
  fBendingCoorAtDCA(muonTrack.fBendingCoorAtDCA),
  fNonBendingCoorAtDCA(muonTrack.fNonBendingCoorAtDCA),
  fInverseBendingMomentumUncorrected(muonTrack.fInverseBendingMomentumUncorrected),
  fThetaXUncorrected(muonTrack.fThetaXUncorrected),
  fThetaYUncorrected(muonTrack.fThetaYUncorrected),
  fZUncorrected(muonTrack.fZUncorrected),
  fBendingCoorUncorrected(muonTrack.fBendingCoorUncorrected),
  fNonBendingCoorUncorrected(muonTrack.fNonBendingCoorUncorrected),
  fRAtAbsorberEnd(muonTrack.fRAtAbsorberEnd),
  fChi2(muonTrack.fChi2),
  fChi2MatchTrigger(muonTrack.fChi2MatchTrigger),
  fLocalTrigger(muonTrack.fLocalTrigger),
  fX1Pattern(muonTrack.fX1Pattern),
  fY1Pattern(muonTrack.fY1Pattern),
  fX2Pattern(muonTrack.fX2Pattern),
  fY2Pattern(muonTrack.fY2Pattern),
  fX3Pattern(muonTrack.fX3Pattern),
  fY3Pattern(muonTrack.fY3Pattern),
  fX4Pattern(muonTrack.fX4Pattern),
  fY4Pattern(muonTrack.fY4Pattern),
  fMuonClusterMap(muonTrack.fMuonClusterMap),
  fHitsPatternInTrigCh(muonTrack.fHitsPatternInTrigCh),
  fHitsPatternInTrigChTrk(muonTrack.fHitsPatternInTrigChTrk),
  fNHit(muonTrack.fNHit),
  fClusters(0x0),
  fClustersId(0x0),
  fLabel(muonTrack.fLabel),
  fESDEvent(muonTrack.fESDEvent)
{
  //
  /// Copy constructor
  /// Deep copy implemented
  //
  for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
  
  // necessary to make a copy of the objects and not only the pointers in TClonesArray
  if (muonTrack.fClusters) {
    fClusters = new TClonesArray("AliESDMuonCluster",muonTrack.fClusters->GetEntriesFast());
    AliESDMuonCluster *cluster = (AliESDMuonCluster*) muonTrack.fClusters->First();
    while (cluster) {
      new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
      cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
    }
  }
  
  // copy of cluster Ids
  if (muonTrack.fClustersId) fClustersId = new TArrayI(*(muonTrack.fClustersId));
  
}

//_____________________________________________________________________________
AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
{
  // 
  /// Equal operator for a deep copy
  //
  if (this == &muonTrack)
    return *this;

  AliVParticle::operator=(muonTrack); // don't forget to invoke the base class' assignment operator
  
  fInverseBendingMomentum = muonTrack.fInverseBendingMomentum; 
  fThetaX                 = muonTrack.fThetaX;           
  fThetaY                 = muonTrack.fThetaY;           
  fZ                      = muonTrack.fZ;                
  fBendingCoor            = muonTrack.fBendingCoor;      
  fNonBendingCoor         = muonTrack.fNonBendingCoor;   
  
  fInverseBendingMomentumAtDCA = muonTrack.fInverseBendingMomentumAtDCA; 
  fThetaXAtDCA                 = muonTrack.fThetaXAtDCA;           
  fThetaYAtDCA                 = muonTrack.fThetaYAtDCA;           
  fBendingCoorAtDCA            = muonTrack.fBendingCoorAtDCA;      
  fNonBendingCoorAtDCA         = muonTrack.fNonBendingCoorAtDCA;   
  
  fInverseBendingMomentumUncorrected = muonTrack.fInverseBendingMomentumUncorrected; 
  fThetaXUncorrected                 = muonTrack.fThetaXUncorrected;           
  fThetaYUncorrected                 = muonTrack.fThetaYUncorrected;           
  fZUncorrected                      = muonTrack.fZUncorrected;                
  fBendingCoorUncorrected            = muonTrack.fBendingCoorUncorrected;      
  fNonBendingCoorUncorrected         = muonTrack.fNonBendingCoorUncorrected;   
  
  for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
  
  fRAtAbsorberEnd            = muonTrack.fRAtAbsorberEnd;
  
  fChi2                   = muonTrack.fChi2;             
  fNHit                   = muonTrack.fNHit; 

  fLocalTrigger           = muonTrack.fLocalTrigger;  
  fX1Pattern              = muonTrack.fX1Pattern;  
  fY1Pattern              = muonTrack.fY1Pattern;  
  fX2Pattern              = muonTrack.fX2Pattern;  
  fY2Pattern              = muonTrack.fY2Pattern;  
  fX3Pattern              = muonTrack.fX3Pattern;  
  fY3Pattern              = muonTrack.fY3Pattern;  
  fX4Pattern              = muonTrack.fX4Pattern;  
  fY4Pattern              = muonTrack.fY4Pattern;  
  fChi2MatchTrigger       = muonTrack.fChi2MatchTrigger; 

  fHitsPatternInTrigCh    = muonTrack.fHitsPatternInTrigCh;
  fHitsPatternInTrigChTrk    = muonTrack.fHitsPatternInTrigChTrk;
 
  fMuonClusterMap	  = muonTrack.fMuonClusterMap;

  fLabel                  = muonTrack.fLabel;
  
  fESDEvent               = muonTrack.fESDEvent;

  // necessary to make a copy of the objects and not only the pointers in TClonesArray
  delete fClusters;
  if (muonTrack.fClusters) {
    fClusters = new TClonesArray("AliESDMuonCluster",muonTrack.fClusters->GetEntriesFast());
    AliESDMuonCluster *cluster = (AliESDMuonCluster*) muonTrack.fClusters->First();
    while (cluster) {
      new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
      cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
    }
  } else fClusters = 0x0;
  
  // copy of cluster Ids
  if (muonTrack.fClustersId) {
    if (fClustersId) *fClustersId = *(muonTrack.fClustersId);
    else fClustersId = new TArrayI(*(muonTrack.fClustersId));
  } else {
    delete fClustersId;
    fClustersId = 0x0;
  }
  
  return *this;
}

//__________________________________________________________________________
void AliESDMuonTrack::Copy(TObject &obj) const {
  
  /// This overwrites the virtual TOBject::Copy()
  /// to allow run time copying without casting
  /// in AliESDEvent

  if(this==&obj)return;
  AliESDMuonTrack *robj = dynamic_cast<AliESDMuonTrack*>(&obj);
  if(!robj)return; // not an AliESDMuonTrack
  *robj = *this;

}

//__________________________________________________________________________
AliESDMuonTrack::~AliESDMuonTrack()
{
  /// Destructor
  delete fClusters;
  delete fClustersId;
}

//__________________________________________________________________________
void AliESDMuonTrack::Clear(Option_t* opt)
{
  /// Clear arrays
  if (opt && opt[0] == 'C') {
    if (fClusters) fClusters->Clear("C");
  } else {
    delete fClusters; fClusters = 0x0;
  }
  delete fClustersId; fClustersId = 0x0;
  fNHit = 0;
}

//__________________________________________________________________________
void AliESDMuonTrack::Reset()
{
  /// Reset to default values
  SetUniqueID(0);
  fInverseBendingMomentum = FLT_MAX;
  fThetaX = 0.;
  fThetaY = 0.;
  fZ = 0.;
  fBendingCoor = 0.;
  fNonBendingCoor = 0.;
  fInverseBendingMomentumAtDCA = FLT_MAX;
  fThetaXAtDCA = 0.;
  fThetaYAtDCA = 0.;
  fBendingCoorAtDCA = 0.;
  fNonBendingCoorAtDCA = 0.;
  fInverseBendingMomentumUncorrected = FLT_MAX;
  fThetaXUncorrected = 0.;
  fThetaYUncorrected = 0.;
  fZUncorrected = 0.;
  fBendingCoorUncorrected = 0.;
  fNonBendingCoorUncorrected = 0.;
  fRAtAbsorberEnd = 0.;
  fChi2 = 0.;
  fChi2MatchTrigger = 0.;
  fLocalTrigger = 0;
  fX1Pattern = 0;
  fY1Pattern = 0;
  fX2Pattern = 0;
  fY2Pattern = 0;
  fX3Pattern = 0;
  fY3Pattern = 0;
  fX4Pattern = 0;
  fY4Pattern = 0;
  fMuonClusterMap = 0;
  fHitsPatternInTrigCh = 0;
  fHitsPatternInTrigChTrk = 0;
  fNHit = 0;
  delete fClusters; fClusters = 0x0;
  delete fClustersId; fClustersId = 0x0;
  for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0.;
  fLabel = -1;
  fESDEvent = 0;
}

//_____________________________________________________________________________
void AliESDMuonTrack::GetCovariances(TMatrixD& cov) const
{
  /// return covariance matrix of uncorrected parameters
  cov.ResizeTo(5,5);
  for (Int_t i = 0; i < 5; i++)
    for (Int_t j = 0; j <= i; j++)
      cov(i,j) = cov (j,i) = fCovariances[i*(i+1)/2 + j];
}

//_____________________________________________________________________________
void AliESDMuonTrack::SetCovariances(const TMatrixD& cov)
{
  /// set reduced covariance matrix of uncorrected parameters
  for (Int_t i = 0; i < 5; i++)
    for (Int_t j = 0; j <= i; j++)
      fCovariances[i*(i+1)/2 + j] = cov(i,j);

}

//_____________________________________________________________________________
void AliESDMuonTrack::GetCovarianceXYZPxPyPz(Double_t cov[21]) const
{
  /// return reduced covariance matrix of uncorrected parameters in (X,Y,Z,Px,Py,Pz) coordinate system
  /// 
  /// - Cov(x,x) ... :   cov[0]
  /// - Cov(y,x) ... :   cov[1]  cov[2]
  /// - Cov(z,x) ... :   cov[3]  cov[4]  cov[5]
  /// - Cov(px,x)... :   cov[6]  cov[7]  cov[8]  cov[9]
  /// - Cov(py,x)... :   cov[10] cov[11] cov[12] cov[13] cov[14]
  /// - Cov(pz,x)... :   cov[15] cov[16] cov[17] cov[18] cov[19] cov[20]
  ///
  /// Get ESD covariance matrix into a TMatrixD
  TMatrixD covESD(5,5);
  GetCovariances(covESD);

  // compute Jacobian to change the coordinate system
  // from (X,thetaX,Y,thetaY,c/pYZ) to (X,Y,Z,pX,pY,pZ)
  Double_t tanThetaX = TMath::Tan(fThetaXUncorrected);
  Double_t tanThetaY = TMath::Tan(fThetaYUncorrected);
  Double_t cosThetaX2 = TMath::Cos(fThetaXUncorrected) * TMath::Cos(fThetaXUncorrected);
  Double_t cosThetaY2 = TMath::Cos(fThetaYUncorrected) * TMath::Cos(fThetaYUncorrected);
  Double_t pZ = PzUncorrected();
  Double_t dpZdthetaY = - fInverseBendingMomentumUncorrected * fInverseBendingMomentumUncorrected *
			  pZ * pZ * pZ * tanThetaY / cosThetaY2;
  Double_t dpZdinvpYZ = (fInverseBendingMomentumUncorrected != 0.) ? - pZ / fInverseBendingMomentumUncorrected : - FLT_MAX;
  TMatrixD jacob(6,5);
  jacob.Zero();
  jacob(0,0) = 1.;
  jacob(1,2) = 1.;
  jacob(3,1) = pZ / cosThetaX2;
  jacob(3,3) = dpZdthetaY * tanThetaX;
  jacob(3,4) = dpZdinvpYZ * tanThetaX;
  jacob(4,3) = dpZdthetaY * tanThetaY + pZ / cosThetaY2;
  jacob(4,4) = dpZdinvpYZ * tanThetaY;
  jacob(5,3) = dpZdthetaY;
  jacob(5,4) = dpZdinvpYZ;
  
  // compute covariance matrix in AOD coordinate system
  TMatrixD tmp(covESD,TMatrixD::kMultTranspose,jacob);
  TMatrixD covAOD(jacob,TMatrixD::kMult,tmp);
  
  // Get AOD covariance matrix into co[21]
  for (Int_t i = 0; i < 6; i++)
    for (Int_t j = 0; j <= i; j++)
      cov[i*(i+1)/2 + j] = covAOD(i,j);
  
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::Px() const
{
  /// return p_x from track parameters
  Double_t nonBendingSlope = TMath::Tan(fThetaX);
  Double_t bendingSlope    = TMath::Tan(fThetaY);
  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return pZ * nonBendingSlope;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::Py() const
{
  /// return p_y from track parameters
  Double_t bendingSlope = TMath::Tan(fThetaY);
  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return pZ * bendingSlope;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::Pz() const
{
  /// return p_z from track parameters
  Double_t bendingSlope = TMath::Tan(fThetaY);
  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
  return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::P() const
{
  /// return p from track parameters
  Double_t nonBendingSlope = TMath::Tan(fThetaX);
  Double_t bendingSlope    = TMath::Tan(fThetaY);
  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
}

//_____________________________________________________________________________
void AliESDMuonTrack::LorentzP(TLorentzVector& vP) const
{
  /// return Lorentz momentum vector from track parameters
  Double_t muonMass = M();
  Double_t nonBendingSlope = TMath::Tan(fThetaX);
  Double_t bendingSlope    = TMath::Tan(fThetaY);
  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  Double_t pX  = pZ * nonBendingSlope;
  Double_t pY  = pZ * bendingSlope;
  Double_t e   = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
  vP.SetPxPyPzE(pX, pY, pZ, e);
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PxAtDCA() const
{
  /// return p_x from track parameters
  Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
  Double_t bendingSlope    = TMath::Tan(fThetaYAtDCA);
  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return pZ * nonBendingSlope;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PyAtDCA() const
{
  /// return p_y from track parameters
  Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return pZ * bendingSlope;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PzAtDCA() const
{
  /// return p_z from track parameters
  Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
  return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PAtDCA() const
{
  /// return p from track parameters
  Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
  Double_t bendingSlope    = TMath::Tan(fThetaYAtDCA);
  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
}

//_____________________________________________________________________________
void AliESDMuonTrack::LorentzPAtDCA(TLorentzVector& vP) const
{
  /// return Lorentz momentum vector from track parameters
  Double_t muonMass = M();
  Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
  Double_t bendingSlope    = TMath::Tan(fThetaYAtDCA);
  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  Double_t pX  = pZ * nonBendingSlope;
  Double_t pY  = pZ * bendingSlope;
  Double_t e   = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
  vP.SetPxPyPzE(pX, pY, pZ, e);
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PxUncorrected() const
{
  /// return p_x from track parameters
  Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
  Double_t bendingSlope    = TMath::Tan(fThetaYUncorrected);
  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return pZ * nonBendingSlope;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PyUncorrected() const
{
  /// return p_y from track parameters
  Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return pZ * bendingSlope;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PzUncorrected() const
{
  /// return p_z from track parameters
  Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
  return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::PUncorrected() const
{
  /// return p from track parameters
  Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
  Double_t bendingSlope    = TMath::Tan(fThetaYUncorrected);
  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
}

//_____________________________________________________________________________
void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
{
  /// return Lorentz momentum vector from track parameters
  Double_t muonMass = M();
  Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
  Double_t bendingSlope    = TMath::Tan(fThetaYUncorrected);
  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
  Double_t pZ  = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope);  // spectro. (z<0)
  Double_t pX  = pZ * nonBendingSlope;
  Double_t pY  = pZ * bendingSlope;
  Double_t e   = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
  vP.SetPxPyPzE(pX, pY, pZ, e);
}

//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetNDF() const
{
  /// return the number of degrees of freedom
  
  Int_t ndf = 2 * static_cast<Int_t>(fNHit) - 5;
  return (ndf > 0) ? ndf : 0;
}

//_____________________________________________________________________________
Double_t AliESDMuonTrack::GetNormalizedChi2() const
{
  /// return the chi2 value divided by the number of degrees of freedom
  
  Int_t ndf = GetNDF();
  return (ndf > 0) ? fChi2 / static_cast<Double_t>(ndf) : 0.;
}

//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetMatchTrigger() const
{
  ///  backward compatibility after replacing fMatchTrigger by fLocalTrigger
  ///  - 0 track does not match trigger
  ///  - 1 track match but does not pass pt cut
  ///  - 2 track match Low pt cut
  ///  - 3 track match High pt cut

  if (!LoCircuit()) {
    return 0;
  } else if (LoLpt() == 0 && LoHpt() == 0) {
    return 1;
  } else if (LoLpt() >  0 && LoHpt() == 0) {
    return 2;
  } else {
    return 3;
  }

}

//_____________________________________________________________________________
Bool_t AliESDMuonTrack::MatchTriggerDigits(Bool_t fromTrack) const
{
  /// return kTRUE if the track matches a digit on both planes of at least 2 trigger chambers
  
  UShort_t pattern = ( fromTrack ) ? fHitsPatternInTrigChTrk : fHitsPatternInTrigCh;
  Int_t nMatchedChambers = 0;
  for (Int_t ich=0; ich<4; ich++)
    if (IsChamberHit(pattern, 0, ich) &&
	IsChamberHit(pattern, 1, ich)) nMatchedChambers++;
  
  return (nMatchedChambers >= 2);
}

//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetMuonTrigDevSign() const
{
  /// Sign of the deviation provided by trigger
  Int_t deviation = LoDev();
  if ( deviation > 15 ) return 1;
  else if ( deviation < 15 ) return -1;
  else return 0;
}

//_____________________________________________________________________________
void AliESDMuonTrack::AddClusterId(UInt_t clusterId)
{
  /// add the given cluster Id to the list associated to the track
  if (!fClustersId) fClustersId = new TArrayI(5);
  if (fClustersId->GetSize() <= fNHit) fClustersId->Set(fNHit+1);
  fClustersId->AddAt(static_cast<Int_t>(clusterId), fNHit++);
}

//_____________________________________________________________________________
void AliESDMuonTrack::MoveClustersToESD(AliESDEvent &esd)
{
  /// move the clusters (and attached pads) to the new ESD structure
  if (!fClusters) return;
  fNHit = 0;
  for (Int_t i = 0; i < fClusters->GetEntriesFast(); i++) {
    AliESDMuonCluster *cluster = static_cast<AliESDMuonCluster*>(fClusters->UncheckedAt(i));
    cluster->MovePadsToESD(esd);
    AliESDMuonCluster *newCluster = esd.NewMuonCluster();
    *newCluster = *cluster;
    AddClusterId(newCluster->GetUniqueID());
  }
  delete fClusters;
  fClusters = 0x0;
}

//_____________________________________________________________________________
void AliESDMuonTrack::SetFiredChamber(UInt_t& pattern, Int_t cathode, Int_t chamber)
{
  /// Turn on the bit corresponding to fired chameber
  pattern |= (0x1 << ( 7 - ( 4*cathode + chamber )));
}

//_____________________________________________________________________________
void AliESDMuonTrack::AddEffInfo(UInt_t& pattern, Int_t slatOrInfo, Int_t board, EAliTriggerChPatternFlag effType)
{
  /// Add efficiency flag and crossed RPC or info on rejected track
  if ( slatOrInfo > 0x1F ) {
    AliErrorClass(Form("slatOrInfo is 0x%x should be at most 0x1f",slatOrInfo));
    return;
  }
  if ( board > 242 ) {
    AliErrorClass(Form("board is %i should be at most 242",board));
    return;
  }
  if  ( effType > 0x3 ) {
    AliErrorClass(Form("effType is 0x%x should be at most 0x3",effType));
    return;
  }
  pattern |= effType << 8;
  pattern |= slatOrInfo << 10;
  pattern |= board << 15;
}

//_____________________________________________________________________________
Bool_t AliESDMuonTrack::IsChamberHit(UInt_t pattern, Int_t cathode, Int_t chamber)
{ 
  /// Check if chamber was was hit
  return (pattern >> (7 - ( 4*cathode + chamber ))) & 0x1;
}

//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetEffFlag(UInt_t pattern)
{
  /// Get Efficiency flag
  return (pattern >> 8) & 0x3;
}

//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetSlatOrInfo(UInt_t pattern) 
{
  /// Getting crossed slat or info
  return (pattern >> 10) & 0x1F;
}

//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetCrossedBoard(UInt_t pattern) 
{
  /// Getting crossed board
  return ( pattern >> 15 ) & 0xFF;
}


//_____________________________________________________________________________
void AliESDMuonTrack::AddMuonTrigDevSignInfo ( UInt_t &pattern ) const
{
  /// Add trigger deviation sign info to pattern
  /// The info is stored in the 2 most significant digit:
  /// info<<30
  /// The information is:
  /// 0x0 => no information present
  /// 0x1 => negative deviation
  /// 0x2 => undetermined sign
  /// 0x3 => positive deviation

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