]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/ESD/AliESDTrdTrack.cxx
Moving some trigger classes to ESD to resolve interlibrary dependencies
[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
25#include "AliESDTrdTrack.h"
52cd0cc0 26#include "AliESDTrdTracklet.h"
0ee00e25 27
28ClassImp(AliESDTrdTrack)
29
30//_____________________________________________________________________________
31AliESDTrdTrack::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 52AliESDTrdTrack::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 78AliESDTrdTrack& 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 97void 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
109ULong64_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
124ULong64_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
142Int_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}