]>
Commit | Line | Data |
---|---|---|
0ee00e25 | 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 | // | |
52cd0cc0 | 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> | |
0ee00e25 | 22 | // |
23 | /////////////////////////////////////////////////////////////////////////////// | |
24 | ||
25 | #include "AliESDTrdTrack.h" | |
52cd0cc0 | 26 | #include "AliESDTrdTracklet.h" |
0ee00e25 | 27 | |
28 | ClassImp(AliESDTrdTrack) | |
29 | ||
30 | //_____________________________________________________________________________ | |
31 | AliESDTrdTrack::AliESDTrdTrack(): | |
32 | TObject(), | |
52cd0cc0 | 33 | fSector(-1), |
34 | fStack(-1), | |
35 | fA(0), | |
36 | fB(0), | |
37 | fC(0), | |
38 | fY(0), | |
0ee00e25 | 39 | fPID(0), |
52cd0cc0 | 40 | fLayerMask(0), |
41 | fFlags(0), | |
42 | fReserved(0), | |
43 | fLabel(-1) | |
0ee00e25 | 44 | { |
0ee00e25 | 45 | // |
46 | // Default constructor | |
748a7a1b | 47 | for (int i=fgkNlayers;i--;) fTrackletIndex[i] = 0; |
0ee00e25 | 48 | // |
49 | ||
50 | } | |
51 | ||
0ee00e25 | 52 | AliESDTrdTrack::AliESDTrdTrack(const AliESDTrdTrack& track): |
53 | TObject(track), | |
52cd0cc0 | 54 | fSector(track.fSector), |
55 | fStack(track.fStack), | |
56 | fA(track.fA), | |
57 | fB(track.fB), | |
58 | fC(track.fC), | |
59 | fY(track.fY), | |
0ee00e25 | 60 | fPID(track.fPID), |
52cd0cc0 | 61 | fLayerMask(track.fLayerMask), |
62 | fFlags(track.fFlags), | |
63 | fReserved(track.fReserved), | |
64 | fLabel(track.fLabel) | |
0ee00e25 | 65 | { |
0ee00e25 | 66 | // |
67 | // Copy contructor | |
68 | // | |
69 | ||
52cd0cc0 | 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 | } | |
0ee00e25 | 76 | } |
77 | ||
0ee00e25 | 78 | AliESDTrdTrack& AliESDTrdTrack::operator=(const AliESDTrdTrack& track) |
79 | { | |
52cd0cc0 | 80 | // |
81 | // assignment operator | |
0ee00e25 | 82 | // |
83 | ||
84 | if (this == &track) | |
85 | return *this; | |
cd888a89 | 86 | TObject::operator=(track); |
52cd0cc0 | 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 | } | |
0ee00e25 | 93 | |
94 | return *this; | |
0ee00e25 | 95 | } |
96 | ||
52cd0cc0 | 97 | void AliESDTrdTrack::Copy(TObject& obj) const |
98 | { | |
99 | // this overwrites the virtual TOBject::Copy() | |
732a24fe | 100 | // to allow run time copying without casting |
101 | // in AliESDEvent | |
102 | ||
103 | if(this==&obj)return; | |
104 | AliESDTrdTrack *robj = dynamic_cast<AliESDTrdTrack*>(&obj); | |
52cd0cc0 | 105 | if(!robj)return; // not an aliesdtrdtrack |
732a24fe | 106 | *robj = *this; |
107 | } | |
52cd0cc0 | 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 | } |