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 delete fDecoderSummaryData;
192 //_________________________________________________________________
195 AliTOFDecoderV2::Decode(UInt_t *rawData, UInt_t nWords)
197 /* main decoding routine.
198 * it loops over nWords 32-bit words
199 * starting at *rawData and decodes them.
200 * it also fills some buffers in order to
201 * have the decoded data available for other
205 //reset decoder summary data
206 fDecoderSummaryData->Reset();
208 //fill decoder summary data
209 fDecoderSummaryData->SetRunNumber(fRunNumber);
210 fDecoderSummaryData->SetEventNumber(fEventNumber);
211 fDecoderSummaryData->SetEquipmentID(fEquipmentID);
212 fDecoderSummaryData->SetInputWords(nWords);
213 fDecoderSummaryData->SetRecoverError(fRecoverError);
214 fDecoderSummaryData->SetSpider(fSpider);
217 AliTOFTDCError error;
220 UShort_t decoderStatus = 0x0;
227 // error warning counter
228 Int_t errorWarning = 0;
230 if (fRecoverError && fVerbose)
231 AliInfo("Recover error option enabled: potentially dangerous!");
233 /*** V2718 patch ***/
235 decoderStatus = decoderStatus | DRM_BIT;
236 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
237 fDecoderSummaryData->SetCurrentDRMID(0x0);
238 fDecoderSummaryData->SetV2718Patch(kTRUE);
239 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
240 fDRMSummaryData->SetHeader(kTRUE);
241 fDRMSummaryData->SetDRMID(0x0);
243 AliInfo("DRM not present: - V2718 patch decoding -");
245 /*** V2718 patch ***/
248 AliInfo("Start decoding");
251 AliInfo("Loop over the data and decode");
254 AliInfo(" St Hex Word \t Decoded Word");
257 for (UInt_t iWord = 0;
259 iWord++, rawData++, fDecoderSummaryData->SetDecodedWords(iWord)){
261 //try to recover error
262 if (fDecoderSummaryData->GetRecoveringError() && fVerbose)
263 AliInfo(Form(" %02x - 0x%08x",decoderStatus,*rawData));
265 //compute CRC with current data
271 switch (*rawData & WORD_TYPE_MASK){
276 switch (*rawData & SLOT_ID_MASK){
278 //DRM global header (slotID=1)
280 //try to recover error
281 if (fDecoderSummaryData->GetRecoveringError())
283 //check decode status
284 if ( decoderStatus != DRM_HEADER_STATUS ){
286 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
287 fDecoderSummaryData->SetErrorDetected(kTRUE);
288 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
290 //try to recover error
292 if (errorWarning > fRecoverErrorThr) {
294 AliInfo("Trying to recover the error: searching for the next header");
295 fDecoderSummaryData->SetRecoveringError(kTRUE);
300 AliInfo("Do not try to recover error yet, go on with decoding process");
304 return(fDecoderSummaryData->GetErrorDetected());
308 //set DRM global header
309 fDRMGlobalHeader = (AliTOFDRMGlobalHeader *)rawData;
312 //fill decoder summary data
313 fDecoderSummaryData->SetCurrentDRMID(fDRMGlobalHeader->GetDRMID());
314 fDecoderSummaryData->SetCurrentSlotID(fDRMGlobalHeader->GetSlotID());
315 //get DRM summary data
316 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
317 //reset DRM summary data
318 fDRMSummaryData->Reset();
319 //fill DRM summary data
320 FillDRMSummaryData(fDRMGlobalHeader);
323 AliInfo(Form(" %02x - 0x%08x \t DRM global header",decoderStatus,*rawData));
324 //change decode status
325 decoderStatus = decoderStatus | DRM_BIT;
326 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
327 //decode DRM status headers
328 for (Int_t i = 0; i < DRM_STATUS_HEADER_WORDS; i++){
334 case 0: //DRM status header 1
335 fDRMStatusHeader1 = (AliTOFDRMStatusHeader1 *)rawData;
336 FillDRMSummaryData(fDRMStatusHeader1);
338 AliInfo(Form(" %02x - 0x%08x \t DRM status header 1",decoderStatus,*rawData));
340 case 1: //DRM status header 2
341 fDRMStatusHeader2 = (AliTOFDRMStatusHeader2 *)rawData;
342 FillDRMSummaryData(fDRMStatusHeader2);
344 AliInfo(Form(" %02x - 0x%08x \t DRM status header 2",decoderStatus,*rawData));
346 case 2: //DRM status header 3
347 fDRMStatusHeader3 = (AliTOFDRMStatusHeader3 *)rawData;
348 FillDRMSummaryData(fDRMStatusHeader3);
350 AliInfo(Form(" %02x - 0x%08x \t DRM status header 3",decoderStatus,*rawData));
352 case 3: //DRM status header 4
353 fDRMStatusHeader4 = (AliTOFDRMStatusHeader4 *)rawData;
354 FillDRMSummaryData(fDRMStatusHeader4);
356 AliInfo(Form(" %02x - 0x%08x \t DRM status header 4",decoderStatus,*rawData));
360 //decode DRM event CRC
364 //remove DRM event CRC from DRM CRC
366 fDRMEventCRC = (AliTOFDRMEventCRC *)rawData;
367 FillDRMSummaryData(fDRMEventCRC);
369 AliInfo(Form(" %02x - 0x%08x \t DRM event CRC",decoderStatus,*rawData));
372 //LTM global header (slotID=2)
375 if (fDecoderSummaryData->GetRecoveringError()){
376 //change decode status
377 decoderStatus = LTM_HEADER_STATUS;
378 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
379 fDecoderSummaryData->SetRecoveringError(kFALSE);
381 AliInfo("LTM global header found: error probably recovered");
383 //check decode status
384 if ( decoderStatus != LTM_HEADER_STATUS ){
386 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
387 fDecoderSummaryData->SetErrorDetected(kTRUE);
388 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
390 //try to recover error
392 if (errorWarning > fRecoverErrorThr) {
394 AliInfo("Trying to recover the error: searching for the next header");
395 fDecoderSummaryData->SetRecoveringError(kTRUE);
400 AliInfo("Do not try to recover error yet, go on with decoding process");
404 return(fDecoderSummaryData->GetErrorDetected());
408 //set LTM global header
409 fLTMGlobalHeader = (AliTOFLTMGlobalHeader *)rawData;
412 //fill decoder summary data
413 fDecoderSummaryData->SetCurrentSlotID(fLTMGlobalHeader->GetSlotID());
414 //get LTM summary data
415 fLTMSummaryData = fDRMSummaryData->GetLTMSummaryData();
416 //reset LTM summary data
417 fLTMSummaryData->Reset();
418 //fill LTM summary data
419 FillLTMSummaryData(fLTMGlobalHeader);
420 //set DRM slot enable mask bit
421 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fLTMGlobalHeader->GetSlotID() - 2);
424 AliInfo(Form(" %02x - 0x%08x \t LTM global header",decoderStatus,*rawData));
425 //change decode status
426 decoderStatus = decoderStatus | LTM_BIT;
427 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
429 //decode LTM PDL data
430 for (Int_t iPDLWord = 0; iPDLWord < LTM_PDL_DATA_WORDS; iPDLWord++){
436 fLTMPDLData = (AliTOFLTMPDLData *)rawData;
437 //fill LTM summary data
438 FillLTMSummaryData(fLTMPDLData, iPDLWord);
441 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()));
443 //decode LTM ADC data
444 for (Int_t iADCWord = 0; iADCWord < LTM_ADC_DATA_WORDS; iADCWord++){
450 fLTMADCData = (AliTOFLTMADCData *)rawData;
451 //fill LTM summary data
452 FillLTMSummaryData(fLTMADCData, iADCWord);
455 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()));
458 for (Int_t iORWord = 0; iORWord < LTM_OR_DATA_WORDS; iORWord++){
464 fLTMORData = (AliTOFLTMORData *)rawData;
465 //fill LTM summary data
466 FillLTMSummaryData(fLTMORData, iORWord);
469 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()));
473 //TRM global header (slotID=3-12)
474 case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
476 if (fDecoderSummaryData->GetRecoveringError()){
477 //change decode status
478 decoderStatus = TRM_HEADER_STATUS;
479 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
480 fDecoderSummaryData->SetRecoveringError(kFALSE);
482 AliInfo("TRM global header found: error probably recovered");
484 //check decode status
485 if ( decoderStatus != TRM_HEADER_STATUS ){
487 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
488 fDecoderSummaryData->SetErrorDetected(kTRUE);
489 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
491 //try to recover error
493 if (errorWarning > fRecoverErrorThr) {
495 AliInfo("Trying to recover the error: searching for the next header");
496 fDecoderSummaryData->SetRecoveringError(kTRUE);
501 AliInfo("Do not try to recover error yet, go on with decoding process");
505 return(fDecoderSummaryData->GetErrorDetected());
509 //set TRM global header
510 fTRMGlobalHeader = (AliTOFTRMGlobalHeader *)rawData;
513 //fill decoder summary data
514 fDecoderSummaryData->SetCurrentSlotID(fTRMGlobalHeader->GetSlotID());
515 //get TRM summary data
516 fTRMSummaryData = fDRMSummaryData->GetTRMSummaryData(fTRMGlobalHeader->GetSlotID() - TRM_FIRST_SLOT_ID);
517 //reset TRM summary data
518 fTRMSummaryData->Reset();
519 //fill TRM summary data
520 FillTRMSummaryData(fTRMGlobalHeader);
521 //set DRM slot enable mask bit
522 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fTRMGlobalHeader->GetSlotID() - 2);
525 AliInfo(Form(" %02x - 0x%08x \t TRM global header \t slotID=%02d ACQ=%01d L=%01d",decoderStatus,*rawData,fTRMGlobalHeader->GetSlotID(),fTRMGlobalHeader->GetACQBits(),fTRMGlobalHeader->GetLBit()));
526 //change decode status
527 decoderStatus = decoderStatus | TRM_BIT;
528 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
533 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID in global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
534 fDecoderSummaryData->SetErrorDetected(kTRUE);
535 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
536 //try to recover error
538 if (errorWarning > fRecoverErrorThr) {
540 AliInfo("Trying to recover the error: searching for the next header");
541 fDecoderSummaryData->SetRecoveringError(kTRUE);
546 AliInfo("Do not try to recover error yet, go on with decoding process");
550 return(fDecoderSummaryData->GetErrorDetected());
560 switch (*rawData & SLOT_ID_MASK){
562 //DRM global trailer (slotID=1)
565 if (fDecoderSummaryData->GetRecoveringError()){
566 //change decode status
567 decoderStatus = DRM_TRAILER_STATUS;
568 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
569 fDecoderSummaryData->SetRecoveringError(kFALSE);
571 AliInfo("DRM global trailer found: error probably recovered");
573 //check decode status
574 if ( decoderStatus != DRM_TRAILER_STATUS ){
576 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
577 fDecoderSummaryData->SetErrorDetected(kTRUE);
578 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
580 //try to recover error
582 if (errorWarning > fRecoverErrorThr) {
584 AliInfo("Trying to recover the error: searching for the next header");
585 fDecoderSummaryData->SetRecoveringError(kTRUE);
590 AliInfo("Do not try to recover error yet, go on with decoding process");
594 return(fDecoderSummaryData->GetErrorDetected());
598 //set DRM global trailer
599 fDRMGlobalTrailer = (AliTOFDRMGlobalTrailer *)rawData;
600 //remove global trailer from DRM CRC
602 //fill DRM summary data
603 FillDRMSummaryData(fDRMGlobalTrailer);
604 fDRMSummaryData->SetDecoderCRC(COMPUTE_DRM_CRC(drmCRC));
607 AliInfo(Form(" %02x - 0x%08x \t DRM global trailer",decoderStatus,*rawData));
608 //change decode status
609 decoderStatus = decoderStatus & ~DRM_BIT;
610 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
613 //LTM global trailer (slotID=2)
615 //try to recover error
616 if (fDecoderSummaryData->GetRecoveringError())
618 //check decode status
619 if ( decoderStatus != LTM_TRAILER_STATUS ){
621 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
622 fDecoderSummaryData->SetErrorDetected(kTRUE);
623 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
625 //try to recover error
627 if (errorWarning > fRecoverErrorThr) {
629 AliInfo("Trying to recover the error: searching for the next header");
630 fDecoderSummaryData->SetRecoveringError(kTRUE);
635 AliInfo("Do not try to recover error yet, go on with decoding process");
639 return(fDecoderSummaryData->GetErrorDetected());
643 //set LTM global trailer
644 fLTMGlobalTrailer = (AliTOFLTMGlobalTrailer *)rawData;
645 //remove global trailer from LTM CRC
647 //fill LTM summary data
648 FillLTMSummaryData(fLTMGlobalTrailer);
649 fLTMSummaryData->SetDecoderCRC(COMPUTE_LTM_CRC(ltmCRC));
652 AliInfo(Form(" %02x - 0x%08x \t LTM global trailer",decoderStatus,*rawData));
653 //change decode status
654 decoderStatus = decoderStatus & ~LTM_BIT;
655 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
658 //TRM global trailer (slotID=15)
660 //try to recover error
661 if (fDecoderSummaryData->GetRecoveringError())
663 //check decode status
664 if ( decoderStatus != TRM_TRAILER_STATUS ){
666 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
667 fDecoderSummaryData->SetErrorDetected(kTRUE);
668 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
670 //try to recover error
672 if (errorWarning > fRecoverErrorThr) {
674 AliInfo("Trying to recover the error: searching for the next header");
675 fDecoderSummaryData->SetRecoveringError(kTRUE);
680 AliInfo("Do not try to recover error yet, go on with decoding process");
684 return(fDecoderSummaryData->GetErrorDetected());
688 //set TRM global trailer
689 fTRMGlobalTrailer = (AliTOFTRMGlobalTrailer *)rawData;
690 //remove global trailer from TRM CRC
692 //fill TRM summary data
693 FillTRMSummaryData(fTRMGlobalTrailer);
694 fTRMSummaryData->SetDecoderCRC(COMPUTE_TRM_CRC(trmCRC));
697 AliInfo(Form(" %02x - 0x%08x \t TRM global trailer \t CRC=%04d eventCounter=%04d",decoderStatus,*rawData,fTRMGlobalTrailer->GetEventCRC(),fTRMGlobalTrailer->GetEventCounter()));
698 //change decode status
699 decoderStatus = decoderStatus & ~TRM_BIT;
700 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
704 //try to recover error
705 if (fDecoderSummaryData->GetRecoveringError())
708 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
709 fDecoderSummaryData->SetErrorDetected(kTRUE);
710 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
712 //try to recover error
715 AliInfo("Trying to recover the error: searching for the next header");
716 fDecoderSummaryData->SetRecoveringError(kTRUE);
719 return(fDecoderSummaryData->GetErrorDetected());
726 //try to recover error
727 if (fDecoderSummaryData->GetRecoveringError())
729 //check decode status
730 if ( decoderStatus != CHAIN_A_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError() ){
732 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
733 fDecoderSummaryData->SetErrorDetected(kTRUE);
734 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
736 //try to recover error
738 if (errorWarning > fRecoverErrorThr) {
740 AliInfo("Trying to recover the error: searching for the next header");
741 fDecoderSummaryData->SetRecoveringError(kTRUE);
746 AliInfo("Do not try to recover error yet, go on with decoding process");
750 return(fDecoderSummaryData->GetErrorDetected());
754 //set TRM chain header
755 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
756 //fill decoder summary data
757 fDecoderSummaryData->SetCurrentChain(0);
758 //get chain summary data
759 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(0);
760 //reset chain summary data
761 fChainSummaryData->Reset();
762 //fill chain summary data
763 FillChainSummaryData(fTRMChainHeader);
765 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
766 //reset tdc hit buffer
767 fTDCHitBuffer->Reset();
768 //get tdc packed hit buffer
769 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
770 //reset tdc packed hit buffer
771 fTDCPackedHitBuffer->Reset();
772 //get tdc error buffer
773 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
774 //reset tdc error buffer
775 fTDCErrorBuffer->Reset();
778 AliInfo(Form(" %02x - 0x%08x \t TRM chain A header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,0,fTRMChainHeader->GetBunchID()));
779 //change decode status
780 decoderStatus = decoderStatus | CHAIN_A_BIT;
781 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
787 case CHAIN_A_TRAILER:
789 //try to recover error
790 if (fDecoderSummaryData->GetRecoveringError())
792 //check decode status
793 if ( decoderStatus != CHAIN_A_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
795 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
796 fDecoderSummaryData->SetErrorDetected(kTRUE);
797 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
799 //try to recover error
801 if (errorWarning > fRecoverErrorThr) {
803 AliInfo("Trying to recover the error: searching for the next header");
804 fDecoderSummaryData->SetRecoveringError(kTRUE);
809 AliInfo("Do not try to recover error yet, go on with decoding process");
813 return(fDecoderSummaryData->GetErrorDetected());
817 //set TRM chain trailer
818 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
819 //fill chain summary data
820 FillChainSummaryData(fTRMChainTrailer);
823 AliInfo(Form(" %02x - 0x%08x \t TRM chain A trailer",decoderStatus,*rawData));
824 //change decode status
825 decoderStatus = decoderStatus & ~CHAIN_A_BIT;
826 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
831 //try to recover error
832 if (fDecoderSummaryData->GetRecoveringError())
834 //check decode status
835 if ( decoderStatus != CHAIN_B_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
837 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
838 fDecoderSummaryData->SetErrorDetected(kTRUE);
839 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
841 //try to recover error
843 if (errorWarning > fRecoverErrorThr) {
845 AliInfo("Trying to recover the error: searching for the next header");
846 fDecoderSummaryData->SetRecoveringError(kTRUE);
851 AliInfo("Do not try to recover error yet, go on with decoding process");
855 return(fDecoderSummaryData->GetErrorDetected());
859 //set TRM chain header
860 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
861 //fill decoder summary data
862 fDecoderSummaryData->SetCurrentChain(1);
863 //get chain summary data
864 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(1);
865 //reset chain summary data
866 fChainSummaryData->Reset();
867 //fill chain summary data
868 FillChainSummaryData(fTRMChainHeader);
870 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
871 //reset tdc hit buffer
872 fTDCHitBuffer->Reset();
873 //get tdc packed hit buffer
874 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
875 //reset tdc packed hit buffer
876 fTDCPackedHitBuffer->Reset();
877 //get tdc error buffer
878 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
879 //reset tdc error buffer
880 fTDCErrorBuffer->Reset();
883 AliInfo(Form(" %02x - 0x%08x \t TRM chain B header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,1,fTRMChainHeader->GetBunchID()));
884 //change decode status
885 decoderStatus = decoderStatus | CHAIN_B_BIT;
886 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
892 case CHAIN_B_TRAILER:
894 //try to recover error
895 if (fDecoderSummaryData->GetRecoveringError())
897 //check decode status
898 if ( decoderStatus != CHAIN_B_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
900 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
901 fDecoderSummaryData->SetErrorDetected(kTRUE);
902 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
904 //try to recover error
906 if (errorWarning > fRecoverErrorThr) {
908 AliInfo("Trying to recover the error: searching for the next header");
909 fDecoderSummaryData->SetRecoveringError(kTRUE);
914 AliInfo("Do not try to recover error yet, go on with decoding process");
918 return(fDecoderSummaryData->GetErrorDetected());
922 //set TRM chain trailer
923 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
924 //fill chain summary data
925 FillChainSummaryData(fTRMChainTrailer);
928 AliInfo(Form(" %02x - 0x%08x \t TRM chain B trailer",decoderStatus,*rawData));
929 //change decode status
930 decoderStatus = decoderStatus & ~CHAIN_B_BIT;
931 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
936 //try to recover error
937 if (fDecoderSummaryData->GetRecoveringError())
939 //decode TRM TDC error
940 fTRMTDCError = (AliTOFTRMTDCError *)rawData;
941 //check diagnostic word
942 if (fTRMTDCError->GetTDCID() == 15) {
944 AliInfo(Form(" %02x - 0x%08x \t Diagnostic error word",decoderStatus,*rawData));
948 error.SetErrorFlags(fTRMTDCError->GetErrorFlags());
949 error.SetTDCID(fTRMTDCError->GetTDCID());
950 //fill TDC error buffer
951 fTDCErrorBuffer->Add(error);
953 AliInfo(Form(" %02x - 0x%08x \t TDC error",decoderStatus,*rawData));
958 //try to recover error
959 if (fDecoderSummaryData->GetRecoveringError())
962 AliInfo(Form(" %02x - 0x%08x \t Filler",decoderStatus,*rawData));
967 //try to recover error
968 if (fDecoderSummaryData->GetRecoveringError())
970 //check decode status
971 if ( decoderStatus != CHAIN_A_TDC_HIT_STATUS &&
972 decoderStatus != CHAIN_B_TDC_HIT_STATUS && !fDecoderSummaryData->GetRecoveringError()){
974 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected or unknown word (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
975 fDecoderSummaryData->SetErrorDetected(kTRUE);
976 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
978 //try to recover error
980 if (errorWarning > fRecoverErrorThr) {
982 AliInfo("Trying to recover the error: searching for the next header");
983 fDecoderSummaryData->SetRecoveringError(kTRUE);
988 AliInfo("Do not try to recover error yet, go on with decoding process");
992 return(fDecoderSummaryData->GetErrorDetected());
998 switch (fTRMSummaryData->GetACQBits()){
1000 case PACKING_ENABLED_ACQ:
1001 //decode TDC packed/unpacked hit
1002 fTDCPackedHit = (AliTOFTDCPackedHit *)rawData;
1003 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1005 hit.SetChan(fTDCUnpackedHit->GetChan());
1006 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1007 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1008 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1010 switch (hit.GetPSBits()){
1011 //packed hit or overflow hit
1012 case PACKED_HIT_PS: case TOT_OVF_HIT_PS:
1013 hit.SetHitTime(fTDCPackedHit->GetHitTime());
1014 hit.SetTOTWidth(fTDCPackedHit->GetTOTWidth());
1016 fTDCHitBuffer->Add(hit);
1017 fTDCPackedHitBuffer->Add(hit);
1020 case LEADING_HIT_PS:
1021 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1024 fTDCHitBuffer->Add(hit);
1025 fTDCPackedHitBuffer->Add(hit);
1028 case TRAILING_HIT_PS:
1029 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1032 fTDCHitBuffer->Add(hit);
1035 //end switch PS bits
1038 switch (hit.GetPSBits()){
1040 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));
1042 case LEADING_HIT_PS:
1043 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));
1045 case TRAILING_HIT_PS:
1046 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));
1048 case TOT_OVF_HIT_PS:
1049 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));
1054 case LEADING_ONLY_ACQ: case TRAILING_ONLY_ACQ:
1055 //decode TDC unpacked hit
1056 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1058 hit.SetChan(fTDCUnpackedHit->GetChan());
1059 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1060 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1061 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1062 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1065 fTDCHitBuffer->Add(hit);
1068 switch (hit.GetPSBits()){
1069 case LEADING_HIT_PS:
1070 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));
1072 case TRAILING_HIT_PS:
1073 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));
1077 case PACKING_DISABLED_ACQ:
1078 //decode TDC unpacked hit
1079 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1081 hit.SetChan(fTDCUnpackedHit->GetChan());
1082 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1083 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1084 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1085 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1088 fTDCHitBuffer->Add(hit);
1091 switch (hit.GetPSBits()){
1092 case LEADING_HIT_PS:
1093 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));
1095 case TRAILING_HIT_PS:
1096 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));
1104 //end switch TRM ACQ
1111 //end equipment data loop
1114 AliInfo("End of data loop");
1120 /*** V2718 patch ***/
1122 decoderStatus = decoderStatus & ~DRM_BIT;
1123 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
1124 fDRMSummaryData->SetTrailer(kTRUE);
1125 fDRMSummaryData->SetSlotEnableMask(fDRMSummaryData->GetDecoderSlotEnableMask());
1126 fDRMSummaryData->SetCBit(1);
1127 fDRMSummaryData->SetLocalEventCounter(fTRMSummaryData->GetEventCounter());
1129 AliInfo("DRM was not present: - V2718 end patch decoding -");
1131 /*** V2718 patch ***/
1134 AliInfo("Decoder is exiting succesfully.");
1136 return(fDecoderSummaryData->GetErrorDetected());
1139 //_________________________________________________________________
1142 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalHeader *DRMGlobalHeader)
1146 * FillDRMSummaryData
1150 fDRMSummaryData->SetHeader(kTRUE);
1151 fDRMSummaryData->SetSlotID(DRMGlobalHeader->GetSlotID());
1152 fDRMSummaryData->SetEventWords(DRMGlobalHeader->GetEventWords());
1153 fDRMSummaryData->SetDRMID(DRMGlobalHeader->GetDRMID());
1156 //_________________________________________________________________
1159 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalTrailer *DRMGlobalTrailer)
1163 * FillDRMSummaryData
1167 fDRMSummaryData->SetTrailer(kTRUE);
1168 fDRMSummaryData->SetLocalEventCounter(DRMGlobalTrailer->GetLocalEventCounter());
1171 //_________________________________________________________________
1174 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader1 *DRMStatusHeader1)
1178 * FillDRMSummaryData
1182 fDRMSummaryData->SetPartecipatingSlotID(DRMStatusHeader1->GetPartecipatingSlotID());
1183 fDRMSummaryData->SetCBit(DRMStatusHeader1->GetCBit());
1184 fDRMSummaryData->SetVersID(DRMStatusHeader1->GetVersID());
1185 fDRMSummaryData->SetDRMhSize(DRMStatusHeader1->GetDRMhSize());
1188 //_________________________________________________________________
1191 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader2 *DRMStatusHeader2)
1195 * FillDRMSummaryData
1199 fDRMSummaryData->SetSlotEnableMask(DRMStatusHeader2->GetSlotEnableMask());
1200 fDRMSummaryData->SetFaultID(DRMStatusHeader2->GetFaultID());
1201 fDRMSummaryData->SetRTOBit(DRMStatusHeader2->GetRTOBit());
1204 //_________________________________________________________________
1207 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader3 *DRMStatusHeader3)
1211 * FillDRMSummaryData
1215 fDRMSummaryData->SetL0BCID(DRMStatusHeader3->GetL0BCID());
1216 fDRMSummaryData->SetRunTimeInfo(DRMStatusHeader3->GetRunTimeInfo());
1219 //_________________________________________________________________
1222 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader4 *DRMStatusHeader4)
1226 * FillDRMSummaryData
1230 fDRMSummaryData->SetTemperature(DRMStatusHeader4->GetTemperature());
1231 fDRMSummaryData->SetACKBit(DRMStatusHeader4->GetACKBit());
1232 fDRMSummaryData->SetSensAD(DRMStatusHeader4->GetSensAD());
1235 //_________________________________________________________________
1238 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMEventCRC *DRMEventCRC)
1242 * FillDRMSummaryData
1246 fDRMSummaryData->SetEventCRC(DRMEventCRC->GetEventCRC());
1249 //_________________________________________________________________
1252 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalHeader *LTMGlobalHeader)
1256 * FillLTMSummaryData
1260 fLTMSummaryData->SetHeader(kTRUE);
1261 fLTMSummaryData->SetSlotID(LTMGlobalHeader->GetSlotID());
1262 fLTMSummaryData->SetEventWords(LTMGlobalHeader->GetEventWords());
1263 fLTMSummaryData->SetCBit(LTMGlobalHeader->GetCBit());
1264 fLTMSummaryData->SetFault(LTMGlobalHeader->GetFault());
1267 //_________________________________________________________________
1270 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalTrailer *LTMGlobalTrailer)
1274 * FillLTMSummaryData
1278 fLTMSummaryData->SetTrailer(kTRUE);
1279 fLTMSummaryData->SetEventCRC(LTMGlobalTrailer->GetEventCRC());
1280 fLTMSummaryData->SetEventNumber(LTMGlobalTrailer->GetEventNumber());
1283 //_________________________________________________________________
1286 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord)
1290 * FillLTMSummaryData
1294 fLTMSummaryData->SetPDL(4 * PDLWord + 0, LTMPDLData->GetPDLValue1());
1295 fLTMSummaryData->SetPDL(4 * PDLWord + 1, LTMPDLData->GetPDLValue2());
1296 fLTMSummaryData->SetPDL(4 * PDLWord + 2, LTMPDLData->GetPDLValue3());
1297 fLTMSummaryData->SetPDL(4 * PDLWord + 3, LTMPDLData->GetPDLValue4());
1300 //_________________________________________________________________
1303 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMADCData *LTMADCData, Int_t ADCWord)
1307 * FillLTMSummaryData
1311 fLTMSummaryData->SetADC(3 * ADCWord + 0, LTMADCData->GetADCValue1());
1312 fLTMSummaryData->SetADC(3 * ADCWord + 1, LTMADCData->GetADCValue2());
1313 fLTMSummaryData->SetADC(3 * ADCWord + 2, LTMADCData->GetADCValue3());
1316 //_________________________________________________________________
1319 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMORData *LTMORData, Int_t ORWord)
1323 * FillLTMSummaryData
1327 fLTMSummaryData->SetOR(3 * ORWord + 0, LTMORData->GetORValue1());
1328 fLTMSummaryData->SetOR(3 * ORWord + 1, LTMORData->GetORValue2());
1329 fLTMSummaryData->SetOR(3 * ORWord + 2, LTMORData->GetORValue3());
1332 //_________________________________________________________________
1335 AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalHeader *TRMGlobalHeader)
1339 * FillTRMSummaryData
1343 fTRMSummaryData->SetHeader(kTRUE);
1344 fTRMSummaryData->SetSlotID(TRMGlobalHeader->GetSlotID());
1345 fTRMSummaryData->SetEventWords(TRMGlobalHeader->GetEventWords());
1346 fTRMSummaryData->SetACQBits(TRMGlobalHeader->GetACQBits());
1347 fTRMSummaryData->SetLBit(TRMGlobalHeader->GetLBit());
1348 fTRMSummaryData->SetEBit(TRMGlobalHeader->GetEBit());
1351 //_________________________________________________________________
1354 AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalTrailer *TRMGlobalTrailer)
1358 * FillTRMSummaryData
1362 fTRMSummaryData->SetTrailer(kTRUE);
1363 fTRMSummaryData->SetEventCRC(TRMGlobalTrailer->GetEventCRC());
1364 fTRMSummaryData->SetEventCounter(TRMGlobalTrailer->GetEventCounter());
1367 //_________________________________________________________________
1370 AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainHeader *TRMChainHeader)
1374 * FillChainSummaryData
1378 fChainSummaryData->SetHeader(kTRUE);
1379 switch (*(UInt_t *)TRMChainHeader & WORD_TYPE_MASK){
1380 case CHAIN_A_HEADER:
1381 fChainSummaryData->SetChain(0);
1383 case CHAIN_B_HEADER:
1384 fChainSummaryData->SetChain(1);
1387 fChainSummaryData->SetBunchID(TRMChainHeader->GetBunchID());
1388 fChainSummaryData->SetPB24Temp(TRMChainHeader->GetPB24Temp());
1389 fChainSummaryData->SetPB24ID(TRMChainHeader->GetPB24ID());
1390 fChainSummaryData->SetTSBit(TRMChainHeader->GetTSBit());
1393 //_________________________________________________________________
1396 AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainTrailer *TRMChainTrailer)
1400 * FillChainSummaryData
1404 fChainSummaryData->SetTrailer(kTRUE);
1405 fChainSummaryData->SetStatus(TRMChainTrailer->GetStatus());
1406 fChainSummaryData->SetEventCounter(TRMChainTrailer->GetEventCounter());
1409 //_________________________________________________________________
1412 AliTOFDecoderV2::ResetSpider()
1416 AliInfo("Reset signal received, empty and reset buffer");
1417 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1418 if (fSpiderBufferFull[iChan]) {
1420 AliInfo(Form("Spider buffer is full for channel %d", iChan));
1421 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1423 fSpiderBufferFull[iChan] = kFALSE;
1430 AliTOFDecoderV2::Spider(AliTOFTDCHit &hit){
1433 AliInfo("Hit has been received from decode main routine");
1436 if (fSpiderTDCID != hit.GetTDCID()){
1438 AliInfo("Data coming from a new TDC, empty and reset buffer");
1439 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1440 if (fSpiderBufferFull[iChan])
1441 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1442 fSpiderBufferFull[iChan] = kFALSE;
1444 fSpiderTDCPackedHitBuffer = fTDCPackedHitBuffer;
1445 fSpiderTDCID = hit.GetTDCID();
1449 switch(hit.GetPSBits()){
1451 case LEADING_HIT_PS:
1452 //check buffer status
1453 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1454 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()]); //buffered hit is orphane
1455 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1457 AliInfo("Leading hit and buffer full, buffered hit is a orphane leading hit");
1459 else{ //buffer empty
1460 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1461 fSpiderBufferFull[hit.GetChan()] = kTRUE; //set buffer full
1465 case TRAILING_HIT_PS:
1466 //check buffer status
1467 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1468 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()] << hit); //pack hits (Leading << Trailing) and save
1469 fSpiderBufferFull[hit.GetChan()] = kFALSE; //unset buffer full
1471 AliInfo("Trailing hit and buffer full, pack leading and trailing hit");
1473 else{ //buffer empty
1476 AliInfo("Trailing hit and buffer empty, trow trailing hit away");
1483 //_________________________________________________________________
1486 AliTOFDecoderV2::DecodeNext()
1490 if (!fRawReader || !fRawReader->ReadHeader())
1493 const Int_t size = fRawReader->GetDataSize();
1494 UChar_t *data = new UChar_t[size];
1495 if (fRawReader->ReadNext(data, size) != 1) {
1500 /* decode equipment data */
1501 SetEquipmentID(fRawReader->GetEquipmentId());
1502 Decode((UInt_t *)data, size / 4);