]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOFRawStream.cxx
reducing macro to minimum AliReconstruction functionality, disable QA and TriggerESD...
[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
13d6bff9 92#include "Riostream.h"
93
15ec34b9 94#include "TClonesArray.h"
95
96#include "AliDAQ.h"
d0eb8f39 97#include "AliLog.h"
571dda3d 98#include "AliRawReader.h"
99
100#include "AliTOFGeometry.h"
15ec34b9 101#include "AliTOFrawData.h"
102#include "AliTOFRawMap.h"
571dda3d 103#include "AliTOFRawStream.h"
104
5c7c93fa 105#include "AliTOFHitData.h"
d0eb8f39 106
571dda3d 107ClassImp(AliTOFRawStream)
108
109
110//_____________________________________________________________________________
655e379f 111AliTOFRawStream::AliTOFRawStream(AliRawReader* rawReader):
15ec34b9 112 fRawReader(rawReader),
7813bb1a 113 fTOFrawData(0x0),
114 fDecoder(new AliTOFDecoder()),
655e379f 115 fDDL(-1),
116 fTRM(-1),
655e379f 117 fTRMchain(-1),
15ec34b9 118 fTDC(-1),
655e379f 119 fTDCchannel(-1),
15ec34b9 120 fTime(-1),
655e379f 121 fToT(-1),
15ec34b9 122 fLeadingEdge(-1),
123 fTrailingEdge(-1),
655e379f 124 fErrorFlag(-1),
655e379f 125 fSector(-1),
126 fPlate(-1),
127 fStrip(-1),
128 fPadX(-1),
129 fPadZ(-1),
15ec34b9 130 fPackedDigits(0),
655e379f 131 fWordType(-1),
132 fSlotID(-1),
133 fACQ(-1),
134 fPSbit(-1),
655e379f 135 fTDCerrorFlag(-1),
136 fInsideDRM(kFALSE),
137 fInsideTRM(kFALSE),
138 fInsideLTM(kFALSE),
139 fInsideTRMchain0(kFALSE),
15ec34b9 140 fInsideTRMchain1(kFALSE)
571dda3d 141{
142 //
143 // create an object to read TOF raw digits
144 //
145
7813bb1a 146 for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
2fd622fa 147 fDataBuffer[i]=new AliTOFHitDataBuffer();
148 fPackedDataBuffer[i]=new AliTOFHitDataBuffer();
7813bb1a 149 }
150
151 fTOFrawData = new TClonesArray("AliTOFrawData",1000);
152 fTOFrawData->SetOwner();
153
15ec34b9 154 fRawReader->Reset();
362c9d61 155 fRawReader->Select("TOF");
571dda3d 156}
157
158//_____________________________________________________________________________
655e379f 159AliTOFRawStream::AliTOFRawStream():
7813bb1a 160 fRawReader(0x0),
7813bb1a 161 fTOFrawData(0x0),
162 fDecoder(new AliTOFDecoder()),
655e379f 163 fDDL(-1),
164 fTRM(-1),
655e379f 165 fTRMchain(-1),
15ec34b9 166 fTDC(-1),
655e379f 167 fTDCchannel(-1),
15ec34b9 168 fTime(-1),
655e379f 169 fToT(-1),
15ec34b9 170 fLeadingEdge(-1),
171 fTrailingEdge(-1),
655e379f 172 fErrorFlag(-1),
655e379f 173 fSector(-1),
174 fPlate(-1),
175 fStrip(-1),
176 fPadX(-1),
177 fPadZ(-1),
15ec34b9 178 fPackedDigits(0),
655e379f 179 fWordType(-1),
180 fSlotID(-1),
181 fACQ(-1),
182 fPSbit(-1),
655e379f 183 fTDCerrorFlag(-1),
184 fInsideDRM(kFALSE),
185 fInsideTRM(kFALSE),
186 fInsideLTM(kFALSE),
187 fInsideTRMchain0(kFALSE),
15ec34b9 188 fInsideTRMchain1(kFALSE)
571dda3d 189{
190 //
d0eb8f39 191 // default ctr
571dda3d 192 //
7813bb1a 193 for (Int_t i=0;i<AliDAQ::NumberOfDdls("TOF");i++){
2fd622fa 194 fDataBuffer[i]=new AliTOFHitDataBuffer();
195 fPackedDataBuffer[i]=new AliTOFHitDataBuffer();
7813bb1a 196 }
15ec34b9 197
7813bb1a 198 fTOFrawData = new TClonesArray("AliTOFrawData",1000);
199 fTOFrawData->SetOwner();
d0eb8f39 200}
201
202//_____________________________________________________________________________
203AliTOFRawStream::AliTOFRawStream(const AliTOFRawStream& stream) :
655e379f 204 TObject(stream),
205 fRawReader(0x0),
7813bb1a 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{
0192b95f 358 //
359 // To load raw data
360 //
15ec34b9 361
74cd22f8 362 fTOFrawData->Clear();
0192b95f 363
74cd22f8 364 TClonesArray &arrayTofRawData = *fTOFrawData;
365
15ec34b9 366 fPackedDigits = 0;
367
368 // create raw data map
369 AliTOFRawMap *rawMap = new AliTOFRawMap(fTOFrawData);
370 rawMap->Clear();
371
372 Int_t slot[4] = {-1, -1, -1, -1};
373
374 fRawReader->Reset();
375 fRawReader->Select("TOF", indexDDL, indexDDL);
376
377 Bool_t signal = kFALSE;
378
74cd22f8 379 AliTOFrawData *rawDigit = NULL;
7813bb1a 380
15ec34b9 381 while(Next()) {
382
383 signal = (fSector!=-1 && fPlate!=-1 && fStrip!=-1 && fPadZ!=-1 && fPadX!=-1);
384 if (signal) {
0192b95f 385 AliDebug(2,Form(" %2i %1i %2i %1i %2i \n", fSector, fPlate, fStrip, fPadZ, fPadX));
15ec34b9 386
387 slot[0] = fTRM;
388 slot[1] = fTRMchain;
389 slot[2] = fTDC;
390 slot[3] = fTDCchannel;
391
392 if (rawMap->TestHit(slot) != kEmpty) {
393
74cd22f8 394 rawDigit = static_cast<AliTOFrawData*>(rawMap->GetHit(slot));
15ec34b9 395
396 if (rawDigit->GetLeading()!=-1 && rawDigit->GetTrailing()==-1 &&
397 fLeadingEdge==-1 && fTrailingEdge!=-1) {
398
399 rawDigit->Update(fTime, fToT, fLeadingEdge, fTrailingEdge, fPSbit, fACQ, fErrorFlag);
400 }
401 else if ( ((rawDigit->GetTOF()!=-1 || rawDigit->GetLeading()!=-1 || rawDigit->GetTrailing()!=-1) &&
402 (fLeadingEdge!=-1 || fTrailingEdge!=-1 || fTime!=-1) )
403
0192b95f 404 )
15ec34b9 405 {
406
74cd22f8 407 new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(fTRM, fTRMchain, fTDC, fTDCchannel, fTime, fToT, fLeadingEdge, fTrailingEdge, fPSbit, fACQ, fErrorFlag);
15ec34b9 408
74cd22f8 409 rawMap->SetHit(slot);
15ec34b9 410
74cd22f8 411 }
15ec34b9 412
413
414 }
415 else {
416
15ec34b9 417 new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(fTRM, fTRMchain, fTDC, fTDCchannel, fTime, fToT, fLeadingEdge, fTrailingEdge, fPSbit, fACQ, fErrorFlag);
418
419 rawMap->SetHit(slot);
420
421 } // else if (rawMap->TestHit(slot) == kEmpty)
422
423 } // if (signal)
424
425 } // closed -> while (Next())
426
74cd22f8 427 rawMap->Delete();
7813bb1a 428
15ec34b9 429}
430
571dda3d 431//_____________________________________________________________________________
432Bool_t AliTOFRawStream::Next()
433{
d0eb8f39 434 //
435 // Read next 32-bit word in TOF raw data files
436 // returns kFALSE if there is no word left
437 //
571dda3d 438
439 UInt_t data;
440
571dda3d 441 if (!fRawReader->ReadNextInt(data)) return kFALSE;
442
d0eb8f39 443 if (fSector!=-1 && fPlate!=-1 && fStrip!=-1 && fPadZ!=-1 && fPadX!=-1) {
444 fSector = -1;
15ec34b9 445 fPlate = -1;
446 fStrip = -1;
447 fPadZ = -1;
448 fPadX = -1;
449 fTime = -1;
450 fToT = -1;
451 fLeadingEdge = -1;
452 fTrailingEdge = -1;
d0eb8f39 453 }
571dda3d 454
571dda3d 455 fDDL = fRawReader->GetDDLID();
456
d0eb8f39 457 fWordType = GetField(data,WORD_TYPE_MASK,WORD_TYPE_POSITION);
458
459 switch (fWordType) { // switch word type
460
461 case GLOBAL_HEADER_TYPE: // global header
462 fSlotID = GetField(data, HEADER_SLOT_ID_MASK, HEADER_SLOT_ID_POSITION);
463 fTRM = fSlotID;
464
465
466 switch (fSlotID) { // switch global header slot ID
467
468 case DRM_ID_NUMBER: //DRM global header
469 if (fInsideDRM) { // unexpected DRM global headers -> exit
470 break;
471 }
472 fInsideDRM = kTRUE; // DRM global header accepted
473 break;
474
475 case LTM_ID_NUMBER: // LTM global header
476 if (fInsideLTM) { // unexpected LTM global headers -> exit
477 break;
478 }
479 fInsideLTM = kTRUE; // LTM global header accepted
480 break;
481
482 case 3: //TRM header
483 case 4: //TRM header
484 case 5: //TRM header
485 case 6: //TRM header
486 case 7: //TRM header
487 case 8: //TRM header
488 case 9: //TRM header
489 case 10: //TRM header
490 case 11: //TRM header
491 case 12: //TRM header
492 if (fInsideTRM) { // unexpected TRM global headers -> exit
493 break;
494 }
495 fInsideTRM = kTRUE; // TRM global header accepted
496 fACQ = GetField(data,TRM_ACQ_BITS_MASK,TRM_ACQ_BITS_POSITION);
497 break;
498
499 default: // unexpected global header slot ID
500 break;
501
502 } //end switch global header slot id
503
504 break;
505
506
507 case GLOBAL_TRAILER_TYPE: // global trailer
508 fSlotID = GetField(data,HEADER_SLOT_ID_MASK,HEADER_SLOT_ID_POSITION);
509
510
511 switch (fSlotID) { // switch global trailer slot ID
512
513 case DRM_ID_NUMBER: // DRM global trailer
514 if (!fInsideDRM) { // unexpected DRM global trailers -> exit
515 break;
516 }
517 fInsideDRM = kFALSE; // DRM global trailer accepted
518 fInsideTRM = kFALSE;
519 fInsideLTM = kFALSE;
520 fInsideTRMchain0 = kFALSE;
521 fInsideTRMchain1 = kFALSE;
d0eb8f39 522 fSector = -1;
15ec34b9 523 fPlate = -1;
524 fStrip = -1;
525 fPadZ = -1;
526 fPadX = -1;
527 fDDL = -1;
528 fTRM = -1;
529 fTDC = -1;
530 fTRMchain = -1;
d0eb8f39 531 fTDCchannel = -1;
15ec34b9 532 fTime = -1;
533 fToT = -1;
534 fLeadingEdge = -1;
535 fTrailingEdge = -1;
d0eb8f39 536 fErrorFlag = -1;
15ec34b9 537 fACQ = -1;
d0eb8f39 538 fPSbit = -1;
d0eb8f39 539 fTDCerrorFlag = -1;
540 break;
541 case LTM_ID_NUMBER: // LTM global trailer
542 if (!fInsideLTM) { // unexpected LTM global trailer -> exit
543 break;
544 }
545 fInsideLTM = kFALSE; // LTM global trailer accepted
546 break;
547 case 15: //TRM global trailer
548 if (!fInsideTRM) { // unexpected TRM global trailers -> exit
549 break;
550 }
551 fInsideTRM = kFALSE; // TRM global trailer accepted
552 break;
553 default: // unexpected global trailer slot ID
554 break;
555 } //end switch global trailer slot id
556
557
558 break;
559
560
561 case ERROR_TYPE: // TDC error
15ec34b9 562 fTDC = GetField(data,TRM_TDC_ERROR_TDC_ID_MASK,TRM_TDC_ERROR_TDC_ID_POSITION);
d0eb8f39 563 fTDCerrorFlag = GetField(data,TRM_TDC_ERROR_FLAGS_MASK,TRM_TDC_ERROR_FLAGS_POSITION);
564 break;
565
566
567 case FILLER_TYPE: // filler
568 break;
569
570
571 default: // other word types
572
573 if (fInsideTRM) { // inside TRM
574
575 switch (fWordType) { // switch word type inside TRM
576 case TRM_CHAIN0_HEADER_TYPE: // TRM chain0 header
577 if (fInsideTRMchain0) { // unexpected TRM chain0 header
578 break;
579 }
580 fInsideTRMchain0 = kTRUE;
581 fTRMchain = 0;
582 break;
583 case TRM_CHAIN0_TRAILER_TYPE: // TRM chain0 trailer
584 if (!fInsideTRMchain0) { // unexpected TRM chain0 trailer
585 break;
586 }
587 fInsideTRMchain0 = kFALSE;
588 fTRMchain = -1;
589 break;
590 case TRM_CHAIN1_HEADER_TYPE: // TRM chain1 header
591 if (fInsideTRMchain1) { // unexpected TRM chain1 header
592 break;
593 }
594 fInsideTRMchain1 = kTRUE;
595 fTRMchain = 1;
596 break;
597 case TRM_CHAIN1_TRAILER_TYPE: // TRM chain1 trailer
598 if (!fInsideTRMchain1) { // unexpected TRM chain1 trailer
599 break;
600 }
601 fInsideTRMchain1 = kFALSE;
602 fTRMchain = -1;
603 break;
604 } // end switch word type inside TRM
605
606 } // end if (fInsideTRM)
607
608
609 if (
610 ((fInsideTRMchain0&&!fInsideTRMchain1) || (!fInsideTRMchain0&&fInsideTRMchain1))
611 && fWordType!=TRM_CHAIN0_HEADER_TYPE && fWordType!=TRM_CHAIN0_TRAILER_TYPE
612 && fWordType!=TRM_CHAIN1_HEADER_TYPE && fWordType!=TRM_CHAIN1_TRAILER_TYPE
613 ){ // inside TRM chains
15ec34b9 614
615 fPSbit = GetField(data,TRM_PS_BITS_MASK,TRM_PS_BITS_POSITION);
616 fTDC = GetField(data,TRM_TDC_ID_MASK,TRM_TDC_ID_POSITION);
d0eb8f39 617 fTDCchannel = GetField(data,TRM_CHAN_MASK,TRM_CHAN_POSITION);
15ec34b9 618 fErrorFlag = GetField(data,TRM_E_BIT_MASK,TRM_E_BIT_POSITION);
619
620 SetSector();
621 SetPlate();
622 SetStrip();
623 SetPadZ();
624 SetPadX();
625
d0eb8f39 626
627 switch (fPSbit) { // switch fPSbit bits inside TRM chains
15ec34b9 628
629 case 0: // packing ok, digit time and TOT
630 fToT = GetField(data,TRM_TOT_WIDTH_MASK, TRM_TOT_WIDTH_POSITION);
d0eb8f39 631 fTime = GetField(data,TRM_DIGIT_TIME_MASK,TRM_DIGIT_TIME_POSITION);
d0eb8f39 632 break;
633
634 case 1: // leading edge digit, long digit time, no TOT
15ec34b9 635 //fToT = -1;
636 //fTime = -1;
637 fLeadingEdge = GetField(data,TRM_LONG_DIGIT_TIME_MASK,TRM_LONG_DIGIT_TIME_POSITION);
d0eb8f39 638 break;
639
640 case 2: // trailing edge digit, long digit time, no TOT
15ec34b9 641 //fToT = -1;
642 //fTime = -1;
643 fTrailingEdge = GetField(data,TRM_LONG_DIGIT_TIME_MASK,TRM_LONG_DIGIT_TIME_POSITION);
d0eb8f39 644 break;
15ec34b9 645
d0eb8f39 646 case 3: // TOT overflow
15ec34b9 647 fToT = GetField(data,TRM_TOT_WIDTH_MASK, TRM_TOT_WIDTH_POSITION);
d0eb8f39 648 fTime = GetField(data,TRM_DIGIT_TIME_MASK,TRM_DIGIT_TIME_POSITION);
d0eb8f39 649 break;
d0eb8f39 650
15ec34b9 651 } // end switch PS bits inside TRM chains
d0eb8f39 652
653 } // end if is inside TRM chains
654
655 } // end switch on fWordType
571dda3d 656
15ec34b9 657
571dda3d 658 return kTRUE;
7813bb1a 659
571dda3d 660}
661//_____________________________________________________________________________
662
d0eb8f39 663void AliTOFRawStream::SetSector()
571dda3d 664{
665 //
d0eb8f39 666 // Evaluate the TOF sector number -> [ 0;17]
667 // corresponding to the TOF equipment IDs:
668 // fDDL -> [ 0;71]
669 // fTRM -> [ 3;12]
15ec34b9 670 // fTRMchain -> [ 0; 1]
d0eb8f39 671 // fTDC -> [ 0;14]
672 // fTDCchannel -> [ 0; 7]
571dda3d 673 //
674
675 Int_t iSector = -1;
571dda3d 676
d0eb8f39 677 if (!(fDDL==-1)) iSector = Int_t((Float_t)(fDDL)/AliTOFGeometry::NDDL());
678
679 fSector = iSector;
571dda3d 680
681}
682//_____________________________________________________________________________
683
d0eb8f39 684
685void AliTOFRawStream::SetPlate()
571dda3d 686{
687 //
d0eb8f39 688 // Evaluate the TOF plate number ->[ 0; 4]
689 // corresponding to the TOF equipment IDs:
690 // fDDL -> [ 0;71]
691 // fTRM -> [ 3;12]
15ec34b9 692 // fTRMchain -> [ 0; 1]
d0eb8f39 693 // fTDC -> [ 0;14]
694 // fTDCchannel -> [ 0; 7]
571dda3d 695 //
696
697 Int_t iPlate = -1;
d0eb8f39 698 if (!(fDDL==-1 || fTRM==-1 || fTDC==-1
699 || fSector==-1))
700 iPlate = Equip2VolNplate(GetDDLnumberPerSector(fDDL), fTRM, fTDC);
571dda3d 701
d0eb8f39 702 fPlate = iPlate;
571dda3d 703
704}
705//_____________________________________________________________________________
706
d0eb8f39 707void AliTOFRawStream::SetStrip()
571dda3d 708{
709 //
d0eb8f39 710 // Evaluate the TOF strip number per module -> [ 0; 14/18]
711 // corresponding to the TOF equipment IDs:
712 // fDDL -> [ 0;71]
713 // fTRM -> [ 3;12]
15ec34b9 714 // fTRMchain -> [ 0; 1]
d0eb8f39 715 // fTDC -> [ 0;14]
716 // fTDCchannel -> [ 0; 7]
571dda3d 717 //
718
719 Int_t iStrip = -1;
720
d0eb8f39 721 if (!(fDDL==-1 || fTRM==-1 || fTDC==-1
722 || fSector==-1 || fPlate==-1))
723 iStrip = Equip2VolNstrip(GetDDLnumberPerSector(fDDL), fTRM, fTDC);
571dda3d 724
d0eb8f39 725 fStrip = iStrip;
571dda3d 726
727}
728//_____________________________________________________________________________
729
d0eb8f39 730void AliTOFRawStream::SetPadZ()
571dda3d 731{
732 //
d0eb8f39 733 // Evaluate the TOF padRow number per strip -> [ 0; 1]
734 // corresponding to the TOF equipment IDs:
735 // fDDL -> [ 0;71]
736 // fTRM -> [ 3;12]
15ec34b9 737 // fTRMchain -> [ 0; 1]
d0eb8f39 738 // fTDC -> [ 0;14]
739 // fTDCchannel -> [ 0; 7]
571dda3d 740 //
741
742 Int_t iPadZ = -1;
743
d0eb8f39 744 if (!(fDDL==-1 || fTRM==-1 || fTRMchain==-1 || fTDC==-1 || fTDCchannel==-1
745 || fSector==-1 || fPlate==-1 || fStrip==-1))
746 {
747 Int_t iPadAlongTheStrip = Equip2VolNpad(GetDDLnumberPerSector(fDDL), fTRMchain, fTDC, fTDCchannel);
748 if (iPadAlongTheStrip!=-1)
749 iPadZ = iPadAlongTheStrip%AliTOFGeometry::NpadZ();
750 }
571dda3d 751
d0eb8f39 752 fPadZ = iPadZ;
571dda3d 753
d0eb8f39 754}
755//_____________________________________________________________________________
756
757void AliTOFRawStream::SetPadX()
758{
759 //
760 // Evaluate the TOF pad number per strip padRow -> [ 0;47]
761 // corresponding to the TOF equipment IDs:
762 // fDDL -> [ 0;71]
763 // fTRM -> [ 3;12]
15ec34b9 764 // fTRMchain -> [ 0; 1]
d0eb8f39 765 // fTDC -> [ 0;14]
766 // fTDCchannel -> [ 0; 7]
767 //
571dda3d 768
d0eb8f39 769 Int_t iPadX = -1;
571dda3d 770
d0eb8f39 771 if (!(fDDL==-1 || fTRM==-1 || fTRMchain==-1 || fTDC==-1 || fTDCchannel==-1
772 || fSector==-1 || fPlate==-1 || fStrip==-1))
773 {
774 Int_t iPadAlongTheStrip = Equip2VolNpad(GetDDLnumberPerSector(fDDL), fTRMchain, fTDC, fTDCchannel);
775 if (iPadAlongTheStrip!=-1)
776 iPadX = (Int_t)(iPadAlongTheStrip/(Float_t(AliTOFGeometry::NpadZ())));
777 }
778
779 fPadX = iPadX;
571dda3d 780
781}
571dda3d 782
d0eb8f39 783//----------------------------------------------------------------------------
784Int_t AliTOFRawStream::GetField(UInt_t word, Int_t fieldMask, Int_t fieldPosition) const
785{
786 //
787 //
788 //
789
790 return ((word & fieldMask) >> fieldPosition);
791}
792
793//----------------------------------------------------------------------------
13d6bff9 794Int_t AliTOFRawStream::Equip2VolNplate(Int_t iDDL, Int_t nTRM, Int_t nTDC)
571dda3d 795{
796 //
d0eb8f39 797 // Returns the TOF plate number [0;4]
798 // corresponding to the TOF equipment ID numbers:
799 // iDDL -> DDL number per sector [0;3]
800 // nTRM -> TRM number [3;12]
801 // nTDC -> TDC number [0;14]
571dda3d 802 //
803
d0eb8f39 804 Int_t iPlate = -1;
805 if (iDDL==0) {
806
807 if (nTRM>=4 && nTRM<7) {
808 iPlate = 0;
809 } else if (nTRM==7) {
810 if (nTDC<12) iPlate = 0;
811 else iPlate = 1;
812 } else if (nTRM>=8 && nTRM<11) {
813 iPlate = 1;
814 } else if (nTRM==11) {
815 if (nTDC<9) iPlate = 1;
816 else iPlate = 2;
817 }else if (nTRM==12) {
818 iPlate = 2;
819 }
820
821 } else if (iDDL==1) {
822
823 if (nTRM==3) {
824 if (nTDC<3) iPlate = 0;
825 } else if (nTRM>=4 && nTRM<7) {
826 iPlate = 0;
827 } else if (nTRM==7) {
828 if (nTDC<6) iPlate = 1;
829 else iPlate = 0;
830 } else if (nTRM>=8 && nTRM<11) {
831 iPlate = 1;
832 } else if (nTRM==11) {
833 if (nTDC<9) iPlate = 2;
834 else iPlate = 1;
835 } else if (nTRM==12) {
836 iPlate = 2;
837 }
838
839 } else if (iDDL==2) {
840
841 if (nTRM>=4 && nTRM<7) {
842 iPlate = 4;
843 } else if (nTRM==7) {
844 if (nTDC<12) iPlate = 4;
845 else iPlate = 3;
846 } else if (nTRM>=8 && nTRM<11) {
847 iPlate = 3;
848 } else if (nTRM==11) {
849 if (nTDC<9) iPlate = 3;
850 else iPlate = 2;
851 }else if (nTRM==12) {
852 iPlate = 2;
853 }
854
855 } else if (iDDL==3) {
856
857 if (nTRM==3) {
858 if (nTDC<3) iPlate = 4;
859 } else if (nTRM>=4 && nTRM<7) {
860 iPlate = 4;
861 } else if (nTRM==7) {
862 if (nTDC<6) iPlate = 3;
863 else iPlate = 4;
864 } else if (nTRM>=8 && nTRM<11) {
865 iPlate = 3;
866 } else if (nTRM==11) {
867 if (nTDC<9) iPlate = 2;
868 else iPlate = 3;
869 } else if (nTRM==12) {
870 iPlate = 2;
871 }
571dda3d 872
d0eb8f39 873 }
571dda3d 874
d0eb8f39 875 return iPlate;
571dda3d 876
d0eb8f39 877}
571dda3d 878
d0eb8f39 879//----------------------------------------------------------------------------
13d6bff9 880Int_t AliTOFRawStream::Equip2VolNstrip(Int_t iDDL, Int_t nTRM, Int_t nTDC)
d0eb8f39 881{
882 //
883 // Returns the TOF strip number per module:
884 // [0;14], in the central plates,
885 // [0;18], in the intermediate and external plates
886 // corresponding to the TOF equipment ID numbers:
887 // iDDL -> DDL number per sector [0;3]
888 // nTRM -> TRM number [3;12]
889 // nTDC -> TDC number [0;14]
890 //
571dda3d 891
d0eb8f39 892 Int_t iStrip = -1;
571dda3d 893
d0eb8f39 894 if (iDDL==0) {
895
896 if (nTRM== 4) iStrip = (Int_t)(nTDC/3.);
897 else if (nTRM== 5) iStrip = 5 + (Int_t)(nTDC/3.);
898 else if (nTRM== 6) iStrip = 10 + (Int_t)(nTDC/3.);
899 else if (nTRM== 7) {
900 if (nTDC<12) iStrip = 15 + (Int_t)(nTDC/3.);
901 else iStrip = (Int_t)(nTDC/3.) - 4;
902 }
903 else if (nTRM== 8) iStrip = 1 + (Int_t)(nTDC/3.);
904 else if (nTRM== 9) iStrip = 6 + (Int_t)(nTDC/3.);
905 else if (nTRM==10) iStrip = 11 + (Int_t)(nTDC/3.);
906 else if (nTRM==11) {
907 if (nTDC<9) iStrip = 16 + (Int_t)(nTDC/3.);
908 else iStrip = (Int_t)(nTDC/3.) - 3;
909 }
910 else if (nTRM==12) iStrip = 2 + (Int_t)(nTDC/3.);
911
912 } else if (iDDL==1) {
913
914 if (nTRM==3 && nTDC<3) iStrip = (Int_t)(nTDC/3.);
915 else if (nTRM== 4) iStrip = 5 - (Int_t)(nTDC/3.);
916 else if (nTRM== 5) iStrip = 10 - (Int_t)(nTDC/3.);
917 else if (nTRM== 6) iStrip = 15 - (Int_t)(nTDC/3.);
918 else if (nTRM== 7) {
919 if (nTDC<6) iStrip = 1 - (Int_t)(nTDC/3.);
920 else iStrip = 20 - (Int_t)(nTDC/3.);
921 }
922 else if (nTRM== 8) iStrip = 6 - (Int_t)(nTDC/3.);
923 else if (nTRM== 9) iStrip = 11 - (Int_t)(nTDC/3.);
924 else if (nTRM==10) iStrip = 16 - (Int_t)(nTDC/3.);
925 else if (nTRM==11) {
926 if (nTDC<9) iStrip = 2 - (Int_t)(nTDC/3.);
927 else iStrip = 21 - (Int_t)(nTDC/3.);
928 }
929 else if (nTRM==12) iStrip = 7 - (Int_t)(nTDC/3.);
930
931 } else if (iDDL==2) {
932
933 if (nTRM== 4) iStrip = 18 - (Int_t)(nTDC/3.);
934 else if (nTRM== 5) iStrip = 18 - ( 5 + (Int_t)(nTDC/3.));
935 else if (nTRM== 6) iStrip = 18 - (10 + (Int_t)(nTDC/3.));
936 else if (nTRM== 7) {
937 if (nTDC<12) iStrip = 18 - (15 + (Int_t)(nTDC/3.));
938 else iStrip = 18 - ((Int_t)(nTDC/3.) - 4);
939 }
940 else if (nTRM== 8) iStrip = 18 - ( 1 + (Int_t)(nTDC/3.));
941 else if (nTRM== 9) iStrip = 18 - ( 6 + (Int_t)(nTDC/3.));
942 else if (nTRM==10) iStrip = 18 - (11 + (Int_t)(nTDC/3.));
943 else if (nTRM==11) {
944 if (nTDC<9) iStrip = 18 - (16 + (Int_t)(nTDC/3.));
945 else iStrip = 14 - ((Int_t)(nTDC/3.) - 3);
946 }
947 else if (nTRM==12) iStrip = 14 - ( 2 + (Int_t)(nTDC/3.));
948
949 } else if (iDDL==3) {
950
951 if (nTRM==3 && nTDC<3) iStrip = 18 - (Int_t)(nTDC/3.);
952 else if (nTRM== 4) iStrip = 18 - ( 5 - (Int_t)(nTDC/3.));
953 else if (nTRM== 5) iStrip = 18 - (10 - (Int_t)(nTDC/3.));
954 else if (nTRM== 6) iStrip = 18 - (15 - (Int_t)(nTDC/3.));
955 else if (nTRM== 7) {
956 if (nTDC<6) iStrip = 18 - (1 - (Int_t)(nTDC/3.));
957 else iStrip = 18 - (20 - (Int_t)(nTDC/3.));
958 }
959 else if (nTRM== 8) iStrip = 18 - ( 6 - (Int_t)(nTDC/3.));
960 else if (nTRM== 9) iStrip = 18 - (11 - (Int_t)(nTDC/3.));
961 else if (nTRM==10) iStrip = 18 - (16 - (Int_t)(nTDC/3.));
962 else if (nTRM==11) {
963 if (nTDC<9) iStrip = 14 - ( 2 - (Int_t)(nTDC/3.));
964 else iStrip = 18 - (21 - (Int_t)(nTDC/3.));
965 }
966 else if (nTRM==12) iStrip = 14 - ( 7 - (Int_t)(nTDC/3.));
967
968 }
969
970 return iStrip;
971
972}
973
974//----------------------------------------------------------------------------
975Int_t AliTOFRawStream::Equip2VolNpad(Int_t iDDL, Int_t iChain, Int_t nTDC,
13d6bff9 976 Int_t iCH)
d0eb8f39 977{
978 //
979 // Returns the TOF pad number per strip [0;95]
980 // corresponding to the TOF equipment ID numbers:
981 // iDDL -> DDL number per sector [0;3]
982 // iChain -> TRM chain number [0;1]
983 // nTDC -> TDC number [0;14]
984 // iCH -> TDC channel number [0;7]
985 //
986
987 Int_t iPadAlongTheStrip = -1;
988
989 Int_t iTDClocal = nTDC%3 + (1-iChain)*3;
990
991 if (iDDL==0 || iDDL==3) iTDClocal = 5 - iTDClocal;
992 else if (iDDL==1 || iDDL==2) iTDClocal = 6 + (5 - iTDClocal);
993
994 Int_t iCHlocal = iCH;
995 if (iDDL==0 || iDDL==3) iCHlocal = 7 - iCH;
996
997 iPadAlongTheStrip = iTDClocal*AliTOFGeometry::NCh() + iCHlocal;
998
999 if (((iDDL==1 || iDDL==2) && iPadAlongTheStrip< AliTOFGeometry::NpadX()) ||
019f6101 1000 ((iDDL==0 || iDDL==3) && iPadAlongTheStrip>=AliTOFGeometry::NpadX())) {
13d6bff9 1001 std::cerr << "Problems with the padX number!" << endl;
1002 //AliWarning("Problems with the padX number!");
019f6101 1003 }
d0eb8f39 1004 return iPadAlongTheStrip;
1005
1006}
1007
1008//----------------------------------------------------------------------------
1009Int_t AliTOFRawStream::GetSectorNumber(Int_t nDDL) const
1010{
1011 //
1012 // Returns the sector number [0;17]
1013 // corresponing to the assigned DRM/DDL number [0;71]
1014 //
1015
1016 Int_t iSector = Int_t((Float_t)(nDDL)/AliTOFGeometry::NDDL());
1017
1018 return iSector;
1019
1020}
1021//----------------------------------------------------------------------------
1022Int_t AliTOFRawStream::GetDDLnumberPerSector(Int_t nDDL) const
1023{
1024 //
1025 // Return the DRM/DDL number per sector [0;3]
1026 // corresponing to the assigned DRM/DDL number [0;71]
1027 //
1028
1029 Int_t iDDL = nDDL%AliTOFGeometry::NDDL();
1030
1031 return iDDL;
1032
1033}
1034
7813bb1a 1035//----------------------------------------------------------------------------
1036void AliTOFRawStream::EquipmentId2VolumeId(AliTOFHitData *hitData, Int_t *volume) const
1037{
1038 EquipmentId2VolumeId(hitData->GetDDLID(),hitData->GetSlotID(),hitData->GetChain(),hitData->GetTDC(),hitData->GetChan(),volume);
1039}
d0eb8f39 1040//----------------------------------------------------------------------------
1041void AliTOFRawStream::EquipmentId2VolumeId(Int_t nDDL, Int_t nTRM, Int_t iChain,
1042 Int_t nTDC, Int_t iCH,
1043 Int_t *volume) const
1044{
1045 //
1046 // To convert:
1047 // nDDL (variable in [0;71]) -> number of the DDL file
1048 // nTRM (variable in [3;12]) -> number of the TRM slot
1049 // iChain (variable in [0; 1]) -> number of the TRM chain
1050 // nTDC (variable in [0;14]) -> number of the TDC
1051 // iCH (variable in [0; 7]) -> number of the TDC channel
1052 //
1053 // in:
1054 // sector number, i.e. volume[0] (variable in [0,17])
1055 // plate number, i.e. volume[1] (variable in [0, 5])
1056 // strip number, i.e. volume[2] (variable in [0,14/18])
1057 // padX number, i.e. volume[3] (variable in [0,47])
1058 // padZ number, i.e. volume[4] (variable in [0, 1])
1059 //
1060
1061 Int_t iDDL = GetDDLnumberPerSector(nDDL);
1062
1063 Int_t iSector = GetSectorNumber(nDDL);
1064
1065 Int_t iPlate = Equip2VolNplate(iDDL, nTRM, nTDC);
019f6101 1066 if (iPlate==-1) {
13d6bff9 1067 if (fRawReader)
1068 fRawReader->AddMajorErrorLog(kPlateError,"plate = -1");
019f6101 1069 AliWarning("Problems with the plate number!");
1070 }
d0eb8f39 1071
1072 Int_t iStrip = Equip2VolNstrip(iDDL, nTRM, nTDC);
019f6101 1073 if (iStrip==-1) {
13d6bff9 1074 if (fRawReader)
1075 fRawReader->AddMajorErrorLog(kStripError,"strip = -1");
019f6101 1076 AliWarning("Problems with the strip number!");
1077 }
d0eb8f39 1078
1079 Int_t iPadAlongTheStrip = Equip2VolNpad(iDDL, iChain, nTDC, iCH);
019f6101 1080 if (iPadAlongTheStrip==-1){
13d6bff9 1081 if (fRawReader)
1082 fRawReader->AddMajorErrorLog(kPadAlongStripError,"pad = -1");
019f6101 1083 AliWarning("Problems with the pad number along the strip!");
1084 }
13d6bff9 1085
d0eb8f39 1086 Int_t iPadX = (Int_t)(iPadAlongTheStrip/(Float_t(AliTOFGeometry::NpadZ())));
1087 Int_t iPadZ = iPadAlongTheStrip%AliTOFGeometry::NpadZ();
13d6bff9 1088
d0eb8f39 1089 volume[0] = iSector;
1090 volume[1] = iPlate;
1091 volume[2] = iStrip;
1092 volume[3] = iPadX;
1093 volume[4] = iPadZ;
571dda3d 1094
1095}
7813bb1a 1096//-----------------------------------------------------------------------------
019f6101 1097Bool_t AliTOFRawStream::DecodeDDL(Int_t nDDLMin, Int_t nDDLMax, Int_t verbose = 0) {
1098 //
1099 // To decode raw data for DDL number in [nDDLmin; nDDLmax]
1100 //
1101
7813bb1a 1102 //check and fix valid DDL range
019f6101 1103 if (nDDLMin < 0){
1104 nDDLMin = 0;
1105 fRawReader->AddMinorErrorLog(kDDLMinError);
1106 AliWarning("Wrong DDL range: setting first DDL ID to 0");
7813bb1a 1107 }
019f6101 1108 if (nDDLMax > 71){
1109 nDDLMax = 71;
1110 fRawReader->AddMinorErrorLog(kDDLMaxError);
1111 AliWarning("Wrong DDL range: setting last DDL ID to 71");
7813bb1a 1112 }
1113
1114 //select required DDLs
019f6101 1115 fRawReader->Select("TOF", nDDLMin, nDDLMax);
7813bb1a 1116
1117 if (verbose)
019f6101 1118 AliInfo(Form("Selected TOF DDL range: %d-%d", nDDLMin, nDDLMax));
7813bb1a 1119
2fd622fa 1120 return(Decode(verbose));
1121}
1122//-----------------------------------------------------------------------------
019f6101 1123Bool_t AliTOFRawStream::Decode(Int_t verbose = 0) {
1124 //
1125 // New decoder method
1126 //
1127
2fd622fa 1128 Int_t currentEquipment;
1129 Int_t currentDDL;
1130
1131 //pointers
1132 UChar_t *data = 0x0;
1133
7813bb1a 1134 //loop and read DDL headers
1135 while(fRawReader->ReadHeader()){
1136
1137 //memory leak prevention (actually data should be always 0x0 here)
1138 if (data != 0x0)
1139 delete [] data;
1140
1141 //get equipment infos
1142 currentEquipment = fRawReader->GetEquipmentId();
1143 currentDDL = fRawReader->GetDDLID();
1144 const Int_t kDataSize = fRawReader->GetDataSize();
1145 const Int_t kDataWords = kDataSize / 4;
1146 data = new UChar_t[kDataSize];
1147
1148 if (verbose)
1149 AliInfo(Form("Found equipment # %d header (DDL # %d): %d bytes (%d words)", currentEquipment, currentDDL, kDataSize, kDataWords));
1150
1151 if (verbose)
1152 AliInfo(Form("Reading equipment #%d (DDL # %d) data...", currentEquipment, currentDDL));
1153
1154 //read equipment payload
1155 if (!fRawReader->ReadNext(data, kDataSize))
1156 {
019f6101 1157 fRawReader->AddMajorErrorLog(kDDLdataReading);
7813bb1a 1158 if (verbose)
019f6101 1159 AliWarning("Error while reading DDL data. Go to next equipment");
7813bb1a 1160 delete [] data;
1161 data = 0x0;
1162 continue;
1163 }
1164
1165 if (verbose)
1166 AliInfo(Form("Equipment # %d (DDL # %d) data has been readed", currentEquipment, currentDDL));
1167
1168
1169 //set up the decoder
1170 fDecoder->SetVerbose(verbose);
1171 fDecoder->SetDataBuffer(fDataBuffer[currentDDL]);
1172 fDecoder->SetPackedDataBuffer(fPackedDataBuffer[currentDDL]);
1173
1174 //start decoding
019f6101 1175 if (fDecoder->Decode((UInt_t *)data, kDataWords) == kTRUE) {
1176 fRawReader->AddMajorErrorLog(kDDLDecoder,Form("DDL # = %d",currentDDL));
1177 AliWarning(Form("Error while decoding DDL # %d: decoder returned with errors", currentDDL));
1178 }
7813bb1a 1179
1180 delete [] data;
1181 data = 0x0;
1182 }
1183
1184 //reset reader
1185 fRawReader->Reset();
1186
1187 if (verbose)
1188 AliInfo("All done");
1189
1190 return kFALSE;
1191
1192}
1193//---------------------------------------------------------------------------
1194void
1195AliTOFRawStream::ResetBuffers()
1196{
19eefa2b 1197 //
1198 // To reset the buffers
1199 //
1200
7813bb1a 1201 for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls("TOF"); iDDL++){
1202 ResetDataBuffer(iDDL);
1203 ResetPackedDataBuffer(iDDL);
1204 }
1205}
1206
1207//---------------------------------------------------------------------------
1208Bool_t
1209AliTOFRawStream::LoadRawDataBuffers(Int_t indexDDL, Int_t verbose)
1210{
19eefa2b 1211 //
1212 // To load the buffers
1213 //
1214
7813bb1a 1215 fTOFrawData->Clear();
1216 fPackedDigits = 0;
1217
1218 if (verbose > 0)
1219 AliInfo(Form("Decoding raw data for DDL # %d ...", indexDDL));
1220
1221 if (DecodeDDL(indexDDL, indexDDL, verbose) != 0){ //decode DDL
019f6101 1222 fRawReader->AddMajorErrorLog(kDDLDecoder,Form("DDL # = %d",indexDDL));
1223 AliWarning(Form("Error while decoding DDL # %d", indexDDL));
7813bb1a 1224 return kTRUE;
1225 }
1226
1227 if (verbose > 0)
1228 AliInfo(Form("Done. %d packed %s been found.", fPackedDataBuffer[indexDDL]->GetEntries(), fPackedDataBuffer[indexDDL]->GetEntries() > 1 ? "hits have" : "hit has"));
1229
1230 AliTOFHitData *hitData; //hit data pointer
1231
1232 if (verbose > 0)
1233 AliInfo("Filling TClonesArray ...");
1234
1235 //loop over DDL packed hits
1236 for (Int_t iHit = 0; iHit < fPackedDataBuffer[indexDDL]->GetEntries(); iHit++){
1237 hitData = fPackedDataBuffer[indexDDL]->GetHit(iHit); //get hit data
1238 Int_t hitACQ = hitData->GetACQ();
1239 Int_t hitPS = hitData->GetPS();
1240 Int_t hitSlotID = hitData->GetSlotID();
1241 Int_t hitChain = hitData->GetChain();
1242 Int_t hitTDC = hitData->GetTDC();
1243 Int_t hitChan = hitData->GetChan();
7813bb1a 1244 Int_t hitTimeBin = hitData->GetTimeBin();
7813bb1a 1245 Int_t hitTOTBin = hitData->GetTOTBin();
1246
0192b95f 1247 Int_t hitLeading = hitData->GetTimeBin();//-1; // adc
bf33f8f0 1248 Int_t hitTrailing = -1;
1249 Int_t hitError = -1;
7813bb1a 1250
1251 TClonesArray &arrayTofRawData = *fTOFrawData;
bf33f8f0 1252 new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(hitSlotID, hitChain, hitTDC, hitChan, hitTimeBin, hitTOTBin, hitLeading, hitTrailing, hitPS, hitACQ, hitError);
7813bb1a 1253 }
1254
1255 if (verbose > 0)
1256 AliInfo("Done.");
1257
1258 if (verbose > 0)
1259 AliInfo("Resetting buffers ...");
1260
1261 fDataBuffer[indexDDL]->Reset();
1262 fPackedDataBuffer[indexDDL]->Reset();
1263
1264 if (verbose > 0)
1265 AliInfo("Done.");
1266
1267 return kFALSE;
1268}
1269