///////////////////////////////////////////////////////////////////////////////
//
-// 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
//
///////////////////////////////////////////////////////////////////////////////
//_____________________________________________________________________________
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),
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;
}
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)
+ 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];
AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
{
//
- // Equal operator for a deep copy
+ /// Equal operator for a deep copy
//
if (this == &muonTrack)
return *this;
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;
-
+
+ fLabel = muonTrack.fLabel;
+
// necessary to make a copy of the objects and not only the pointers in TClonesArray
delete fClusters;
if (muonTrack.fClusters) {
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()
{
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++)
//_____________________________________________________________________________
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);
//_____________________________________________________________________________
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);
//_____________________________________________________________________________
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) : - FLT_MAX;
//_____________________________________________________________________________
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) : - FLT_MAX;
Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
//_____________________________________________________________________________
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) : - 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) : - FLT_MAX;
//_____________________________________________________________________________
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 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) : - FLT_MAX;
//_____________________________________________________________________________
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) : - FLT_MAX;
Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
//_____________________________________________________________________________
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) : - 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) : - FLT_MAX;
//_____________________________________________________________________________
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 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) : - FLT_MAX;
//_____________________________________________________________________________
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) : - FLT_MAX;
Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
//_____________________________________________________________________________
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) : - 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) : - FLT_MAX;
//_____________________________________________________________________________
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);
//_____________________________________________________________________________
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;
}
-//_____________________________________________________________________________
-void AliESDMuonTrack::AddInMuonClusterMap(Int_t chamber)
-{
- // 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;
-
-}
-
//_____________________________________________________________________________
Int_t AliESDMuonTrack::GetNClusters() const
{
- // return the number of clusters associated to the track
+ /// 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;
//_____________________________________________________________________________
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);
//_____________________________________________________________________________
Bool_t AliESDMuonTrack::ClustersStored() const
{
- // return kTRUE if the clusters associated to the track are registered
+ /// 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;
+}