1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 // Class to describe the MUON tracks
21 // in the Event Summary Data class
22 // This is where the results of reconstruction
23 // are stored for the muons
26 ///////////////////////////////////////////////////////////////////////////////
28 #include "AliESDMuonTrack.h"
30 #include <TLorentzVector.h>
33 ClassImp(AliESDMuonTrack)
35 //_____________________________________________________________________________
36 AliESDMuonTrack::AliESDMuonTrack ():
38 fInverseBendingMomentum(0),
44 fInverseBendingMomentumUncorrected(0),
45 fThetaXUncorrected(0),
46 fThetaYUncorrected(0),
48 fBendingCoorUncorrected(0),
49 fNonBendingCoorUncorrected(0),
54 fHitsPatternInTrigCh(0)
56 // Default constructor
60 //_____________________________________________________________________________
61 AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& MUONTrack):
63 fInverseBendingMomentum(MUONTrack.fInverseBendingMomentum),
64 fThetaX(MUONTrack.fThetaX),
65 fThetaY(MUONTrack.fThetaY),
67 fBendingCoor(MUONTrack.fBendingCoor),
68 fNonBendingCoor(MUONTrack.fNonBendingCoor),
69 fInverseBendingMomentumUncorrected(MUONTrack.fInverseBendingMomentumUncorrected),
70 fThetaXUncorrected(MUONTrack.fThetaXUncorrected),
71 fThetaYUncorrected(MUONTrack.fThetaYUncorrected),
72 fZUncorrected(MUONTrack.fZUncorrected),
73 fBendingCoorUncorrected(MUONTrack.fBendingCoorUncorrected),
74 fNonBendingCoorUncorrected(MUONTrack.fNonBendingCoorUncorrected),
75 fChi2(MUONTrack.fChi2),
76 fNHit(MUONTrack.fNHit),
77 fMatchTrigger(MUONTrack.fMatchTrigger),
78 fChi2MatchTrigger(MUONTrack.fChi2MatchTrigger),
79 fHitsPatternInTrigCh(MUONTrack.fHitsPatternInTrigCh)
83 // Deep copy implemented
87 //_____________________________________________________________________________
88 AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& MUONTrack)
91 // Equal operator for a deep copy
93 if (this == &MUONTrack)
96 fInverseBendingMomentum = MUONTrack.fInverseBendingMomentum;
97 fThetaX = MUONTrack.fThetaX;
98 fThetaY = MUONTrack.fThetaY;
100 fBendingCoor = MUONTrack.fBendingCoor;
101 fNonBendingCoor = MUONTrack.fNonBendingCoor;
103 fInverseBendingMomentumUncorrected = MUONTrack.fInverseBendingMomentumUncorrected;
104 fThetaXUncorrected = MUONTrack.fThetaXUncorrected;
105 fThetaYUncorrected = MUONTrack.fThetaYUncorrected;
106 fZUncorrected = MUONTrack.fZUncorrected;
107 fBendingCoorUncorrected = MUONTrack.fBendingCoorUncorrected;
108 fNonBendingCoorUncorrected = MUONTrack.fNonBendingCoorUncorrected;
110 fChi2 = MUONTrack.fChi2;
111 fNHit = MUONTrack.fNHit;
113 fMatchTrigger = MUONTrack.fMatchTrigger;
114 fChi2MatchTrigger = MUONTrack.fChi2MatchTrigger;
116 fHitsPatternInTrigCh = MUONTrack.fHitsPatternInTrigCh;
121 //_____________________________________________________________________________
122 Double_t AliESDMuonTrack::Px() const
124 // return p_x from track parameters
125 Double_t nonBendingSlope = TMath::Tan(fThetaX);
126 Double_t bendingSlope = TMath::Tan(fThetaY);
127 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
128 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
129 return pZ * nonBendingSlope;
132 //_____________________________________________________________________________
133 Double_t AliESDMuonTrack::Py() const
135 // return p_y from track parameters
136 Double_t bendingSlope = TMath::Tan(fThetaY);
137 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
138 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
139 return pZ * bendingSlope;
142 //_____________________________________________________________________________
143 Double_t AliESDMuonTrack::Pz() const
145 // return p_z from track parameters
146 Double_t bendingSlope = TMath::Tan(fThetaY);
147 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
148 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
151 //_____________________________________________________________________________
152 Double_t AliESDMuonTrack::P() const
154 // return p from track parameters
155 Double_t nonBendingSlope = TMath::Tan(fThetaX);
156 Double_t bendingSlope = TMath::Tan(fThetaY);
157 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
158 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
159 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
162 //_____________________________________________________________________________
163 void AliESDMuonTrack::LorentzP(TLorentzVector& vP) const
165 // return Lorentz momentum vector from track parameters
166 Double_t muonMass = 0.105658369;
167 Double_t nonBendingSlope = TMath::Tan(fThetaX);
168 Double_t bendingSlope = TMath::Tan(fThetaY);
169 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : 0.;
170 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
171 Double_t pX = pZ * nonBendingSlope;
172 Double_t pY = pZ * bendingSlope;
173 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
174 vP.SetPxPyPzE(pX, pY, pZ, e);
177 //_____________________________________________________________________________
178 Double_t AliESDMuonTrack::PxUncorrected() const
180 // return p_x from track parameters
181 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
182 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
183 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
184 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
185 return pZ * nonBendingSlope;
188 //_____________________________________________________________________________
189 Double_t AliESDMuonTrack::PyUncorrected() const
191 // return p_y from track parameters
192 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
193 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
194 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
195 return pZ * bendingSlope;
198 //_____________________________________________________________________________
199 Double_t AliESDMuonTrack::PzUncorrected() const
201 // return p_z from track parameters
202 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
203 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
204 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
207 //_____________________________________________________________________________
208 Double_t AliESDMuonTrack::PUncorrected() const
210 // return p from track parameters
211 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
212 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
213 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
214 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
215 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
218 //_____________________________________________________________________________
219 void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
221 // return Lorentz momentum vector from track parameters
222 Double_t muonMass = 0.105658369;
223 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
224 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
225 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : 0.;
226 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
227 Double_t pX = pZ * nonBendingSlope;
228 Double_t pY = pZ * bendingSlope;
229 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
230 vP.SetPxPyPzE(pX, pY, pZ, e);