]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDMuonTrack.cxx
make jet event background tnamed, add reset
[u/mrichter/AliRoot.git] / STEER / AliESDMuonTrack.cxx
index 0fb9b57a2792d8e2ea99997f8a4f49c8eadf01f3..3d54f63e01dad38c09c55a3368d6313f2389a882 100644 (file)
 
 ///////////////////////////////////////////////////////////////////////////////
 //
-//  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
+/// \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
 //
 ///////////////////////////////////////////////////////////////////////////////
 
@@ -37,18 +37,18 @@ ClassImp(AliESDMuonTrack)
 //_____________________________________________________________________________
 AliESDMuonTrack::AliESDMuonTrack ():
   AliVParticle(),
-  fInverseBendingMomentum(0),
+  fInverseBendingMomentum(FLT_MAX),
   fThetaX(0),
   fThetaY(0),
   fZ(0),
   fBendingCoor(0),
   fNonBendingCoor(0),
-  fInverseBendingMomentumAtDCA(0),
+  fInverseBendingMomentumAtDCA(FLT_MAX),
   fThetaXAtDCA(0),
   fThetaYAtDCA(0),
   fBendingCoorAtDCA(0),
   fNonBendingCoorAtDCA(0),
-  fInverseBendingMomentumUncorrected(0),
+  fInverseBendingMomentumUncorrected(FLT_MAX),
   fThetaXUncorrected(0),
   fThetaYUncorrected(0),
   fZUncorrected(0),
@@ -57,120 +57,162 @@ AliESDMuonTrack::AliESDMuonTrack ():
   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),
   fNHit(0),
-  fClusters(0x0)
+  fClusters(0x0),
+  fLabel(-1)
 {
   //
-  // Default constructor
+  /// 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),
-  fChi2(MUONTrack.fChi2),
-  fChi2MatchTrigger(MUONTrack.fChi2MatchTrigger),
-  fLocalTrigger(MUONTrack.fLocalTrigger),
-  fMuonClusterMap(MUONTrack.fMuonClusterMap),
-  fHitsPatternInTrigCh(MUONTrack.fHitsPatternInTrigCh),
-  fNHit(MUONTrack.fNHit),
-  fClusters(0x0)
+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),
+  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),
+  fNHit(muonTrack.fNHit),
+  fClusters(0x0),
+  fLabel(muonTrack.fLabel)
 {
   //
-  // Copy constructor
-  // Deep copy implemented
+  /// Copy constructor
+  /// Deep copy implemented
   //
-  for (Int_t i = 0; i < 15; i++) fCovariances[i] = MUONTrack.fCovariances[i];
+  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();
+  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);
+      cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
     }
   }
 }
 
 //_____________________________________________________________________________
-AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& MUONTrack)
+AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
 {
   // 
-  // Equal operator for a deep copy
+  /// Equal operator for a deep copy
   //
-  if (this == &MUONTrack)
+  if (this == &muonTrack)
     return *this;
 
-  AliVParticle::operator=(MUONTrack); // don't forget to invoke the base class' assignment operator
+  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;   
+  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;   
+  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;   
+  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];
+  for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
   
-  fChi2                   = MUONTrack.fChi2;             
-  fNHit                   = MUONTrack.fNHit; 
+  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;
+  fMuonClusterMap        = muonTrack.fMuonClusterMap;
 
-  fLocalTrigger           = MUONTrack.fLocalTrigger;  
-  fChi2MatchTrigger       = MUONTrack.fChi2MatchTrigger; 
+  fLabel                  = muonTrack.fLabel;
 
-  fHitsPatternInTrigCh    = MUONTrack.fHitsPatternInTrigCh;
-  fMuonClusterMap        = MUONTrack.fMuonClusterMap;
-  
   // 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();
+  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);
+      cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
     }
   } else fClusters = 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()
 {
@@ -185,10 +227,51 @@ void AliESDMuonTrack::Clear(Option_t* opt)
   if (fClusters) fClusters->Clear(opt);
 }
 
