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