]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOFRawStream.cxx
Corrected a bug in kalman tracking (final parameters and covariances
[u/mrichter/AliRoot.git] / TOF / AliTOFRawStream.cxx
CommitLineData
571dda3d 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/*
d0eb8f39 17$Log$
96f01799 18Revision 1.19 2007/05/18 13:07:53 decaro
19Error messages stored in the global raw-reader error log (Cvetan, Chiara)
20
019f6101 21Revision 1.18 2007/05/08 11:53:29 arcelli
22Improved class flexibility for further use (R.Preghenella)
23
2fd622fa 24Revision 1.17 2007/05/03 08:53:50 decaro
25Coding convention: RS3 violation -> suppression
26
19eefa2b 27Revision 1.16 2007/05/03 08:22:22 decaro
28Coding convention: RN17 violation -> suppression
29
dfcee998 30Revision 1.15 2007/04/30 15:22:06 arcelli
31Change TOF digit Time, Tot etc to int type
32
bf33f8f0 33Revision 1.14 2007/04/27 11:11:53 arcelli
34updates for the new decoder
35
dfcee998 36Revision 1.13 2007/03/16 11:46:35 decaro
37Coding convention: RN17 rule violation -> suppression
38
8994284f 39Revision 1.12 2007/02/22 09:43:45 decaro
40Added AliTOFRawStream::GetIndex method for online calibration (C.Zampolli)
41
740f0695 42Revision 1.11 2007/02/20 15:57:00 decaro
43Raw data update: to read the TOF raw data defined in UNPACKED mode
44
15ec34b9 45Revision 1.10 2006/12/15 14:01:38 cvetan
46Memory leak fixed
47
f1aa96cc 48Revision 1.9 2006/10/13 11:22:27 arcelli
49remove warnings due to uninitialized AliTOFtdcDigit data members
50
36f66fad 51Revision 1.8 2006/08/22 13:30:17 arcelli
52removal of effective c++ warnings (C.Zampolli)
53
655e379f 54Revision 1.7 2006/08/10 14:46:54 decaro
55TOF raw data format: updated version
56
d0eb8f39 57Revision 1.6.1 2006/06/28 A. De Caro, R. Preghenella:
58 Update TOF raw data format
59 according to the final version
60 (see the ALICE internal note in preparation
61 'ALICE TOF raw data format')
62 Added the methods for the correspoonding numbering
63 between the equipment IDs and the volume IDs:
64 Equip2VolNPlate(...)
65 Equip2VolNStrip(...)
66 Equip2VolNPad(...)
67
571dda3d 68Revision 0.02 2005/07/28 A. De Caro:
69 Update format TOF raw data
70 (temporary solution)
71 Correction of few wrong corrispondences
72 between 'software' and 'hardware' numberings
73
74Revision 0.01 2005/07/22 A. De Caro
75 Implement methods Next()
76 GetSector(),
77 GetPlate(),
78 GetStrip(),
79 GetPadZ(),
80 GetPadX()
81*/
82
0e46b9ae 83////////////////////////////////////////////////////////////////////////
84// //
85// This class provides access to TOF raw data in DDL files. //
86// //
87// It loops over all TOF raw data given by the AliRawReader. //
88// //
89////////////////////////////////////////////////////////////////////////
571dda3d 90
15ec34b9 91
92#include "TClonesArray.h"
93
94#include "AliDAQ.h"
d0eb8f39 95#include "AliLog.h"
571dda3d 96#include "AliRawReader.h"
97
98#include "AliTOFGeometry.h"
15ec34b9 99#include "AliTOFrawData.h"
100#include "AliTOFRawMap.h"
571dda3d 101#include "AliTOFRawStream.h"
102
d0eb8f39 103
571dda3d 104ClassImp(AliTOFRawStream)
105
106
107//_____________________________________________________________________________
655e379f 108AliTOFRawStream::AliTOFRawStream(AliRawReader* rawReader):
15ec34b9 109 fRawReader(rawReader),
7813bb1a 110 // fTOFrawData(new TClonesArray("AliTOFrawData",1000)),
111 fTOFrawData(0x0),
112 fDecoder(new AliTOFDecoder()),
655e379f 113 fDDL(-1),
114 fTRM(-1),
655e379f 115 fTRMchain(-1),
15ec34b9 116 fTDC(-1),
655e379f 117 fTDCchannel(-1),
15ec34b9 118 fTime(-1),
655e379f 119 fToT(-1),
15ec34b9 120 fLeadingEdge(-1),
121 fTrailingEdge(-1),
655e379f 122 fErrorFlag(-1),
655e379f 123 fSector(-1),
124 fPlate(-1),
125 fStrip(-1),
126 fPadX(-1),
127 fPadZ(-1),
15ec34b9 128 fPackedDigits(0),
655e379f 129 fWordType(-1),
130 fSlotID(-1),
131 fACQ(-1),
132 fPSbit(-1),
655e379f 133 fTDCerrorFlag(-1),
134 fInsideDRM(kFALSE),
135 fInsideTRM(kFALSE),
136 fInsideLTM(kFALSE),
137 fInsideTRMchain0(kFALSE),
15ec34b9 138 fInsideTRMchain1(kFALSE)
571dda3d 139{
140 //
141 // create an object to read TOF raw digits
142 //
143
7813bb1a 144 for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
2fd622fa 145 fDataBuffer[i]=new AliTOFHitDataBuffer();
146 fPackedDataBuffer[i]=new AliTOFHitDataBuffer();
7813bb1a 147 }
148
149 fTOFrawData = new TClonesArray("AliTOFrawData",1000);
150 fTOFrawData->SetOwner();
151
15ec34b9 152 fRawReader->Reset();
362c9d61 153 fRawReader->Select("TOF");
571dda3d 154}
155
156//_____________________________________________________________________________
655e379f 157AliTOFRawStream::AliTOFRawStream():
7813bb1a 158 fRawReader(0x0),
159 // fTOFrawData(new TClonesArray("AliTOFrawData",1000)),
160 fTOFrawData(0x0),
161 fDecoder(new AliTOFDecoder()),
655e379f 162 fDDL(-1),
163 fTRM(-1),
655e379f 164 fTRMchain(-1),
15ec34b9 165 fTDC(-1),
655e379f 166 fTDCchannel(-1),
15ec34b9 167 fTime(-1),
655e379f 168 fToT(-1),
15ec34b9 169 fLeadingEdge(-1),
170 fTrailingEdge(-1),
655e379f 171 fErrorFlag(-1),
655e379f 172 fSector(-1),
173 fPlate(-1),
174 fStrip(-1),
175 fPadX(-1),
176 fPadZ(-1),
15ec34b9 177 fPackedDigits(0),
655e379f 178 fWordType(-1),
179 fSlotID(-1),
180 fACQ(-1),
181 fPSbit(-1),
655e379f 182 fTDCerrorFlag(-1),
183 fInsideDRM(kFALSE),
184 fInsideTRM(kFALSE),
185 fInsideLTM(kFALSE),
186 fInsideTRMchain0(kFALSE),
15ec34b9 187 fInsideTRMchain1(kFALSE)
571dda3d 188{
189 //
d0eb8f39 190 // default ctr
571dda3d 191 //
7813bb1a 192 for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
2fd622fa 193 fDataBuffer[i]=new AliTOFHitDataBuffer();
194 fPackedDataBuffer[i]=new AliTOFHitDataBuffer();
7813bb1a 195 }
15ec34b9 196
7813bb1a 197 fTOFrawData = new TClonesArray("AliTOFrawData",1000);
198 fTOFrawData->SetOwner();
d0eb8f39 199}
200
201//_____________________________________________________________________________
202AliTOFRawStream::AliTOFRawStream(const AliTOFRawStream& stream) :
655e379f 203 TObject(stream),
204 fRawReader(0x0),
7813bb1a 205 // fTOFrawData(new TClonesArray("AliTOFrawData",1000)),
206 fTOFrawData(0x0),
207 fDecoder(new AliTOFDecoder()),
655e379f 208 fDDL(-1),
209 fTRM(-1),
655e379f 210 fTRMchain(-1),
15ec34b9 211 fTDC(-1),
655e379f 212 fTDCchannel(-1),
15ec34b9 213 fTime(-1),
655e379f 214 fToT(-1),
15ec34b9 215 fLeadingEdge(-1),
216 fTrailingEdge(-1),
655e379f 217 fErrorFlag(-1),
655e379f 218 fSector(-1),
219 fPlate(-1),
220 fStrip(-1),
221 fPadX(-1),
222 fPadZ(-1),
15ec34b9 223 fPackedDigits(0),
655e379f 224 fWordType(-1),
225 fSlotID(-1),
226 fACQ(-1),
227 fPSbit(-1),
655e379f 228 fTDCerrorFlag(-1),
229 fInsideDRM(kFALSE),
230 fInsideTRM(kFALSE),
231 fInsideLTM(kFALSE),
232 fInsideTRMchain0(kFALSE),
15ec34b9 233 fInsideTRMchain1(kFALSE)
d0eb8f39 234{
235 //
236 // copy constructor
237 //
238
239 fRawReader = stream.fRawReader;
15ec34b9 240
241 fTOFrawData = stream.fTOFrawData;
242
d0eb8f39 243 fDDL = stream.fDDL;
244 fTRM = stream.fTRM;
d0eb8f39 245 fTRMchain = stream.fTRMchain;
15ec34b9 246 fTDC = stream.fTDC;
d0eb8f39 247 fTDCchannel = stream.fTDCchannel;
15ec34b9 248 fTime = stream.fTime;
d0eb8f39 249 fToT = stream.fToT;
15ec34b9 250 fLeadingEdge = stream.fLeadingEdge;
251 fTrailingEdge = stream.fTrailingEdge;
252
d0eb8f39 253 fErrorFlag = stream.fErrorFlag;
254
255 fSector = stream.fSector;
256 fPlate = stream.fPlate;
257 fStrip = stream.fStrip;
258 fPadX = stream.fPadX;
259 fPadZ = stream.fPadZ;
260
15ec34b9 261 fPackedDigits = stream.fPackedDigits;
262
d0eb8f39 263 fWordType = stream.fWordType;
264 fSlotID = stream.fSlotID;
265 fACQ = stream.fACQ;
266 fPSbit = stream.fPSbit;
d0eb8f39 267 fTDCerrorFlag = stream.fTDCerrorFlag;
268 fInsideDRM = stream.fInsideDRM;
269 fInsideTRM = stream.fInsideTRM;
270 fInsideLTM = stream.fInsideLTM;
271 fInsideTRMchain0 = stream.fInsideTRMchain0;
272 fInsideTRMchain1 = stream.fInsideTRMchain1;
d0eb8f39 273
7813bb1a 274 for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
275 fDataBuffer[i]= new AliTOFHitDataBuffer(*stream.fDataBuffer[i]);
276 fPackedDataBuffer[i]= new AliTOFHitDataBuffer(*stream.fPackedDataBuffer[i]);
277 }
278
279 fTOFrawData = new TClonesArray(*stream.fTOFrawData);
280
571dda3d 281}
282
283//_____________________________________________________________________________
284AliTOFRawStream& AliTOFRawStream::operator = (const AliTOFRawStream& stream)
285{
286 //
287 // assignment operator
288 //
289
290 fRawReader = stream.fRawReader;
15ec34b9 291
292 fTOFrawData = stream.fTOFrawData;
293
571dda3d 294 fDDL = stream.fDDL;
295 fTRM = stream.fTRM;
d0eb8f39 296 fTRMchain = stream.fTRMchain;
15ec34b9 297 fTDC = stream.fTDC;
d0eb8f39 298 fTDCchannel = stream.fTDCchannel;
15ec34b9 299 fTime = stream.fTime;
d0eb8f39 300 fToT = stream.fToT;
15ec34b9 301 fLeadingEdge = stream.fLeadingEdge;
302 fTrailingEdge = stream.fTrailingEdge;
571dda3d 303 fErrorFlag = stream.fErrorFlag;
d0eb8f39 304
305 fSector = stream.fSector;
306 fPlate = stream.fPlate;
307 fStrip = stream.fStrip;
308 fPadX = stream.fPadX;
309 fPadZ = stream.fPadZ;
571dda3d 310
15ec34b9 311 fPackedDigits = stream.fPackedDigits;
312
d0eb8f39 313 fWordType = stream.fWordType;
314 fSlotID = stream.fSlotID;
315 fACQ = stream.fACQ;
316 fPSbit = stream.fPSbit;
d0eb8f39 317 fTDCerrorFlag = stream.fTDCerrorFlag;
318 fInsideDRM = stream.fInsideDRM;
319 fInsideTRM = stream.fInsideTRM;
320 fInsideLTM = stream.fInsideLTM;
321 fInsideTRMchain0 = stream.fInsideTRMchain0;
322 fInsideTRMchain1 = stream.fInsideTRMchain1;
7813bb1a 323
324 for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
325 fDataBuffer[i] = stream.fDataBuffer[i];
326 fPackedDataBuffer[i] = stream.fPackedDataBuffer[i];
327 }
328
329 fTOFrawData = stream.fTOFrawData;
330
571dda3d 331 return *this;
332
333}
334
335//_____________________________________________________________________________
336AliTOFRawStream::~AliTOFRawStream()
337{
338// destructor
339
15ec34b9 340 fPackedDigits = 0;
341
7813bb1a 342 for (Int_t i=0;i<72;i++){
343 delete fDataBuffer[i];
344 delete fPackedDataBuffer[i];
345 }
d3c7bfac 346
7813bb1a 347 delete fDecoder;
15ec34b9 348
7813bb1a 349 fTOFrawData->Clear();
350 delete fTOFrawData;
571dda3d 351}
352
353
15ec34b9 354//_____________________________________________________________________________
355
356void AliTOFRawStream::LoadRawData(Int_t indexDDL)
357{
358
359 /*
360 for (Int_t indexDDL = 0;
361 indexDDL < AliDAQ::NumberOfDdls("TOF");
362 indexDDL++) {
363 */
364
7813bb1a 365 fTOFrawData = new TClonesArray("AliTOFrawData",1000); //potential memory leak
366 //fTOFrawData->Clear();
15ec34b9 367 fPackedDigits = 0;
368
369 // create raw data map
370 AliTOFRawMap *rawMap = new AliTOFRawMap(fTOFrawData);
371 rawMap->Clear();
372
373 Int_t slot[4] = {-1, -1, -1, -1};
374
375 fRawReader->Reset();
376 fRawReader->Select("TOF", indexDDL, indexDDL);
377
378 Bool_t signal = kFALSE;
379
7813bb1a 380
381
15ec34b9 382 while(Next()) {
383
384 signal = (fSector!=-1 && fPlate!=-1 && fStrip!=-1 && fPadZ!=-1 && fPadX!=-1);
385 if (signal) {
386 //printf(" %2i %1i %2i %1i %2i \n", fSector, fPlate, fStrip, fPadZ, fPadX);
387
388 slot[0] = fTRM;
389 slot[1] = fTRMchain;
390 slot[2] = fTDC;
391 slot[3] = fTDCchannel;
392
393 if (rawMap->TestHit(slot) != kEmpty) {
394
395 AliTOFrawData *rawDigit = static_cast<AliTOFrawData*>(rawMap->GetHit(slot));
396
397 if (rawDigit->GetLeading()!=-1 && rawDigit->GetTrailing()==-1 &&
398 fLeadingEdge==-1 && fTrailingEdge!=-1) {
399
400 rawDigit->Update(fTime, fToT, fLeadingEdge, fTrailingEdge, fPSbit, fACQ, fErrorFlag);
401 }
402 else if ( ((rawDigit->GetTOF()!=-1 || rawDigit->GetLeading()!=-1 || rawDigit->GetTrailing()!=-1) &&
403 (fLeadingEdge!=-1 || fTrailingEdge!=-1 || fTime!=-1) )
404
405/* else if ( ((rawDigit->GetTOF()!=-1 || rawDigit->GetLeading()!=-1 || rawDigit->GetTrailing()!=-1) &&
406 (fTime!=-1 || fLeadingEdge!=-1 || fTrailingEdge!=-1))*/ /*||
407 (rawDigit->GetLeading()==-1 && rawDigit->GetTrailing()!=-1 &&
408 fLeadingEdge!=-1 && fTrailingEdge==-1) */)
409 {
410
411 TClonesArray &arrayTofRawData = *fTOFrawData;
412 new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(fTRM, fTRMchain, fTDC, fTDCchannel, fTime, fToT, fLeadingEdge, fTrailingEdge, fPSbit, fACQ, fErrorFlag);
413
414 rawMap->SetHit(slot);
415
416 }
417
418
419 }
420 else {
421
422 TClonesArray &arrayTofRawData = *fTOFrawData;
423 new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(fTRM, fTRMchain, fTDC, fTDCchannel, fTime, fToT, fLeadingEdge, fTrailingEdge, fPSbit, fACQ, fErrorFlag);
424
425 rawMap->SetHit(slot);
426
427 } // else if (rawMap->TestHit(slot) == kEmpty)
428
429 } // if (signal)
430
431 } // closed -> while (Next())
432
433 /*
434 fDDL = fRawReader->GetDDLID();
435
436 for (Int_t ii=0; ii<fTOFrawData->GetEntriesFast(); ii++) {
437
438 AliTOFrawData *dummy = (AliTOFrawData*)fTOFrawData->UncheckedAt(ii);
439
440 fTRM = dummy->GetTRM();
441 fTRMchain = dummy->GetTRMchain();
442 fTDC = dummy->GetTDC();
443 fTDCchannel = dummy->GetTDCchannel();
444
445 SetSector();
446 SetPlate();
447 SetStrip();
448 SetPadZ();
449 SetPadX();
450
451 printf(" %2i, %2i %1i, %2i, %1i --> %2i, %1i, %2i, %1i, %2i \n",
452 fDDL, fTRM, fTRMchain, fTDC, fTDCchannel,
453 fSector, fPlate, fStrip, fPadZ, fPadX);
454
455 } // closed loop on TOF raw data TClonesArray
456 */
457
458 //} // closed loop on indexDDL
459
7813bb1a 460
461
15ec34b9 462}
463
571dda3d 464//_____________________________________________________________________________
465Bool_t AliTOFRawStream::Next()
466{
d0eb8f39 467 //
468 // Read next 32-bit word in TOF raw data files
469 // returns kFALSE if there is no word left
470 //
571dda3d 471
472 UInt_t data;
473
571dda3d 474 if (!fRawReader->ReadNextInt(data)) return kFALSE;
475
d0eb8f39 476 if (fSector!=-1 && fPlate!=-1 && fStrip!=-1 && fPadZ!=-1 && fPadX!=-1) {
477 fSector = -1;
15ec34b9 478 fPlate = -1;
479 fStrip = -1;
480 fPadZ = -1;
481 fPadX = -1;
482 fTime = -1;
483 fToT = -1;
484 fLeadingEdge = -1;
485 fTrailingEdge = -1;
d0eb8f39 486 }
571dda3d 487
571dda3d 488 fDDL = fRawReader->GetDDLID();
489
d0eb8f39 490 fWordType = GetField(data,WORD_TYPE_MASK,WORD_TYPE_POSITION);
491
492 switch (fWordType) { // switch word type
493
494 case GLOBAL_HEADER_TYPE: // global header
495 fSlotID = GetField(data, HEADER_SLOT_ID_MASK, HEADER_SLOT_ID_POSITION);
496 fTRM = fSlotID;
497
498
499 switch (fSlotID) { // switch global header slot ID
500
501 case DRM_ID_NUMBER: //DRM global header
502 if (fInsideDRM) { // unexpected DRM global headers -> exit
503 break;
504 }
505 fInsideDRM = kTRUE; // DRM global header accepted
506 break;
507
508 case LTM_ID_NUMBER: // LTM global header
509 if (fInsideLTM) { // unexpected LTM global headers -> exit
510 break;
511 }
512 fInsideLTM = kTRUE; // LTM global header accepted
513 break;
514
515 case 3: //TRM header
516 case 4: //TRM header
517 case 5: //TRM header
518 case 6: //TRM header
519 case 7: //TRM header
520 case 8: //TRM header
521 case 9: //TRM header
522 case 10: //TRM header
523 case 11: //TRM header
524 case 12: //TRM header
525 if (fInsideTRM) { // unexpected TRM global headers -> exit
526 break;
527 }
528 fInsideTRM = kTRUE; // TRM global header accepted
529 fACQ = GetField(data,TRM_ACQ_BITS_MASK,TRM_ACQ_BITS_POSITION);
530 break;
531
532 default: // unexpected global header slot ID
533 break;
534
535 } //end switch global header slot id
536
537 break;
538
539
540 case GLOBAL_TRAILER_TYPE: // global trailer
541 fSlotID = GetField(data,HEADER_SLOT_ID_MASK,HEADER_SLOT_ID_POSITION);
542
543
544 switch (fSlotID) { // switch global trailer slot ID
545
546 case DRM_ID_NUMBER: // DRM global trailer
547 if (!fInsideDRM) { // unexpected DRM global trailers -> exit
548 break;
549 }
550 fInsideDRM = kFALSE; // DRM global trailer accepted
551 fInsideTRM = kFALSE;
552 fInsideLTM = kFALSE;
553 fInsideTRMchain0 = kFALSE;
554 fInsideTRMchain1 = kFALSE;
d0eb8f39 555 fSector = -1;
15ec34b9 556 fPlate = -1;
557 fStrip = -1;
558 fPadZ = -1;
559 fPadX = -1;
560 fDDL = -1;
561 fTRM = -1;
562 fTDC = -1;
563 fTRMchain = -1;
d0eb8f39 564 fTDCchannel = -1;
15ec34b9 565 fTime = -1;
566 fToT = -1;
567 fLeadingEdge = -1;
568 fTrailingEdge = -1;
d0eb8f39 569 fErrorFlag = -1;
15ec34b9 570 fACQ = -1;
d0eb8f39 571 fPSbit = -1;
d0eb8f39 572 fTDCerrorFlag = -1;
573 break;
574 case LTM_ID_NUMBER: // LTM global trailer
575 if (!fInsideLTM) { // unexpected LTM global trailer -> exit
576 break;
577 }
578 fInsideLTM = kFALSE; // LTM global trailer accepted
579 break;
580 case 15: //TRM global trailer
581 if (!fInsideTRM) { // unexpected TRM global trailers -> exit
582 break;
583 }
584 fInsideTRM = kFALSE; // TRM global trailer accepted
585 break;
586 default: // unexpected global trailer slot ID
587 break;
588 } //end switch global trailer slot id
589
590
591 break;
592
593
594 case ERROR_TYPE: // TDC error
15ec34b9 595 fTDC = GetField(data,TRM_TDC_ERROR_TDC_ID_MASK,TRM_TDC_ERROR_TDC_ID_POSITION);
d0eb8f39 596 fTDCerrorFlag = GetField(data,TRM_TDC_ERROR_FLAGS_MASK,TRM_TDC_ERROR_FLAGS_POSITION);
597 break;
598
599
600 case FILLER_TYPE: // filler
601 break;
602
603
604 default: // other word types
605
606 if (fInsideTRM) { // inside TRM
607
608 switch (fWordType) { // switch word type inside TRM
609 case TRM_CHAIN0_HEADER_TYPE: // TRM chain0 header
610 if (fInsideTRMchain0) { // unexpected TRM chain0 header
611 break;
612 }
613 fInsideTRMchain0 = kTRUE;
614 fTRMchain = 0;
615 break;
616 case TRM_CHAIN0_TRAILER_TYPE: // TRM chain0 trailer
617 if (!fInsideTRMchain0) { // unexpected TRM chain0 trailer
618 break;
619 }
620 fInsideTRMchain0 = kFALSE;
621 fTRMchain = -1;
622 break;
623 case TRM_CHAIN1_HEADER_TYPE: // TRM chain1 header
624 if (fInsideTRMchain1) { // unexpected TRM chain1 header
625 break;
626 }
627 fInsideTRMchain1 = kTRUE;
628 fTRMchain = 1;
629 break;
630 case TRM_CHAIN1_TRAILER_TYPE: // TRM chain1 trailer
631 if (!fInsideTRMchain1) { // unexpected TRM chain1 trailer
632 break;
633 }
634 fInsideTRMchain1 = kFALSE;
635 fTRMchain = -1;
636 break;
637 } // end switch word type inside TRM
638
639 } // end if (fInsideTRM)
640
641
642 if (
643 ((fInsideTRMchain0&&!fInsideTRMchain1) || (!fInsideTRMchain0&&fInsideTRMchain1))
644 && fWordType!=TRM_CHAIN0_HEADER_TYPE && fWordType!=TRM_CHAIN0_TRAILER_TYPE
645 && fWordType!=TRM_CHAIN1_HEADER_TYPE && fWordType!=TRM_CHAIN1_TRAILER_TYPE
646 ){ // inside TRM chains
15ec34b9 647
648 fPSbit = GetField(data,TRM_PS_BITS_MASK,TRM_PS_BITS_POSITION);
649 fTDC = GetField(data,TRM_TDC_ID_MASK,TRM_TDC_ID_POSITION);
d0eb8f39 650 fTDCchannel = GetField(data,TRM_CHAN_MASK,TRM_CHAN_POSITION);
15ec34b9 651 fErrorFlag = GetField(data,TRM_E_BIT_MASK,TRM_E_BIT_POSITION);
652
653 SetSector();
654 SetPlate();
655 SetStrip();
656 SetPadZ();
657 SetPadX();
658
d0eb8f39 659
660 switch (fPSbit) { // switch fPSbit bits inside TRM chains
15ec34b9 661
662 case 0: // packing ok, digit time and TOT
663 fToT = GetField(data,TRM_TOT_WIDTH_MASK, TRM_TOT_WIDTH_POSITION);
d0eb8f39 664 fTime = GetField(data,TRM_DIGIT_TIME_MASK,TRM_DIGIT_TIME_POSITION);
d0eb8f39 665 break;
666
667 case 1: // leading edge digit, long digit time, no TOT
15ec34b9 668 //fToT = -1;
669 //fTime = -1;
670 fLeadingEdge = GetField(data,TRM_LONG_DIGIT_TIME_MASK,TRM_LONG_DIGIT_TIME_POSITION);
d0eb8f39 671 break;
672
673 case 2: // trailing edge digit, long digit time, no TOT
15ec34b9 674 //fToT = -1;
675 //fTime = -1;
676 fTrailingEdge = GetField(data,TRM_LONG_DIGIT_TIME_MASK,TRM_LONG_DIGIT_TIME_POSITION);
d0eb8f39 677 break;
15ec34b9 678
d0eb8f39 679 case 3: // TOT overflow
15ec34b9 680 fToT = GetField(data,TRM_TOT_WIDTH_MASK, TRM_TOT_WIDTH_POSITION);
d0eb8f39 681 fTime = GetField(data,TRM_DIGIT_TIME_MASK,TRM_DIGIT_TIME_POSITION);
d0eb8f39 682 break;
d0eb8f39 683
15ec34b9 684 } // end switch PS bits inside TRM chains
d0eb8f39 685
686 } // end if is inside TRM chains
687
688 } // end switch on fWordType
571dda3d 689
15ec34b9 690
571dda3d 691 return kTRUE;
7813bb1a 692
571dda3d 693}
694//_____________________________________________________________________________
695
d0eb8f39 696void AliTOFRawStream::SetSector()
571dda3d 697{
698 //
d0eb8f39 699 // Evaluate the TOF sector number -> [ 0;17]
700 // corresponding to the TOF equipment IDs:
701 // fDDL -> [ 0;71]
702 // fTRM -> [ 3;12]
15ec34b9 703 // fTRMchain -> [ 0; 1]
d0eb8f39 704 // fTDC -> [ 0;14]
705 // fTDCchannel -> [ 0; 7]
571dda3d 706 //
707
708 Int_t iSector = -1;
571dda3d 709
d0eb8f39 710 if (!(fDDL==-1)) iSector = Int_t((Float_t)(fDDL)/AliTOFGeometry::NDDL());
711
712 fSector = iSector;
571dda3d 713
714}
715//_____________________________________________________________________________
716
d0eb8f39 717
718void AliTOFRawStream::SetPlate()
571dda3d 719{
720 //
d0eb8f39 721 // Evaluate the TOF plate number ->[ 0; 4]
722 // corresponding to the TOF equipment IDs:
723 // fDDL -> [ 0;71]
724 // fTRM -> [ 3;12]
15ec34b9 725 // fTRMchain -> [ 0; 1]
d0eb8f39 726 // fTDC -> [ 0;14]
727 // fTDCchannel -> [ 0; 7]
571dda3d 728 //
729
730 Int_t iPlate = -1;
d0eb8f39 731 if (!(fDDL==-1 || fTRM==-1 || fTDC==-1
732 || fSector==-1))
733 iPlate = Equip2VolNplate(GetDDLnumberPerSector(fDDL), fTRM, fTDC);
571dda3d 734
d0eb8f39 735 fPlate = iPlate;
571dda3d 736
737}
738//_____________________________________________________________________________
739
d0eb8f39 740void AliTOFRawStream::SetStrip()
571dda3d 741{
742 //
d0eb8f39 743 // Evaluate the TOF strip number per module -> [ 0; 14/18]
744 // corresponding to the TOF equipment IDs:
745 // fDDL -> [ 0;71]
746 // fTRM -> [ 3;12]
15ec34b9 747 // fTRMchain -> [ 0; 1]
d0eb8f39 748 // fTDC -> [ 0;14]
749 // fTDCchannel -> [ 0; 7]
571dda3d 750 //
751
752 Int_t iStrip = -1;
753
d0eb8f39 754 if (!(fDDL==-1 || fTRM==-1 || fTDC==-1
755 || fSector==-1 || fPlate==-1))
756 iStrip = Equip2VolNstrip(GetDDLnumberPerSector(fDDL), fTRM, fTDC);
571dda3d 757
d0eb8f39 758 fStrip = iStrip;
571dda3d 759
760}
761//_____________________________________________________________________________
762
d0eb8f39 763void AliTOFRawStream::SetPadZ()
571dda3d 764{
765 //
d0eb8f39 766 // Evaluate the TOF padRow number per strip -> [ 0; 1]
767 // corresponding to the TOF equipment IDs:
768 // fDDL -> [ 0;71]
769 // fTRM -> [ 3;12]
15ec34b9 770 // fTRMchain -> [ 0; 1]
d0eb8f39 771 // fTDC -> [ 0;14]
772 // fTDCchannel -> [ 0; 7]
571dda3d 773 //
774
775 Int_t iPadZ = -1;
776
d0eb8f39 777 if (!(fDDL==-1 || fTRM==-1 || fTRMchain==-1 || fTDC==-1 || fTDCchannel==-1
778 || fSector==-1 || fPlate==-1 || fStrip==-1))
779 {
780 Int_t iPadAlongTheStrip = Equip2VolNpad(GetDDLnumberPerSector(fDDL), fTRMchain, fTDC, fTDCchannel);
781 if (iPadAlongTheStrip!=-1)
782 iPadZ = iPadAlongTheStrip%AliTOFGeometry::NpadZ();
783 }
571dda3d 784
d0eb8f39 785 fPadZ = iPadZ;
571dda3d 786
d0eb8f39 787}
788//_____________________________________________________________________________
789
790void AliTOFRawStream::SetPadX()
791{
792 //
793 // Evaluate the TOF pad number per strip padRow -> [ 0;47]
794 // corresponding to the TOF equipment IDs:
795 // fDDL -> [ 0;71]
796 // fTRM -> [ 3;12]
15ec34b9 797 // fTRMchain -> [ 0; 1]
d0eb8f39 798 // fTDC -> [ 0;14]
799 // fTDCchannel -> [ 0; 7]
800 //
571dda3d 801
d0eb8f39 802 Int_t iPadX = -1;
571dda3d 803
d0eb8f39 804 if (!(fDDL==-1 || fTRM==-1 || fTRMchain==-1 || fTDC==-1 || fTDCchannel==-1
805 || fSector==-1 || fPlate==-1 || fStrip==-1))
806 {
807 Int_t iPadAlongTheStrip = Equip2VolNpad(GetDDLnumberPerSector(fDDL), fTRMchain, fTDC, fTDCchannel);
808 if (iPadAlongTheStrip!=-1)
809 iPadX = (Int_t)(iPadAlongTheStrip/(Float_t(AliTOFGeometry::NpadZ())));
810 }
811
812 fPadX = iPadX;
571dda3d 813
814}
571dda3d 815
d0eb8f39 816//----------------------------------------------------------------------------
817Int_t AliTOFRawStream::GetField(UInt_t word, Int_t fieldMask, Int_t fieldPosition) const
818{
819 //
820 //
821 //
822
823 return ((word & fieldMask) >> fieldPosition);
824}
825
826//----------------------------------------------------------------------------
827Int_t AliTOFRawStream::Equip2VolNplate(Int_t iDDL, Int_t nTRM, Int_t nTDC) const
571dda3d 828{
829 //
d0eb8f39 830 // Returns the TOF plate number [0;4]
831 // corresponding to the TOF equipment ID numbers:
832 // iDDL -> DDL number per sector [0;3]
833 // nTRM -> TRM number [3;12]
834 // nTDC -> TDC number [0;14]
571dda3d 835 //
836
d0eb8f39 837 Int_t iPlate = -1;
838 if (iDDL==0) {
839
840 if (nTRM>=4 && nTRM<7) {
841 iPlate = 0;
842 } else if (nTRM==7) {
843 if (nTDC<12) iPlate = 0;
844 else iPlate = 1;
845 } else if (nTRM>=8 && nTRM<11) {
846 iPlate = 1;
847 } else if (nTRM==11) {
848 if (nTDC<9) iPlate = 1;
849 else iPlate = 2;
850 }else if (nTRM==12) {
851 iPlate = 2;
852 }
853
854 } else if (iDDL==1) {
855
856 if (nTRM==3) {
857 if (nTDC<3) iPlate = 0;
858 } else if (nTRM>=4 && nTRM<7) {
859 iPlate = 0;
860 } else if (nTRM==7) {
861 if (nTDC<6) iPlate = 1;
862 else iPlate = 0;
863 } else if (nTRM>=8 && nTRM<11) {
864 iPlate = 1;
865 } else if (nTRM==11) {
866 if (nTDC<9) iPlate = 2;
867 else iPlate = 1;
868 } else if (nTRM==12) {
869 iPlate = 2;
870 }
871
872 } else if (iDDL==2) {
873
874 if (nTRM>=4 && nTRM<7) {
875 iPlate = 4;
876 } else if (nTRM==7) {
877 if (nTDC<12) iPlate = 4;
878 else iPlate = 3;
879 } else if (nTRM>=8 && nTRM<11) {
880 iPlate = 3;
881 } else if (nTRM==11) {
882 if (nTDC<9) iPlate = 3;
883 else iPlate = 2;
884 }else if (nTRM==12) {
885 iPlate = 2;
886 }
887
888 } else if (iDDL==3) {
889
890 if (nTRM==3) {
891 if (nTDC<3) iPlate = 4;
892 } else if (nTRM>=4 && nTRM<7) {
893 iPlate = 4;
894 } else if (nTRM==7) {
895 if (nTDC<6) iPlate = 3;
896 else iPlate = 4;
897 } else if (nTRM>=8 && nTRM<11) {
898 iPlate = 3;
899 } else if (nTRM==11) {
900 if (nTDC<9) iPlate = 2;
901 else iPlate = 3;
902 } else if (nTRM==12) {
903 iPlate = 2;
904 }
571dda3d 905
d0eb8f39 906 }
571dda3d 907
d0eb8f39 908 return iPlate;
571dda3d 909
d0eb8f39 910}
571dda3d 911
d0eb8f39 912//----------------------------------------------------------------------------
913Int_t AliTOFRawStream::Equip2VolNstrip(Int_t iDDL, Int_t nTRM, Int_t nTDC) const
914{
915 //
916 // Returns the TOF strip number per module:
917 // [0;14], in the central plates,
918 // [0;18], in the intermediate and external plates
919 // corresponding to the TOF equipment ID numbers:
920 // iDDL -> DDL number per sector [0;3]
921 // nTRM -> TRM number [3;12]
922 // nTDC -> TDC number [0;14]
923 //
571dda3d 924
d0eb8f39 925 Int_t iStrip = -1;
571dda3d 926
d0eb8f39 927 if (iDDL==0) {
928
929 if (nTRM== 4) iStrip = (Int_t)(nTDC/3.);
930 else if (nTRM== 5) iStrip = 5 + (Int_t)(nTDC/3.);
931 else if (nTRM== 6) iStrip = 10 + (Int_t)(nTDC/3.);
932 else if (nTRM== 7) {
933 if (nTDC<12) iStrip = 15 + (Int_t)(nTDC/3.);
934 else iStrip = (Int_t)(nTDC/3.) - 4;
935 }
936 else if (nTRM== 8) iStrip = 1 + (Int_t)(nTDC/3.);
937 else if (nTRM== 9) iStrip = 6 + (Int_t)(nTDC/3.);
938 else if (nTRM==10) iStrip = 11 + (Int_t)(nTDC/3.);
939 else if (nTRM==11) {
940 if (nTDC<9) iStrip = 16 + (Int_t)(nTDC/3.);
941 else iStrip = (Int_t)(nTDC/3.) - 3;
942 }
943 else if (nTRM==12) iStrip = 2 + (Int_t)(nTDC/3.);
944
945 } else if (iDDL==1) {
946
947 if (nTRM==3 && nTDC<3) iStrip = (Int_t)(nTDC/3.);
948 else if (nTRM== 4) iStrip = 5 - (Int_t)(nTDC/3.);
949 else if (nTRM== 5) iStrip = 10 - (Int_t)(nTDC/3.);
950 else if (nTRM== 6) iStrip = 15 - (Int_t)(nTDC/3.);
951 else if (nTRM== 7) {
952 if (nTDC<6) iStrip = 1 - (Int_t)(nTDC/3.);
953 else iStrip = 20 - (Int_t)(nTDC/3.);
954 }
955 else if (nTRM== 8) iStrip = 6 - (Int_t)(nTDC/3.);
956 else if (nTRM== 9) iStrip = 11 - (Int_t)(nTDC/3.);
957 else if (nTRM==10) iStrip = 16 - (Int_t)(nTDC/3.);
958 else if (nTRM==11) {
959 if (nTDC<9) iStrip = 2 - (Int_t)(nTDC/3.);
960 else iStrip = 21 - (Int_t)(nTDC/3.);
961 }
962 else if (nTRM==12) iStrip = 7 - (Int_t)(nTDC/3.);
963
964 } else if (iDDL==2) {
965
966 if (nTRM== 4) iStrip = 18 - (Int_t)(nTDC/3.);
967 else if (nTRM== 5) iStrip = 18 - ( 5 + (Int_t)(nTDC/3.));
968 else if (nTRM== 6) iStrip = 18 - (10 + (Int_t)(nTDC/3.));
969 else if (nTRM== 7) {
970 if (nTDC<12) iStrip = 18 - (15 + (Int_t)(nTDC/3.));
971 else iStrip = 18 - ((Int_t)(nTDC/3.) - 4);
972 }
973 else if (nTRM== 8) iStrip = 18 - ( 1 + (Int_t)(nTDC/3.));
974 else if (nTRM== 9) iStrip = 18 - ( 6 + (Int_t)(nTDC/3.));
975 else if (nTRM==10) iStrip = 18 - (11 + (Int_t)(nTDC/3.));
976 else if (nTRM==11) {
977 if (nTDC<9) iStrip = 18 - (16 + (Int_t)(nTDC/3.));
978 else iStrip = 14 - ((Int_t)(nTDC/3.) - 3);
979 }
980 else if (nTRM==12) iStrip = 14 - ( 2 + (Int_t)(nTDC/3.));
981
982 } else if (iDDL==3) {
983
984 if (nTRM==3 && nTDC<3) iStrip = 18 - (Int_t)(nTDC/3.);
985 else if (nTRM== 4) iStrip = 18 - ( 5 - (Int_t)(nTDC/3.));
986 else if (nTRM== 5) iStrip = 18 - (10 - (Int_t)(nTDC/3.));
987 else if (nTRM== 6) iStrip = 18 - (15 - (Int_t)(nTDC/3.));
988 else if (nTRM== 7) {
989 if (nTDC<6) iStrip = 18 - (1 - (Int_t)(nTDC/3.));
990 else iStrip = 18 - (20 - (Int_t)(nTDC/3.));
991 }
992 else if (nTRM== 8) iStrip = 18 - ( 6 - (Int_t)(nTDC/3.));
993 else if (nTRM== 9) iStrip = 18 - (11 - (Int_t)(nTDC/3.));
994 else if (nTRM==10) iStrip = 18 - (16 - (Int_t)(nTDC/3.));
995 else if (nTRM==11) {
996 if (nTDC<9) iStrip = 14 - ( 2 - (Int_t)(nTDC/3.));
997 else iStrip = 18 - (21 - (Int_t)(nTDC/3.));
998 }
999 else if (nTRM==12) iStrip = 14 - ( 7 - (Int_t)(nTDC/3.));
1000
1001 }
1002
1003 return iStrip;
1004
1005}
1006
1007//----------------------------------------------------------------------------
1008Int_t AliTOFRawStream::Equip2VolNpad(Int_t iDDL, Int_t iChain, Int_t nTDC,
1009 Int_t iCH) const
1010{
1011 //
1012 // Returns the TOF pad number per strip [0;95]
1013 // corresponding to the TOF equipment ID numbers:
1014 // iDDL -> DDL number per sector [0;3]
1015 // iChain -> TRM chain number [0;1]
1016 // nTDC -> TDC number [0;14]
1017 // iCH -> TDC channel number [0;7]
1018 //
1019
1020 Int_t iPadAlongTheStrip = -1;
1021
1022 Int_t iTDClocal = nTDC%3 + (1-iChain)*3;
1023
1024 if (iDDL==0 || iDDL==3) iTDClocal = 5 - iTDClocal;
1025 else if (iDDL==1 || iDDL==2) iTDClocal = 6 + (5 - iTDClocal);
1026
1027 Int_t iCHlocal = iCH;
1028 if (iDDL==0 || iDDL==3) iCHlocal = 7 - iCH;
1029
1030 iPadAlongTheStrip = iTDClocal*AliTOFGeometry::NCh() + iCHlocal;
1031
1032 if (((iDDL==1 || iDDL==2) && iPadAlongTheStrip< AliTOFGeometry::NpadX()) ||
019f6101 1033 ((iDDL==0 || iDDL==3) && iPadAlongTheStrip>=AliTOFGeometry::NpadX())) {
1034 fRawReader->AddMajorErrorLog(kPadXError);
1035 AliWarning("Problems with the padX number!");
1036 }
d0eb8f39 1037 return iPadAlongTheStrip;
1038
1039}
1040
1041//----------------------------------------------------------------------------
1042Int_t AliTOFRawStream::GetSectorNumber(Int_t nDDL) const
1043{
1044 //
1045 // Returns the sector number [0;17]
1046 // corresponing to the assigned DRM/DDL number [0;71]
1047 //
1048
1049 Int_t iSector = Int_t((Float_t)(nDDL)/AliTOFGeometry::NDDL());
1050
1051 return iSector;
1052
1053}
1054//----------------------------------------------------------------------------
1055Int_t AliTOFRawStream::GetDDLnumberPerSector(Int_t nDDL) const
1056{
1057 //
1058 // Return the DRM/DDL number per sector [0;3]
1059 // corresponing to the assigned DRM/DDL number [0;71]
1060 //
1061
1062 Int_t iDDL = nDDL%AliTOFGeometry::NDDL();
1063
1064 return iDDL;
1065
1066}
1067
7813bb1a 1068//----------------------------------------------------------------------------
1069void AliTOFRawStream::EquipmentId2VolumeId(AliTOFHitData *hitData, Int_t *volume) const
1070{
1071 EquipmentId2VolumeId(hitData->GetDDLID(),hitData->GetSlotID(),hitData->GetChain(),hitData->GetTDC(),hitData->GetChan(),volume);
1072}
d0eb8f39 1073//----------------------------------------------------------------------------
1074void AliTOFRawStream::EquipmentId2VolumeId(Int_t nDDL, Int_t nTRM, Int_t iChain,
1075 Int_t nTDC, Int_t iCH,
1076 Int_t *volume) const
1077{
1078 //
1079 // To convert:
1080 // nDDL (variable in [0;71]) -> number of the DDL file
1081 // nTRM (variable in [3;12]) -> number of the TRM slot
1082 // iChain (variable in [0; 1]) -> number of the TRM chain
1083 // nTDC (variable in [0;14]) -> number of the TDC
1084 // iCH (variable in [0; 7]) -> number of the TDC channel
1085 //
1086 // in:
1087 // sector number, i.e. volume[0] (variable in [0,17])
1088 // plate number, i.e. volume[1] (variable in [0, 5])
1089 // strip number, i.e. volume[2] (variable in [0,14/18])
1090 // padX number, i.e. volume[3] (variable in [0,47])
1091 // padZ number, i.e. volume[4] (variable in [0, 1])
1092 //
1093
1094 Int_t iDDL = GetDDLnumberPerSector(nDDL);
1095
1096 Int_t iSector = GetSectorNumber(nDDL);
1097
1098 Int_t iPlate = Equip2VolNplate(iDDL, nTRM, nTDC);
019f6101 1099 if (iPlate==-1) {
1100 fRawReader->AddMajorErrorLog(kPlateError,"plate = -1");
1101 AliWarning("Problems with the plate number!");
1102 }
d0eb8f39 1103
1104 Int_t iStrip = Equip2VolNstrip(iDDL, nTRM, nTDC);
019f6101 1105 if (iStrip==-1) {
1106 fRawReader->AddMajorErrorLog(kStripError,"strip = -1");
1107 AliWarning("Problems with the strip number!");
1108 }
d0eb8f39 1109
1110 Int_t iPadAlongTheStrip = Equip2VolNpad(iDDL, iChain, nTDC, iCH);
019f6101 1111 if (iPadAlongTheStrip==-1){
1112 fRawReader->AddMajorErrorLog(kPadAlongStripError,"pad = -1");
1113 AliWarning("Problems with the pad number along the strip!");
1114 }
d0eb8f39 1115
1116 Int_t iPadX = (Int_t)(iPadAlongTheStrip/(Float_t(AliTOFGeometry::NpadZ())));
1117 Int_t iPadZ = iPadAlongTheStrip%AliTOFGeometry::NpadZ();
1118
1119 volume[0] = iSector;
1120 volume[1] = iPlate;
1121 volume[2] = iStrip;
1122 volume[3] = iPadX;
1123 volume[4] = iPadZ;
571dda3d 1124
1125}
7813bb1a 1126//-----------------------------------------------------------------------------
019f6101 1127Bool_t AliTOFRawStream::DecodeDDL(Int_t nDDLMin, Int_t nDDLMax, Int_t verbose = 0) {
1128 //
1129 // To decode raw data for DDL number in [nDDLmin; nDDLmax]
1130 //
1131
7813bb1a 1132 //check and fix valid DDL range
019f6101 1133 if (nDDLMin < 0){
1134 nDDLMin = 0;
1135 fRawReader->AddMinorErrorLog(kDDLMinError);
1136 AliWarning("Wrong DDL range: setting first DDL ID to 0");
7813bb1a 1137 }
019f6101 1138 if (nDDLMax > 71){
1139 nDDLMax = 71;
1140 fRawReader->AddMinorErrorLog(kDDLMaxError);
1141 AliWarning("Wrong DDL range: setting last DDL ID to 71");
7813bb1a 1142 }
1143
1144 //select required DDLs
019f6101 1145 fRawReader->Select("TOF", nDDLMin, nDDLMax);
7813bb1a 1146
1147 if (verbose)
019f6101 1148 AliInfo(Form("Selected TOF DDL range: %d-%d", nDDLMin, nDDLMax));
7813bb1a 1149
2fd622fa 1150 return(Decode(verbose));
1151}
1152//-----------------------------------------------------------------------------
019f6101 1153Bool_t AliTOFRawStream::Decode(Int_t verbose = 0) {
1154 //
1155 // New decoder method
1156 //
1157
2fd622fa 1158 Int_t currentEquipment;
1159 Int_t currentDDL;
1160
1161 //pointers
1162 UChar_t *data = 0x0;
1163
7813bb1a 1164 //loop and read DDL headers
1165 while(fRawReader->ReadHeader()){
1166
1167 //memory leak prevention (actually data should be always 0x0 here)
1168 if (data != 0x0)
1169 delete [] data;
1170
1171 //get equipment infos
1172 currentEquipment = fRawReader->GetEquipmentId();
1173 currentDDL = fRawReader->GetDDLID();
1174 const Int_t kDataSize = fRawReader->GetDataSize();
1175 const Int_t kDataWords = kDataSize / 4;
1176 data = new UChar_t[kDataSize];
1177
1178 if (verbose)
1179 AliInfo(Form("Found equipment # %d header (DDL # %d): %d bytes (%d words)", currentEquipment, currentDDL, kDataSize, kDataWords));
1180
1181 if (verbose)
1182 AliInfo(Form("Reading equipment #%d (DDL # %d) data...", currentEquipment, currentDDL));
1183
1184 //read equipment payload
1185 if (!fRawReader->ReadNext(data, kDataSize))
1186 {
019f6101 1187 fRawReader->AddMajorErrorLog(kDDLdataReading);
7813bb1a 1188 if (verbose)
019f6101 1189 AliWarning("Error while reading DDL data. Go to next equipment");
7813bb1a 1190 delete [] data;
1191 data = 0x0;
1192 continue;
1193 }
1194
1195 if (verbose)
1196 AliInfo(Form("Equipment # %d (DDL # %d) data has been readed", currentEquipment, currentDDL));
1197
1198
1199 //set up the decoder
1200 fDecoder->SetVerbose(verbose);
1201 fDecoder->SetDataBuffer(fDataBuffer[currentDDL]);
1202 fDecoder->SetPackedDataBuffer(fPackedDataBuffer[currentDDL]);
1203
1204 //start decoding
019f6101 1205 if (fDecoder->Decode((UInt_t *)data, kDataWords) == kTRUE) {
1206 fRawReader->AddMajorErrorLog(kDDLDecoder,Form("DDL # = %d",currentDDL));
1207 AliWarning(Form("Error while decoding DDL # %d: decoder returned with errors", currentDDL));
1208 }
7813bb1a 1209
1210 delete [] data;
1211 data = 0x0;
1212 }
1213
1214 //reset reader
1215 fRawReader->Reset();
1216
1217 if (verbose)
1218 AliInfo("All done");
1219
1220 return kFALSE;
1221
1222}
1223//---------------------------------------------------------------------------
1224void
1225AliTOFRawStream::ResetBuffers()
1226{
19eefa2b 1227 //
1228 // To reset the buffers
1229 //
1230
7813bb1a 1231 for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls("TOF"); iDDL++){
1232 ResetDataBuffer(iDDL);
1233 ResetPackedDataBuffer(iDDL);
1234 }
1235}
1236
1237//---------------------------------------------------------------------------
1238Bool_t
1239AliTOFRawStream::LoadRawDataBuffers(Int_t indexDDL, Int_t verbose)
1240{
19eefa2b 1241 //
1242 // To load the buffers
1243 //
1244
7813bb1a 1245 fTOFrawData->Clear();
1246 fPackedDigits = 0;
1247
1248 if (verbose > 0)
1249 AliInfo(Form("Decoding raw data for DDL # %d ...", indexDDL));
1250
1251 if (DecodeDDL(indexDDL, indexDDL, verbose) != 0){ //decode DDL
019f6101 1252 fRawReader->AddMajorErrorLog(kDDLDecoder,Form("DDL # = %d",indexDDL));
1253 AliWarning(Form("Error while decoding DDL # %d", indexDDL));
7813bb1a 1254 return kTRUE;
1255 }
1256
1257 if (verbose > 0)
1258 AliInfo(Form("Done. %d packed %s been found.", fPackedDataBuffer[indexDDL]->GetEntries(), fPackedDataBuffer[indexDDL]->GetEntries() > 1 ? "hits have" : "hit has"));
1259
1260 AliTOFHitData *hitData; //hit data pointer
1261
1262 if (verbose > 0)
1263 AliInfo("Filling TClonesArray ...");
1264
1265 //loop over DDL packed hits
1266 for (Int_t iHit = 0; iHit < fPackedDataBuffer[indexDDL]->GetEntries(); iHit++){
1267 hitData = fPackedDataBuffer[indexDDL]->GetHit(iHit); //get hit data
1268 Int_t hitACQ = hitData->GetACQ();
1269 Int_t hitPS = hitData->GetPS();
1270 Int_t hitSlotID = hitData->GetSlotID();
1271 Int_t hitChain = hitData->GetChain();
1272 Int_t hitTDC = hitData->GetTDC();
1273 Int_t hitChan = hitData->GetChan();
7813bb1a 1274 Int_t hitTimeBin = hitData->GetTimeBin();
7813bb1a 1275 Int_t hitTOTBin = hitData->GetTOTBin();
1276
bf33f8f0 1277 Int_t hitLeading = -1;
1278 Int_t hitTrailing = -1;
1279 Int_t hitError = -1;
7813bb1a 1280
1281 TClonesArray &arrayTofRawData = *fTOFrawData;
bf33f8f0 1282 new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(hitSlotID, hitChain, hitTDC, hitChan, hitTimeBin, hitTOTBin, hitLeading, hitTrailing, hitPS, hitACQ, hitError);
7813bb1a 1283 }
1284
1285 if (verbose > 0)
1286 AliInfo("Done.");
1287
1288 if (verbose > 0)
1289 AliInfo("Resetting buffers ...");
1290
1291 fDataBuffer[indexDDL]->Reset();
1292 fPackedDataBuffer[indexDDL]->Reset();
1293
1294 if (verbose > 0)
1295 AliInfo("Done.");
1296
1297 return kFALSE;
1298}
1299