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