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