--- /dev/null
+/**************************************************************************
+* 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 AliESDMuonCluster
+///
+/// Class to describe the MUON clusters in the Event Summary Data
+///
+/// \author Philippe Pillot, Subatech
+//-----------------------------------------------------------------------------
+
+#include "AliESDMuonCluster.h"
+
+#include "AliLog.h"
+
+#include <Riostream.h>
+
+/// \cond CLASSIMP
+ClassImp(AliESDMuonCluster)
+/// \endcond
+
+//_____________________________________________________________________________
+AliESDMuonCluster::AliESDMuonCluster()
+: TObject()
+{
+ /// default constructor
+ fXYZ[0] = fXYZ[1] = fXYZ[2] = 0.;
+ fErrXY[0] = fErrXY[1] = 0.;
+}
+
+//_____________________________________________________________________________
+AliESDMuonCluster::AliESDMuonCluster (const AliESDMuonCluster& cluster)
+: TObject(cluster)
+{
+ /// Copy constructor
+ fXYZ[0] = cluster.fXYZ[0];
+ fXYZ[1] = cluster.fXYZ[1];
+ fXYZ[2] = cluster.fXYZ[2];
+ fErrXY[0] = cluster.fErrXY[0];
+ fErrXY[1] = cluster.fErrXY[1];
+}
+
+//_____________________________________________________________________________
+AliESDMuonCluster& AliESDMuonCluster::operator=(const AliESDMuonCluster& cluster)
+{
+ /// Equal operator
+ if (this == &cluster) return *this;
+
+ TObject::operator=(cluster); // don't forget to invoke the base class' assignment operator
+
+ fXYZ[0] = cluster.fXYZ[0];
+ fXYZ[1] = cluster.fXYZ[1];
+ fXYZ[2] = cluster.fXYZ[2];
+ fErrXY[0] = cluster.fErrXY[0];
+ fErrXY[1] = cluster.fErrXY[1];
+
+ return *this;
+}
+
+//_____________________________________________________________________________
+void AliESDMuonCluster::Print(Option_t */*option*/) const
+{
+ /// print cluster content
+ UInt_t cId = GetUniqueID();
+
+ cout<<Form("clusterID=%u (ch=%d, det=%d, index=%d)",
+ cId,GetChamberId(),GetDetElemId(),GetClusterIndex())<<endl;
+
+ cout<<Form("position=(%5.2f, %5.2f, %5.2f), sigma=(%5.2f, %5.2f, 0.0)",
+ GetX(),GetY(),GetZ(),GetErrX(),GetErrY())<<endl;
+}
+
--- /dev/null
+#ifndef ALIESDMUONCLUSTER_H
+#define ALIESDMUONCLUSTER_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+* See cxx source for full Copyright notice */
+
+// $Id$
+
+/// \class AliESDMuonCluster
+/// \brief Class to describe the MUON clusters in the Event Summary Data
+// Author Philippe Pillot, Subatech
+
+
+#include <TObject.h>
+
+class AliESDMuonCluster : public TObject {
+public:
+ AliESDMuonCluster(); // Constructor
+ virtual ~AliESDMuonCluster() {} ///< Destructor
+ AliESDMuonCluster(const AliESDMuonCluster& cluster);
+ AliESDMuonCluster& operator=(const AliESDMuonCluster& cluster);
+
+ /// Clear method (used by TClonesArray)
+ void Clear(Option_t*) {}
+
+ /// Set coordinates (cm)
+ void SetXYZ(Double_t x, Double_t y, Double_t z) {fXYZ[0] = x; fXYZ[1] = y; fXYZ[2] = z;}
+ /// Return X-position (cm)
+ Double_t GetX() const {return fXYZ[0];}
+ /// Return Y-position (cm)
+ Double_t GetY() const {return fXYZ[1];}
+ /// Return Z-position (cm)
+ Double_t GetZ() const {return fXYZ[2];}
+
+ /// Set (X,Y) resolution (cm)
+ void SetErrXY(Double_t errX, Double_t errY) {fErrXY[0] = errX; fErrXY[1] = errY;}
+ /// Return X-resolution (cm)
+ Double_t GetErrX() const {return fErrXY[0];}
+ /// Return X-resolution**2 (cm**2)
+ Double_t GetErrX2() const {return fErrXY[0]*fErrXY[0];}
+ /// Return Y-resolution (cm)
+ Double_t GetErrY() const {return fErrXY[1];}
+ /// Return Y-resolution**2 (cm**2)
+ Double_t GetErrY2() const {return fErrXY[1]*fErrXY[1];}
+
+ /// Return chamber id (0..), part of the uniqueID
+ Int_t GetChamberId() const {return (GetUniqueID() & 0xF0000000) >> 28;}
+ /// Return detection element id, part of the uniqueID
+ Int_t GetDetElemId() const {return (GetUniqueID() & 0x0FFE0000) >> 17;}
+ /// Returnt the index of this cluster (0..), part of the uniqueID
+ Int_t GetClusterIndex() const {return (GetUniqueID() & 0x0001FFFF);}
+
+ void Print(Option_t */*option*/ = "") const;
+
+
+protected:
+ Double32_t fXYZ[3]; ///< cluster position
+ Double32_t fErrXY[2]; ///< transverse position errors
+
+
+ ClassDef(AliESDMuonCluster, 1) // MUON ESD cluster class
+};
+
+#endif
///////////////////////////////////////////////////////////////////////////////
#include "AliESDMuonTrack.h"
+#include "AliESDMuonCluster.h"
+#include <TClonesArray.h>
#include <TLorentzVector.h>
#include <TMath.h>
fZ(0),
fBendingCoor(0),
fNonBendingCoor(0),
+ fInverseBendingMomentumAtDCA(0),
+ fThetaXAtDCA(0),
+ fThetaYAtDCA(0),
+ fBendingCoorAtDCA(0),
+ fNonBendingCoorAtDCA(0),
fInverseBendingMomentumUncorrected(0),
fThetaXUncorrected(0),
fThetaYUncorrected(0),
fLocalTrigger(0),
fMuonClusterMap(0),
fHitsPatternInTrigCh(0),
- fNHit(0)
+ fNHit(0),
+ fClusters(0x0)
{
//
// Default constructor
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),
fLocalTrigger(MUONTrack.fLocalTrigger),
fMuonClusterMap(MUONTrack.fMuonClusterMap),
fHitsPatternInTrigCh(MUONTrack.fHitsPatternInTrigCh),
- fNHit(MUONTrack.fNHit)
+ fNHit(MUONTrack.fNHit),
+ fClusters(0x0)
{
//
// 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);
+ }
+ }
}
//_____________________________________________________________________________
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;
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();
+ while (cluster) {
+ new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
+ cluster = (AliESDMuonCluster*) MUONTrack.fClusters->After(cluster);
+ }
+ } else fClusters = 0x0;
+
return *this;
}
+//__________________________________________________________________________
+AliESDMuonTrack::~AliESDMuonTrack()
+{
+ /// Destructor
+ delete fClusters;
+}
+
+//__________________________________________________________________________
+void AliESDMuonTrack::Clear(Option_t* opt)
+{
+ /// Clear arrays
+ if (fClusters) fClusters->Clear(opt);
+}
+
//_____________________________________________________________________________
void AliESDMuonTrack::GetCovariances(TMatrixD& cov) const
{
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) : 0.;
+ 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) : 0.;
+ 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) : 0.;
+ 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) : 0.;
+ 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) : 0.;
+ 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
{
}
+//_____________________________________________________________________________
+TClonesArray& AliESDMuonTrack::GetClusters() const
+{
+ // return the array of clusters associated to the track
+ if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
+
+ return *fClusters;
+}
+
+//_____________________________________________________________________________
+void AliESDMuonTrack::AddCluster(const AliESDMuonCluster &cluster)
+{
+ // 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);
+}
+
+//_____________________________________________________________________________
+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;
+}
+
#define ALIESDMUONTRACK_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
+* See cxx source for full Copyright notice */
/* $Id$ */
#include "AliVParticle.h"
+class AliESDMuonCluster;
+class TClonesArray;
class TLorentzVector;
class AliESDMuonTrack : public AliVParticle {
public:
AliESDMuonTrack(); //Constructor
- virtual ~AliESDMuonTrack(){} // Destructor
+ virtual ~AliESDMuonTrack(); // Destructor
AliESDMuonTrack(const AliESDMuonTrack& esdm);
AliESDMuonTrack& operator=(const AliESDMuonTrack& esdm);
+ void Clear(Option_t* opt);
- // Get and Set methods for data at vertex
+ // Get and Set methods for data at vertex
Double_t GetInverseBendingMomentum(void) const {return fInverseBendingMomentum;}
void SetInverseBendingMomentum(Double_t InverseBendingMomentum)
{fInverseBendingMomentum = InverseBendingMomentum;}
Double_t GetNonBendingCoor(void) const {return fNonBendingCoor;}
void SetNonBendingCoor(Double_t NonBendingCoor) {fNonBendingCoor = NonBendingCoor;}
- // Get and Set methods for data at first station
+ // Get and Set methods for data at Distance of Closest Approach in the vertex plane
+ Double_t GetInverseBendingMomentumAtDCA(void) const {return fInverseBendingMomentumAtDCA;}
+ void SetInverseBendingMomentumAtDCA(Double_t InverseBendingMomentum)
+ {fInverseBendingMomentumAtDCA = InverseBendingMomentum;}
+ Double_t GetThetaXAtDCA(void) const {return fThetaXAtDCA;}
+ void SetThetaXAtDCA(Double_t ThetaX) {fThetaXAtDCA = ThetaX;}
+ Double_t GetThetaYAtDCA(void) const {return fThetaYAtDCA;}
+ void SetThetaYAtDCA(Double_t ThetaY) {fThetaYAtDCA = ThetaY;}
+ Double_t GetBendingCoorAtDCA(void) const {return fBendingCoorAtDCA;}
+ void SetBendingCoorAtDCA(Double_t BendingCoor) {fBendingCoorAtDCA = BendingCoor;}
+ Double_t GetNonBendingCoorAtDCA(void) const {return fNonBendingCoorAtDCA;}
+ void SetNonBendingCoorAtDCA(Double_t NonBendingCoor) {fNonBendingCoorAtDCA = NonBendingCoor;}
+ Double_t GetDCA(void) const {return TMath::Sqrt(fNonBendingCoorAtDCA*fNonBendingCoorAtDCA +
+ fBendingCoorAtDCA*fBendingCoorAtDCA);}
+
+ // Get and Set methods for data at first station
Double_t GetInverseBendingMomentumUncorrected(void) const {return fInverseBendingMomentumUncorrected;}
void SetInverseBendingMomentumUncorrected(Double_t InverseBendingMomentum)
{fInverseBendingMomentumUncorrected = InverseBendingMomentum;}
void SetBendingCoorUncorrected(Double_t BendingCoor) {fBendingCoorUncorrected = BendingCoor;}
Double_t GetNonBendingCoorUncorrected(void) const {return fNonBendingCoorUncorrected;}
void SetNonBendingCoorUncorrected(Double_t NonBendingCoor) {fNonBendingCoorUncorrected = NonBendingCoor;}
-
- // Get and Set methods for covariance matrix of data at first station
+
+ // Get and Set methods for covariance matrix of data at first station
void GetCovariances(TMatrixD& cov) const;
void SetCovariances(const TMatrixD& cov);
void GetCovarianceXYZPxPyPz(Double_t cov[21]) const;
-
- // Get and Set methods for global tracking info
+
+ // Get and Set methods for global tracking info
Double_t GetChi2(void) const {return fChi2;}
void SetChi2(Double_t Chi2) {fChi2 = Chi2;}
UChar_t GetNHit(void) const {return fNHit;}
void SetNHit(UInt_t NHit) {fNHit = NHit;}
-
- // Get and Set methods for trigger matching
+
+ // Get and Set methods for trigger matching
Int_t GetMatchTrigger() const;
Double_t GetChi2MatchTrigger() const {return fChi2MatchTrigger;}
void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger;}
Int_t LoLpt(void) const { return fLocalTrigger >> 22 & 0x03; }
Int_t LoHpt(void) const { return fLocalTrigger >> 24 & 0x03; }
- // Get and Set methods for muon cluster map
+ // Get and Set methods for muon cluster map
UInt_t GetMuonClusterMap() const {return fMuonClusterMap;}
void SetMuonClusterMap(UInt_t muonClusterMap) {fMuonClusterMap = muonClusterMap;}
void AddInMuonClusterMap(Int_t chamber);
Bool_t IsInMuonClusterMap(Int_t chamber) const;
- // Methods to compute track momentum
+ // Methods to get, fill and check the array of associated clusters
+ TClonesArray& GetClusters() const;
+ void AddCluster(const AliESDMuonCluster &cluster);
+ Bool_t ClustersStored() const;
+
+ // Methods to compute track momentum
Double_t Px() const;
Double_t Py() const;
Double_t Pz() const;
Double_t P() const;
Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
void LorentzP(TLorentzVector& vP) const;
+ Double_t PxAtDCA() const;
+ Double_t PyAtDCA() const;
+ Double_t PzAtDCA() const;
+ Double_t PAtDCA() const;
+ Bool_t PxPyPzAtDCA(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
+ void LorentzPAtDCA(TLorentzVector& vP) const;
Double_t PxUncorrected() const;
Double_t PyUncorrected() const;
Double_t PzUncorrected() const;
Double_t PUncorrected() const;
+ Bool_t PxPyPzUncorrected(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
void LorentzPUncorrected(TLorentzVector& vP) const;
// additional methods to comply with AliVParticle
Double_t Y() const { return TMath::ATanH(Pz()/E()); }
Short_t Charge() const { return (Short_t)TMath::Sign(1., GetInverseBendingMomentum()); }
const Double_t *PID() const { return (Double_t*)0x0; }
-
+
protected:
- // parameters at vertex
+ // parameters at vertex
Double32_t fInverseBendingMomentum; ///< Inverse bending momentum (GeV/c ** -1) times the charge
Double32_t fThetaX; ///< Angle of track at vertex in X direction (rad)
Double32_t fThetaY; ///< Angle of track at vertex in Y direction (rad)
Double32_t fBendingCoor; ///< bending coordinate (cm)
Double32_t fNonBendingCoor; ///< non bending coordinate (cm)
- // parameters at first tracking station
+ // parameters at Distance of Closest Approach in the vertex plane
+ Double32_t fInverseBendingMomentumAtDCA; ///< Inverse bending momentum (GeV/c ** -1) times the charge
+ Double32_t fThetaXAtDCA; ///< Angle of track at vertex in X direction (rad)
+ Double32_t fThetaYAtDCA; ///< Angle of track at vertex in Y direction (rad)
+ Double32_t fBendingCoorAtDCA; ///< bending coordinate (cm)
+ Double32_t fNonBendingCoorAtDCA; ///< non bending coordinate (cm)
+
+ // parameters at first tracking station
Double32_t fInverseBendingMomentumUncorrected; ///< Inverse bending momentum (GeV/c ** -1) times the charge
Double32_t fThetaXUncorrected; ///< Angle of track at vertex in X direction (rad)
Double32_t fThetaYUncorrected; ///< Angle of track at vertex in Y direction (rad)
Double32_t fBendingCoorUncorrected; ///< bending coordinate (cm)
Double32_t fNonBendingCoorUncorrected; ///< non bending coordinate (cm)
- /// reduced covariance matrix of UNCORRECTED track parameters, ordered as follow: <pre>
- /// [0] = <X,X>
- /// [1] =<X,ThetaX> [2] =<ThetaX,ThetaX>
- /// [3] = <X,Y> [4] = <Y,ThetaX> [5] = <Y,Y>
- /// [6] =<X,ThetaY> [7] =<ThetaX,ThetaY> [8] =<Y,ThetaY> [9] =<ThetaY,ThetaY>
- /// [10]=<X,InvP_yz> [11]=<ThetaX,InvP_yz> [12]=<Y,InvP_yz> [13]=<ThetaY,InvP_yz> [14]=<InvP_yz,InvP_yz> </pre>
+ /// reduced covariance matrix of UNCORRECTED track parameters, ordered as follow: <pre>
+ /// [0] = <X,X>
+ /// [1] =<X,ThetaX> [2] =<ThetaX,ThetaX>
+ /// [3] = <X,Y> [4] = <Y,ThetaX> [5] = <Y,Y>
+ /// [6] =<X,ThetaY> [7] =<ThetaX,ThetaY> [8] =<Y,ThetaY> [9] =<ThetaY,ThetaY>
+ /// [10]=<X,InvP_yz> [11]=<ThetaX,InvP_yz> [12]=<Y,InvP_yz> [13]=<ThetaY,InvP_yz> [14]=<InvP_yz,InvP_yz> </pre>
Double32_t fCovariances[15]; ///< \brief reduced covariance matrix of parameters AT FIRST CHAMBER
- // global tracking info
+ // global tracking info
Double32_t fChi2; ///< chi2 in the MUON track fit
Double32_t fChi2MatchTrigger; ///< chi2 of trigger/track matching
Int_t fLocalTrigger; ///< packed local trigger information
-
+
UInt_t fMuonClusterMap; ///< Map of clusters in tracking chambers
UShort_t fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers
UChar_t fNHit; ///< number of hit in the track
-
-
- ClassDef(AliESDMuonTrack,8) // MUON ESD track class
+
+ mutable TClonesArray* fClusters; ///< Array of clusters attached to the track
+
+ ClassDef(AliESDMuonTrack,9) // MUON ESD track class
};
#endif
#pragma link C++ class AliESDkink+;
#pragma link C++ class AliESDV0Params+;
#pragma link C++ class AliESDCaloCluster+;
+#pragma link C++ class AliESDMuonCluster+;
#pragma link C++ class AliKFParticleBase+;
#pragma link C++ class AliKFParticle+;
AliESDMuonTrack.cxx AliESDPmdTrack.cxx AliESDTrdTrack.cxx AliESDHLTtrack.cxx \
AliESDv0.cxx AliESDcascade.cxx AliVertex.cxx AliESDVertex.cxx \
AliESDpid.cxx AliESDkink.cxx \
- AliESDCaloCluster.cxx \
+ AliESDCaloCluster.cxx AliESDMuonCluster.cxx \
AliKFParticleBase.cxx AliKFParticle.cxx AliKFVertex.cxx\
AliKalmanTrack.cxx AliExternalTrackParam.cxx \
AliVertexerTracks.cxx AliStrLine.cxx \