+//__________________________________________________________________________
+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.;
+  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;
+  fNHit = 0;
+  delete fClusters; fClusters = 0x0;
+  for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0.;
+  fLabel = -1;
+}
+
 //_____________________________________________________________________________
 void AliESDMuonTrack::GetCovariances(TMatrixD& cov) const
 {
-  // return covariance matrix of uncorrected parameters
+  /// 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++)
@@ -198,7 +281,7 @@ void AliESDMuonTrack::GetCovariances(TMatrixD& cov) const
 //_____________________________________________________________________________
 void AliESDMuonTrack::SetCovariances(const TMatrixD& cov)
 {
-  // set reduced covariance matrix of uncorrected parameters
+  /// 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);
@@ -208,16 +291,16 @@ void AliESDMuonTrack::SetCovariances(const TMatrixD& cov)
 //_____________________________________________________________________________
 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
+  /// 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);
 
@@ -230,7 +313,7 @@ void AliESDMuonTrack::GetCovarianceXYZPxPyPz(Double_t cov[21]) const
   Double_t pZ = PzUncorrected();
   Double_t dpZdthetaY = - fInverseBendingMomentumUncorrected * fInverseBendingMomentumUncorrected *
                          pZ * pZ * pZ * tanThetaY / cosThetaY2;
-  Double_t dpZdinvpYZ = - pZ / fInverseBendingMomentumUncorrected;
+  Double_t dpZdinvpYZ = (fInverseBendingMomentumUncorrected != 0.) ? - pZ / fInverseBendingMomentumUncorrected : - FLT_MAX;
   TMatrixD jacob(6,5);
   jacob.Zero();
   jacob(0,0) = 1.;
@@ -257,10 +340,10 @@ void AliESDMuonTrack::GetCovarianceXYZPxPyPz(Double_t cov[21]) const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::Px() const
 {
-  // return p_x from track parameters
+  /// 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) : 0.;
+  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;
 }
@@ -268,9 +351,9 @@ Double_t AliESDMuonTrack::Px() const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::Py() const
 {
-  // return p_y from track parameters
+  /// return p_y from track parameters
   Double_t bendingSlope = TMath::Tan(fThetaY);
-  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
+  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;
 }
@@ -278,19 +361,19 @@ Double_t AliESDMuonTrack::Py() const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::Pz() const
 {
-  // return p_z from track parameters
+  /// return p_z from track parameters
   Double_t bendingSlope = TMath::Tan(fThetaY);
-  Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
+  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
+  /// 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) : 0.;
+  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);
 }
@@ -298,11 +381,11 @@ Double_t AliESDMuonTrack::P() const
 //_____________________________________________________________________________
 void AliESDMuonTrack::LorentzP(TLorentzVector& vP) const
 {
-  // return Lorentz momentum vector from track parameters
+  /// 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) : 0.;
+  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;
@@ -313,10 +396,10 @@ void AliESDMuonTrack::LorentzP(TLorentzVector& vP) const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::PxAtDCA() const
 {
-  // return p_x from track parameters
+  /// 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) : 0.;
+  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;
 }
@@ -324,9 +407,9 @@ Double_t AliESDMuonTrack::PxAtDCA() const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::PyAtDCA() const
 {
-  // return p_y from track parameters
+  /// return p_y from track parameters
   Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
-  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : 0.;
+  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;
 }
@@ -334,19 +417,19 @@ Double_t AliESDMuonTrack::PyAtDCA() const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::PzAtDCA() const
 {
-  // return p_z from track parameters
+  /// return p_z from track parameters
   Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
-  Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : 0.;
+  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
+  /// 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) : 0.;
+  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);
 }
@@ -354,11 +437,11 @@ Double_t AliESDMuonTrack::PAtDCA() const
 //_____________________________________________________________________________
 void AliESDMuonTrack::LorentzPAtDCA(TLorentzVector& vP) const
 {
-  // return Lorentz momentum vector from track parameters
+  /// 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) : 0.;
+  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;
@@ -369,10 +452,10 @@ void AliESDMuonTrack::LorentzPAtDCA(TLorentzVector& vP) const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::PxUncorrected() const
 {
-  // return p_x from track parameters
+  /// 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) : 0.;
+  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;
 }
@@ -380,9 +463,9 @@ Double_t AliESDMuonTrack::PxUncorrected() const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::PyUncorrected() const
 {
-  // return p_y from track parameters
+  /// return p_y from track parameters
   Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
-  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
+  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;
 }
@@ -390,19 +473,19 @@ Double_t AliESDMuonTrack::PyUncorrected() const
 //_____________________________________________________________________________
 Double_t AliESDMuonTrack::PzUncorrected() const
 {
-  // return p_z from track parameters
+  /// return p_z from track parameters
   Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
-  Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
+  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
+  /// 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) : 0.;
+  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);
 }
@@ -410,11 +493,11 @@ Double_t AliESDMuonTrack::PUncorrected() const
 //_____________________________________________________________________________
 void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
 {
-  // return Lorentz momentum vector from track parameters
+  /// 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) : 0.;
+  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;
@@ -425,11 +508,11 @@ void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
 //_____________________________________________________________________________
 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
+  ///  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;
@@ -444,31 +527,18 @@ Int_t AliESDMuonTrack::GetMatchTrigger() const
 }
 
 //_____________________________________________________________________________
-void AliESDMuonTrack::AddInMuonClusterMap(Int_t chamber)
+Int_t AliESDMuonTrack::GetNClusters() const
 {
-  // Update the muon cluster map by adding this chamber(0..)
-  
-  static const UInt_t kMask[10] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200};
-  
-  fMuonClusterMap |= kMask[chamber];
-  
-}
-
-//_____________________________________________________________________________
-Bool_t AliESDMuonTrack::IsInMuonClusterMap(Int_t chamber) const
-{
-  // return kTRUE if this chamber(0..) is in the muon cluster map
-  
-  static const UInt_t kMask[10] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200};
-  
-  return ((fMuonClusterMap | kMask[chamber]) == fMuonClusterMap) ? kTRUE : kFALSE;
+  /// return the number of clusters associated to the track
+  if (!fClusters) return 0;
   
