1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 ***************************************************************************/
17 $Log: AliTOFDecoder.cxx,v $
18 Revision 1.4 2007/05/18 13:08:57 decaro
19 Coding convention: RS1 violation -> suppression
21 Revision 1.3 2007/05/08 11:56:05 arcelli
22 improved verbosity in verbose mode (R.Preghenella)
24 Revision 1.2 2007/05/03 11:34:43 decaro
25 Coding convention: RS1 violation -> suppression
27 Revision 1.1 2007/04/27 11:00:32 arcelli
30 author: Roberto Preghenella (R+), preghenella@bo.infn.it
34 //////////////////////////////////////////////////////////////////////
37 // Class for raw data decoding //
40 //////////////////////////////////////////////////////////////////////
44 #include "AliTOFDecoderV2.h"
45 #include "AliTOFTDCHit.h"
47 ClassImp(AliTOFDecoderV2)
49 //_________________________________________________________________
51 AliTOFDecoderV2::AliTOFDecoderV2(AliRawReader *reader) :
63 fDecoderSummaryData(0x0),
67 fChainSummaryData(0x0),
69 fTDCPackedHitBuffer(0x0),
71 fDRMGlobalHeader(0x0),
72 fDRMGlobalTrailer(0x0),
73 fDRMStatusHeader1(0x0),
74 fDRMStatusHeader2(0x0),
75 fDRMStatusHeader3(0x0),
76 fDRMStatusHeader4(0x0),
78 fLTMGlobalHeader(0x0),
79 fLTMGlobalTrailer(0x0),
83 fTRMGlobalHeader(0x0),
84 fTRMGlobalTrailer(0x0),
86 fTRMChainTrailer(0x0),
90 fTRMDiagnosticErrorWord1(0x0),
91 fTRMDiagnosticErrorWord2(0x0),
93 fSpiderTDCPackedHitBuffer(0x0)
97 fRawReader->Select("TOF", 0, 71);
99 fDecoderSummaryData = new AliTOFDecoderSummaryData();
101 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++)
102 fSpiderBufferFull[iChan] = kFALSE;
105 //_________________________________________________________________
107 AliTOFDecoderV2::AliTOFDecoderV2(const AliTOFDecoderV2 &source) :
109 fRawReader(source.fRawReader),
110 fVerbose(source.fVerbose),
111 fLogErrors(source.fLogErrors),
112 fV2718Patch(source.fV2718Patch),
113 fRecoverError(source.fRecoverError),
114 fRecoverErrorThr(source.fRecoverErrorThr),
115 fSpider(source.fSpider),
116 fRunNumber(source.fRunNumber),
117 fEventNumber(source.fEventNumber),
118 fEquipmentID(source.fEquipmentID),
119 fDecoderSummaryData(0x0),
120 fDRMSummaryData(0x0),
121 fLTMSummaryData(0x0),
122 fTRMSummaryData(0x0),
123 fChainSummaryData(0x0),
125 fTDCPackedHitBuffer(0x0),
126 fTDCErrorBuffer(0x0),
127 fDRMGlobalHeader(0x0),
128 fDRMGlobalTrailer(0x0),
129 fDRMStatusHeader1(0x0),
130 fDRMStatusHeader2(0x0),
131 fDRMStatusHeader3(0x0),
132 fDRMStatusHeader4(0x0),
134 fLTMGlobalHeader(0x0),
135 fLTMGlobalTrailer(0x0),
139 fTRMGlobalHeader(0x0),
140 fTRMGlobalTrailer(0x0),
141 fTRMChainHeader(0x0),
142 fTRMChainTrailer(0x0),
144 fTDCUnpackedHit(0x0),
146 fTRMDiagnosticErrorWord1(0x0),
147 fTRMDiagnosticErrorWord2(0x0),
149 fSpiderTDCPackedHitBuffer(0x0)
152 fDecoderSummaryData = new AliTOFDecoderSummaryData(*source.fDecoderSummaryData);
154 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++)
155 fSpiderBufferFull[iChan] = kFALSE;
158 //_________________________________________________________________
161 AliTOFDecoderV2::operator = (const AliTOFDecoderV2 &source)
164 fRawReader = source.fRawReader;
165 fVerbose = source.fVerbose;
166 fLogErrors = source.fLogErrors;
167 fV2718Patch = source.fV2718Patch;
168 fRecoverError = source.fRecoverError;
169 fRecoverErrorThr = source.fRecoverErrorThr;
170 fSpider = source.fSpider;
171 fRunNumber = source.fRunNumber;
172 fEventNumber = source.fEventNumber;
173 fEquipmentID = source.fEquipmentID;
174 *fDecoderSummaryData = *source.fDecoderSummaryData;
178 AliTOFDecoderV2::~AliTOFDecoderV2()
180 delete fDecoderSummaryData;
183 //_________________________________________________________________
186 AliTOFDecoderV2::Decode(UInt_t *rawData, UInt_t nWords)
188 /* main decoding routine.
189 * it loops over nWords 32-bit words
190 * starting at *rawData and decodes them.
191 * it also fills some buffers in order to
192 * have the decoded data available for other
196 //reset decoder summary data
197 fDecoderSummaryData->Reset();
199 //fill decoder summary data
200 fDecoderSummaryData->SetRunNumber(fRunNumber);
201 fDecoderSummaryData->SetEventNumber(fEventNumber);
202 fDecoderSummaryData->SetEquipmentID(fEquipmentID);
203 fDecoderSummaryData->SetInputWords(nWords);
204 fDecoderSummaryData->SetRecoverError(fRecoverError);
205 fDecoderSummaryData->SetSpider(fSpider);
208 AliTOFTDCError error;
211 UShort_t decoderStatus = 0x0;
218 // error warning counter
219 Int_t errorWarning = 0;
221 if (fRecoverError && fVerbose)
222 AliInfo("Recover error option enabled: potentially dangerous!");
224 /*** V2718 patch ***/
226 decoderStatus = decoderStatus | DRM_BIT;
227 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
228 fDecoderSummaryData->SetCurrentDRMID(0x0);
229 fDecoderSummaryData->SetV2718Patch(kTRUE);
230 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
231 fDRMSummaryData->SetHeader(kTRUE);
232 fDRMSummaryData->SetDRMID(0x0);
234 AliInfo("DRM not present: - V2718 patch decoding -");
236 /*** V2718 patch ***/
239 AliInfo("Start decoding");
242 AliInfo("Loop over the data and decode");
245 AliInfo(" St Hex Word \t Decoded Word");
248 for (UInt_t iWord = 0;
250 iWord++, rawData++, fDecoderSummaryData->SetDecodedWords(iWord)){
252 //try to recover error
253 if (fDecoderSummaryData->GetRecoveringError() && fVerbose)
254 AliInfo(Form(" %02x - 0x%08x",decoderStatus,*rawData));
256 //compute CRC with current data
262 switch (*rawData & WORD_TYPE_MASK){
267 switch (*rawData & SLOT_ID_MASK){
269 //DRM global header (slotID=1)
271 //try to recover error
272 if (fDecoderSummaryData->GetRecoveringError())
274 //check decode status
275 if ( decoderStatus != DRM_HEADER_STATUS ){
277 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
278 fDecoderSummaryData->SetErrorDetected(kTRUE);
279 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
281 //try to recover error
283 if (errorWarning > fRecoverErrorThr) {
285 AliInfo("Trying to recover the error: searching for the next header");
286 fDecoderSummaryData->SetRecoveringError(kTRUE);
291 AliInfo("Do not try to recover error yet, go on with decoding process");
295 return(fDecoderSummaryData->GetErrorDetected());
299 //set DRM global header
300 fDRMGlobalHeader = (AliTOFDRMGlobalHeader *)rawData;
303 //fill decoder summary data
304 fDecoderSummaryData->SetCurrentDRMID(fDRMGlobalHeader->GetDRMID());
305 fDecoderSummaryData->SetCurrentSlotID(fDRMGlobalHeader->GetSlotID());
306 //get DRM summary data
307 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
308 //reset DRM summary data
309 fDRMSummaryData->Reset();
310 //fill DRM summary data
311 FillDRMSummaryData(fDRMGlobalHeader);
314 AliInfo(Form(" %02x - 0x%08x \t DRM global header",decoderStatus,*rawData));
315 //change decode status
316 decoderStatus = decoderStatus | DRM_BIT;
317 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
318 //decode DRM status headers
319 for (Int_t i = 0; i < DRM_STATUS_HEADER_WORDS; i++){
325 case 0: //DRM status header 1
326 fDRMStatusHeader1 = (AliTOFDRMStatusHeader1 *)rawData;
327 FillDRMSummaryData(fDRMStatusHeader1);
329 AliInfo(Form(" %02x - 0x%08x \t DRM status header 1",decoderStatus,*rawData));
331 case 1: //DRM status header 2
332 fDRMStatusHeader2 = (AliTOFDRMStatusHeader2 *)rawData;
333 FillDRMSummaryData(fDRMStatusHeader2);
335 AliInfo(Form(" %02x - 0x%08x \t DRM status header 2",decoderStatus,*rawData));
337 case 2: //DRM status header 3
338 fDRMStatusHeader3 = (AliTOFDRMStatusHeader3 *)rawData;
339 FillDRMSummaryData(fDRMStatusHeader3);
341 AliInfo(Form(" %02x - 0x%08x \t DRM status header 3",decoderStatus,*rawData));
343 case 3: //DRM status header 4
344 fDRMStatusHeader4 = (AliTOFDRMStatusHeader4 *)rawData;
345 FillDRMSummaryData(fDRMStatusHeader4);
347 AliInfo(Form(" %02x - 0x%08x \t DRM status header 4",decoderStatus,*rawData));
351 //decode DRM event CRC
355 //remove DRM event CRC from DRM CRC
357 fDRMEventCRC = (AliTOFDRMEventCRC *)rawData;
358 FillDRMSummaryData(fDRMEventCRC);
360 AliInfo(Form(" %02x - 0x%08x \t DRM event CRC",decoderStatus,*rawData));
363 //LTM global header (slotID=2)
366 if (fDecoderSummaryData->GetRecoveringError()){
367 //change decode status
368 decoderStatus = LTM_HEADER_STATUS;
369 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
370 fDecoderSummaryData->SetRecoveringError(kFALSE);
372 AliInfo("LTM global header found: error probably recovered");
374 //check decode status
375 if ( decoderStatus != LTM_HEADER_STATUS ){
377 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
378 fDecoderSummaryData->SetErrorDetected(kTRUE);
379 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
381 //try to recover error
383 if (errorWarning > fRecoverErrorThr) {
385 AliInfo("Trying to recover the error: searching for the next header");
386 fDecoderSummaryData->SetRecoveringError(kTRUE);
391 AliInfo("Do not try to recover error yet, go on with decoding process");
395 return(fDecoderSummaryData->GetErrorDetected());
399 //set LTM global header
400 fLTMGlobalHeader = (AliTOFLTMGlobalHeader *)rawData;
403 //fill decoder summary data
404 fDecoderSummaryData->SetCurrentSlotID(fLTMGlobalHeader->GetSlotID());
405 //get LTM summary data
406 fLTMSummaryData = fDRMSummaryData->GetLTMSummaryData();
407 //reset LTM summary data
408 fLTMSummaryData->Reset();
409 //fill LTM summary data
410 FillLTMSummaryData(fLTMGlobalHeader);
411 //set DRM slot enable mask bit
412 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fLTMGlobalHeader->GetSlotID() - 2);
415 AliInfo(Form(" %02x - 0x%08x \t LTM global header",decoderStatus,*rawData));
416 //change decode status
417 decoderStatus = decoderStatus | LTM_BIT;
418 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
420 //decode LTM PDL data
421 for (Int_t iPDLWord = 0; iPDLWord < LTM_PDL_DATA_WORDS; iPDLWord++){
427 fLTMPDLData = (AliTOFLTMPDLData *)rawData;
428 //fill LTM summary data
429 FillLTMSummaryData(fLTMPDLData, iPDLWord);
432 AliInfo(Form(" %02x - 0x%08x \t LTM PDL data \t\t PDL1=%03d PDL2=%03d PDL3=%03d PDL4=%03d",decoderStatus,*rawData,fLTMPDLData->GetPDLValue1(),fLTMPDLData->GetPDLValue2(),fLTMPDLData->GetPDLValue3(),fLTMPDLData->GetPDLValue4()));
434 //decode LTM ADC data
435 for (Int_t iADCWord = 0; iADCWord < LTM_ADC_DATA_WORDS; iADCWord++){
441 fLTMADCData = (AliTOFLTMADCData *)rawData;
442 //fill LTM summary data
443 FillLTMSummaryData(fLTMADCData, iADCWord);
446 AliInfo(Form(" %02x - 0x%08x \t LTM ADC data \t\t ADC1=%04d ADC2=%04d ADC3=%04d",decoderStatus,*rawData,fLTMADCData->GetADCValue1(),fLTMADCData->GetADCValue2(),fLTMADCData->GetADCValue3()));
449 for (Int_t iORWord = 0; iORWord < LTM_OR_DATA_WORDS; iORWord++){
455 fLTMORData = (AliTOFLTMORData *)rawData;
456 //fill LTM summary data
457 FillLTMSummaryData(fLTMORData, iORWord);
460 AliInfo(Form(" %02x - 0x%08x \t LTM OR data \t\t ADC1=%04d ADC2=%04d ADC3=%04d",decoderStatus,*rawData,fLTMORData->GetORValue1(),fLTMORData->GetORValue2(),fLTMORData->GetORValue3()));
464 //TRM global header (slotID=3-12)
465 case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
467 if (fDecoderSummaryData->GetRecoveringError()){
468 //change decode status
469 decoderStatus = TRM_HEADER_STATUS;
470 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
471 fDecoderSummaryData->SetRecoveringError(kFALSE);
473 AliInfo("TRM global header found: error probably recovered");
475 //check decode status
476 if ( decoderStatus != TRM_HEADER_STATUS ){
478 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
479 fDecoderSummaryData->SetErrorDetected(kTRUE);
480 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
482 //try to recover error
484 if (errorWarning > fRecoverErrorThr) {
486 AliInfo("Trying to recover the error: searching for the next header");
487 fDecoderSummaryData->SetRecoveringError(kTRUE);
492 AliInfo("Do not try to recover error yet, go on with decoding process");
496 return(fDecoderSummaryData->GetErrorDetected());
500 //set TRM global header
501 fTRMGlobalHeader = (AliTOFTRMGlobalHeader *)rawData;
504 //fill decoder summary data
505 fDecoderSummaryData->SetCurrentSlotID(fTRMGlobalHeader->GetSlotID());
506 //get TRM summary data
507 fTRMSummaryData = fDRMSummaryData->GetTRMSummaryData(fTRMGlobalHeader->GetSlotID() - TRM_FIRST_SLOT_ID);
508 //reset TRM summary data
509 fTRMSummaryData->Reset();
510 //fill TRM summary data
511 FillTRMSummaryData(fTRMGlobalHeader);
512 //set DRM slot enable mask bit
513 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fTRMGlobalHeader->GetSlotID() - 2);
516 AliInfo(Form(" %02x - 0x%08x \t TRM global header \t slotID=%02d ACQ=%01d L=%01d",decoderStatus,*rawData,fTRMGlobalHeader->GetSlotID(),fTRMGlobalHeader->GetACQBits(),fTRMGlobalHeader->GetLBit()));
517 //change decode status
518 decoderStatus = decoderStatus | TRM_BIT;
519 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
524 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID in global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
525 fDecoderSummaryData->SetErrorDetected(kTRUE);
526 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
527 //try to recover error
529 if (errorWarning > fRecoverErrorThr) {
531 AliInfo("Trying to recover the error: searching for the next header");
532 fDecoderSummaryData->SetRecoveringError(kTRUE);
537 AliInfo("Do not try to recover error yet, go on with decoding process");
541 return(fDecoderSummaryData->GetErrorDetected());
551 switch (*rawData & SLOT_ID_MASK){
553 //DRM global trailer (slotID=1)
556 if (fDecoderSummaryData->GetRecoveringError()){
557 //change decode status
558 decoderStatus = DRM_TRAILER_STATUS;
559 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
560 fDecoderSummaryData->SetRecoveringError(kFALSE);
562 AliInfo("DRM global trailer found: error probably recovered");
564 //check decode status
565 if ( decoderStatus != DRM_TRAILER_STATUS ){
567 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
568 fDecoderSummaryData->SetErrorDetected(kTRUE);
569 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
571 //try to recover error
573 if (errorWarning > fRecoverErrorThr) {
575 AliInfo("Trying to recover the error: searching for the next header");
576 fDecoderSummaryData->SetRecoveringError(kTRUE);
581 AliInfo("Do not try to recover error yet, go on with decoding process");
585 return(fDecoderSummaryData->GetErrorDetected());
589 //set DRM global trailer
590 fDRMGlobalTrailer = (AliTOFDRMGlobalTrailer *)rawData;
591 //remove global trailer from DRM CRC
593 //fill DRM summary data
594 FillDRMSummaryData(fDRMGlobalTrailer);
595 fDRMSummaryData->SetDecoderCRC(COMPUTE_DRM_CRC(DRMCRC));
598 AliInfo(Form(" %02x - 0x%08x \t DRM global trailer",decoderStatus,*rawData));
599 //change decode status
600 decoderStatus = decoderStatus & ~DRM_BIT;
601 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
604 //LTM global trailer (slotID=2)
606 //try to recover error
607 if (fDecoderSummaryData->GetRecoveringError())
609 //check decode status
610 if ( decoderStatus != LTM_TRAILER_STATUS ){
612 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
613 fDecoderSummaryData->SetErrorDetected(kTRUE);
614 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
616 //try to recover error
618 if (errorWarning > fRecoverErrorThr) {
620 AliInfo("Trying to recover the error: searching for the next header");
621 fDecoderSummaryData->SetRecoveringError(kTRUE);
626 AliInfo("Do not try to recover error yet, go on with decoding process");
630 return(fDecoderSummaryData->GetErrorDetected());
634 //set LTM global trailer
635 fLTMGlobalTrailer = (AliTOFLTMGlobalTrailer *)rawData;
636 //remove global trailer from LTM CRC
638 //fill LTM summary data
639 FillLTMSummaryData(fLTMGlobalTrailer);
640 fLTMSummaryData->SetDecoderCRC(COMPUTE_LTM_CRC(LTMCRC));
643 AliInfo(Form(" %02x - 0x%08x \t LTM global trailer",decoderStatus,*rawData));
644 //change decode status
645 decoderStatus = decoderStatus & ~LTM_BIT;
646 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
649 //TRM global trailer (slotID=15)
651 //try to recover error
652 if (fDecoderSummaryData->GetRecoveringError())
654 //check decode status
655 if ( decoderStatus != TRM_TRAILER_STATUS ){
657 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
658 fDecoderSummaryData->SetErrorDetected(kTRUE);
659 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
661 //try to recover error
663 if (errorWarning > fRecoverErrorThr) {
665 AliInfo("Trying to recover the error: searching for the next header");
666 fDecoderSummaryData->SetRecoveringError(kTRUE);
671 AliInfo("Do not try to recover error yet, go on with decoding process");
675 return(fDecoderSummaryData->GetErrorDetected());
679 //set TRM global trailer
680 fTRMGlobalTrailer = (AliTOFTRMGlobalTrailer *)rawData;
681 //remove global trailer from TRM CRC
683 //fill TRM summary data
684 FillTRMSummaryData(fTRMGlobalTrailer);
685 fTRMSummaryData->SetDecoderCRC(COMPUTE_TRM_CRC(TRMCRC));
688 AliInfo(Form(" %02x - 0x%08x \t TRM global trailer \t CRC=%04d eventCounter=%04d",decoderStatus,*rawData,fTRMGlobalTrailer->GetEventCRC(),fTRMGlobalTrailer->GetEventCounter()));
689 //change decode status
690 decoderStatus = decoderStatus & ~TRM_BIT;
691 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
695 //try to recover error
696 if (fDecoderSummaryData->GetRecoveringError())
699 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
700 fDecoderSummaryData->SetErrorDetected(kTRUE);
701 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
703 //try to recover error
706 AliInfo("Trying to recover the error: searching for the next header");
707 fDecoderSummaryData->SetRecoveringError(kTRUE);
710 return(fDecoderSummaryData->GetErrorDetected());
717 //try to recover error
718 if (fDecoderSummaryData->GetRecoveringError())
720 //check decode status
721 if ( decoderStatus != CHAIN_A_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError() ){
723 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
724 fDecoderSummaryData->SetErrorDetected(kTRUE);
725 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
727 //try to recover error
729 if (errorWarning > fRecoverErrorThr) {
731 AliInfo("Trying to recover the error: searching for the next header");
732 fDecoderSummaryData->SetRecoveringError(kTRUE);
737 AliInfo("Do not try to recover error yet, go on with decoding process");
741 return(fDecoderSummaryData->GetErrorDetected());
745 //set TRM chain header
746 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
747 //fill decoder summary data
748 fDecoderSummaryData->SetCurrentChain(0);
749 //get chain summary data
750 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(0);
751 //reset chain summary data
752 fChainSummaryData->Reset();
753 //fill chain summary data
754 FillChainSummaryData(fTRMChainHeader);
756 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
757 //reset tdc hit buffer
758 fTDCHitBuffer->Reset();
759 //get tdc packed hit buffer
760 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
761 //reset tdc packed hit buffer
762 fTDCPackedHitBuffer->Reset();
763 //get tdc error buffer
764 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
765 //reset tdc error buffer
766 fTDCErrorBuffer->Reset();
769 AliInfo(Form(" %02x - 0x%08x \t TRM chain A header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,0,fTRMChainHeader->GetBunchID()));
770 //change decode status
771 decoderStatus = decoderStatus | CHAIN_A_BIT;
772 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
778 case CHAIN_A_TRAILER:
780 //try to recover error
781 if (fDecoderSummaryData->GetRecoveringError())
783 //check decode status
784 if ( decoderStatus != CHAIN_A_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
786 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
787 fDecoderSummaryData->SetErrorDetected(kTRUE);
788 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
790 //try to recover error
792 if (errorWarning > fRecoverErrorThr) {
794 AliInfo("Trying to recover the error: searching for the next header");
795 fDecoderSummaryData->SetRecoveringError(kTRUE);
800 AliInfo("Do not try to recover error yet, go on with decoding process");
804 return(fDecoderSummaryData->GetErrorDetected());
808 //set TRM chain trailer
809 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
810 //fill chain summary data
811 FillChainSummaryData(fTRMChainTrailer);
814 AliInfo(Form(" %02x - 0x%08x \t TRM chain A trailer",decoderStatus,*rawData));
815 //change decode status
816 decoderStatus = decoderStatus & ~CHAIN_A_BIT;
817 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
822 //try to recover error
823 if (fDecoderSummaryData->GetRecoveringError())
825 //check decode status
826 if ( decoderStatus != CHAIN_B_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
828 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
829 fDecoderSummaryData->SetErrorDetected(kTRUE);
830 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
832 //try to recover error
834 if (errorWarning > fRecoverErrorThr) {
836 AliInfo("Trying to recover the error: searching for the next header");
837 fDecoderSummaryData->SetRecoveringError(kTRUE);
842 AliInfo("Do not try to recover error yet, go on with decoding process");
846 return(fDecoderSummaryData->GetErrorDetected());
850 //set TRM chain header
851 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
852 //fill decoder summary data
853 fDecoderSummaryData->SetCurrentChain(1);
854 //get chain summary data
855 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(1);
856 //reset chain summary data
857 fChainSummaryData->Reset();
858 //fill chain summary data
859 FillChainSummaryData(fTRMChainHeader);
861 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
862 //reset tdc hit buffer
863 fTDCHitBuffer->Reset();
864 //get tdc packed hit buffer
865 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
866 //reset tdc packed hit buffer
867 fTDCPackedHitBuffer->Reset();
868 //get tdc error buffer
869 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
870 //reset tdc error buffer
871 fTDCErrorBuffer->Reset();
874 AliInfo(Form(" %02x - 0x%08x \t TRM chain B header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,1,fTRMChainHeader->GetBunchID()));
875 //change decode status
876 decoderStatus = decoderStatus | CHAIN_B_BIT;
877 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
883 case CHAIN_B_TRAILER:
885 //try to recover error
886 if (fDecoderSummaryData->GetRecoveringError())
888 //check decode status
889 if ( decoderStatus != CHAIN_B_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
891 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
892 fDecoderSummaryData->SetErrorDetected(kTRUE);
893 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
895 //try to recover error
897 if (errorWarning > fRecoverErrorThr) {
899 AliInfo("Trying to recover the error: searching for the next header");
900 fDecoderSummaryData->SetRecoveringError(kTRUE);
905 AliInfo("Do not try to recover error yet, go on with decoding process");
909 return(fDecoderSummaryData->GetErrorDetected());
913 //set TRM chain trailer
914 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
915 //fill chain summary data
916 FillChainSummaryData(fTRMChainTrailer);
919 AliInfo(Form(" %02x - 0x%08x \t TRM chain B trailer",decoderStatus,*rawData));
920 //change decode status
921 decoderStatus = decoderStatus & ~CHAIN_B_BIT;
922 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
927 //try to recover error
928 if (fDecoderSummaryData->GetRecoveringError())
930 //decode TRM TDC error
931 fTRMTDCError = (AliTOFTRMTDCError *)rawData;
932 //check diagnostic word
933 if (fTRMTDCError->GetTDCID() == 15) {
935 AliInfo(Form(" %02x - 0x%08x \t Diagnostic error word",decoderStatus,*rawData));
939 error.SetErrorFlags(fTRMTDCError->GetErrorFlags());
940 error.SetTDCID(fTRMTDCError->GetTDCID());
941 //fill TDC error buffer
942 fTDCErrorBuffer->Add(error);
944 AliInfo(Form(" %02x - 0x%08x \t TDC error",decoderStatus,*rawData));
949 //try to recover error
950 if (fDecoderSummaryData->GetRecoveringError())
953 AliInfo(Form(" %02x - 0x%08x \t Filler",decoderStatus,*rawData));
958 //try to recover error
959 if (fDecoderSummaryData->GetRecoveringError())
961 //check decode status
962 if ( decoderStatus != CHAIN_A_TDC_HIT_STATUS &&
963 decoderStatus != CHAIN_B_TDC_HIT_STATUS && !fDecoderSummaryData->GetRecoveringError()){
965 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected or unknown word (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
966 fDecoderSummaryData->SetErrorDetected(kTRUE);
967 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
969 //try to recover error
971 if (errorWarning > fRecoverErrorThr) {
973 AliInfo("Trying to recover the error: searching for the next header");
974 fDecoderSummaryData->SetRecoveringError(kTRUE);
979 AliInfo("Do not try to recover error yet, go on with decoding process");
983 return(fDecoderSummaryData->GetErrorDetected());
989 switch (fTRMSummaryData->GetACQBits()){
991 case PACKING_ENABLED_ACQ:
992 //decode TDC packed/unpacked hit
993 fTDCPackedHit = (AliTOFTDCPackedHit *)rawData;
994 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
996 hit.SetChan(fTDCUnpackedHit->GetChan());
997 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
998 hit.SetEBit(fTDCUnpackedHit->GetEBit());
999 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1001 switch (hit.GetPSBits()){
1002 //packed hit or overflow hit
1003 case PACKED_HIT_PS: case TOT_OVF_HIT_PS:
1004 hit.SetHitTime(fTDCPackedHit->GetHitTime());
1005 hit.SetTOTWidth(fTDCPackedHit->GetTOTWidth());
1007 fTDCHitBuffer->Add(hit);
1008 fTDCPackedHitBuffer->Add(hit);
1011 case LEADING_HIT_PS:
1012 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1015 fTDCHitBuffer->Add(hit);
1016 fTDCPackedHitBuffer->Add(hit);
1019 case TRAILING_HIT_PS:
1020 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1023 fTDCHitBuffer->Add(hit);
1026 //end switch PS bits
1029 switch (hit.GetPSBits()){
1031 AliInfo(Form(" %02x - 0x%08x \t TDC hit [packed] \t PS=%1d TDC=%1d chan=%1d TOT=%3d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetTOTWidth(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1033 case LEADING_HIT_PS:
1034 AliInfo(Form(" %02x - 0x%08x \t TDC hit [orp.lead] \t PS=%1d TDC=%1d chan=%1d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1036 case TRAILING_HIT_PS:
1037 AliInfo(Form(" %02x - 0x%08x \t TDC hit [orp.trai] \t PS=%1d TDC=%1d chan=%1d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1039 case TOT_OVF_HIT_PS:
1040 AliInfo(Form(" %02x - 0x%08x \t TDC hit [TOT ovfl] \t PS=%1d TDC=%1d chan=%1d TOT=%3d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetTOTWidth(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1045 case LEADING_ONLY_ACQ: case TRAILING_ONLY_ACQ:
1046 //decode TDC unpacked hit
1047 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1049 hit.SetChan(fTDCUnpackedHit->GetChan());
1050 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1051 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1052 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1053 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1056 fTDCHitBuffer->Add(hit);
1059 switch (hit.GetPSBits()){
1060 case LEADING_HIT_PS:
1061 AliInfo(Form(" %02x - 0x%08x \t TDC hit [leading] \t PS=%1d TDC=%1d chan=%1d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1063 case TRAILING_HIT_PS:
1064 AliInfo(Form(" %02x - 0x%08x \t TDC hit [trailing] \t PS=%1d TDC=%1d chan=%1d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1068 case PACKING_DISABLED_ACQ:
1069 //decode TDC unpacked hit
1070 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1072 hit.SetChan(fTDCUnpackedHit->GetChan());
1073 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1074 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1075 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1076 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1079 fTDCHitBuffer->Add(hit);
1082 switch (hit.GetPSBits()){
1083 case LEADING_HIT_PS:
1084 AliInfo(Form(" %02x - 0x%08x \t TDC hit [leading] \t PS=%1d TDC=%1d chan=%1d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1086 case TRAILING_HIT_PS:
1087 AliInfo(Form(" %02x - 0x%08x \t TDC hit [trailing] \t PS=%1d TDC=%1d chan=%1d time=%4d (%7.1f ns)",decoderStatus,*rawData,hit.GetPSBits(),hit.GetTDCID(),hit.GetChan(),hit.GetHitTime(),hit.GetHitTime()*TIME_BIN_WIDTH));
1095 //end switch TRM ACQ
1102 //end equipment data loop
1105 AliInfo("End of data loop");
1111 /*** V2718 patch ***/
1113 decoderStatus = decoderStatus & ~DRM_BIT;
1114 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
1115 fDRMSummaryData->SetTrailer(kTRUE);
1116 fDRMSummaryData->SetSlotEnableMask(fDRMSummaryData->GetDecoderSlotEnableMask());
1117 fDRMSummaryData->SetCBit(1);
1118 fDRMSummaryData->SetLocalEventCounter(fTRMSummaryData->GetEventCounter());
1120 AliInfo("DRM was not present: - V2718 end patch decoding -");
1122 /*** V2718 patch ***/
1125 AliInfo("Decoder is exiting succesfully.");
1127 return(fDecoderSummaryData->GetErrorDetected());
1130 //_________________________________________________________________
1133 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMGlobalHeader *DRMGlobalHeader)
1135 fDRMSummaryData->SetHeader(kTRUE);
1136 fDRMSummaryData->SetSlotID(DRMGlobalHeader->GetSlotID());
1137 fDRMSummaryData->SetEventWords(DRMGlobalHeader->GetEventWords());
1138 fDRMSummaryData->SetDRMID(DRMGlobalHeader->GetDRMID());
1141 //_________________________________________________________________
1144 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMGlobalTrailer *DRMGlobalTrailer)
1146 fDRMSummaryData->SetTrailer(kTRUE);
1147 fDRMSummaryData->SetLocalEventCounter(DRMGlobalTrailer->GetLocalEventCounter());
1150 //_________________________________________________________________
1153 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMStatusHeader1 *DRMStatusHeader1)
1155 fDRMSummaryData->SetPartecipatingSlotID(DRMStatusHeader1->GetPartecipatingSlotID());
1156 fDRMSummaryData->SetCBit(DRMStatusHeader1->GetCBit());
1157 fDRMSummaryData->SetVersID(DRMStatusHeader1->GetVersID());
1158 fDRMSummaryData->SetDRMhSize(DRMStatusHeader1->GetDRMhSize());
1161 //_________________________________________________________________
1164 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMStatusHeader2 *DRMStatusHeader2)
1166 fDRMSummaryData->SetSlotEnableMask(DRMStatusHeader2->GetSlotEnableMask());
1167 fDRMSummaryData->SetFaultID(DRMStatusHeader2->GetFaultID());
1168 fDRMSummaryData->SetRTOBit(DRMStatusHeader2->GetRTOBit());
1171 //_________________________________________________________________
1174 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMStatusHeader3 *DRMStatusHeader3)
1176 fDRMSummaryData->SetL0BCID(DRMStatusHeader3->GetL0BCID());
1177 fDRMSummaryData->SetRunTimeInfo(DRMStatusHeader3->GetRunTimeInfo());
1180 //_________________________________________________________________
1183 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMStatusHeader4 *DRMStatusHeader4)
1185 fDRMSummaryData->SetTemperature(DRMStatusHeader4->GetTemperature());
1186 fDRMSummaryData->SetACKBit(DRMStatusHeader4->GetACKBit());
1187 fDRMSummaryData->SetSensAD(DRMStatusHeader4->GetSensAD());
1190 //_________________________________________________________________
1193 AliTOFDecoderV2::FillDRMSummaryData(AliTOFDRMEventCRC *DRMEventCRC)
1195 fDRMSummaryData->SetEventCRC(DRMEventCRC->GetEventCRC());
1198 //_________________________________________________________________
1201 AliTOFDecoderV2::FillLTMSummaryData(AliTOFLTMGlobalHeader *LTMGlobalHeader)
1203 fLTMSummaryData->SetHeader(kTRUE);
1204 fLTMSummaryData->SetSlotID(LTMGlobalHeader->GetSlotID());
1205 fLTMSummaryData->SetEventWords(LTMGlobalHeader->GetEventWords());
1206 fLTMSummaryData->SetCBit(LTMGlobalHeader->GetCBit());
1207 fLTMSummaryData->SetFault(LTMGlobalHeader->GetFault());
1210 //_________________________________________________________________
1213 AliTOFDecoderV2::FillLTMSummaryData(AliTOFLTMGlobalTrailer *LTMGlobalTrailer)
1215 fLTMSummaryData->SetTrailer(kTRUE);
1216 fLTMSummaryData->SetEventCRC(LTMGlobalTrailer->GetEventCRC());
1217 fLTMSummaryData->SetEventNumber(LTMGlobalTrailer->GetEventNumber());
1220 //_________________________________________________________________
1223 AliTOFDecoderV2::FillLTMSummaryData(AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord)
1225 fLTMSummaryData->SetPDL(4 * PDLWord + 0, LTMPDLData->GetPDLValue1());
1226 fLTMSummaryData->SetPDL(4 * PDLWord + 1, LTMPDLData->GetPDLValue2());
1227 fLTMSummaryData->SetPDL(4 * PDLWord + 2, LTMPDLData->GetPDLValue3());
1228 fLTMSummaryData->SetPDL(4 * PDLWord + 3, LTMPDLData->GetPDLValue4());
1231 //_________________________________________________________________
1234 AliTOFDecoderV2::FillLTMSummaryData(AliTOFLTMADCData *LTMADCData, Int_t ADCWord)
1236 fLTMSummaryData->SetADC(3 * ADCWord + 0, LTMADCData->GetADCValue1());
1237 fLTMSummaryData->SetADC(3 * ADCWord + 1, LTMADCData->GetADCValue2());
1238 fLTMSummaryData->SetADC(3 * ADCWord + 2, LTMADCData->GetADCValue3());
1241 //_________________________________________________________________
1244 AliTOFDecoderV2::FillLTMSummaryData(AliTOFLTMORData *LTMORData, Int_t ORWord)
1246 fLTMSummaryData->SetOR(3 * ORWord + 0, LTMORData->GetORValue1());
1247 fLTMSummaryData->SetOR(3 * ORWord + 1, LTMORData->GetORValue2());
1248 fLTMSummaryData->SetOR(3 * ORWord + 2, LTMORData->GetORValue3());
1251 //_________________________________________________________________
1254 AliTOFDecoderV2::FillTRMSummaryData(AliTOFTRMGlobalHeader *TRMGlobalHeader)
1256 fTRMSummaryData->SetHeader(kTRUE);
1257 fTRMSummaryData->SetSlotID(TRMGlobalHeader->GetSlotID());
1258 fTRMSummaryData->SetEventWords(TRMGlobalHeader->GetEventWords());
1259 fTRMSummaryData->SetACQBits(TRMGlobalHeader->GetACQBits());
1260 fTRMSummaryData->SetLBit(TRMGlobalHeader->GetLBit());
1261 fTRMSummaryData->SetEBit(TRMGlobalHeader->GetEBit());
1264 //_________________________________________________________________
1267 AliTOFDecoderV2::FillTRMSummaryData(AliTOFTRMGlobalTrailer *TRMGlobalTrailer)
1269 fTRMSummaryData->SetTrailer(kTRUE);
1270 fTRMSummaryData->SetEventCRC(TRMGlobalTrailer->GetEventCRC());
1271 fTRMSummaryData->SetEventCounter(TRMGlobalTrailer->GetEventCounter());
1274 //_________________________________________________________________
1277 AliTOFDecoderV2::FillChainSummaryData(AliTOFTRMChainHeader *TRMChainHeader)
1279 fChainSummaryData->SetHeader(kTRUE);
1280 switch (*(UInt_t *)TRMChainHeader & WORD_TYPE_MASK){
1281 case CHAIN_A_HEADER:
1282 fChainSummaryData->SetChain(0);
1284 case CHAIN_B_HEADER:
1285 fChainSummaryData->SetChain(1);
1288 fChainSummaryData->SetBunchID(TRMChainHeader->GetBunchID());
1289 fChainSummaryData->SetPB24Temp(TRMChainHeader->GetPB24Temp());
1290 fChainSummaryData->SetPB24ID(TRMChainHeader->GetPB24ID());
1291 fChainSummaryData->SetTSBit(TRMChainHeader->GetTSBit());
1294 //_________________________________________________________________
1297 AliTOFDecoderV2::FillChainSummaryData(AliTOFTRMChainTrailer *TRMChainTrailer)
1299 fChainSummaryData->SetTrailer(kTRUE);
1300 fChainSummaryData->SetStatus(TRMChainTrailer->GetStatus());
1301 fChainSummaryData->SetEventCounter(TRMChainTrailer->GetEventCounter());
1304 //_________________________________________________________________
1307 AliTOFDecoderV2::ResetSpider()
1311 AliInfo("Reset signal received, empty and reset buffer");
1312 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1313 if (fSpiderBufferFull[iChan]) {
1315 AliInfo(Form("Spider buffer is full for channel %d", iChan));
1316 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1318 fSpiderBufferFull[iChan] = kFALSE;
1325 AliTOFDecoderV2::Spider(AliTOFTDCHit &hit){
1328 AliInfo("Hit has been received from decode main routine");
1331 if (fSpiderTDCID != hit.GetTDCID()){
1333 AliInfo("Data coming from a new TDC, empty and reset buffer");
1334 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1335 if (fSpiderBufferFull[iChan])
1336 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1337 fSpiderBufferFull[iChan] = kFALSE;
1339 fSpiderTDCPackedHitBuffer = fTDCPackedHitBuffer;
1340 fSpiderTDCID = hit.GetTDCID();
1344 switch(hit.GetPSBits()){
1346 case LEADING_HIT_PS:
1347 //check buffer status
1348 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1349 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()]); //buffered hit is orphane
1350 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1352 AliInfo("Leading hit and buffer full, buffered hit is a orphane leading hit");
1354 else{ //buffer empty
1355 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1356 fSpiderBufferFull[hit.GetChan()] = kTRUE; //set buffer full
1360 case TRAILING_HIT_PS:
1361 //check buffer status
1362 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1363 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()] << hit); //pack hits (Leading << Trailing) and save
1364 fSpiderBufferFull[hit.GetChan()] = kFALSE; //unset buffer full
1366 AliInfo("Trailing hit and buffer full, pack leading and trailing hit");
1368 else{ //buffer empty
1371 AliInfo("Trailing hit and buffer empty, trow trailing hit away");
1378 //_________________________________________________________________
1381 AliTOFDecoderV2::DecodeNext()
1385 if (!fRawReader || !fRawReader->ReadHeader())
1388 const Int_t size = fRawReader->GetDataSize();
1389 UChar_t *data = new UChar_t[size];
1390 if (fRawReader->ReadNext(data, size) != 1) {
1395 /* decode equipment data */
1396 SetEquipmentID(fRawReader->GetEquipmentId());
1397 Decode((UInt_t *)data, size / 4);