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 ///////////////////////////////////////////////////////////////////////////////
27 #include "AliESDTrdTrack.h"
28 #include "AliESDTrdTracklet.h"
30 ClassImp(AliESDTrdTrack)
32 //_____________________________________________________________________________
33 AliESDTrdTrack::AliESDTrdTrack():
50 // Default constructor
51 for (int i=fgkNlayers;i--;) fTrackletIndex[i] = 0;
56 AliESDTrdTrack::AliESDTrdTrack(const AliESDTrdTrack& track):
58 fSector(track.fSector),
65 fLayerMask(track.fLayerMask),
67 fFlagsTiming(track.fFlagsTiming),
68 fReserved(track.fReserved),
69 fTrackMatch(track.fTrackMatch),
76 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
77 fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
79 if (track.fTrackletRefs[iLayer].GetObject())
80 fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
84 AliESDTrdTrack& AliESDTrdTrack::operator=(const AliESDTrdTrack& track)
87 // assignment operator
92 AliVTrdTrack::operator=(track);
93 fSector = track.fSector;
94 fStack = track.fStack;
99 fLayerMask = track.fLayerMask;
100 fFlags = track.fFlags;
101 fFlagsTiming = track.fFlagsTiming;
102 fReserved = track.fReserved;
103 fTrackMatch = track.fTrackMatch;
104 fLabel = track.fLabel;
105 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
106 fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
107 fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
113 void AliESDTrdTrack::Copy(TObject& obj) const
115 // this overwrites the virtual TOBject::Copy()
116 // to allow run time copying without casting
119 if(this==&obj)return;
120 AliESDTrdTrack *robj = dynamic_cast<AliESDTrdTrack*>(&obj);
121 if(!robj)return; // not an aliesdtrdtrack
125 ULong64_t AliESDTrdTrack::GetTrackWord(Int_t /* rev */) const
127 // return track word representation as in raw data
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);
140 ULong64_t AliESDTrdTrack::GetExtendedTrackWord(Int_t /* rev */) const
142 // return extended track word representation as in raw data
145 ULong64_t trackWord = 0;
146 AppendBits(trackWord, 11, fFlags);
147 AppendBits(trackWord, 1, fFlagsTiming);
148 AppendBits(trackWord, 2, fReserved);
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]);
159 Int_t AliESDTrdTrack::GetPt() const
161 // calculate pt from a as done in hardware
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
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
177 if (this->GetA() != 0) {
178 Int_t layerMaskId = maskIdLut[this->GetLayerMask()];
179 Int_t c1 = c1Lut[layerMaskId];
180 Int_t c1Ext = c1 << 8;
181 Int_t ptRawStage4 = c1Ext / ((this->GetA() >> 2) != 0 ? (this->GetA() >> 2) : 1 );
182 Int_t ptRawComb4 = ptRawStage4;
183 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
185 return -ptExtComb4/2;
191 Int_t AliESDTrdTrack::Compare(const TObject* obj) const
195 else if (TMath::Abs(Pt()) < TMath::Abs(((AliESDTrdTrack*)(obj))->Pt()))