+  return fClusters->GetEntriesFast();
 }
 
 //_____________________________________________________________________________
 TClonesArray& AliESDMuonTrack::GetClusters() const
 {
-  // return the array of clusters associated to the track
+  /// return the array of clusters associated to the track
   if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
   
   return *fClusters;
@@ -477,7 +547,7 @@ TClonesArray& AliESDMuonTrack::GetClusters() const
 //_____________________________________________________________________________
 void AliESDMuonTrack::AddCluster(const AliESDMuonCluster &cluster)
 {
-  // add a cluster to the TClonesArray of clusters associated to the track
+  /// add a cluster to the TClonesArray of clusters associated to the track
   if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
   
   new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(cluster);
@@ -486,11 +556,44 @@ void AliESDMuonTrack::AddCluster(const AliESDMuonCluster &cluster)
 //_____________________________________________________________________________
 Bool_t AliESDMuonTrack::ClustersStored() const
 {
-  // return kTRUE if the clusters associated to the track are registered
-  if (!fClusters) return kFALSE;
-  
-  if (fClusters->GetEntriesFast() == 0) return kFALSE;
+  /// return kTRUE if the clusters associated to the track are registered
+  if (GetNClusters() == 0) return kFALSE;
   
   return kTRUE;
 }
 
+//_____________________________________________________________________________
+void AliESDMuonTrack::SetFiredChamber(UShort_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(UShort_t& pattern, Int_t slatOrInfo, EAliTriggerChPatternFlag effType)
+{
+  /// Add efficiency flag and crossed RPC or info on rejected track
+  pattern |= effType << 8;
+  pattern |= slatOrInfo << 10;
+}
+
+//_____________________________________________________________________________
+Bool_t AliESDMuonTrack::IsChamberHit(UShort_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(UShort_t pattern)
+{
+  /// Get Efficiency flag
+  return (pattern >> 8) & 0x03;
+}
+
+//_____________________________________________________________________________
+Int_t AliESDMuonTrack::GetSlatOrInfo(UShort_t pattern) 
+{
+  /// Getting crossed slat or info
+  return (pattern >> 10) & 0x1F;
+}