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 AliESDMuonTrack
21 /// Class to describe the MUON tracks in the Event Summary Data class
22 /// This is where the results of reconstruction are stored for the muons
24 /// \author G.Martinez
26 ///////////////////////////////////////////////////////////////////////////////
28 #include "AliESDMuonTrack.h"
29 #include "AliESDMuonCluster.h"
31 #include <TClonesArray.h>
32 #include <TLorentzVector.h>
35 ClassImp(AliESDMuonTrack)
37 //_____________________________________________________________________________
38 AliESDMuonTrack::AliESDMuonTrack ():
40 fInverseBendingMomentum(FLT_MAX),
46 fInverseBendingMomentumAtDCA(FLT_MAX),
50 fNonBendingCoorAtDCA(0),
51 fInverseBendingMomentumUncorrected(FLT_MAX),
52 fThetaXUncorrected(0),
53 fThetaYUncorrected(0),
55 fBendingCoorUncorrected(0),
56 fNonBendingCoorUncorrected(0),
69 fHitsPatternInTrigCh(0),
75 /// Default constructor
77 for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0;
81 //_____________________________________________________________________________
82 AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& muonTrack):
83 AliVParticle(muonTrack),
84 fInverseBendingMomentum(muonTrack.fInverseBendingMomentum),
85 fThetaX(muonTrack.fThetaX),
86 fThetaY(muonTrack.fThetaY),
88 fBendingCoor(muonTrack.fBendingCoor),
89 fNonBendingCoor(muonTrack.fNonBendingCoor),
90 fInverseBendingMomentumAtDCA(muonTrack.fInverseBendingMomentumAtDCA),
91 fThetaXAtDCA(muonTrack.fThetaXAtDCA),
92 fThetaYAtDCA(muonTrack.fThetaYAtDCA),
93 fBendingCoorAtDCA(muonTrack.fBendingCoorAtDCA),
94 fNonBendingCoorAtDCA(muonTrack.fNonBendingCoorAtDCA),
95 fInverseBendingMomentumUncorrected(muonTrack.fInverseBendingMomentumUncorrected),
96 fThetaXUncorrected(muonTrack.fThetaXUncorrected),
97 fThetaYUncorrected(muonTrack.fThetaYUncorrected),
98 fZUncorrected(muonTrack.fZUncorrected),
99 fBendingCoorUncorrected(muonTrack.fBendingCoorUncorrected),
100 fNonBendingCoorUncorrected(muonTrack.fNonBendingCoorUncorrected),
101 fChi2(muonTrack.fChi2),
102 fChi2MatchTrigger(muonTrack.fChi2MatchTrigger),
103 fLocalTrigger(muonTrack.fLocalTrigger),
104 fX1Pattern(muonTrack.fX1Pattern),
105 fY1Pattern(muonTrack.fY1Pattern),
106 fX2Pattern(muonTrack.fX2Pattern),
107 fY2Pattern(muonTrack.fY2Pattern),
108 fX3Pattern(muonTrack.fX3Pattern),
109 fY3Pattern(muonTrack.fY3Pattern),
110 fX4Pattern(muonTrack.fX4Pattern),
111 fY4Pattern(muonTrack.fY4Pattern),
112 fMuonClusterMap(muonTrack.fMuonClusterMap),
113 fHitsPatternInTrigCh(muonTrack.fHitsPatternInTrigCh),
114 fNHit(muonTrack.fNHit),
116 fLabel(muonTrack.fLabel)
120 /// Deep copy implemented
122 for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
124 // necessary to make a copy of the objects and not only the pointers in TClonesArray
125 if (muonTrack.fClusters) {
126 fClusters = new TClonesArray("AliESDMuonCluster",muonTrack.fClusters->GetEntriesFast());
127 AliESDMuonCluster *cluster = (AliESDMuonCluster*) muonTrack.fClusters->First();
129 new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
130 cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
135 //_____________________________________________________________________________
136 AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
139 /// Equal operator for a deep copy
141 if (this == &muonTrack)
144 AliVParticle::operator=(muonTrack); // don't forget to invoke the base class' assignment operator
146 fInverseBendingMomentum = muonTrack.fInverseBendingMomentum;
147 fThetaX = muonTrack.fThetaX;
148 fThetaY = muonTrack.fThetaY;
150 fBendingCoor = muonTrack.fBendingCoor;
151 fNonBendingCoor = muonTrack.fNonBendingCoor;
153 fInverseBendingMomentumAtDCA = muonTrack.fInverseBendingMomentumAtDCA;
154 fThetaXAtDCA = muonTrack.fThetaXAtDCA;
155 fThetaYAtDCA = muonTrack.fThetaYAtDCA;
156 fBendingCoorAtDCA = muonTrack.fBendingCoorAtDCA;
157 fNonBendingCoorAtDCA = muonTrack.fNonBendingCoorAtDCA;
159 fInverseBendingMomentumUncorrected = muonTrack.fInverseBendingMomentumUncorrected;
160 fThetaXUncorrected = muonTrack.fThetaXUncorrected;
161 fThetaYUncorrected = muonTrack.fThetaYUncorrected;
162 fZUncorrected = muonTrack.fZUncorrected;
163 fBendingCoorUncorrected = muonTrack.fBendingCoorUncorrected;
164 fNonBendingCoorUncorrected = muonTrack.fNonBendingCoorUncorrected;
166 for (Int_t i = 0; i < 15; i++) fCovariances[i] = muonTrack.fCovariances[i];
168 fChi2 = muonTrack.fChi2;
169 fNHit = muonTrack.fNHit;
171 fLocalTrigger = muonTrack.fLocalTrigger;
172 fX1Pattern = muonTrack.fX1Pattern;
173 fY1Pattern = muonTrack.fY1Pattern;
174 fX2Pattern = muonTrack.fX2Pattern;
175 fY2Pattern = muonTrack.fY2Pattern;
176 fX3Pattern = muonTrack.fX3Pattern;
177 fY3Pattern = muonTrack.fY3Pattern;
178 fX4Pattern = muonTrack.fX4Pattern;
179 fY4Pattern = muonTrack.fY4Pattern;
180 fChi2MatchTrigger = muonTrack.fChi2MatchTrigger;
182 fHitsPatternInTrigCh = muonTrack.fHitsPatternInTrigCh;
184 fMuonClusterMap = muonTrack.fMuonClusterMap;
186 fLabel = muonTrack.fLabel;
188 // necessary to make a copy of the objects and not only the pointers in TClonesArray
190 if (muonTrack.fClusters) {
191 fClusters = new TClonesArray("AliESDMuonCluster",muonTrack.fClusters->GetEntriesFast());
192 AliESDMuonCluster *cluster = (AliESDMuonCluster*) muonTrack.fClusters->First();
194 new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(*cluster);
195 cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
197 } else fClusters = 0x0;
202 void AliESDMuonTrack::Copy(TObject &obj) const {
204 /// This overwrites the virtual TOBject::Copy()
205 /// to allow run time copying without casting
208 if(this==&obj)return;
209 AliESDMuonTrack *robj = dynamic_cast<AliESDMuonTrack*>(&obj);
210 if(!robj)return; // not an AliESDMuonTrack
216 //__________________________________________________________________________
217 AliESDMuonTrack::~AliESDMuonTrack()
223 //__________________________________________________________________________
224 void AliESDMuonTrack::Clear(Option_t* opt)
227 if (fClusters) fClusters->Clear(opt);
230 //__________________________________________________________________________
231 void AliESDMuonTrack::Reset()
233 /// Reset to default values
235 fInverseBendingMomentum = FLT_MAX;
240 fNonBendingCoor = 0.;
241 fInverseBendingMomentumAtDCA = FLT_MAX;
244 fBendingCoorAtDCA = 0.;
245 fNonBendingCoorAtDCA = 0.;
246 fInverseBendingMomentumUncorrected = FLT_MAX;
247 fThetaXUncorrected = 0.;
248 fThetaYUncorrected = 0.;
250 fBendingCoorUncorrected = 0.;
251 fNonBendingCoorUncorrected = 0.;
253 fChi2MatchTrigger = 0.;
264 fHitsPatternInTrigCh = 0;
266 delete fClusters; fClusters = 0x0;
267 for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0.;
271 //_____________________________________________________________________________
272 void AliESDMuonTrack::GetCovariances(TMatrixD& cov) const
274 /// return covariance matrix of uncorrected parameters
276 for (Int_t i = 0; i < 5; i++)
277 for (Int_t j = 0; j <= i; j++)
278 cov(i,j) = cov (j,i) = fCovariances[i*(i+1)/2 + j];
281 //_____________________________________________________________________________
282 void AliESDMuonTrack::SetCovariances(const TMatrixD& cov)
284 /// set reduced covariance matrix of uncorrected parameters
285 for (Int_t i = 0; i < 5; i++)
286 for (Int_t j = 0; j <= i; j++)
287 fCovariances[i*(i+1)/2 + j] = cov(i,j);
291 //_____________________________________________________________________________
292 void AliESDMuonTrack::GetCovarianceXYZPxPyPz(Double_t cov[21]) const
294 /// return reduced covariance matrix of uncorrected parameters in (X,Y,Z,Px,Py,Pz) coordinate system
296 /// - Cov(x,x) ... : cov[0]
297 /// - Cov(y,x) ... : cov[1] cov[2]
298 /// - Cov(z,x) ... : cov[3] cov[4] cov[5]
299 /// - Cov(px,x)... : cov[6] cov[7] cov[8] cov[9]
300 /// - Cov(py,x)... : cov[10] cov[11] cov[12] cov[13] cov[14]
301 /// - Cov(pz,x)... : cov[15] cov[16] cov[17] cov[18] cov[19] cov[20]
303 /// Get ESD covariance matrix into a TMatrixD
304 TMatrixD covESD(5,5);
305 GetCovariances(covESD);
307 // compute Jacobian to change the coordinate system
308 // from (X,thetaX,Y,thetaY,c/pYZ) to (X,Y,Z,pX,pY,pZ)
309 Double_t tanThetaX = TMath::Tan(fThetaXUncorrected);
310 Double_t tanThetaY = TMath::Tan(fThetaYUncorrected);
311 Double_t cosThetaX2 = TMath::Cos(fThetaXUncorrected) * TMath::Cos(fThetaXUncorrected);
312 Double_t cosThetaY2 = TMath::Cos(fThetaYUncorrected) * TMath::Cos(fThetaYUncorrected);
313 Double_t pZ = PzUncorrected();
314 Double_t dpZdthetaY = - fInverseBendingMomentumUncorrected * fInverseBendingMomentumUncorrected *
315 pZ * pZ * pZ * tanThetaY / cosThetaY2;
316 Double_t dpZdinvpYZ = (fInverseBendingMomentumUncorrected != 0.) ? - pZ / fInverseBendingMomentumUncorrected : - FLT_MAX;
321 jacob(3,1) = pZ / cosThetaX2;
322 jacob(3,3) = dpZdthetaY * tanThetaX;
323 jacob(3,4) = dpZdinvpYZ * tanThetaX;
324 jacob(4,3) = dpZdthetaY * tanThetaY + pZ / cosThetaY2;
325 jacob(4,4) = dpZdinvpYZ * tanThetaY;
326 jacob(5,3) = dpZdthetaY;
327 jacob(5,4) = dpZdinvpYZ;
329 // compute covariance matrix in AOD coordinate system
330 TMatrixD tmp(covESD,TMatrixD::kMultTranspose,jacob);
331 TMatrixD covAOD(jacob,TMatrixD::kMult,tmp);
333 // Get AOD covariance matrix into co[21]
334 for (Int_t i = 0; i < 6; i++)
335 for (Int_t j = 0; j <= i; j++)
336 cov[i*(i+1)/2 + j] = covAOD(i,j);
340 //_____________________________________________________________________________
341 Double_t AliESDMuonTrack::Px() const
343 /// return p_x from track parameters
344 Double_t nonBendingSlope = TMath::Tan(fThetaX);
345 Double_t bendingSlope = TMath::Tan(fThetaY);
346 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
347 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
348 return pZ * nonBendingSlope;
351 //_____________________________________________________________________________
352 Double_t AliESDMuonTrack::Py() const
354 /// return p_y from track parameters
355 Double_t bendingSlope = TMath::Tan(fThetaY);
356 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
357 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
358 return pZ * bendingSlope;
361 //_____________________________________________________________________________
362 Double_t AliESDMuonTrack::Pz() const
364 /// return p_z from track parameters
365 Double_t bendingSlope = TMath::Tan(fThetaY);
366 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
367 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
370 //_____________________________________________________________________________
371 Double_t AliESDMuonTrack::P() const
373 /// return p from track parameters
374 Double_t nonBendingSlope = TMath::Tan(fThetaX);
375 Double_t bendingSlope = TMath::Tan(fThetaY);
376 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
377 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
378 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
381 //_____________________________________________________________________________
382 void AliESDMuonTrack::LorentzP(TLorentzVector& vP) const
384 /// return Lorentz momentum vector from track parameters
385 Double_t muonMass = M();
386 Double_t nonBendingSlope = TMath::Tan(fThetaX);
387 Double_t bendingSlope = TMath::Tan(fThetaY);
388 Double_t pYZ = (fInverseBendingMomentum != 0.) ? TMath::Abs(1. / fInverseBendingMomentum) : - FLT_MAX;
389 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
390 Double_t pX = pZ * nonBendingSlope;
391 Double_t pY = pZ * bendingSlope;
392 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
393 vP.SetPxPyPzE(pX, pY, pZ, e);
396 //_____________________________________________________________________________
397 Double_t AliESDMuonTrack::PxAtDCA() const
399 /// return p_x from track parameters
400 Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
401 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
402 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
403 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
404 return pZ * nonBendingSlope;
407 //_____________________________________________________________________________
408 Double_t AliESDMuonTrack::PyAtDCA() const
410 /// return p_y from track parameters
411 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
412 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
413 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
414 return pZ * bendingSlope;
417 //_____________________________________________________________________________
418 Double_t AliESDMuonTrack::PzAtDCA() const
420 /// return p_z from track parameters
421 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
422 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
423 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
426 //_____________________________________________________________________________
427 Double_t AliESDMuonTrack::PAtDCA() const
429 /// return p from track parameters
430 Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
431 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
432 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
433 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
434 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
437 //_____________________________________________________________________________
438 void AliESDMuonTrack::LorentzPAtDCA(TLorentzVector& vP) const
440 /// return Lorentz momentum vector from track parameters
441 Double_t muonMass = M();
442 Double_t nonBendingSlope = TMath::Tan(fThetaXAtDCA);
443 Double_t bendingSlope = TMath::Tan(fThetaYAtDCA);
444 Double_t pYZ = (fInverseBendingMomentumAtDCA != 0.) ? TMath::Abs(1. / fInverseBendingMomentumAtDCA) : - FLT_MAX;
445 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
446 Double_t pX = pZ * nonBendingSlope;
447 Double_t pY = pZ * bendingSlope;
448 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
449 vP.SetPxPyPzE(pX, pY, pZ, e);
452 //_____________________________________________________________________________
453 Double_t AliESDMuonTrack::PxUncorrected() const
455 /// return p_x from track parameters
456 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
457 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
458 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
459 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
460 return pZ * nonBendingSlope;
463 //_____________________________________________________________________________
464 Double_t AliESDMuonTrack::PyUncorrected() const
466 /// return p_y from track parameters
467 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
468 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
469 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
470 return pZ * bendingSlope;
473 //_____________________________________________________________________________
474 Double_t AliESDMuonTrack::PzUncorrected() const
476 /// return p_z from track parameters
477 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
478 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
479 return -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
482 //_____________________________________________________________________________
483 Double_t AliESDMuonTrack::PUncorrected() const
485 /// return p from track parameters
486 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
487 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
488 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
489 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
490 return -pZ * TMath::Sqrt(1.0 + bendingSlope*bendingSlope + nonBendingSlope*nonBendingSlope);
493 //_____________________________________________________________________________
494 void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
496 /// return Lorentz momentum vector from track parameters
497 Double_t muonMass = M();
498 Double_t nonBendingSlope = TMath::Tan(fThetaXUncorrected);
499 Double_t bendingSlope = TMath::Tan(fThetaYUncorrected);
500 Double_t pYZ = (fInverseBendingMomentumUncorrected != 0.) ? TMath::Abs(1. / fInverseBendingMomentumUncorrected) : - FLT_MAX;
501 Double_t pZ = -pYZ / TMath::Sqrt(1.0 + bendingSlope*bendingSlope); // spectro. (z<0)
502 Double_t pX = pZ * nonBendingSlope;
503 Double_t pY = pZ * bendingSlope;
504 Double_t e = TMath::Sqrt(muonMass*muonMass + pX*pX + pY*pY + pZ*pZ);
505 vP.SetPxPyPzE(pX, pY, pZ, e);
508 //_____________________________________________________________________________
509 Int_t AliESDMuonTrack::GetMatchTrigger() const
511 /// backward compatibility after replacing fMatchTrigger by fLocalTrigger
512 /// - 0 track does not match trigger
513 /// - 1 track match but does not pass pt cut
514 /// - 2 track match Low pt cut
515 /// - 3 track match High pt cut
519 } else if (LoLpt() == 0 && LoHpt() == 0) {
521 } else if (LoLpt() > 0 && LoHpt() == 0) {
529 //_____________________________________________________________________________
530 Int_t AliESDMuonTrack::GetNClusters() const
532 /// return the number of clusters associated to the track
533 if (!fClusters) return 0;
535 return fClusters->GetEntriesFast();
538 //_____________________________________________________________________________
539 TClonesArray& AliESDMuonTrack::GetClusters() const
541 /// return the array of clusters associated to the track
542 if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
547 //_____________________________________________________________________________
548 void AliESDMuonTrack::AddCluster(const AliESDMuonCluster &cluster)
550 /// add a cluster to the TClonesArray of clusters associated to the track
551 if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
553 new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(cluster);
556 //_____________________________________________________________________________
557 Bool_t AliESDMuonTrack::ClustersStored() const
559 /// return kTRUE if the clusters associated to the track are registered
560 if (GetNClusters() == 0) return kFALSE;
565 //_____________________________________________________________________________
566 void AliESDMuonTrack::SetFiredChamber(UShort_t& pattern, Int_t cathode, Int_t chamber)
568 /// Turn on the bit corresponding to fired chameber
569 pattern |= (0x1 << ( 7 - ( 4*cathode + chamber )));
572 //_____________________________________________________________________________
573 void AliESDMuonTrack::AddEffInfo(UShort_t& pattern, Int_t slatOrInfo, EAliTriggerChPatternFlag effType)
575 /// Add efficiency flag and crossed RPC or info on rejected track
576 pattern |= effType << 8;
577 pattern |= slatOrInfo << 10;
580 //_____________________________________________________________________________
581 Bool_t AliESDMuonTrack::IsChamberHit(UShort_t pattern, Int_t cathode, Int_t chamber)
583 /// Check if chamber was was hit
584 return (pattern >> (7 - ( 4*cathode + chamber ))) & 0x1;
587 //_____________________________________________________________________________
588 Int_t AliESDMuonTrack::GetEffFlag(UShort_t pattern)
590 /// Get Efficiency flag
591 return (pattern >> 8) & 0x03;
594 //_____________________________________________________________________________
595 Int_t AliESDMuonTrack::GetSlatOrInfo(UShort_t pattern)
597 /// Getting crossed slat or info
598 return (pattern >> 10) & 0x1F;