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