]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/ESD/AliESDTrdTrack.cxx
Fix for #88344
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDTrdTrack.cxx
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 ///////////////////////////////////////////////////////////////////////////////
17 //
18 // ESD format for the TRD tracks calculated in the
19 // Global Tracking Unit, used for the TRD L1 trigger
20 //
21 // Author: Jochen Klein <jochen.klein@cern.ch>
22 //
23 ///////////////////////////////////////////////////////////////////////////////
24
25 #include "TMath.h"
26
27 #include "AliESDTrdTrack.h"
28 #include "AliESDTrdTracklet.h"
29
30 ClassImp(AliESDTrdTrack)
31
32 //_____________________________________________________________________________
33 AliESDTrdTrack::AliESDTrdTrack():
34   TObject(),
35   fSector(-1),
36   fStack(-1),
37   fA(0),
38   fB(0),
39   fC(0),
40   fY(0),
41   fPID(0),
42   fLayerMask(0),
43   fFlags(0),
44   fReserved(0),
45   fLabel(-1)
46 {
47   //
48   // Default constructor
49   for (int i=fgkNlayers;i--;) fTrackletIndex[i] = 0;
50   //
51
52 }
53
54 AliESDTrdTrack::AliESDTrdTrack(const AliESDTrdTrack& track):
55   TObject(track),
56   fSector(track.fSector),
57   fStack(track.fStack),
58   fA(track.fA),
59   fB(track.fB),
60   fC(track.fC),
61   fY(track.fY),
62   fPID(track.fPID),
63   fLayerMask(track.fLayerMask),
64   fFlags(track.fFlags),
65   fReserved(track.fReserved),
66   fLabel(track.fLabel)
67 {
68   //
69   // Copy contructor
70   //
71
72   for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
73     fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
74
75     if (track.fTrackletRefs[iLayer].GetObject())
76       fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
77   }
78 }
79
80 AliESDTrdTrack& AliESDTrdTrack::operator=(const AliESDTrdTrack& track)
81 {
82   //
83   // assignment operator
84   //
85
86   if (this == &track)
87     return *this;
88   TObject::operator=(track);
89   fLabel        = track.fLabel;
90   fSector       = track.fSector;
91   for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
92     fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
93     fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
94   }
95
96   return *this;
97 }
98
99 void AliESDTrdTrack::Copy(TObject& obj) const
100 {
101   // this overwrites the virtual TOBject::Copy()
102   // to allow run time copying without casting
103   // in AliESDEvent
104
105   if(this==&obj)return;
106   AliESDTrdTrack *robj = dynamic_cast<AliESDTrdTrack*>(&obj);
107   if(!robj)return; // not an aliesdtrdtrack
108   *robj = *this;
109 }
110
111 ULong64_t AliESDTrdTrack::GetTrackWord(Int_t /* rev */) const
112 {
113   // return track word representation as in raw data
114   // MSB always 1
115
116   ULong64_t trackWord = 1;
117   AppendBits(trackWord,   1, 0);
118   AppendBits(trackWord,   6, fLayerMask);
119   AppendBits(trackWord,  18, fA);
120   AppendBits(trackWord,  18, fB);
121   AppendBits(trackWord,  12, fC);
122   AppendBits(trackWord,   8, fPID);
123   return trackWord;
124 }
125
126 ULong64_t AliESDTrdTrack::GetExtendedTrackWord(Int_t /* rev */) const
127 {
128   // return extended track word representation as in raw data
129   // MSB always 0
130
131   ULong64_t trackWord = 0;
132   AppendBits(trackWord,  11, fFlags);
133   AppendBits(trackWord,  3, fReserved);
134   AppendBits(trackWord, 13, fY);
135   AppendBits(trackWord,  6, fTrackletIndex[5]);
136   AppendBits(trackWord,  6, fTrackletIndex[4]);
137   AppendBits(trackWord,  6, fTrackletIndex[3]);
138   AppendBits(trackWord,  6, fTrackletIndex[2]);
139   AppendBits(trackWord,  6, fTrackletIndex[1]);
140   AppendBits(trackWord,  6, fTrackletIndex[0]);
141   return trackWord;
142 }
143
144 Int_t AliESDTrdTrack::GetPt() const
145 {
146   // calculate pt from a as done in hardware
147
148   const Int_t maskIdLut[64] = {
149     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
150     -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
151     -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
152     -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
153   };
154
155   const Int_t c1Lut[32] = {
156     -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
157     -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
158     -2670, -2557, -2763, -2557, -2644, -2523,    -1,    -1,
159     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
160   };
161
162   if (this->GetA() != 0) {
163     Int_t layerMaskId = maskIdLut[this->GetLayerMask()];
164     Int_t c1 = c1Lut[layerMaskId];
165     Int_t c1Ext = c1 << 8;
166     Int_t ptRawStage4 = c1Ext / ((this->GetA() >> 2) != 0 ? (this->GetA() >> 2) : 1 );
167     Int_t ptRawComb4 = ptRawStage4;
168     Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
169
170     return -ptExtComb4/2;
171   }
172   else
173     return 0;
174 }
175
176 Int_t AliESDTrdTrack::Compare(const TObject* obj) const
177 {
178   if (this == obj)
179     return 0;
180   else if (TMath::Abs(Pt()) < TMath::Abs(((AliESDTrdTrack*)(obj))->Pt()))
181     return 1;
182   else
183     return -1;
184 }