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