1c4d7198729b768ac3a8a633c1bd6a03b1fee233
[u/mrichter/AliRoot.git] / STEER / AliESDMuonTrack.h
1 #ifndef ALIESDMUONTRACK_H
2 #define ALIESDMUONTRACK_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 //  Class to describe the MUON tracks
10 //  in the Event Summary Data class
11 //  Author: G.Martinez
12
13
14 #include <TMath.h>
15 #include <TMatrixD.h>
16 #include <TDatabasePDG.h>
17
18 #include "AliVParticle.h"
19
20 class TLorentzVector;
21
22 class AliESDMuonTrack : public AliVParticle {
23 public:
24   AliESDMuonTrack(); //Constructor
25   virtual ~AliESDMuonTrack(){} // Destructor
26   AliESDMuonTrack(const AliESDMuonTrack& esdm);
27   AliESDMuonTrack& operator=(const AliESDMuonTrack& esdm);
28
29
30  // Get and Set methods for data at vertex
31   Double_t GetInverseBendingMomentum(void) const {return fInverseBendingMomentum;}
32   void     SetInverseBendingMomentum(Double_t InverseBendingMomentum) 
33                 {fInverseBendingMomentum = InverseBendingMomentum;}
34   Double_t GetThetaX(void) const {return fThetaX;}
35   void     SetThetaX(Double_t ThetaX) {fThetaX = ThetaX;}
36   Double_t GetThetaY(void) const {return fThetaY;}
37   void     SetThetaY(Double_t ThetaY) {fThetaY = ThetaY;}
38   Double_t GetZ(void) const {return fZ;}
39   void     SetZ(Double_t Z) {fZ = Z;}
40   Double_t GetBendingCoor(void) const {return fBendingCoor;}
41   void     SetBendingCoor(Double_t BendingCoor) {fBendingCoor = BendingCoor;}
42   Double_t GetNonBendingCoor(void) const {return fNonBendingCoor;}
43   void     SetNonBendingCoor(Double_t NonBendingCoor) {fNonBendingCoor = NonBendingCoor;}
44   
45  // Get and Set methods for data at first station
46   Double_t GetInverseBendingMomentumUncorrected(void) const {return fInverseBendingMomentumUncorrected;}
47   void     SetInverseBendingMomentumUncorrected(Double_t InverseBendingMomentum) 
48                 {fInverseBendingMomentumUncorrected = InverseBendingMomentum;}
49   Double_t GetThetaXUncorrected(void) const {return fThetaXUncorrected;}
50   void     SetThetaXUncorrected(Double_t ThetaX) {fThetaXUncorrected = ThetaX;}
51   Double_t GetThetaYUncorrected(void) const {return fThetaYUncorrected;}
52   void     SetThetaYUncorrected(Double_t ThetaY) {fThetaYUncorrected = ThetaY;}
53   Double_t GetZUncorrected(void) const {return fZUncorrected;}
54   void     SetZUncorrected(Double_t Z) {fZUncorrected = Z;}
55   Double_t GetBendingCoorUncorrected(void) const {return fBendingCoorUncorrected;}
56   void     SetBendingCoorUncorrected(Double_t BendingCoor) {fBendingCoorUncorrected = BendingCoor;}
57   Double_t GetNonBendingCoorUncorrected(void) const {return fNonBendingCoorUncorrected;}
58   void     SetNonBendingCoorUncorrected(Double_t NonBendingCoor) {fNonBendingCoorUncorrected = NonBendingCoor;}
59
60  // Get and Set methods for covariance matrix of data at first station
61   void     GetCovariances(TMatrixD& cov) const;
62   void     SetCovariances(const TMatrixD& cov);
63   void     GetCovarianceXYZPxPyPz(Double_t cov[21]) const;
64
65  // Get and Set methods for global tracking info
66   Double_t GetChi2(void) const {return fChi2;}
67   void     SetChi2(Double_t Chi2) {fChi2 = Chi2;}
68   UInt_t   GetNHit(void) const {return fNHit;}
69   void     SetNHit(UInt_t NHit) {fNHit = NHit;}
70
71  // Get and Set methods for trigger matching
72   Int_t    GetMatchTrigger() const;
73   Double_t GetChi2MatchTrigger() const {return fChi2MatchTrigger;}
74   void     SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger;}
75   UShort_t GetHitsPatternInTrigCh() const {return fHitsPatternInTrigCh;}
76   void     SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) {fHitsPatternInTrigCh = hitsPatternInTrigCh;}
77   void     SetLocalTrigger(Int_t locTrig) { fLocalTrigger = locTrig; }
78   Int_t    LoCircuit(void) const
79   { Int_t circ = fLocalTrigger & 0xFF; return (circ == 234) ? -1 : circ; }
80   Int_t    LoStripX(void) const  { return fLocalTrigger >>  8 & 0x1F; }
81   Int_t    LoStripY(void) const  { return fLocalTrigger >> 13 & 0x0F; }
82   Int_t    LoDev(void)    const  { return fLocalTrigger >> 17 & 0x1F; }
83   Int_t    LoLpt(void)    const  { return fLocalTrigger >> 22 & 0x03; }
84   Int_t    LoHpt(void)    const  { return fLocalTrigger >> 24 & 0x03; }
85   
86  // Get and Set methods for muon cluster map
87   UInt_t   GetMuonClusterMap() const {return fMuonClusterMap;}
88   void     SetMuonClusterMap(UInt_t muonClusterMap) {fMuonClusterMap = muonClusterMap;}
89   void     AddInMuonClusterMap(Int_t chamber);
90   Bool_t   IsInMuonClusterMap(Int_t chamber) const;
91   
92  // Methods to compute track momentum
93   Double_t Px() const;
94   Double_t Py() const;
95   Double_t Pz() const;
96   Double_t P() const;
97   void     LorentzP(TLorentzVector& vP) const;
98   Double_t PxUncorrected() const;
99   Double_t PyUncorrected() const;
100   Double_t PzUncorrected() const;
101   Double_t PUncorrected() const;
102   void     LorentzPUncorrected(TLorentzVector& vP) const;
103   
104   // additional methods to comply with AliVParticle
105   Double_t Pt() const { return TMath::Sqrt(Px()*Px() + Py()*Py()); }
106   Double_t OneOverPt() const { return 1./Pt(); }
107   Double_t Phi() const { return TMath::ATan2(Py(), Px()); }
108   Double_t Theta() const { return TMath::ATan2(Pt(), Pz()); }
109   Double_t E() const { return TMath::Sqrt(M()*M() + P()*P()); }
110   Double_t M() const { return TDatabasePDG::Instance()->GetParticle("mu-")->Mass(); }
111   Double_t Eta() const { return -TMath::Log(TMath::Tan(0.5 * Theta()));}
112   Double_t Y() const { return TMath::ATanH(Pz()/E()); }
113   Short_t  Charge() const { return (Short_t)TMath::Sign(1., GetInverseBendingMomentum()); }
114   const Double_t *PID() const { return (Double_t*)0x0; }
115     
116   
117 protected:
118  // parameters at vertex
119   Double32_t fInverseBendingMomentum; ///< Inverse bending momentum (GeV/c ** -1) times the charge 
120   Double32_t fThetaX;                 ///< Angle of track at vertex in X direction (rad)
121   Double32_t fThetaY;                 ///< Angle of track at vertex in Y direction (rad)
122   Double32_t fZ;                      ///< Z coordinate (cm)
123   Double32_t fBendingCoor;            ///< bending coordinate (cm)
124   Double32_t fNonBendingCoor;         ///< non bending coordinate (cm)
125   
126  // parameters at first tracking station
127   Double32_t fInverseBendingMomentumUncorrected; ///< Inverse bending momentum (GeV/c ** -1) times the charge 
128   Double32_t fThetaXUncorrected;                 ///< Angle of track at vertex in X direction (rad)
129   Double32_t fThetaYUncorrected;                 ///< Angle of track at vertex in Y direction (rad)
130   Double32_t fZUncorrected;                      ///< Z coordinate (cm)
131   Double32_t fBendingCoorUncorrected;            ///< bending coordinate (cm)
132   Double32_t fNonBendingCoorUncorrected;         ///< non bending coordinate (cm)
133   
134  /// reduced covariance matrix of UNCORRECTED track parameters, ordered as follow:      <pre>
135  /// [0] =  <X,X>
136  /// [1] =<X,ThetaX>  [2] =<ThetaX,ThetaX>
137  /// [3] =  <X,Y>     [4] =  <Y,ThetaX>     [5] =  <Y,Y>
138  /// [6] =<X,ThetaY>  [7] =<ThetaX,ThetaY>  [8] =<Y,ThetaY>  [9] =<ThetaY,ThetaY>
139  /// [10]=<X,InvP_yz> [11]=<ThetaX,InvP_yz> [12]=<Y,InvP_yz> [13]=<ThetaY,InvP_yz> [14]=<InvP_yz,InvP_yz>  </pre>
140   Double32_t fCovariances[15]; ///< \brief reduced covariance matrix of parameters AT FIRST CHAMBER
141   
142  // global tracking info
143   Double32_t fChi2;                ///< chi2 in the MUON track fit
144   UInt_t     fNHit;                ///< number of hit in the track
145   Int_t      fLocalTrigger;        ///< packed local trigger information
146   Double32_t fChi2MatchTrigger;    ///< chi2 of trigger/track matching
147   UShort_t   fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers
148   UInt_t     fMuonClusterMap;      ///< Map of clusters in tracking chambers
149
150
151   ClassDef(AliESDMuonTrack,7) // MUON ESD track class 
152 };
153
154 #endif