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 if (this == &source) return *this;
174 TObject::operator=(source);
175 fRawReader = source.fRawReader;
176 fVerbose = source.fVerbose;
177 fLogErrors = source.fLogErrors;
178 fV2718Patch = source.fV2718Patch;
179 fRecoverError = source.fRecoverError;
180 fRecoverErrorThr = source.fRecoverErrorThr;
181 fSpider = source.fSpider;
182 fRunNumber = source.fRunNumber;
183 fEventNumber = source.fEventNumber;
184 fEquipmentID = source.fEquipmentID;
185 *fDecoderSummaryData = *source.fDecoderSummaryData;
189 AliTOFDecoderV2::~AliTOFDecoderV2()
191 delete fDecoderSummaryData;
194 //_________________________________________________________________
197 AliTOFDecoderV2::Decode(UInt_t *rawData, UInt_t nWords)
199 /* main decoding routine.
200 * it loops over nWords 32-bit words
201 * starting at *rawData and decodes them.
202 * it also fills some buffers in order to
203 * have the decoded data available for other
207 //reset decoder summary data
208 fDecoderSummaryData->Reset();
210 //fill decoder summary data
211 fDecoderSummaryData->SetRunNumber(fRunNumber);
212 fDecoderSummaryData->SetEventNumber(fEventNumber);
213 fDecoderSummaryData->SetEquipmentID(fEquipmentID);
214 fDecoderSummaryData->SetInputWords(nWords);
215 fDecoderSummaryData->SetRecoverError(fRecoverError);
216 fDecoderSummaryData->SetSpider(fSpider);
219 AliTOFTDCError error;
222 UShort_t decoderStatus = 0x0;
229 // error warning counter
230 Int_t errorWarning = 0;
232 if (fRecoverError && fVerbose)
233 AliInfo("Recover error option enabled: potentially dangerous!");
235 /*** V2718 patch ***/
237 decoderStatus = decoderStatus | DRM_BIT;
238 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
239 fDecoderSummaryData->SetCurrentDRMID(0x0);
240 fDecoderSummaryData->SetV2718Patch(kTRUE);
241 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
242 fDRMSummaryData->SetHeader(kTRUE);
243 fDRMSummaryData->SetDRMID(0x0);
245 AliInfo("DRM not present: - V2718 patch decoding -");
247 /*** V2718 patch ***/
250 AliInfo("Start decoding");
253 AliInfo("Loop over the data and decode");
256 AliInfo(" St Hex Word \t Decoded Word");
259 for (UInt_t iWord = 0;
261 iWord++, rawData++, fDecoderSummaryData->SetDecodedWords(iWord)){
263 //try to recover error
264 if (fDecoderSummaryData->GetRecoveringError() && fVerbose)
265 AliInfo(Form(" %02x - 0x%08x",decoderStatus,*rawData));
267 //compute CRC with current data
273 switch (*rawData & WORD_TYPE_MASK){
278 switch (*rawData & SLOT_ID_MASK){
280 //DRM global header (slotID=1)
282 //try to recover error
283 if (fDecoderSummaryData->GetRecoveringError())
285 //check decode status
286 if ( decoderStatus != DRM_HEADER_STATUS ){
288 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
289 fDecoderSummaryData->SetErrorDetected(kTRUE);
290 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
292 //try to recover error
294 if (errorWarning > fRecoverErrorThr) {
296 AliInfo("Trying to recover the error: searching for the next header");
297 fDecoderSummaryData->SetRecoveringError(kTRUE);
302 AliInfo("Do not try to recover error yet, go on with decoding process");
306 return(fDecoderSummaryData->GetErrorDetected());
310 //set DRM global header
311 fDRMGlobalHeader = (AliTOFDRMGlobalHeader *)rawData;
314 //fill decoder summary data
315 fDecoderSummaryData->SetCurrentDRMID(fDRMGlobalHeader->GetDRMID());
316 fDecoderSummaryData->SetCurrentSlotID(fDRMGlobalHeader->GetSlotID());
317 //get DRM summary data
318 fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
319 //reset DRM summary data
320 fDRMSummaryData->Reset();
321 //fill DRM summary data
322 FillDRMSummaryData(fDRMGlobalHeader);
325 AliInfo(Form(" %02x - 0x%08x \t DRM global header",decoderStatus,*rawData));
326 //change decode status
327 decoderStatus = decoderStatus | DRM_BIT;
328 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
329 //decode DRM status headers
330 for (Int_t i = 0; i < DRM_STATUS_HEADER_WORDS; i++){
336 case 0: //DRM status header 1
337 fDRMStatusHeader1 = (AliTOFDRMStatusHeader1 *)rawData;
338 FillDRMSummaryData(fDRMStatusHeader1);
340 AliInfo(Form(" %02x - 0x%08x \t DRM status header 1",decoderStatus,*rawData));
342 case 1: //DRM status header 2
343 fDRMStatusHeader2 = (AliTOFDRMStatusHeader2 *)rawData;
344 FillDRMSummaryData(fDRMStatusHeader2);
346 AliInfo(Form(" %02x - 0x%08x \t DRM status header 2",decoderStatus,*rawData));
348 case 2: //DRM status header 3
349 fDRMStatusHeader3 = (AliTOFDRMStatusHeader3 *)rawData;
350 FillDRMSummaryData(fDRMStatusHeader3);
352 AliInfo(Form(" %02x - 0x%08x \t DRM status header 3",decoderStatus,*rawData));
354 case 3: //DRM status header 4
355 fDRMStatusHeader4 = (AliTOFDRMStatusHeader4 *)rawData;
356 FillDRMSummaryData(fDRMStatusHeader4);
358 AliInfo(Form(" %02x - 0x%08x \t DRM status header 4",decoderStatus,*rawData));
362 //decode DRM event CRC
366 //remove DRM event CRC from DRM CRC
368 fDRMEventCRC = (AliTOFDRMEventCRC *)rawData;
369 FillDRMSummaryData(fDRMEventCRC);
371 AliInfo(Form(" %02x - 0x%08x \t DRM event CRC",decoderStatus,*rawData));
374 //LTM global header (slotID=2)
377 if (fDecoderSummaryData->GetRecoveringError()){
378 //change decode status
379 decoderStatus = LTM_HEADER_STATUS;
380 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
381 fDecoderSummaryData->SetRecoveringError(kFALSE);
383 AliInfo("LTM global header found: error probably recovered");
385 //check decode status
386 if ( decoderStatus != LTM_HEADER_STATUS ){
388 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
389 fDecoderSummaryData->SetErrorDetected(kTRUE);
390 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
392 //try to recover error
394 if (errorWarning > fRecoverErrorThr) {
396 AliInfo("Trying to recover the error: searching for the next header");
397 fDecoderSummaryData->SetRecoveringError(kTRUE);
402 AliInfo("Do not try to recover error yet, go on with decoding process");
406 return(fDecoderSummaryData->GetErrorDetected());
410 //set LTM global header
411 fLTMGlobalHeader = (AliTOFLTMGlobalHeader *)rawData;
414 //fill decoder summary data
415 fDecoderSummaryData->SetCurrentSlotID(fLTMGlobalHeader->GetSlotID());
416 //get LTM summary data
417 fLTMSummaryData = fDRMSummaryData->GetLTMSummaryData();
418 //reset LTM summary data
419 fLTMSummaryData->Reset();
420 //fill LTM summary data
421 FillLTMSummaryData(fLTMGlobalHeader);
422 //set DRM slot enable mask bit
423 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fLTMGlobalHeader->GetSlotID() - 2);
426 AliInfo(Form(" %02x - 0x%08x \t LTM global header",decoderStatus,*rawData));
427 //change decode status
428 decoderStatus = decoderStatus | LTM_BIT;
429 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
431 //decode LTM PDL data
432 for (Int_t iPDLWord = 0; iPDLWord < LTM_PDL_DATA_WORDS; iPDLWord++){
438 fLTMPDLData = (AliTOFLTMPDLData *)rawData;
439 //fill LTM summary data
440 FillLTMSummaryData(fLTMPDLData, iPDLWord);
443 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()));
445 //decode LTM ADC data
446 for (Int_t iADCWord = 0; iADCWord < LTM_ADC_DATA_WORDS; iADCWord++){
452 fLTMADCData = (AliTOFLTMADCData *)rawData;
453 //fill LTM summary data
454 FillLTMSummaryData(fLTMADCData, iADCWord);
457 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()));
460 for (Int_t iORWord = 0; iORWord < LTM_OR_DATA_WORDS; iORWord++){
466 fLTMORData = (AliTOFLTMORData *)rawData;
467 //fill LTM summary data
468 FillLTMSummaryData(fLTMORData, iORWord);
471 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()));
475 //TRM global header (slotID=3-12)
476 case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
478 if (fDecoderSummaryData->GetRecoveringError()){
479 //change decode status
480 decoderStatus = TRM_HEADER_STATUS;
481 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
482 fDecoderSummaryData->SetRecoveringError(kFALSE);
484 AliInfo("TRM global header found: error probably recovered");
486 //check decode status
487 if ( decoderStatus != TRM_HEADER_STATUS ){
489 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
490 fDecoderSummaryData->SetErrorDetected(kTRUE);
491 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
493 //try to recover error
495 if (errorWarning > fRecoverErrorThr) {
497 AliInfo("Trying to recover the error: searching for the next header");
498 fDecoderSummaryData->SetRecoveringError(kTRUE);
503 AliInfo("Do not try to recover error yet, go on with decoding process");
507 return(fDecoderSummaryData->GetErrorDetected());
511 //set TRM global header
512 fTRMGlobalHeader = (AliTOFTRMGlobalHeader *)rawData;
515 //fill decoder summary data
516 fDecoderSummaryData->SetCurrentSlotID(fTRMGlobalHeader->GetSlotID());
517 //get TRM summary data
518 fTRMSummaryData = fDRMSummaryData->GetTRMSummaryData(fTRMGlobalHeader->GetSlotID() - TRM_FIRST_SLOT_ID);
519 //reset TRM summary data
520 fTRMSummaryData->Reset();
521 //fill TRM summary data
522 FillTRMSummaryData(fTRMGlobalHeader);
523 //set DRM slot enable mask bit
524 fDRMSummaryData->SetDecoderSlotEnableMaskBit(fTRMGlobalHeader->GetSlotID() - 2);
527 AliInfo(Form(" %02x - 0x%08x \t TRM global header \t slotID=%02d ACQ=%01d L=%01d",decoderStatus,*rawData,fTRMGlobalHeader->GetSlotID(),fTRMGlobalHeader->GetACQBits(),fTRMGlobalHeader->GetLBit()));
528 //change decode status
529 decoderStatus = decoderStatus | TRM_BIT;
530 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
535 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID in global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
536 fDecoderSummaryData->SetErrorDetected(kTRUE);
537 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
538 //try to recover error
540 if (errorWarning > fRecoverErrorThr) {
542 AliInfo("Trying to recover the error: searching for the next header");
543 fDecoderSummaryData->SetRecoveringError(kTRUE);
548 AliInfo("Do not try to recover error yet, go on with decoding process");
552 return(fDecoderSummaryData->GetErrorDetected());
562 switch (*rawData & SLOT_ID_MASK){
564 //DRM global trailer (slotID=1)
567 if (fDecoderSummaryData->GetRecoveringError()){
568 //change decode status
569 decoderStatus = DRM_TRAILER_STATUS;
570 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
571 fDecoderSummaryData->SetRecoveringError(kFALSE);
573 AliInfo("DRM global trailer found: error probably recovered");
575 //check decode status
576 if ( decoderStatus != DRM_TRAILER_STATUS ){
578 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
579 fDecoderSummaryData->SetErrorDetected(kTRUE);
580 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
582 //try to recover error
584 if (errorWarning > fRecoverErrorThr) {
586 AliInfo("Trying to recover the error: searching for the next header");
587 fDecoderSummaryData->SetRecoveringError(kTRUE);
592 AliInfo("Do not try to recover error yet, go on with decoding process");
596 return(fDecoderSummaryData->GetErrorDetected());
600 //set DRM global trailer
601 fDRMGlobalTrailer = (AliTOFDRMGlobalTrailer *)rawData;
602 //remove global trailer from DRM CRC
604 //fill DRM summary data
605 FillDRMSummaryData(fDRMGlobalTrailer);
606 fDRMSummaryData->SetDecoderCRC(COMPUTE_DRM_CRC(drmCRC));
609 AliInfo(Form(" %02x - 0x%08x \t DRM global trailer",decoderStatus,*rawData));
610 //change decode status
611 decoderStatus = decoderStatus & ~DRM_BIT;
612 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
615 //LTM global trailer (slotID=2)
617 //try to recover error
618 if (fDecoderSummaryData->GetRecoveringError())
620 //check decode status
621 if ( decoderStatus != LTM_TRAILER_STATUS ){
623 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
624 fDecoderSummaryData->SetErrorDetected(kTRUE);
625 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
627 //try to recover error
629 if (errorWarning > fRecoverErrorThr) {
631 AliInfo("Trying to recover the error: searching for the next header");
632 fDecoderSummaryData->SetRecoveringError(kTRUE);
637 AliInfo("Do not try to recover error yet, go on with decoding process");
641 return(fDecoderSummaryData->GetErrorDetected());
645 //set LTM global trailer
646 fLTMGlobalTrailer = (AliTOFLTMGlobalTrailer *)rawData;
647 //remove global trailer from LTM CRC
649 //fill LTM summary data
650 FillLTMSummaryData(fLTMGlobalTrailer);
651 fLTMSummaryData->SetDecoderCRC(COMPUTE_LTM_CRC(ltmCRC));
654 AliInfo(Form(" %02x - 0x%08x \t LTM global trailer",decoderStatus,*rawData));
655 //change decode status
656 decoderStatus = decoderStatus & ~LTM_BIT;
657 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
660 //TRM global trailer (slotID=15)
662 //try to recover error
663 if (fDecoderSummaryData->GetRecoveringError())
665 //check decode status
666 if ( decoderStatus != TRM_TRAILER_STATUS ){
668 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
669 fDecoderSummaryData->SetErrorDetected(kTRUE);
670 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
672 //try to recover error
674 if (errorWarning > fRecoverErrorThr) {
676 AliInfo("Trying to recover the error: searching for the next header");
677 fDecoderSummaryData->SetRecoveringError(kTRUE);
682 AliInfo("Do not try to recover error yet, go on with decoding process");
686 return(fDecoderSummaryData->GetErrorDetected());
690 //set TRM global trailer
691 fTRMGlobalTrailer = (AliTOFTRMGlobalTrailer *)rawData;
692 //remove global trailer from TRM CRC
694 //fill TRM summary data
695 FillTRMSummaryData(fTRMGlobalTrailer);
696 fTRMSummaryData->SetDecoderCRC(COMPUTE_TRM_CRC(trmCRC));
699 AliInfo(Form(" %02x - 0x%08x \t TRM global trailer \t CRC=%04d eventCounter=%04d",decoderStatus,*rawData,fTRMGlobalTrailer->GetEventCRC(),fTRMGlobalTrailer->GetEventCounter()));
700 //change decode status
701 decoderStatus = decoderStatus & ~TRM_BIT;
702 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
706 //try to recover error
707 if (fDecoderSummaryData->GetRecoveringError())
710 AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
711 fDecoderSummaryData->SetErrorDetected(kTRUE);
712 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
714 //try to recover error
717 AliInfo("Trying to recover the error: searching for the next header");
718 fDecoderSummaryData->SetRecoveringError(kTRUE);
721 return(fDecoderSummaryData->GetErrorDetected());
728 //try to recover error
729 if (fDecoderSummaryData->GetRecoveringError())
731 //check decode status
732 if ( decoderStatus != CHAIN_A_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError() ){
734 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
735 fDecoderSummaryData->SetErrorDetected(kTRUE);
736 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
738 //try to recover error
740 if (errorWarning > fRecoverErrorThr) {
742 AliInfo("Trying to recover the error: searching for the next header");
743 fDecoderSummaryData->SetRecoveringError(kTRUE);
748 AliInfo("Do not try to recover error yet, go on with decoding process");
752 return(fDecoderSummaryData->GetErrorDetected());
756 //set TRM chain header
757 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
758 //fill decoder summary data
759 fDecoderSummaryData->SetCurrentChain(0);
760 //get chain summary data
761 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(0);
762 //reset chain summary data
763 fChainSummaryData->Reset();
764 //fill chain summary data
765 FillChainSummaryData(fTRMChainHeader);
767 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
768 //reset tdc hit buffer
769 fTDCHitBuffer->Reset();
770 //get tdc packed hit buffer
771 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
772 //reset tdc packed hit buffer
773 fTDCPackedHitBuffer->Reset();
774 //get tdc error buffer
775 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
776 //reset tdc error buffer
777 fTDCErrorBuffer->Reset();
780 AliInfo(Form(" %02x - 0x%08x \t TRM chain A header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,0,fTRMChainHeader->GetBunchID()));
781 //change decode status
782 decoderStatus = decoderStatus | CHAIN_A_BIT;
783 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
789 case CHAIN_A_TRAILER:
791 //try to recover error
792 if (fDecoderSummaryData->GetRecoveringError())
794 //check decode status
795 if ( decoderStatus != CHAIN_A_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
797 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
798 fDecoderSummaryData->SetErrorDetected(kTRUE);
799 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
801 //try to recover error
803 if (errorWarning > fRecoverErrorThr) {
805 AliInfo("Trying to recover the error: searching for the next header");
806 fDecoderSummaryData->SetRecoveringError(kTRUE);
811 AliInfo("Do not try to recover error yet, go on with decoding process");
815 return(fDecoderSummaryData->GetErrorDetected());
819 //set TRM chain trailer
820 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
821 //fill chain summary data
822 FillChainSummaryData(fTRMChainTrailer);
825 AliInfo(Form(" %02x - 0x%08x \t TRM chain A trailer",decoderStatus,*rawData));
826 //change decode status
827 decoderStatus = decoderStatus & ~CHAIN_A_BIT;
828 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
833 //try to recover error
834 if (fDecoderSummaryData->GetRecoveringError())
836 //check decode status
837 if ( decoderStatus != CHAIN_B_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
839 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
840 fDecoderSummaryData->SetErrorDetected(kTRUE);
841 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
843 //try to recover error
845 if (errorWarning > fRecoverErrorThr) {
847 AliInfo("Trying to recover the error: searching for the next header");
848 fDecoderSummaryData->SetRecoveringError(kTRUE);
853 AliInfo("Do not try to recover error yet, go on with decoding process");
857 return(fDecoderSummaryData->GetErrorDetected());
861 //set TRM chain header
862 fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
863 //fill decoder summary data
864 fDecoderSummaryData->SetCurrentChain(1);
865 //get chain summary data
866 fChainSummaryData = fTRMSummaryData->GetChainSummaryData(1);
867 //reset chain summary data
868 fChainSummaryData->Reset();
869 //fill chain summary data
870 FillChainSummaryData(fTRMChainHeader);
872 fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
873 //reset tdc hit buffer
874 fTDCHitBuffer->Reset();
875 //get tdc packed hit buffer
876 fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
877 //reset tdc packed hit buffer
878 fTDCPackedHitBuffer->Reset();
879 //get tdc error buffer
880 fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
881 //reset tdc error buffer
882 fTDCErrorBuffer->Reset();
885 AliInfo(Form(" %02x - 0x%08x \t TRM chain B header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,1,fTRMChainHeader->GetBunchID()));
886 //change decode status
887 decoderStatus = decoderStatus | CHAIN_B_BIT;
888 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
894 case CHAIN_B_TRAILER:
896 //try to recover error
897 if (fDecoderSummaryData->GetRecoveringError())
899 //check decode status
900 if ( decoderStatus != CHAIN_B_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
902 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
903 fDecoderSummaryData->SetErrorDetected(kTRUE);
904 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
906 //try to recover error
908 if (errorWarning > fRecoverErrorThr) {
910 AliInfo("Trying to recover the error: searching for the next header");
911 fDecoderSummaryData->SetRecoveringError(kTRUE);
916 AliInfo("Do not try to recover error yet, go on with decoding process");
920 return(fDecoderSummaryData->GetErrorDetected());
924 //set TRM chain trailer
925 fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
926 //fill chain summary data
927 FillChainSummaryData(fTRMChainTrailer);
930 AliInfo(Form(" %02x - 0x%08x \t TRM chain B trailer",decoderStatus,*rawData));
931 //change decode status
932 decoderStatus = decoderStatus & ~CHAIN_B_BIT;
933 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
938 //try to recover error
939 if (fDecoderSummaryData->GetRecoveringError())
941 //decode TRM TDC error
942 fTRMTDCError = (AliTOFTRMTDCError *)rawData;
943 //check diagnostic word
944 if (fTRMTDCError->GetTDCID() == 15) {
946 AliInfo(Form(" %02x - 0x%08x \t Diagnostic error word",decoderStatus,*rawData));
950 error.SetErrorFlags(fTRMTDCError->GetErrorFlags());
951 error.SetTDCID(fTRMTDCError->GetTDCID());
952 //fill TDC error buffer
953 fTDCErrorBuffer->Add(error);
955 AliInfo(Form(" %02x - 0x%08x \t TDC error",decoderStatus,*rawData));
960 //try to recover error
961 if (fDecoderSummaryData->GetRecoveringError())
964 AliInfo(Form(" %02x - 0x%08x \t Filler",decoderStatus,*rawData));
969 //try to recover error
970 if (fDecoderSummaryData->GetRecoveringError())
972 //check decode status
973 if ( decoderStatus != CHAIN_A_TDC_HIT_STATUS &&
974 decoderStatus != CHAIN_B_TDC_HIT_STATUS && !fDecoderSummaryData->GetRecoveringError()){
976 AliError(Form(" %02x - 0x%08x [ERROR] Unexpected or unknown word (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
977 fDecoderSummaryData->SetErrorDetected(kTRUE);
978 fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
980 //try to recover error
982 if (errorWarning > fRecoverErrorThr) {
984 AliInfo("Trying to recover the error: searching for the next header");
985 fDecoderSummaryData->SetRecoveringError(kTRUE);
990 AliInfo("Do not try to recover error yet, go on with decoding process");
994 return(fDecoderSummaryData->GetErrorDetected());
1000 switch (fTRMSummaryData->GetACQBits()){
1002 case PACKING_ENABLED_ACQ:
1003 //decode TDC packed/unpacked hit
1004 fTDCPackedHit = (AliTOFTDCPackedHit *)rawData;
1005 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1007 hit.SetChan(fTDCUnpackedHit->GetChan());
1008 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1009 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1010 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1012 switch (hit.GetPSBits()){
1013 //packed hit or overflow hit
1014 case PACKED_HIT_PS: case TOT_OVF_HIT_PS:
1015 hit.SetHitTime(fTDCPackedHit->GetHitTime());
1016 hit.SetTOTWidth(fTDCPackedHit->GetTOTWidth());
1018 fTDCHitBuffer->Add(hit);
1019 fTDCPackedHitBuffer->Add(hit);
1022 case LEADING_HIT_PS:
1023 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1026 fTDCHitBuffer->Add(hit);
1027 fTDCPackedHitBuffer->Add(hit);
1030 case TRAILING_HIT_PS:
1031 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1034 fTDCHitBuffer->Add(hit);
1037 //end switch PS bits
1040 switch (hit.GetPSBits()){
1042 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));
1044 case LEADING_HIT_PS:
1045 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));
1047 case TRAILING_HIT_PS:
1048 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));
1050 case TOT_OVF_HIT_PS:
1051 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));
1056 case LEADING_ONLY_ACQ: case TRAILING_ONLY_ACQ:
1057 //decode TDC unpacked hit
1058 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1060 hit.SetChan(fTDCUnpackedHit->GetChan());
1061 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1062 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1063 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1064 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1067 fTDCHitBuffer->Add(hit);
1070 switch (hit.GetPSBits()){
1071 case LEADING_HIT_PS:
1072 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));
1074 case TRAILING_HIT_PS:
1075 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));
1079 case PACKING_DISABLED_ACQ:
1080 //decode TDC unpacked hit
1081 fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
1083 hit.SetChan(fTDCUnpackedHit->GetChan());
1084 hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
1085 hit.SetEBit(fTDCUnpackedHit->GetEBit());
1086 hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
1087 hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
1090 fTDCHitBuffer->Add(hit);
1093 switch (hit.GetPSBits()){
1094 case LEADING_HIT_PS:
1095 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));
1097 case TRAILING_HIT_PS:
1098 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));
1106 //end switch TRM ACQ
1113 //end equipment data loop
1116 AliInfo("End of data loop");
1122 /*** V2718 patch ***/
1124 decoderStatus = decoderStatus & ~DRM_BIT;
1125 fDecoderSummaryData->SetDecoderStatus(decoderStatus);
1126 fDRMSummaryData->SetTrailer(kTRUE);
1127 fDRMSummaryData->SetSlotEnableMask(fDRMSummaryData->GetDecoderSlotEnableMask());
1128 fDRMSummaryData->SetCBit(1);
1129 fDRMSummaryData->SetLocalEventCounter(fTRMSummaryData->GetEventCounter());
1131 AliInfo("DRM was not present: - V2718 end patch decoding -");
1133 /*** V2718 patch ***/
1136 AliInfo("Decoder is exiting succesfully.");
1138 return(fDecoderSummaryData->GetErrorDetected());
1141 //_________________________________________________________________
1144 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalHeader *DRMGlobalHeader)
1148 * FillDRMSummaryData
1152 fDRMSummaryData->SetHeader(kTRUE);
1153 fDRMSummaryData->SetSlotID(DRMGlobalHeader->GetSlotID());
1154 fDRMSummaryData->SetEventWords(DRMGlobalHeader->GetEventWords());
1155 fDRMSummaryData->SetDRMID(DRMGlobalHeader->GetDRMID());
1158 //_________________________________________________________________
1161 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalTrailer *DRMGlobalTrailer)
1165 * FillDRMSummaryData
1169 fDRMSummaryData->SetTrailer(kTRUE);
1170 fDRMSummaryData->SetLocalEventCounter(DRMGlobalTrailer->GetLocalEventCounter());
1173 //_________________________________________________________________
1176 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader1 *DRMStatusHeader1)
1180 * FillDRMSummaryData
1184 fDRMSummaryData->SetPartecipatingSlotID(DRMStatusHeader1->GetPartecipatingSlotID());
1185 fDRMSummaryData->SetCBit(DRMStatusHeader1->GetCBit());
1186 fDRMSummaryData->SetVersID(DRMStatusHeader1->GetVersID());
1187 fDRMSummaryData->SetDRMhSize(DRMStatusHeader1->GetDRMhSize());
1190 //_________________________________________________________________
1193 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader2 *DRMStatusHeader2)
1197 * FillDRMSummaryData
1201 fDRMSummaryData->SetSlotEnableMask(DRMStatusHeader2->GetSlotEnableMask());
1202 fDRMSummaryData->SetFaultID(DRMStatusHeader2->GetFaultID());
1203 fDRMSummaryData->SetRTOBit(DRMStatusHeader2->GetRTOBit());
1206 //_________________________________________________________________
1209 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader3 *DRMStatusHeader3)
1213 * FillDRMSummaryData
1217 fDRMSummaryData->SetL0BCID(DRMStatusHeader3->GetL0BCID());
1218 fDRMSummaryData->SetRunTimeInfo(DRMStatusHeader3->GetRunTimeInfo());
1221 //_________________________________________________________________
1224 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader4 *DRMStatusHeader4)
1228 * FillDRMSummaryData
1232 fDRMSummaryData->SetTemperature(DRMStatusHeader4->GetTemperature());
1233 fDRMSummaryData->SetACKBit(DRMStatusHeader4->GetACKBit());
1234 fDRMSummaryData->SetSensAD(DRMStatusHeader4->GetSensAD());
1237 //_________________________________________________________________
1240 AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMEventCRC *DRMEventCRC)
1244 * FillDRMSummaryData
1248 fDRMSummaryData->SetEventCRC(DRMEventCRC->GetEventCRC());
1251 //_________________________________________________________________
1254 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalHeader *LTMGlobalHeader)
1258 * FillLTMSummaryData
1262 fLTMSummaryData->SetHeader(kTRUE);
1263 fLTMSummaryData->SetSlotID(LTMGlobalHeader->GetSlotID());
1264 fLTMSummaryData->SetEventWords(LTMGlobalHeader->GetEventWords());
1265 fLTMSummaryData->SetCBit(LTMGlobalHeader->GetCBit());
1266 fLTMSummaryData->SetFault(LTMGlobalHeader->GetFault());
1269 //_________________________________________________________________
1272 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalTrailer *LTMGlobalTrailer)
1276 * FillLTMSummaryData
1280 fLTMSummaryData->SetTrailer(kTRUE);
1281 fLTMSummaryData->SetEventCRC(LTMGlobalTrailer->GetEventCRC());
1282 fLTMSummaryData->SetEventNumber(LTMGlobalTrailer->GetEventNumber());
1285 //_________________________________________________________________
1288 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord)
1292 * FillLTMSummaryData
1296 fLTMSummaryData->SetPDL(4 * PDLWord + 0, LTMPDLData->GetPDLValue1());
1297 fLTMSummaryData->SetPDL(4 * PDLWord + 1, LTMPDLData->GetPDLValue2());
1298 fLTMSummaryData->SetPDL(4 * PDLWord + 2, LTMPDLData->GetPDLValue3());
1299 fLTMSummaryData->SetPDL(4 * PDLWord + 3, LTMPDLData->GetPDLValue4());
1302 //_________________________________________________________________
1305 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMADCData *LTMADCData, Int_t ADCWord)
1309 * FillLTMSummaryData
1313 fLTMSummaryData->SetADC(3 * ADCWord + 0, LTMADCData->GetADCValue1());
1314 fLTMSummaryData->SetADC(3 * ADCWord + 1, LTMADCData->GetADCValue2());
1315 fLTMSummaryData->SetADC(3 * ADCWord + 2, LTMADCData->GetADCValue3());
1318 //_________________________________________________________________
1321 AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMORData *LTMORData, Int_t ORWord)
1325 * FillLTMSummaryData
1329 fLTMSummaryData->SetOR(3 * ORWord + 0, LTMORData->GetORValue1());
1330 fLTMSummaryData->SetOR(3 * ORWord + 1, LTMORData->GetORValue2());
1331 fLTMSummaryData->SetOR(3 * ORWord + 2, LTMORData->GetORValue3());
1334 //_________________________________________________________________
1337 AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalHeader *TRMGlobalHeader)
1341 * FillTRMSummaryData
1345 fTRMSummaryData->SetHeader(kTRUE);
1346 fTRMSummaryData->SetSlotID(TRMGlobalHeader->GetSlotID());
1347 fTRMSummaryData->SetEventWords(TRMGlobalHeader->GetEventWords());
1348 fTRMSummaryData->SetACQBits(TRMGlobalHeader->GetACQBits());
1349 fTRMSummaryData->SetLBit(TRMGlobalHeader->GetLBit());
1350 fTRMSummaryData->SetEBit(TRMGlobalHeader->GetEBit());
1353 //_________________________________________________________________
1356 AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalTrailer *TRMGlobalTrailer)
1360 * FillTRMSummaryData
1364 fTRMSummaryData->SetTrailer(kTRUE);
1365 fTRMSummaryData->SetEventCRC(TRMGlobalTrailer->GetEventCRC());
1366 fTRMSummaryData->SetEventCounter(TRMGlobalTrailer->GetEventCounter());
1369 //_________________________________________________________________
1372 AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainHeader *TRMChainHeader)
1376 * FillChainSummaryData
1380 fChainSummaryData->SetHeader(kTRUE);
1381 switch (*(UInt_t *)TRMChainHeader & WORD_TYPE_MASK){
1382 case CHAIN_A_HEADER:
1383 fChainSummaryData->SetChain(0);
1385 case CHAIN_B_HEADER:
1386 fChainSummaryData->SetChain(1);
1389 fChainSummaryData->SetBunchID(TRMChainHeader->GetBunchID());
1390 fChainSummaryData->SetPB24Temp(TRMChainHeader->GetPB24Temp());
1391 fChainSummaryData->SetPB24ID(TRMChainHeader->GetPB24ID());
1392 fChainSummaryData->SetTSBit(TRMChainHeader->GetTSBit());
1395 //_________________________________________________________________
1398 AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainTrailer *TRMChainTrailer)
1402 * FillChainSummaryData
1406 fChainSummaryData->SetTrailer(kTRUE);
1407 fChainSummaryData->SetStatus(TRMChainTrailer->GetStatus());
1408 fChainSummaryData->SetEventCounter(TRMChainTrailer->GetEventCounter());
1411 //_________________________________________________________________
1414 AliTOFDecoderV2::ResetSpider()
1418 AliInfo("Reset signal received, empty and reset buffer");
1419 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1420 if (fSpiderBufferFull[iChan]) {
1422 AliInfo(Form("Spider buffer is full for channel %d", iChan));
1423 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1425 fSpiderBufferFull[iChan] = kFALSE;
1432 AliTOFDecoderV2::Spider(AliTOFTDCHit &hit){
1435 AliInfo("Hit has been received from decode main routine");
1438 if (fSpiderTDCID != hit.GetTDCID()){
1440 AliInfo("Data coming from a new TDC, empty and reset buffer");
1441 for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
1442 if (fSpiderBufferFull[iChan])
1443 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
1444 fSpiderBufferFull[iChan] = kFALSE;
1446 fSpiderTDCPackedHitBuffer = fTDCPackedHitBuffer;
1447 fSpiderTDCID = hit.GetTDCID();
1451 switch(hit.GetPSBits()){
1453 case LEADING_HIT_PS:
1454 //check buffer status
1455 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1456 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()]); //buffered hit is orphane
1457 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1459 AliInfo("Leading hit and buffer full, buffered hit is a orphane leading hit");
1461 else{ //buffer empty
1462 fSpiderBuffer[hit.GetChan()] = hit; //current hit into buffer
1463 fSpiderBufferFull[hit.GetChan()] = kTRUE; //set buffer full
1467 case TRAILING_HIT_PS:
1468 //check buffer status
1469 if (fSpiderBufferFull[hit.GetChan()]){ //buffer full
1470 fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()] << hit); //pack hits (Leading << Trailing) and save
1471 fSpiderBufferFull[hit.GetChan()] = kFALSE; //unset buffer full
1473 AliInfo("Trailing hit and buffer full, pack leading and trailing hit");
1475 else{ //buffer empty
1478 AliInfo("Trailing hit and buffer empty, trow trailing hit away");
1485 //_________________________________________________________________
1488 AliTOFDecoderV2::DecodeNext()
1492 if (!fRawReader || !fRawReader->ReadHeader())
1495 const Int_t size = fRawReader->GetDataSize();
1496 UChar_t *data = new UChar_t[size];
1497 if (fRawReader->ReadNext(data, size) != 1) {
1502 /* decode equipment data */
1503 SetEquipmentID(fRawReader->GetEquipmentId());
1504 Decode((UInt_t *)data, size / 4);