]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliESDMuonTrack.cxx
updated
[u/mrichter/AliRoot.git] / STEER / AliESDMuonTrack.cxx
CommitLineData
af7ba10c 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
16/* $Id$ */
17
18///////////////////////////////////////////////////////////////////////////////
19//
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
24// Author: G.Martinez
25//
26///////////////////////////////////////////////////////////////////////////////
27
672b5f43 28#include "AliESDMuonTrack.h"
d5efea33 29#include "AliESDMuonCluster.h"
672b5f43 30
d5efea33 31#include <TClonesArray.h>
39b8d0dd 32#include <TLorentzVector.h>
33#include <TMath.h>
34
af7ba10c 35ClassImp(AliESDMuonTrack)
36
90e48c0c 37//_____________________________________________________________________________
38AliESDMuonTrack::AliESDMuonTrack ():
ad85871a 39 AliVParticle(),
90e48c0c 40 fInverseBendingMomentum(0),
41 fThetaX(0),
42 fThetaY(0),
43 fZ(0),
44 fBendingCoor(0),
45 fNonBendingCoor(0),
d5efea33 46 fInverseBendingMomentumAtDCA(0),
47 fThetaXAtDCA(0),
48 fThetaYAtDCA(0),
49 fBendingCoorAtDCA(0),
50 fNonBendingCoorAtDCA(0),
39b8d0dd 51 fInverseBendingMomentumUncorrected(0),
52 fThetaXUncorrected(0),
53 fThetaYUncorrected(0),
54 fZUncorrected(0),
55 fBendingCoorUncorrected(0),
56 fNonBendingCoorUncorrected(0),
90e48c0c 57 fChi2(0),
fbc3395d 58 fChi2MatchTrigger(0),
01413742 59 fLocalTrigger(0),
9dea53d8 60 fX1Pattern(0),
61 fY1Pattern(0),
62 fX2Pattern(0),
63 fY2Pattern(0),
64 fX3Pattern(0),
65 fY3Pattern(0),
66 fX4Pattern(0),
67 fY4Pattern(0),
4f036e6e 68 fMuonClusterMap(0),
60765b06 69 fHitsPatternInTrigCh(0),
d5efea33 70 fNHit(0),
71 fClusters(0x0)
90e48c0c 72{
60765b06 73 //
90e48c0c 74 // Default constructor
60765b06 75 //
76 for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0;
90e48c0c 77}
78
79
af7ba10c 80//_____________________________________________________________________________
4c510ac5 81AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& muonTrack):
82 AliVParticle(muonTrack),
83 fInverseBendingMomentum(muonTrack.fInverseBendingMomentum),
84 fThetaX(muonTrack.fThetaX),
85 fThetaY(muonTrack.fThetaY),
86 fZ(muonTrack.fZ),
87 fBendingCoor(muonTrack.fBendingCoor),
88 fNonBendingCoor(muonTrack.fNonBendingCoor),
89 fInverseBendingMomentumAtDCA(muonTrack.fInverseBendingMomentumAtDCA),
90 fThetaXAtDCA(muonTrack.fThetaXAtDCA),
91 fThetaYAtDCA(muonTrack.fThetaYAtDCA),
92 fBendingCoorAtDCA(muonTrack.fBendingCoorAtDCA),
93 fNonBendingCoorAtDCA(muonTrack.fNonBendingCoorAtDCA),
94 fInverseBendingMomentumUncorrected(muonTrack.fInverseBendingMomentumUncorrected),
95 fThetaXUncorrected(muonTrack.fThetaXUncorrected),
96 fThetaYUncorrected(muonTrack.fThetaYUncorrected),
97 fZUncorrected(muonTrack.fZUncorrected),
98 fBendingCoorUncorrected(muonTrack.fBendingCoorUncorrected),
99 fNonBendingCoorUncorrected(muonTrack.fNonBendingCoorUncorrected),
100 fChi2(muonTrack.fChi2),
101 fChi2MatchTrigger(muonTrack.fChi2MatchTrigger),
102 fLocalTrigger(muonTrack.fLocalTrigger),
9dea53d8 103 fX1Pattern(muonTrack.fX1Pattern),
104 fY1Pattern(muonTrack.fY1Pattern),
105 fX2Pattern(muonTrack.fX2Pattern),
106 fY2Pattern(muonTrack.fY2Pattern),
107 fX3Pattern(muonTrack.fX3Pattern),
108 fY3Pattern(muonTrack.fY3Pattern),
109 fX4Pattern(muonTrack.fX4Pattern),
110 fY4Pattern(muonTrack.fY4Pattern),
4c510ac5 111 fMuonClusterMap(muonTrack.fMuonClusterMap),
112 fHitsPatternInTrigCh(muonTrack.fHitsPatternInTrigCh),
113 fNHit(muonTrack.fNHit),
d5efea33 114 fClusters(0x0)
5ec1b3bc 115{
af7ba10c 116 //
117 // Copy constructor
118 // Deep copy implemented
119 //
4c510ac5 120 for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
d5efea33 121
122 // necessary to make a copy of the objects and not only the pointers in TClonesArray
4c510ac5 123 if (muonTrack.fClusters) {
124 fClusters = new TClonesArray("AliESDMuonCluster",muonTrack.fClusters->GetEntriesFast());
125 AliESDMuonCluster *cluster = (AliESDMuonCluster*) muonTrack.fClusters->First();
d5efea33 126 while (cluster) {
127 new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
4c510ac5 128 cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
d5efea33 129 }
130 }
5ec1b3bc 131}
132
af7ba10c 133//_____________________________________________________________________________
4c510ac5 134AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
5ec1b3bc 135{
af7ba10c 136 //
137 // Equal operator for a deep copy
138 //
4c510ac5 139 if (this == &muonTrack)
5ec1b3bc 140 return *this;
141
4c510ac5 142 AliVParticle::operator=(muonTrack); // don't forget to invoke the base class' assignment operator
ad85871a 143
4c510ac5 144 fInverseBendingMomentum = muonTrack.fInverseBendingMomentum;
145 fThetaX = muonTrack.fThetaX;
146 fThetaY = muonTrack.fThetaY;
147 fZ = muonTrack.fZ;
148 fBendingCoor = muonTrack.fBendingCoor;
149 fNonBendingCoor = muonTrack.fNonBendingCoor;
39b8d0dd 150
4c510ac5 151 fInverseBendingMomentumAtDCA = muonTrack.fInverseBendingMomentumAtDCA;
152 fThetaXAtDCA = muonTrack.fThetaXAtDCA;
153 fThetaYAtDCA = muonTrack.fThetaYAtDCA;
154 fBendingCoorAtDCA = muonTrack.fBendingCoorAtDCA;
155 fNonBendingCoorAtDCA = muonTrack.fNonBendingCoorAtDCA;
d5efea33 156
4c510ac5 157 fInverseBendingMomentumUncorrected = muonTrack.fInverseBendingMomentumUncorrected;
158 fThetaXUncorrected = muonTrack.fThetaXUncorrected;
159 fThetaYUncorrected = muonTrack.fThetaYUncorrected;
160 fZUncorrected = muonTrack.fZUncorrected;
161 fBendingCoorUncorrected = muonTrack.fBendingCoorUncorrected;
162 fNonBendingCoorUncorrected = muonTrack.fNonBendingCoorUncorrected;
39b8d0dd 163
4c510ac5 164 for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
60765b06 165
4c510ac5 166 fChi2 = muonTrack.fChi2;
167 fNHit = muonTrack.fNHit;
8252d536 168
4c510ac5 169 fLocalTrigger = muonTrack.fLocalTrigger;
9dea53d8 170 fX1Pattern = muonTrack.fX1Pattern;
171 fY1Pattern = muonTrack.fY1Pattern;
172 fX2Pattern = muonTrack.fX2Pattern;
173 fY2Pattern = muonTrack.fY2Pattern;
174 fX3Pattern = muonTrack.fX3Pattern;
175 fY3Pattern = muonTrack.fY3Pattern;
176 fX4Pattern = muonTrack.fX4Pattern;
177 fY4Pattern = muonTrack.fY4Pattern;
4c510ac5 178 fChi2MatchTrigger = muonTrack.fChi2MatchTrigger;
fbc3395d 179
4c510ac5 180 fHitsPatternInTrigCh = muonTrack.fHitsPatternInTrigCh;
8252d536 181
4c510ac5 182 fMuonClusterMap = muonTrack.fMuonClusterMap;
60765b06 183
d5efea33 184 // necessary to make a copy of the objects and not only the pointers in TClonesArray
185 delete fClusters;
4c510ac5 186 if (muonTrack.fClusters) {
187 fClusters = new TClonesArray("AliESDMuonCluster",muonTrack.fClusters->GetEntriesFast());
188 AliESDMuonCluster *cluster = (AliESDMuonCluster*) muonTrack.fClusters->First();
d5efea33 189 while (cluster) {
190 new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
4c510ac5 191 cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
d5efea33 192 }
193 } else fClusters = 0x0;
194
5ec1b3bc 195 return *this;
196}
197
d5efea33 198//__________________________________________________________________________
199AliESDMuonTrack::~AliESDMuonTrack()
200{
201 /// Destructor
202 delete fClusters;
203}
204
205//__________________________________________________________________________
206void AliESDMuonTrack::Clear(Option_t* opt)
207{
208 /// Clear arrays
209 if (fClusters) fClusters->Clear(opt);
210}
211
60765b06 212//_____________________________________________________________________________
213void AliESDMuonTrack::GetCovariances(TMatrixD& cov) const
214{
215 // return covariance matrix of uncorrected parameters
216 cov.ResizeTo(5,5);
217 for (Int_t i = 0; i < 5; i++)
218 for (Int_t j = 0; j <= i; j++)
219 cov(i,j) = cov (j,i) = fCovariances[i*(i+1)/2 + j];
220}
221
222//_____________________________________________________________________________
223void AliESDMuonTrack::SetCovariances(const TMatrixD& cov)
224{
225 // set reduced covariance matrix of uncorrected parameters
226 for (Int_t i = 0; i < 5; i++)
227 for (Int_t j = 0; j <= i; j++)
228 fCovariances[i*(i+1)/2 + j] = cov(i,j);
229
230}
231
232//_____________________________________________________________________________
233void AliESDMuonTrack::GetCovarianceXYZPxPyPz(Double_t cov[21]) const
234{
235 // return reduced covariance matrix of uncorrected parameters in (X,Y,Z,Px,Py,Pz) coordinate system
236 //
237 // Cov(x,x) ... : cov[0]
238 // Cov(y,x) ... : cov[1] cov[2]
239 // Cov(z,x) ... : cov[3] cov[4] cov[5]
240 // Cov(px,x)... : cov[6] cov[7] cov[8] cov[9]
241 // Cov(py,x)... : cov[10] cov[11] cov[12] cov[13] cov[14]
242 // Cov(pz,x)... : cov[15] cov[16] cov[17] cov[18] cov[19] cov[20]
243 //
244 // Get ESD covariance matrix into a TMatrixD
245 TMatrixD covESD(5,5);
246 GetCovariances(covESD);
247
248 // compute Jacobian to change the coordinate system
249 // from (X,thetaX,Y,thetaY,c/pYZ) to (X,Y,Z,pX,pY,pZ)
250 Double_t tanThetaX = TMath::Tan(fThetaXUncorrected);
251 Double_t tanThetaY = TMath::Tan(fThetaYUncorrected);
252 Double_t cosThetaX2 = TMath::Cos(fThetaXUncorrected) * TMath::Cos(fThetaXUncorrected);
253 Double_t cosThetaY2 = TMath::Cos(fThetaYUncorrected) * TMath::Cos(fThetaYUncorrected);
254 Double_t pZ = PzUncorrected();
255 Double_t dpZdthetaY = - fInverseBendingMomentumUncorrected * fInverseBendingMomentumUncorrected *
256 pZ * pZ * pZ * tanThetaY / cosThetaY2;
4c510ac5 257 Double_t dpZdinvpYZ = (fInverseBendingMomentumUncorrected != 0.) ? - pZ / fInverseBendingMomentumUncorrected : - FLT_MAX;
60765b06 258 TMatrixD jacob(6,5);
259 jacob.Zero();
260 jacob(0,0) = 1.;
261 jacob(1,2) = 1.;
262 jacob(3,1) = pZ / cosThetaX2;
263 jacob(3,3) = dpZdthetaY * tanThetaX;
264 jacob(3,4) = dpZdinvpYZ * tanThetaX;
265 jacob(4,3) = dpZdthetaY * tanThetaY + pZ / cosThetaY2;
266 jacob(4,4) = dpZdinvpYZ * tanThetaY;
267 jacob(5,3) = dpZdthetaY;
268 jacob(5,4) = dpZdinvpYZ;
269
270 // compute covariance matrix in AOD coordinate system
271 TMatrixD tmp(covESD,TMatrixD::kMultTranspose,jacob);
272 TMatrixD covAOD(jacob,TMatrixD::kMult,tmp);
273
274 // Get AOD covariance matrix into co[21]
275 for (Int_t i = 0; i < 6; i++)
276 for (Int_t j = 0; j <= i; j++)
277 cov[i*(i+1)/2 + j] = covAOD(i,j);
278
279}
280
39b8d0dd 281//_____________________________________________________________________________
282Double_t AliESDMuonTrack::Px() const
283{
284 // return p_x from track parameters
285 Double_t nonBendingSlope = TMath::Tan(fThetaX);
286 Double_t bendingSlope = TMath::Tan(fThetaY);
4c510ac5 287 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
39b8d0dd 288 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
289 return pZ * nonBendingSlope;
290}
291
292//_____________________________________________________________________________
293Double_t AliESDMuonTrack::Py() const
294{
295 // return p_y from track parameters
296 Double_t bendingSlope = TMath::Tan(fThetaY);
4c510ac5 297 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
39b8d0dd 298 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
299 return pZ * bendingSlope;
300}
301
302//_____________________________________________________________________________
303Double_t AliESDMuonTrack::Pz() const
304{
305 // return p_z from track parameters
306 Double_t bendingSlope = TMath::Tan(fThetaY);
4c510ac5 307 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
39b8d0dd 308 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
309}
310
311//_____________________________________________________________________________
312Double_t AliESDMuonTrack::P() const
313{
314 // return p from track parameters
315 Double_t nonBendingSlope = TMath::Tan(fThetaX);
316 Double_t bendingSlope = TMath::Tan(fThetaY);
4c510ac5 317 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
39b8d0dd 318 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
319 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
320}
321
322//_____________________________________________________________________________
323void AliESDMuonTrack::LorentzP(TLorentzVector& vP) const
324{
325 // return Lorentz momentum vector from track parameters
60765b06 326 Double_t muonMass = M();
39b8d0dd 327 Double_t nonBendingSlope = TMath::Tan(fThetaX);
328 Double_t bendingSlope = TMath::Tan(fThetaY);
4c510ac5 329 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
39b8d0dd 330 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
331 Double_t pX = pZ * nonBendingSlope;
332 Double_t pY = pZ * bendingSlope;
333 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
334 vP.SetPxPyPzE(pX, pY, pZ, e);
335}
336
d5efea33 337//_____________________________________________________________________________
338Double_t AliESDMuonTrack::PxAtDCA() const
339{
340 // return p_x from track parameters
341 Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
342 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
4c510ac5 343 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
d5efea33 344 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
345 return pZ * nonBendingSlope;
346}
347
348//_____________________________________________________________________________
349Double_t AliESDMuonTrack::PyAtDCA() const
350{
351 // return p_y from track parameters
352 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
4c510ac5 353 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
d5efea33 354 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
355 return pZ * bendingSlope;
356}
357
358//_____________________________________________________________________________
359Double_t AliESDMuonTrack::PzAtDCA() const
360{
361 // return p_z from track parameters
362 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
4c510ac5 363 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
d5efea33 364 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
365}
366
367//_____________________________________________________________________________
368Double_t AliESDMuonTrack::PAtDCA() const
369{
370 // return p from track parameters
371 Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
372 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
4c510ac5 373 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
d5efea33 374 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
375 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
376}
377
378//_____________________________________________________________________________
379void AliESDMuonTrack::LorentzPAtDCA(TLorentzVector& vP) const
380{
381 // return Lorentz momentum vector from track parameters
382 Double_t muonMass = M();
383 Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
384 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
4c510ac5 385 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
d5efea33 386 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
387 Double_t pX = pZ * nonBendingSlope;
388 Double_t pY = pZ * bendingSlope;
389 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
390 vP.SetPxPyPzE(pX, pY, pZ, e);
391}
392
39b8d0dd 393//_____________________________________________________________________________
394Double_t AliESDMuonTrack::PxUncorrected() const
395{
396 // return p_x from track parameters
397 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
398 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
4c510ac5 399 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
39b8d0dd 400 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
401 return pZ * nonBendingSlope;
402}
403
404//_____________________________________________________________________________
405Double_t AliESDMuonTrack::PyUncorrected() const
406{
407 // return p_y from track parameters
408 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
4c510ac5 409 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
39b8d0dd 410 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
411 return pZ * bendingSlope;
412}
413
414//_____________________________________________________________________________
415Double_t AliESDMuonTrack::PzUncorrected() const
416{
417 // return p_z from track parameters
418 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
4c510ac5 419 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
39b8d0dd 420 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
421}
422
423//_____________________________________________________________________________
424Double_t AliESDMuonTrack::PUncorrected() const
425{
426 // return p from track parameters
427 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
428 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
4c510ac5 429 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
39b8d0dd 430 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
431 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
432}
433
434//_____________________________________________________________________________
435void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
436{
437 // return Lorentz momentum vector from track parameters
60765b06 438 Double_t muonMass = M();
39b8d0dd 439 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
440 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
4c510ac5 441 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
39b8d0dd 442 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
443 Double_t pX = pZ * nonBendingSlope;
444 Double_t pY = pZ * bendingSlope;
445 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
446 vP.SetPxPyPzE(pX, pY, pZ, e);
447}
672b5f43 448
423b32ca 449//_____________________________________________________________________________
450Int_t AliESDMuonTrack::GetMatchTrigger() const
451{
452 // backward compatibility after replacing fMatchTrigger by fLocalTrigger
453 // 0 track does not match trigger
454 // 1 track match but does not pass pt cut
455 // 2 track match Low pt cut
456 // 3 track match High pt cut
457
01413742 458 if (!LoCircuit()) {
423b32ca 459 return 0;
460 } else if (LoLpt() == 0 && LoHpt() == 0) {
461 return 1;
462 } else if (LoLpt() > 0 && LoHpt() == 0) {
463 return 2;
464 } else {
465 return 3;
466 }
467
468}
469
60765b06 470//_____________________________________________________________________________
471void AliESDMuonTrack::AddInMuonClusterMap(Int_t chamber)
472{
473 // Update the muon cluster map by adding this chamber(0..)
474
475 static const UInt_t kMask[10] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200};
476
477 fMuonClusterMap |= kMask[chamber];
478
479}
480
481//_____________________________________________________________________________
482Bool_t AliESDMuonTrack::IsInMuonClusterMap(Int_t chamber) const
483{
484 // return kTRUE if this chamber(0..) is in the muon cluster map
485
486 static const UInt_t kMask[10] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200};
487
488 return ((fMuonClusterMap | kMask[chamber]) == fMuonClusterMap) ? kTRUE : kFALSE;
489
490}
491
4c510ac5 492//_____________________________________________________________________________
493Int_t AliESDMuonTrack::GetNClusters() const
494{
495 // return the number of clusters associated to the track
496 if (!fClusters) return 0;
497
498 return fClusters->GetEntriesFast();
499}
500
d5efea33 501//_____________________________________________________________________________
502TClonesArray& AliESDMuonTrack::GetClusters() const
503{
504 // return the array of clusters associated to the track
505 if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
506
507 return *fClusters;
508}
509
510//_____________________________________________________________________________
511void AliESDMuonTrack::AddCluster(const AliESDMuonCluster &cluster)
512{
513 // add a cluster to the TClonesArray of clusters associated to the track
514 if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
515
516 new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(cluster);
517}
518
519//_____________________________________________________________________________
520Bool_t AliESDMuonTrack::ClustersStored() const
521{
522 // return kTRUE if the clusters associated to the track are registered
4c510ac5 523 if (GetNClusters() == 0) return kFALSE;
d5efea33 524
525 return kTRUE;
526}
527