1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////////
18 // ESD format for the TRD tracks calculated in the
19 // Global Tracking Unit, used for the TRD L1 trigger
21 // Author: Jochen Klein <jochen.klein@cern.ch>
23 ///////////////////////////////////////////////////////////////////////////////
25 #include "AliESDTrdTrack.h"
26 #include "AliESDTrdTracklet.h"
28 ClassImp(AliESDTrdTrack)
30 //_____________________________________________________________________________
31 AliESDTrdTrack::AliESDTrdTrack():
46 // Default constructor
47 for (int i=fgkNlayers;i--;) fTrackletIndex[i] = 0;
52 AliESDTrdTrack::AliESDTrdTrack(const AliESDTrdTrack& track):
54 fSector(track.fSector),
61 fLayerMask(track.fLayerMask),
63 fReserved(track.fReserved),
70 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
71 fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
73 if (track.fTrackletRefs[iLayer].GetObject())
74 fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
78 AliESDTrdTrack& AliESDTrdTrack::operator=(const AliESDTrdTrack& track)
81 // assignment operator
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];
97 void AliESDTrdTrack::Copy(TObject& obj) const
99 // this overwrites the virtual TOBject::Copy()
100 // to allow run time copying without casting
103 if(this==&obj)return;
104 AliESDTrdTrack *robj = dynamic_cast<AliESDTrdTrack*>(&obj);
105 if(!robj)return; // not an aliesdtrdtrack
109 ULong64_t AliESDTrdTrack::GetTrackWord(Int_t /* rev */) const
111 // return track word representation as in raw data
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);
124 ULong64_t AliESDTrdTrack::GetExtendedTrackWord(Int_t /* rev */) const
126 // return extended track word representation as in raw data
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]);
142 Int_t AliESDTrdTrack::GetPt() const
144 // calculate pt from a as done in hardware
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
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
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;
168 return -ptExtComb4/2;