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 "AliTOFRawDataFormat.h"
45 #include "AliTOFDecoderV2.h"
46 #include "AliTOFTDCHit.h"
47 #include "AliTOFDecoderSummaryData.h"
48 #include "AliTOFDRMSummaryData.h"
49 #include "AliTOFLTMSummaryData.h"
50 #include "AliTOFTRMSummaryData.h"
51 #include "AliTOFChainSummaryData.h"
52 #include "AliTOFTDCHitBuffer.h"
53 #include "AliTOFTDCErrorBuffer.h"
54 #include "AliRawDataHeader.h"
56 ClassImp(AliTOFDecoderV2)
58 //_________________________________________________________________
60 AliTOFDecoderV2::AliTOFDecoderV2(AliRawReader *reader) :
72 fDecoderSummaryData(0x0),
76 fChainSummaryData(0x0),
78 fTDCPackedHitBuffer(0x0),
80 fDRMGlobalHeader(0x0),
81 fDRMGlobalTrailer(0x0),
82 fDRMStatusHeader1(0x0),
83 fDRMStatusHeader2(0x0),
84 fDRMStatusHeader3(0x0),
85 fDRMStatusHeader4(0x0),
87 fLTMGlobalHeader(0x0),
88 fLTMGlobalTrailer(0x0),
92 fTRMGlobalHeader(0x0),
93 fTRMGlobalTrailer(0x0),
95 fTRMChainTrailer(0x0),
99 fTRMDiagnosticErrorWord1(0x0),
100 fTRMDiagnosticErrorWord2(0x0),
102 fSpiderTDCPackedHitBuffer(0x0)
104 //default constructor
106 fRawReader->Select("TOF", 0, 71);
108 fDecoderSummaryData = new AliTOFDecoderSummaryData();
110 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++)
111 fSpiderBufferFull[iChan] = kFALSE;
114 //_________________________________________________________________
116 AliTOFDecoderV2::AliTOFDecoderV2(const AliTOFDecoderV2 &source) :
118 fRawReader(source.fRawReader),
119 fVerbose(source.fVerbose),
120 fLogErrors(source.fLogErrors),
121 fV2718Patch(source.fV2718Patch),
122 fRecoverError(source.fRecoverError),
123 fRecoverErrorThr(source.fRecoverErrorThr),
124 fSpider(source.fSpider),
125 fRunNumber(source.fRunNumber),
126 fEventNumber(source.fEventNumber),
127 fEquipmentID(source.fEquipmentID),
128 fDecoderSummaryData(0x0),
129 fDRMSummaryData(0x0),
130 fLTMSummaryData(0x0),
131 fTRMSummaryData(0x0),
132 fChainSummaryData(0x0),
134 fTDCPackedHitBuffer(0x0),
135 fTDCErrorBuffer(0x0),
136 fDRMGlobalHeader(0x0),
137 fDRMGlobalTrailer(0x0),
138 fDRMStatusHeader1(0x0),
139 fDRMStatusHeader2(0x0),
140 fDRMStatusHeader3(0x0),
141 fDRMStatusHeader4(0x0),
143 fLTMGlobalHeader(0x0),
144 fLTMGlobalTrailer(0x0),
148 fTRMGlobalHeader(0x0),
149 fTRMGlobalTrailer(0x0),
150 fTRMChainHeader(0x0),
151 fTRMChainTrailer(0x0),
153 fTDCUnpackedHit(0x0),
155 fTRMDiagnosticErrorWord1(0x0),
156 fTRMDiagnosticErrorWord2(0x0),
158 fSpiderTDCPackedHitBuffer(0x0)
161 fDecoderSummaryData = new AliTOFDecoderSummaryData(*source.fDecoderSummaryData);
163 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++)
164 fSpiderBufferFull[iChan] = kFALSE;
167 //_________________________________________________________________
170 AliTOFDecoderV2::operator = (const AliTOFDecoderV2 &source)
173 fRawReader = source.fRawReader;
174 fVerbose = source.fVerbose;
175 fLogErrors = source.fLogErrors;
176 fV2718Patch = source.fV2718Patch;
177 fRecoverError = source.fRecoverError;
178 fRecoverErrorThr = source.fRecoverErrorThr;
179 fSpider = source.fSpider;
180 fRunNumber = source.fRunNumber;
181 fEventNumber = source.fEventNumber;
182 fEquipmentID = source.fEquipmentID;
183 *fDecoderSummaryData = *source.fDecoderSummaryData;
187 AliTOFDecoderV2::~AliTOFDecoderV2()
189 if (fDecoderSummaryData)
190 delete fDecoderSummaryData;
193 //_________________________________________________________________
196 AliTOFDecoderV2::Decode(UInt_t *rawData, UInt_t nWords)
198 /* main decoding routine.
199 * it loops over nWords 32-bit words
200 * starting at *rawData and decodes them.
201 * it also fills some buffers in order to
202 * have the decoded data available for other
206 //reset decoder summary data
207 fDecoderSummaryData->Reset();
209 //fill decoder summary data
210 fDecoderSummaryData->SetRunNumber(fRunNumber);
211 fDecoderSummaryData->SetEventNumber(fEventNumber);
212 fDecoderSummaryData->SetEquipmentID(fEquipmentID);
213 fDecoderSummaryData->SetInputWords(nWords);
214 fDecoderSummaryData->SetRecoverError(fRecoverError);
215 fDecoderSummaryData->SetSpider(fSpider);
218 AliTOFTDCError error;
221 UShort_t decoderStatus = 0x0;
228 // error warning counter
229 Int_t errorWarning = 0;
231 if (fRecoverError && fVerbose)
232 AliInfo("Recover error option enabled: potentially dangerous!");
234 /*** V2718 patch ***/
236 decoderStatus = decoderStatus | DRM_BIT;
237 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
238 fDecoderSummaryData->SetCurrentDRMID(0x0);
239 fDecoderSummaryData->SetV2718Patch(kTRUE);
240 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
241 fDRMSummaryData->SetHeader(kTRUE);
242 fDRMSummaryData->SetDRMID(0x0);
244 AliInfo("DRM not present: - V2718 patch decoding -");
246 /*** V2718 patch ***/
249 AliInfo("Start decoding");
252 AliInfo("Loop over the data and decode");
255 AliInfo(" St Hex Word \t Decoded Word");
258 for (UInt_t iWord = 0;
260 iWord++, rawData++, fDecoderSummaryData->SetDecodedWords(iWord)){
262 //try to recover error
263 if (fDecoderSummaryData->GetRecoveringError() && fVerbose)
264 AliInfo(Form(" %02x - 0x%08x",decoderStatus,*rawData));
266 //compute CRC with current data
272 switch (*rawData & WORD_TYPE_MASK){
277 switch (*rawData & SLOT_ID_MASK){
279 //DRM global header (slotID=1)
281 //try to recover error
282 if (fDecoderSummaryData->GetRecoveringError())
284 //check decode status
285 if ( decoderStatus != DRM_HEADER_STATUS ){
287 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
288 fDecoderSummaryData->SetErrorDetected(kTRUE);
289 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
291 //try to recover error
293 if (errorWarning > fRecoverErrorThr) {
295 AliInfo("Trying to recover the error: searching for the next header");
296 fDecoderSummaryData->SetRecoveringError(kTRUE);
301 AliInfo("Do not try to recover error yet, go on with decoding process");
305 return(fDecoderSummaryData->GetErrorDetected());
309 //set DRM global header
310 fDRMGlobalHeader = (AliTOFDRMGlobalHeader *)rawData;
313 //fill decoder summary data
314 fDecoderSummaryData->SetCurrentDRMID(fDRMGlobalHeader->GetDRMID());
315 fDecoderSummaryData->SetCurrentSlotID(fDRMGlobalHeader->GetSlotID());
316 //get DRM summary data
317 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
318 //reset DRM summary data
319 fDRMSummaryData->Reset();
320 //fill DRM summary data
321 FillDRMSummaryData(fDRMGlobalHeader);
324 AliInfo(Form(" %02x - 0x%08x \t DRM global header",decoderStatus,*rawData));
325 //change decode status
326 decoderStatus = decoderStatus | DRM_BIT;
327 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
328 //decode DRM status headers
329 for (Int_t i = 0; i < DRM_STATUS_HEADER_WORDS; i++){
335 case 0: //DRM status header 1
336 fDRMStatusHeader1 = (AliTOFDRMStatusHeader1 *)rawData;
337 FillDRMSummaryData(fDRMStatusHeader1);
339 AliInfo(Form(" %02x - 0x%08x \t DRM status header 1",decoderStatus,*rawData));
341 case 1: //DRM status header 2
342 fDRMStatusHeader2 = (AliTOFDRMStatusHeader2 *)rawData;
343 FillDRMSummaryData(fDRMStatusHeader2);
345 AliInfo(Form(" %02x - 0x%08x \t DRM status header 2",decoderStatus,*rawData));
347 case 2: //DRM status header 3
348 fDRMStatusHeader3 = (AliTOFDRMStatusHeader3 *)rawData;
349 FillDRMSummaryData(fDRMStatusHeader3);
351 AliInfo(Form(" %02x - 0x%08x \t DRM status header 3",decoderStatus,*rawData));
353 case 3: //DRM status header 4
354 fDRMStatusHeader4 = (AliTOFDRMStatusHeader4 *)rawData;
355 FillDRMSummaryData(fDRMStatusHeader4);
357 AliInfo(Form(" %02x - 0x%08x \t DRM status header 4",decoderStatus,*rawData));
361 //decode DRM event CRC
365 //remove DRM event CRC from DRM CRC
367 fDRMEventCRC = (AliTOFDRMEventCRC *)rawData;
368 FillDRMSummaryData(fDRMEventCRC);
370 AliInfo(Form(" %02x - 0x%08x \t DRM event CRC",decoderStatus,*rawData));
373 //LTM global header (slotID=2)
376 if (fDecoderSummaryData->GetRecoveringError()){
377 //change decode status
378 decoderStatus = LTM_HEADER_STATUS;
379 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
380 fDecoderSummaryData->SetRecoveringError(kFALSE);
382 AliInfo("LTM global header found: error probably recovered");
384 //check decode status
385 if ( decoderStatus != LTM_HEADER_STATUS ){
387 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
388 fDecoderSummaryData->SetErrorDetected(kTRUE);
389 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
391 //try to recover error
393 if (errorWarning > fRecoverErrorThr) {
395 AliInfo("Trying to recover the error: searching for the next header");
396 fDecoderSummaryData->SetRecoveringError(kTRUE);
401 AliInfo("Do not try to recover error yet, go on with decoding process");
405 return(fDecoderSummaryData->GetErrorDetected());
409 //set LTM global header
410 fLTMGlobalHeader = (AliTOFLTMGlobalHeader *)rawData;
413 //fill decoder summary data
414 fDecoderSummaryData->SetCurrentSlotID(fLTMGlobalHeader->GetSlotID());
415 //get LTM summary data
416 fLTMSummaryData = fDRMSummaryData->GetLTMSummaryData();
417 //reset LTM summary data
418 fLTMSummaryData->Reset();
419 //fill LTM summary data
420 FillLTMSummaryData(fLTMGlobalHeader);
421 //set DRM slot enable mask bit
422 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fLTMGlobalHeader->GetSlotID() - 2);
425 AliInfo(Form(" %02x - 0x%08x \t LTM global header",decoderStatus,*rawData));
426 //change decode status
427 decoderStatus = decoderStatus | LTM_BIT;
428 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
430 //decode LTM PDL data
431 for (Int_t iPDLWord = 0; iPDLWord < LTM_PDL_DATA_WORDS; iPDLWord++){
437 fLTMPDLData = (AliTOFLTMPDLData *)rawData;
438 //fill LTM summary data
439 FillLTMSummaryData(fLTMPDLData, iPDLWord);
442 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()));
444 //decode LTM ADC data
445 for (Int_t iADCWord = 0; iADCWord < LTM_ADC_DATA_WORDS; iADCWord++){
451 fLTMADCData = (AliTOFLTMADCData *)rawData;
452 //fill LTM summary data
453 FillLTMSummaryData(fLTMADCData, iADCWord);
456 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()));
459 for (Int_t iORWord = 0; iORWord < LTM_OR_DATA_WORDS; iORWord++){
465 fLTMORData = (AliTOFLTMORData *)rawData;
466 //fill LTM summary data
467 FillLTMSummaryData(fLTMORData, iORWord);
470 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()));
474 //TRM global header (slotID=3-12)
475 case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
477 if (fDecoderSummaryData->GetRecoveringError()){
478 //change decode status
479 decoderStatus = TRM_HEADER_STATUS;
480 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
481 fDecoderSummaryData->SetRecoveringError(kFALSE);
483 AliInfo("TRM global header found: error probably recovered");
485 //check decode status
486 if ( decoderStatus != TRM_HEADER_STATUS ){
488 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
489 fDecoderSummaryData->SetErrorDetected(kTRUE);
490 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
492 //try to recover error
494 if (errorWarning > fRecoverErrorThr) {
496 AliInfo("Trying to recover the error: searching for the next header");
497 fDecoderSummaryData->SetRecoveringError(kTRUE);
502 AliInfo("Do not try to recover error yet, go on with decoding process");
506 return(fDecoderSummaryData->GetErrorDetected());
510 //set TRM global header
511 fTRMGlobalHeader = (AliTOFTRMGlobalHeader *)rawData;
514 //fill decoder summary data
515 fDecoderSummaryData->SetCurrentSlotID(fTRMGlobalHeader->GetSlotID());
516 //get TRM summary data
517 fTRMSummaryData = fDRMSummaryData->GetTRMSummaryData(fTRMGlobalHeader->GetSlotID() - TRM_FIRST_SLOT_ID);
518 //reset TRM summary data
519 fTRMSummaryData->Reset();
520 //fill TRM summary data
521 FillTRMSummaryData(fTRMGlobalHeader);
522 //set DRM slot enable mask bit
523 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fTRMGlobalHeader->GetSlotID() - 2);
526 AliInfo(Form(" %02x - 0x%08x \t TRM global header \t slotID=%02d ACQ=%01d L=%01d",decoderStatus,*rawData,fTRMGlobalHeader->GetSlotID(),fTRMGlobalHeader->GetACQBits(),fTRMGlobalHeader->GetLBit()));
527 //change decode status
528 decoderStatus = decoderStatus | TRM_BIT;
529 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
534 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID in global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
535 fDecoderSummaryData->SetErrorDetected(kTRUE);
536 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
537 //try to recover error
539 if (errorWarning > fRecoverErrorThr) {
541 AliInfo("Trying to recover the error: searching for the next header");
542 fDecoderSummaryData->SetRecoveringError(kTRUE);
547 AliInfo("Do not try to recover error yet, go on with decoding process");
551 return(fDecoderSummaryData->GetErrorDetected());
561 switch (*rawData & SLOT_ID_MASK){
563 //DRM global trailer (slotID=1)
566 if (fDecoderSummaryData->GetRecoveringError()){
567 //change decode status
568 decoderStatus = DRM_TRAILER_STATUS;
569 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
570 fDecoderSummaryData->SetRecoveringError(kFALSE);
572 AliInfo("DRM global trailer found: error probably recovered");
574 //check decode status
575 if ( decoderStatus != DRM_TRAILER_STATUS ){
577 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
578 fDecoderSummaryData->SetErrorDetected(kTRUE);
579 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
581 //try to recover error
583 if (errorWarning > fRecoverErrorThr) {
585 AliInfo("Trying to recover the error: searching for the next header");
586 fDecoderSummaryData->SetRecoveringError(kTRUE);
591 AliInfo("Do not try to recover error yet, go on with decoding process");
595 return(fDecoderSummaryData->GetErrorDetected());
599 //set DRM global trailer
600 fDRMGlobalTrailer = (AliTOFDRMGlobalTrailer *)rawData;
601 //remove global trailer from DRM CRC
603 //fill DRM summary data
604 FillDRMSummaryData(fDRMGlobalTrailer);
605 fDRMSummaryData->SetDecoderCRC(COMPUTE_DRM_CRC(drmCRC));
608 AliInfo(Form(" %02x - 0x%08x \t DRM global trailer",decoderStatus,*rawData));
609 //change decode status
610 decoderStatus = decoderStatus & ~DRM_BIT;
611 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
614 //LTM global trailer (slotID=2)
616 //try to recover error
617 if (fDecoderSummaryData->GetRecoveringError())
619 //check decode status
620 if ( decoderStatus != LTM_TRAILER_STATUS ){
622 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
623 fDecoderSummaryData->SetErrorDetected(kTRUE);
624 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
626 //try to recover error
628 if (errorWarning > fRecoverErrorThr) {
630 AliInfo("Trying to recover the error: searching for the next header");
631 fDecoderSummaryData->SetRecoveringError(kTRUE);
636 AliInfo("Do not try to recover error yet, go on with decoding process");
640 return(fDecoderSummaryData->GetErrorDetected());
644 //set LTM global trailer
645 fLTMGlobalTrailer = (AliTOFLTMGlobalTrailer *)rawData;
646 //remove global trailer from LTM CRC
648 //fill LTM summary data
649 FillLTMSummaryData(fLTMGlobalTrailer);
650 fLTMSummaryData->SetDecoderCRC(COMPUTE_LTM_CRC(ltmCRC));
653 AliInfo(Form(" %02x - 0x%08x \t LTM global trailer",decoderStatus,*rawData));
654 //change decode status
655 decoderStatus = decoderStatus & ~LTM_BIT;
656 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
659 //TRM global trailer (slotID=15)
661 //try to recover error
662 if (fDecoderSummaryData->GetRecoveringError())
664 //check decode status
665 if ( decoderStatus != TRM_TRAILER_STATUS ){
667 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
668 fDecoderSummaryData->SetErrorDetected(kTRUE);
669 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
671 //try to recover error
673 if (errorWarning > fRecoverErrorThr) {
675 AliInfo("Trying to recover the error: searching for the next header");
676 fDecoderSummaryData->SetRecoveringError(kTRUE);
681 AliInfo("Do not try to recover error yet, go on with decoding process");
685 return(fDecoderSummaryData->GetErrorDetected());
689 //set TRM global trailer
690 fTRMGlobalTrailer = (AliTOFTRMGlobalTrailer *)rawData;
691 //remove global trailer from TRM CRC
693 //fill TRM summary data
694 FillTRMSummaryData(fTRMGlobalTrailer);
695 fTRMSummaryData->SetDecoderCRC(COMPUTE_TRM_CRC(trmCRC));
698 AliInfo(Form(" %02x - 0x%08x \t TRM global trailer \t CRC=%04d eventCounter=%04d",decoderStatus,*rawData,fTRMGlobalTrailer->GetEventCRC(),fTRMGlobalTrailer->GetEventCounter()));
699 //change decode status
700 decoderStatus = decoderStatus & ~TRM_BIT;
701 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
705 //try to recover error
706 if (fDecoderSummaryData->GetRecoveringError())
709 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
710 fDecoderSummaryData->SetErrorDetected(kTRUE);
711 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
713 //try to recover error
716 AliInfo("Trying to recover the error: searching for the next header");
717 fDecoderSummaryData->SetRecoveringError(kTRUE);
720 return(fDecoderSummaryData->GetErrorDetected());
727 //try to recover error
728 if (fDecoderSummaryData->GetRecoveringError())
730 //check decode status
731 if ( decoderStatus != CHAIN_A_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError() ){
733 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
734 fDecoderSummaryData->SetErrorDetected(kTRUE);
735 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
737 //try to recover error
739 if (errorWarning > fRecoverErrorThr) {
741 AliInfo("Trying to recover the error: searching for the next header");
742 fDecoderSummaryData->SetRecoveringError(kTRUE);
747 AliInfo("Do not try to recover error yet, go on with decoding process");
751 return(fDecoderSummaryData->GetErrorDetected());
755 //set TRM chain header
756 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
757 //fill decoder summary data
758 fDecoderSummaryData->SetCurrentChain(0);
759 //get chain summary data
760 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(0);
761 //reset chain summary data
762 fChainSummaryData->Reset();
763 //fill chain summary data
764 FillChainSummaryData(fTRMChainHeader);
766 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
767 //reset tdc hit buffer
768 fTDCHitBuffer->Reset();
769 //get tdc packed hit buffer
770 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
771 //reset tdc packed hit buffer
772 fTDCPackedHitBuffer->Reset();
773 //get tdc error buffer
774 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
775 //reset tdc error buffer
776 fTDCErrorBuffer->Reset();
779 AliInfo(Form(" %02x - 0x%08x \t TRM chain A header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,0,fTRMChainHeader->GetBunchID()));
780 //change decode status
781 decoderStatus = decoderStatus | CHAIN_A_BIT;
782 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
788 case CHAIN_A_TRAILER:
790 //try to recover error
791 if (fDecoderSummaryData->GetRecoveringError())
793 //check decode status
794 if ( decoderStatus != CHAIN_A_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
796 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
797 fDecoderSummaryData->SetErrorDetected(kTRUE);
798 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
800 //try to recover error
802 if (errorWarning > fRecoverErrorThr) {
804 AliInfo("Trying to recover the error: searching for the next header");
805 fDecoderSummaryData->SetRecoveringError(kTRUE);
810 AliInfo("Do not try to recover error yet, go on with decoding process");
814 return(fDecoderSummaryData->GetErrorDetected());
818 //set TRM chain trailer
819 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
820 //fill chain summary data
821 FillChainSummaryData(fTRMChainTrailer);
824 AliInfo(Form(" %02x - 0x%08x \t TRM chain A trailer",decoderStatus,*rawData));
825 //change decode status
826 decoderStatus = decoderStatus & ~CHAIN_A_BIT;
827 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
832 //try to recover error
833 if (fDecoderSummaryData->GetRecoveringError())
835 //check decode status
836 if ( decoderStatus != CHAIN_B_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
838 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
839 fDecoderSummaryData->SetErrorDetected(kTRUE);
840 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
842 //try to recover error
844 if (errorWarning > fRecoverErrorThr) {
846 AliInfo("Trying to recover the error: searching for the next header");
847 fDecoderSummaryData->SetRecoveringError(kTRUE);
852 AliInfo("Do not try to recover error yet, go on with decoding process");
856 return(fDecoderSummaryData->GetErrorDetected());
860 //set TRM chain header
861 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
862 //fill decoder summary data
863 fDecoderSummaryData->SetCurrentChain(1);
864 //get chain summary data
865 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(1);
866 //reset chain summary data
867 fChainSummaryData->Reset();
868 //fill chain summary data
869 FillChainSummaryData(fTRMChainHeader);
871 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
872 //reset tdc hit buffer
873 fTDCHitBuffer->Reset();
874 //get tdc packed hit buffer
875 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
876 //reset tdc packed hit buffer
877 fTDCPackedHitBuffer->Reset();
878 //get tdc error buffer
879 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
880 //reset tdc error buffer
881 fTDCErrorBuffer->Reset();
884 AliInfo(Form(" %02x - 0x%08x \t TRM chain B header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,1,fTRMChainHeader->GetBunchID()));
885 //change decode status
886 decoderStatus = decoderStatus | CHAIN_B_BIT;
887 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
893 case CHAIN_B_TRAILER:
895 //try to recover error
896 if (fDecoderSummaryData->GetRecoveringError())
898 //check decode status
899 if ( decoderStatus != CHAIN_B_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
901 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
902 fDecoderSummaryData->SetErrorDetected(kTRUE);
903 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
905 //try to recover error
907 if (errorWarning > fRecoverErrorThr) {
909 AliInfo("Trying to recover the error: searching for the next header");
910 fDecoderSummaryData->SetRecoveringError(kTRUE);
915 AliInfo("Do not try to recover error yet, go on with decoding process");
919 return(fDecoderSummaryData->GetErrorDetected());
923 //set TRM chain trailer
924 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
925 //fill chain summary data
926 FillChainSummaryData(fTRMChainTrailer);
929 AliInfo(Form(" %02x - 0x%08x \t TRM chain B trailer",decoderStatus,*rawData));
930 //change decode status
931 decoderStatus = decoderStatus & ~CHAIN_B_BIT;
932 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
937 //try to recover error
938 if (fDecoderSummaryData->GetRecoveringError())
940 //decode TRM TDC error
941 fTRMTDCError = (AliTOFTRMTDCError *)rawData;
942 //check diagnostic word
943 if (fTRMTDCError->GetTDCID() == 15) {
945 AliInfo(Form(" %02x - 0x%08x \t Diagnostic error word",decoderStatus,*rawData));
949 error.SetErrorFlags(fTRMTDCError->GetErrorFlags());
950 error.SetTDCID(fTRMTDCError->GetTDCID());
951 //fill TDC error buffer
952 fTDCErrorBuffer->Add(error);
954 AliInfo(Form(" %02x - 0x%08x \t TDC error",decoderStatus,*rawData));
959 //try to recover error
960 if (fDecoderSummaryData->GetRecoveringError())
963 AliInfo(Form(" %02x - 0x%08x \t Filler",decoderStatus,*rawData));
968 //try to recover error
969 if (fDecoderSummaryData->GetRecoveringError())
971 //check decode status
972 if ( decoderStatus != CHAIN_A_TDC_HIT_STATUS &&
973 decoderStatus != CHAIN_B_TDC_HIT_STATUS && !fDecoderSummaryData->GetRecoveringError()){
975 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected or unknown word (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
976 fDecoderSummaryData->SetErrorDetected(kTRUE);
977 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
979 //try to recover error
981 if (errorWarning > fRecoverErrorThr) {
983 AliInfo("Trying to recover the error: searching for the next header");
984 fDecoderSummaryData->SetRecoveringError(kTRUE);
989 AliInfo("Do not try to recover error yet, go on with decoding process");
993 return(fDecoderSummaryData->GetErrorDetected());
999 switch (fTRMSummaryData->GetACQBits()){
1001 case PACKING_ENABLED_ACQ:
1002 //decode TDC packed/unpacked hit
1003 fTDCPackedHit = (AliTOFTDCPackedHit *)rawData;
1004 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1006 hit.SetChan(fTDCUnpackedHit->GetChan());
1007 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1008 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1009 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1011 switch (hit.GetPSBits()){
1012 //packed hit or overflow hit
1013 case PACKED_HIT_PS: case TOT_OVF_HIT_PS:
1014 hit.SetHitTime(fTDCPackedHit->GetHitTime());
1015 hit.SetTOTWidth(fTDCPackedHit->GetTOTWidth());
1017 fTDCHitBuffer->Add(hit);
1018 fTDCPackedHitBuffer->Add(hit);
1021 case LEADING_HIT_PS:
1022 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1025 fTDCHitBuffer->Add(hit);
1026 fTDCPackedHitBuffer->Add(hit);
1029 case TRAILING_HIT_PS:
1030 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1033 fTDCHitBuffer->Add(hit);
1036 //end switch PS bits
1039 switch (hit.GetPSBits()){
1041 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));
1043 case LEADING_HIT_PS:
1044 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));
1046 case TRAILING_HIT_PS:
1047 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));
1049 case TOT_OVF_HIT_PS:
1050 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));
1055 case LEADING_ONLY_ACQ: case TRAILING_ONLY_ACQ:
1056 //decode TDC unpacked hit
1057 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1059 hit.SetChan(fTDCUnpackedHit->GetChan());
1060 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1061 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1062 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1063 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1066 fTDCHitBuffer->Add(hit);
1069 switch (hit.GetPSBits()){
1070 case LEADING_HIT_PS:
1071 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));
1073 case TRAILING_HIT_PS:
1074 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));
1078 case PACKING_DISABLED_ACQ:
1079 //decode TDC unpacked hit
1080 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1082 hit.SetChan(fTDCUnpackedHit->GetChan());
1083 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1084 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1085 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1086 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1089 fTDCHitBuffer->Add(hit);
1092 switch (hit.GetPSBits()){
1093 case LEADING_HIT_PS:
1094 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));
1096 case TRAILING_HIT_PS:
1097 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));
1105 //end switch TRM ACQ
1112 //end equipment data loop
1115 AliInfo("End of data loop");
1121 /*** V2718 patch ***/
1123 decoderStatus = decoderStatus & ~DRM_BIT;
1124 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
1125 fDRMSummaryData->SetTrailer(kTRUE);
1126 fDRMSummaryData->SetSlotEnableMask(fDRMSummaryData->GetDecoderSlotEnableMask());
1127 fDRMSummaryData->SetCBit(1);
1128 fDRMSummaryData->SetLocalEventCounter(fTRMSummaryData->GetEventCounter());
1130 AliInfo("DRM was not present: - V2718 end patch decoding -");
1132 /*** V2718 patch ***/
1135 AliInfo("Decoder is exiting succesfully.");
1137 return(fDecoderSummaryData->GetErrorDetected());
1140 //_________________________________________________________________
1143 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalHeader *DRMGlobalHeader)
1147 * FillDRMSummaryData
1151 fDRMSummaryData->SetHeader(kTRUE);
1152 fDRMSummaryData->SetSlotID(DRMGlobalHeader->GetSlotID());
1153 fDRMSummaryData->SetEventWords(DRMGlobalHeader->GetEventWords());
1154 fDRMSummaryData->SetDRMID(DRMGlobalHeader->GetDRMID());
1157 //_________________________________________________________________
1160 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalTrailer *DRMGlobalTrailer)
1164 * FillDRMSummaryData
1168 fDRMSummaryData->SetTrailer(kTRUE);
1169 fDRMSummaryData->SetLocalEventCounter(DRMGlobalTrailer->GetLocalEventCounter());
1172 //_________________________________________________________________
1175 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader1 *DRMStatusHeader1)
1179 * FillDRMSummaryData
1183 fDRMSummaryData->SetPartecipatingSlotID(DRMStatusHeader1->GetPartecipatingSlotID());
1184 fDRMSummaryData->SetCBit(DRMStatusHeader1->GetCBit());
1185 fDRMSummaryData->SetVersID(DRMStatusHeader1->GetVersID());
1186 fDRMSummaryData->SetDRMhSize(DRMStatusHeader1->GetDRMhSize());
1189 //_________________________________________________________________
1192 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader2 *DRMStatusHeader2)
1196 * FillDRMSummaryData
1200 fDRMSummaryData->SetSlotEnableMask(DRMStatusHeader2->GetSlotEnableMask());
1201 fDRMSummaryData->SetFaultID(DRMStatusHeader2->GetFaultID());
1202 fDRMSummaryData->SetRTOBit(DRMStatusHeader2->GetRTOBit());
1205 //_________________________________________________________________
1208 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader3 *DRMStatusHeader3)
1212 * FillDRMSummaryData
1216 fDRMSummaryData->SetL0BCID(DRMStatusHeader3->GetL0BCID());
1217 fDRMSummaryData->SetRunTimeInfo(DRMStatusHeader3->GetRunTimeInfo());
1220 //_________________________________________________________________
1223 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader4 *DRMStatusHeader4)
1227 * FillDRMSummaryData
1231 fDRMSummaryData->SetTemperature(DRMStatusHeader4->GetTemperature());
1232 fDRMSummaryData->SetACKBit(DRMStatusHeader4->GetACKBit());
1233 fDRMSummaryData->SetSensAD(DRMStatusHeader4->GetSensAD());
1236 //_________________________________________________________________
1239 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMEventCRC *DRMEventCRC)
1243 * FillDRMSummaryData
1247 fDRMSummaryData->SetEventCRC(DRMEventCRC->GetEventCRC());
1250 //_________________________________________________________________
1253 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalHeader *LTMGlobalHeader)
1257 * FillLTMSummaryData
1261 fLTMSummaryData->SetHeader(kTRUE);
1262 fLTMSummaryData->SetSlotID(LTMGlobalHeader->GetSlotID());
1263 fLTMSummaryData->SetEventWords(LTMGlobalHeader->GetEventWords());
1264 fLTMSummaryData->SetCBit(LTMGlobalHeader->GetCBit());
1265 fLTMSummaryData->SetFault(LTMGlobalHeader->GetFault());
1268 //_________________________________________________________________
1271 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalTrailer *LTMGlobalTrailer)
1275 * FillLTMSummaryData
1279 fLTMSummaryData->SetTrailer(kTRUE);
1280 fLTMSummaryData->SetEventCRC(LTMGlobalTrailer->GetEventCRC());
1281 fLTMSummaryData->SetEventNumber(LTMGlobalTrailer->GetEventNumber());
1284 //_________________________________________________________________
1287 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord)
1291 * FillLTMSummaryData
1295 fLTMSummaryData->SetPDL(4 * PDLWord + 0, LTMPDLData->GetPDLValue1());
1296 fLTMSummaryData->SetPDL(4 * PDLWord + 1, LTMPDLData->GetPDLValue2());
1297 fLTMSummaryData->SetPDL(4 * PDLWord + 2, LTMPDLData->GetPDLValue3());
1298 fLTMSummaryData->SetPDL(4 * PDLWord + 3, LTMPDLData->GetPDLValue4());
1301 //_________________________________________________________________
1304 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMADCData *LTMADCData, Int_t ADCWord)
1308 * FillLTMSummaryData
1312 fLTMSummaryData->SetADC(3 * ADCWord + 0, LTMADCData->GetADCValue1());
1313 fLTMSummaryData->SetADC(3 * ADCWord + 1, LTMADCData->GetADCValue2());
1314 fLTMSummaryData->SetADC(3 * ADCWord + 2, LTMADCData->GetADCValue3());
1317 //_________________________________________________________________
1320 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMORData *LTMORData, Int_t ORWord)
1324 * FillLTMSummaryData
1328 fLTMSummaryData->SetOR(3 * ORWord + 0, LTMORData->GetORValue1());
1329 fLTMSummaryData->SetOR(3 * ORWord + 1, LTMORData->GetORValue2());
1330 fLTMSummaryData->SetOR(3 * ORWord + 2, LTMORData->GetORValue3());
1333 //_________________________________________________________________
1336 AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalHeader *TRMGlobalHeader)
1340 * FillTRMSummaryData
1344 fTRMSummaryData->SetHeader(kTRUE);
1345 fTRMSummaryData->SetSlotID(TRMGlobalHeader->GetSlotID());
1346 fTRMSummaryData->SetEventWords(TRMGlobalHeader->GetEventWords());
1347 fTRMSummaryData->SetACQBits(TRMGlobalHeader->GetACQBits());
1348 fTRMSummaryData->SetLBit(TRMGlobalHeader->GetLBit());
1349 fTRMSummaryData->SetEBit(TRMGlobalHeader->GetEBit());
1352 //_________________________________________________________________
1355 AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalTrailer *TRMGlobalTrailer)
1359 * FillTRMSummaryData
1363 fTRMSummaryData->SetTrailer(kTRUE);
1364 fTRMSummaryData->SetEventCRC(TRMGlobalTrailer->GetEventCRC());
1365 fTRMSummaryData->SetEventCounter(TRMGlobalTrailer->GetEventCounter());
1368 //_________________________________________________________________
1371 AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainHeader *TRMChainHeader)
1375 * FillChainSummaryData
1379 fChainSummaryData->SetHeader(kTRUE);
1380 switch (*(UInt_t *)TRMChainHeader & WORD_TYPE_MASK){
1381 case CHAIN_A_HEADER:
1382 fChainSummaryData->SetChain(0);
1384 case CHAIN_B_HEADER:
1385 fChainSummaryData->SetChain(1);
1388 fChainSummaryData->SetBunchID(TRMChainHeader->GetBunchID());
1389 fChainSummaryData->SetPB24Temp(TRMChainHeader->GetPB24Temp());
1390 fChainSummaryData->SetPB24ID(TRMChainHeader->GetPB24ID());
1391 fChainSummaryData->SetTSBit(TRMChainHeader->GetTSBit());
1394 //_________________________________________________________________
1397 AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainTrailer *TRMChainTrailer)
1401 * FillChainSummaryData
1405 fChainSummaryData->SetTrailer(kTRUE);
1406 fChainSummaryData->SetStatus(TRMChainTrailer->GetStatus());
1407 fChainSummaryData->SetEventCounter(TRMChainTrailer->GetEventCounter());
1410 //_________________________________________________________________
1413 AliTOFDecoderV2::ResetSpider()
1417 AliInfo("Reset signal received, empty and reset buffer");
1418 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1419 if (fSpiderBufferFull[iChan]) {
1421 AliInfo(Form("Spider buffer is full for channel %d", iChan));
1422 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1424 fSpiderBufferFull[iChan] = kFALSE;
1431 AliTOFDecoderV2::Spider(AliTOFTDCHit &hit){
1434 AliInfo("Hit has been received from decode main routine");
1437 if (fSpiderTDCID != hit.GetTDCID()){
1439 AliInfo("Data coming from a new TDC, empty and reset buffer");
1440 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1441 if (fSpiderBufferFull[iChan])
1442 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1443 fSpiderBufferFull[iChan] = kFALSE;
1445 fSpiderTDCPackedHitBuffer = fTDCPackedHitBuffer;
1446 fSpiderTDCID = hit.GetTDCID();
1450 switch(hit.GetPSBits()){
1452 case LEADING_HIT_PS:
1453 //check buffer status
1454 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1455 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()]); //buffered hit is orphane
1456 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1458 AliInfo("Leading hit and buffer full, buffered hit is a orphane leading hit");
1460 else{ //buffer empty
1461 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1462 fSpiderBufferFull[hit.GetChan()] = kTRUE; //set buffer full
1466 case TRAILING_HIT_PS:
1467 //check buffer status
1468 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1469 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()] << hit); //pack hits (Leading << Trailing) and save
1470 fSpiderBufferFull[hit.GetChan()] = kFALSE; //unset buffer full
1472 AliInfo("Trailing hit and buffer full, pack leading and trailing hit");
1474 else{ //buffer empty
1477 AliInfo("Trailing hit and buffer empty, trow trailing hit away");
1484 //_________________________________________________________________
1487 AliTOFDecoderV2::DecodeNext()
1491 if (!fRawReader || !fRawReader->ReadHeader())
1494 const Int_t size = fRawReader->GetDataSize();
1495 UChar_t *data = new UChar_t[size];
1496 if (fRawReader->ReadNext(data, size) != 1) {
1501 /* decode equipment data */
1502 SetEquipmentID(fRawReader->GetEquipmentId());
1503 Decode((UInt_t *)data, size / 4);