]> git.uio.no Git - u/mrichter/AliRoot.git/blame - T0/AliT0RawReader.cxx
Using ProcessLine to avoid linking with libRAliEn.so
[u/mrichter/AliRoot.git] / T0 / AliT0RawReader.cxx
CommitLineData
dc7ca31d 1#include "AliT0RawReader.h"
e0bba6cc 2#include "AliT0Parameters.h"
dc7ca31d 3#include "AliBitPacking.h"
4#include "TBits.h"
5
6#include <Riostream.h>
7#include "TMath.h"
8#include "TH1F.h"
9#include "TArrayI.h"
10#include "AliLog.h"
11
12ClassImp(AliT0RawReader)
13
e0bba6cc 14 AliT0RawReader::AliT0RawReader (AliRawReader *rawReader)
dc7ca31d 15 : TTask("T0RawReader","read raw T0 data"),
dc7ca31d 16 fRawReader(rawReader),
17 fData(NULL),
807a797f 18 fPosition(0),
19 fParam(NULL)
dc7ca31d 20{
21 //
22// create an object to read T0raw digits
23 AliDebug(1,"Start ");
dc7ca31d 24
25 fRawReader->Reset();
26 fRawReader->Select("T0");
807a797f 27 AliT0Parameters* fParam = AliT0Parameters::Instance();
28 fParam->Init();
dc7ca31d 29
dc7ca31d 30}
31 AliT0RawReader::~AliT0RawReader ()
32{
33 //
34}
c41ceaac 35/*
36AliT0RawReader::AliT0RawReader(const AliT0RawReader& o): TTask(o),
37 fRawReader(rawReader),
38 fData(NULL),
39 fPosition(0)
40{
41 //
42}
43*/
44
dc7ca31d 45
46Bool_t AliT0RawReader::Next()
47{
48// read the next raw digit
49// returns kFALSE if there is no digit left
50//"LookUpTable":
51// Amplitude LED TRM=0; chain=0; TDC 0 -5 channel 0,2,4,6
52// Time CFD TRM=0; chain=0; TDC 6 - 11 channel 0,2,4,6
53// mean time TRM=0; chain=0; TDC 12 channel 0
54// T0A TRM=0; chain=0; TDC 12 channel 2
55// T0C TRM=0; chain=0; TDC 12 channel 4
56// vertex TRM=0; chain=0; TDC 12 channel 6
57// mult QTC0 TRM=0; chain=0; TDC 13 channel 0
58// mult QTC1 TRM=0; chain=0; TDC 13 channel 2
59
60// Charge QTC0 TRM=1; chain=0; TDC 0 -5 channel 0,2,4,6
61// Charge QTC1 TRM=1; chain=0; TDC 6 - 11 channel 0,2,4,6
62// T0A trigger TRM=1; chain=0; TDC 12 channel 0
63// T0C trigger TRM=1; chain=0; TDC 12 channel 2
64// vertex trigger TRM=1; chain=0; TDC 12 channel 4
65// trigger central TRM=1; chain=0; TDC 13 channel 0
66// tigger semicenral TRM=1; chain=0; TDC 13 channel 2
67//
68// allData array collect data from all channels in one :
69// allData[0] - allData[23] 24 CFD channels
70// allData[24] - allData[47] 24 LED channels
71// allData[48] mean (T0) signal
72// allData[49] time difference (vertex)
73
e0bba6cc 74
dc7ca31d 75 UInt_t word;
5325480c 76 Int_t time=0, itdc=0, ichannel=0, uu;
dc7ca31d 77 Int_t numberOfWordsInTRM=0, iTRM=0;
5325480c 78 Int_t tdcTime, koef,hit=0;
79 Int_t koefhits[110];
807a797f 80 // Int_t fDRM_GLOBAL_HEADER = 0x40000001;
81 // Int_t fDRM_GLOBAL_TRAILER = 0x50000001;
5325480c 82
807a797f 83 // Int_t TRM_GLOBAL_HEADER = 0x40000000;
84 Int_t TRM_CHAIN_0_HEADER = 0x00000000;
85 // Int_t TRM_CHAIN_1_HEADER = 0x20000000;
5325480c 86 Int_t TRM_CHAIN_0_TRAILER = 0x10000000;
807a797f 87 // Int_t TRM_CHAIN_1_TRAILER = 0x30000000;
88 // Int_t TRM_GLOBAL_TRAILER = 0x5000000f;
89
90 Int_t FILLER = 0x70000000;
91 Bool_t correct=kTRUE;
92 Int_t header;
93
94 // AliT0Parameters* param = AliT0Parameters::Instance();
95 // param->Init();
96
97 Int_t fNTRM = fParam->GetNumberOfTRMs();
98
99 for ( Int_t k=0; k<110; k++) {
100 koefhits[k]=0;
101 for ( Int_t jj=0; jj<5; jj++) {
102 fAllData[k][jj]=0;
103 }
e0bba6cc 104 }
105 do {
807a797f 106 if (!fRawReader->ReadNextData(fData)) return kFALSE;
107 } while (fRawReader->GetDataSize() == 0);
108
109 // fPosition = GetPosition();
110 fPosition = 0;
111 cout.setf( ios_base::hex, ios_base::basefield );
112
113 //DRM header
5325480c 114 for (Int_t i=0; i<6; i++) {
115 word = GetNextWord();
807a797f 116 // cout<<" DRM header "<<i<<" "<<word<<endl;
117 header = AliBitPacking::UnpackWord(word,28,31);
118 if( header !=4 )
119 // uu = word&fDRM_GLOBAL_HEADER;
120 // if(uu != fDRM_GLOBAL_HEADER )
5325480c 121 {
807a797f 122 AliError(Form(" !!!! wrong DRM header %x!!!!", word));
5325480c 123 break;
807a797f 124 }
5325480c 125 }
126
807a797f 127 for (Int_t ntrm=0; ntrm< fNTRM; ntrm++)
128 {
129 //TRMheader
130 word = GetNextWord();
131 // cout<<" TRM header "<<word<<" "<<AliBitPacking::UnpackWord(word,28,31)<<endl;
132 header = AliBitPacking::UnpackWord(word,28,31);
133
134 // uu = word&TRM_GLOBAL_HEADER;
135 // if(uu != TRM_GLOBAL_HEADER &&
136 if ( header != 4 )
5325480c 137 {
807a797f 138 AliError(Form(" !!!! wrong TRM header %x!!!!", word));
5325480c 139 break;
140 }
807a797f 141 numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16);
142 iTRM=AliBitPacking::UnpackWord(word,0,3);
143 // cout<<" iTRM "<<iTRM<<" Nworrds in TRM "<< numberOfWordsInTRM <<endl;
c41ceaac 144
807a797f 145 for( Int_t ichain=0; ichain<2; ichain++)
c41ceaac 146 {
807a797f 147 //chain header
148 word = GetNextWord();
149 uu = word & TRM_CHAIN_0_HEADER;
150 if(uu != TRM_CHAIN_0_HEADER)
151 {
152 AliError(Form(" !!!! wrong CHAIN 0 header %x!!!!", word));
153 break;
154 }
155 word = GetNextWord();
156 // cout<<" ???data?? "<<word<<endl;
157 tdcTime = AliBitPacking::UnpackWord(word,31,31);
158 for (; tdcTime==1; tdcTime)
159 {
160 itdc=AliBitPacking::UnpackWord(word,24,27);
161 ichannel=AliBitPacking::UnpackWord(word,21,23);
162 time=AliBitPacking::UnpackWord(word,0,20);
163
164 koef = fParam->GetChannel(iTRM,itdc,ichain,ichannel);
165 // cout<<"koef "<<koef<<" iTRM "<<iTRM<<" itdc "<<itdc<<" iChain "<<ichain<<" ichannel "<<ichannel<<" "<<time<<endl;
166 if (koef ==-1 ){
167 AliError(Form("Incorrect lookup table ! "));
168 correct=kFALSE;
169 }
170 if(correct){
171 hit=koefhits[koef];
172 //if(fAllData[koef][hit] == 0)
173 fAllData[koef][hit]=time;
174 koefhits[koef]++;
175 }
176 word = GetNextWord();
177 // cout<<" next word "<<word<<endl;
178 tdcTime = AliBitPacking::UnpackWord(word,31,31);
179
5325480c 180 }
c41ceaac 181
94c27e4f 182
807a797f 183 uu = word&TRM_CHAIN_0_TRAILER;
184 if(uu != TRM_CHAIN_0_TRAILER )
185 {
186 AliError(Form(" !!!! wrong CHAIN 0 trailer %x !!!!", word));
187 break;
188 }
189 }
190
191 word = GetNextWord(); //TRM trailer
192 // cout<<" TRM traier "<<word<<endl;
193 header = AliBitPacking::UnpackWord(word,28,31);
194 if( header !=5 )
195 {
196 AliError(Form(" !!!! wrong TRM GLOBAL trailer %x!!!!", word));
197 break;
198 }
199 } //TRM loop
200 word = GetNextWord(); //
201 header = AliBitPacking::UnpackWord(word,28,31);
202 uu = word&FILLER;
203 if (word == FILLER ) word = GetNextWord();
204 // cout<<" word after FILLER "<<word<<endl;
205 if( header !=5 )
206 {
207 AliError(Form(" !!!! wrong DRM GLOBAL trailer %x!!!!", word));
5325480c 208 // break;
807a797f 209 }
210 cout.setf( ios_base::dec, ios_base::basefield );
211
212 return kTRUE;
dc7ca31d 213}
214//_____________________________________________________________________________
dc7ca31d 215Int_t AliT0RawReader::GetPosition()
216{
217 // Sets the position in the
218 // input stream
807a797f 219 if (((fRawReader->GetDataSize() * 8) % 32) != 0)
220 AliFatal(Form("Incorrect raw data size ! %d words are found !",fRawReader->GetDataSize()));
dc7ca31d 221 return (fRawReader->GetDataSize() * 8) / 32;
222}
223//_____________________________________________________________________________
224UInt_t AliT0RawReader::GetNextWord()
225{
226 // Read the next 32 bit word in backward direction
227 // The input stream access is given by fData and fPosition
228
229
230 // fPosition--;
231 Int_t iBit = fPosition * 32;
232 Int_t iByte = iBit / 8;
233
234 UInt_t word = 0;
235 word = fData[iByte+3]<<24;
236 word |= fData[iByte+2]<<16;
237 word |= fData[iByte+1]<<8;
238 word |= fData[iByte];
239 fPosition++;
240
241 return word;
242
243}
244