]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/ESD/AliESDMuonGlobalTrack.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDMuonGlobalTrack.h
1 #ifndef AliESDMuonGlobalTrack_H
2 #define AliESDMuonGlobalTrack_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //====================================================================================================================================================
8 //
9 //      ESD description of an ALICE muon forward track, combining the information of the Muon Spectrometer and the Muon Forward Tracker
10 //
11 //      Contact author: antonio.uras@cern.ch
12 //
13 //====================================================================================================================================================
14
15 #include "TMath.h"
16 #include "TMatrixD.h"
17 #include "TDatabasePDG.h"
18 #include "TArrayI.h"
19 #include "TLorentzVector.h"
20
21 #include "AliVParticle.h"
22
23 class AliESDEvent;
24 class TClonesArray;
25
26 //====================================================================================================================================================
27
28 class AliESDMuonGlobalTrack : public AliVParticle {
29
30 public:
31
32   AliESDMuonGlobalTrack();
33   AliESDMuonGlobalTrack(Double_t px, Double_t py, Double_t pz);
34   virtual ~AliESDMuonGlobalTrack() {;}
35   AliESDMuonGlobalTrack(const AliESDMuonGlobalTrack& esdTrack);
36   AliESDMuonGlobalTrack& operator=(const AliESDMuonGlobalTrack& esdTrack);
37   virtual void Copy(TObject &obj) const;
38
39   void  SetCharge(Int_t charge) { fCharge = charge; } 
40   Short_t GetCharge() const { return fCharge; }
41
42   /* Double_t GetOffset(Double_t x, Double_t y, Double_t z); */
43   /* Double_t GetOffsetX(Double_t x, Double_t z); */
44   /* Double_t GetOffsetY(Double_t y, Double_t z); */
45
46   // Set and Get methods for kinematics at primary vertex
47   void SetPxPyPz(Double_t px, Double_t py, Double_t pz);
48
49   // Get and Set methods for global tracking info
50   Double_t GetChi2OverNdf() const { return fChi2OverNdf; }            // chi2/ndf
51   void     SetChi2OverNdf(Double_t chi2) { fChi2OverNdf = chi2; }     // chi2/ndf
52
53   Double_t GetChi2MatchTrigger() const { return fChi2MatchTrigger; }
54   void     SetChi2MatchTrigger(Double_t chi2MatchTrigger) { fChi2MatchTrigger = chi2MatchTrigger; }
55
56   // Get and Set methods for various info copied and pasted from the MUON track
57   UShort_t GetHitsPatternInTrigCh() const {return fHitsPatternInTrigCh;}
58   void     SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) {fHitsPatternInTrigCh = hitsPatternInTrigCh;}
59   UInt_t   GetHitsPatternInTrigChTrk() const {return fHitsPatternInTrigChTrk;}
60   void     SetHitsPatternInTrigChTrk(UInt_t hitsPatternInTrigChTrk) {fHitsPatternInTrigChTrk = hitsPatternInTrigChTrk;}
61   UInt_t   GetMuonClusterMap() const {return fMuonClusterMap;}
62   void     SetMuonClusterMap(UInt_t muonClusterMap) {fMuonClusterMap = muonClusterMap;}
63   Int_t    GetLoCircuit() const { return fLoCircuit; }
64   void     SetLoCircuit(Int_t loCircuit) { fLoCircuit = loCircuit; }
65   Bool_t   IsConnected() const { return fIsConnected; }
66   void     Connected(Bool_t flag) { fIsConnected = flag; }
67
68   // Get and Set methods for trigger matching
69   void  SetMatchTrigger(Int_t matchTrigger) { fMatchTrigger = matchTrigger; }
70   Int_t GetMatchTrigger() { return fMatchTrigger; }
71
72   void SetNMFTClusters(Int_t nMFTClusters) { fNMFTClusters = nMFTClusters; }
73   Short_t GetNMFTClusters() { return fNMFTClusters; }
74
75   void SetNWrongMFTClustersMC(Int_t nWrongMFTClustersMC) { fNWrongMFTClustersMC = nWrongMFTClustersMC; }
76   Short_t GetNWrongMFTClustersMC() { return fNWrongMFTClustersMC; }
77
78   void SetMFTClusterPattern(ULong_t mftClusterPattern) { fMFTClusterPattern = mftClusterPattern; }
79   ULong_t GetMFTClusterPattern() { return fMFTClusterPattern; }
80
81   // Kinematics
82   Double_t Pt()       const { return fPt;  }
83   Double_t Eta()      const { return fEta; }
84   Double_t Rapidity() const { return fRapidity; }
85   Double_t Px()       const { return fPx; }
86   Double_t Py()       const { return fPy; }
87   Double_t Pz()       const { return fPz; }
88   Double_t P()        const { return fP;  }
89
90   Bool_t   PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
91
92   void SetFirstTrackingPoint(Double_t x, Double_t y, Double_t z) {fFirstTrackingPointX = x; fFirstTrackingPointY = y; fFirstTrackingPointZ = z; }
93   void GetFirstTrackingPoint(Double_t x[3]) { x[0] = fFirstTrackingPointX; x[1] = fFirstTrackingPointY; x[2] = fFirstTrackingPointZ; }
94
95   void SetXYAtVertex(Double_t x, Double_t y) { fXAtVertex = x; fYAtVertex = y; }
96   void GetXYAtVertex(Double_t x[2]) { x[0] = fXAtVertex; x[1] = fYAtVertex; }
97
98   Double_t GetRAtAbsorberEnd() { return fRAtAbsorberEnd; }
99   void SetRAtAbsorberEnd(Double_t r) { fRAtAbsorberEnd = r; }
100
101   // Additional methods to comply with AliVParticle
102   Double_t Xv() const {return -999.;} // put reasonable values here
103   Double_t Yv() const {return -999.;} //
104   Double_t Zv() const {return -999.;} //
105   Bool_t   XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }  
106   Double_t OneOverPt() const { return (Pt() != 0.) ? 1./Pt() : FLT_MAX; }
107   Double_t Phi() const { return TMath::Pi()+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 Y() const { return Rapidity(); }
112   Short_t  Charge() const { return fCharge; }
113
114   // Return kTRUE if the track contain tracker data
115   Bool_t ContainTrackerData() const {return (fMuonClusterMap>0) ? kTRUE : kFALSE;}
116
117   // Dummy
118   const Double_t *PID() const { return (Double_t*)0x0; }
119   Int_t PdgCode() const { return 0; }
120   
121   // Set the corresponding MC track number
122   void  SetLabel(Int_t label) { fLabel = label; }
123   // Return the corresponding MC track number
124   Int_t GetLabel() const { return fLabel; }
125
126   AliESDEvent* GetESDEvent() const { return fESDEvent; }
127   void         SetESDEvent(AliESDEvent* evt) { fESDEvent = evt; }  
128   
129 protected:
130
131   Short_t fCharge, fMatchTrigger, fNMFTClusters, fNWrongMFTClustersMC;
132   ULong_t fMFTClusterPattern;  // Tells us which MFT clusters are contained in the track, and which one is a good one (if MC)
133
134   // kinematics at vertex
135   Double_t fPx, fPy, fPz, fPt, fP, fEta, fRapidity;
136
137   // coordinates of the first tracking point
138   Double_t fFirstTrackingPointX, fFirstTrackingPointY, fFirstTrackingPointZ;
139
140   // transverse coordinates at DCA to the primary vertex (offset)
141   Double_t fXAtVertex, fYAtVertex;
142
143   Double_t fRAtAbsorberEnd;
144
145   // global tracking info
146   Double_t fChi2OverNdf;            //  chi2/ndf in the MUON+MFT track fit
147   Double_t fChi2MatchTrigger;       //  chi2 of trigger/track matching
148
149   Int_t fLabel;                     //  point to the corresponding MC track
150
151   UInt_t   fMuonClusterMap;         // Map of clusters in MUON tracking chambers
152   UShort_t fHitsPatternInTrigCh;    // Word containing info on the hits left in trigger chambers
153   UInt_t   fHitsPatternInTrigChTrk; // Trigger hit map from tracker track extrapolation
154   Int_t    fLoCircuit;
155   Bool_t   fIsConnected;
156   
157   AliESDEvent *fESDEvent;           //! Pointer back to event to which the track belongs
158   
159   ClassDef(AliESDMuonGlobalTrack,2) // MUON+MFT ESD track class 
160
161 };
162
163 //====================================================================================================================================================
164
165 #endif