#include "AliLog.h"
#include "AliTOFRawDataFormat.h"
#include "AliTOFDecoderV2.h"
#include "AliTOFTDCHit.h"
#include "AliTOFDecoderSummaryData.h"
#include "AliTOFDRMSummaryData.h"
#include "AliTOFLTMSummaryData.h"
#include "AliTOFTRMSummaryData.h"
#include "AliTOFChainSummaryData.h"
#include "AliTOFTDCHitBuffer.h"
#include "AliTOFTDCErrorBuffer.h"
#include "AliRawDataHeader.h"
ClassImp(AliTOFDecoderV2)
AliTOFDecoderV2::AliTOFDecoderV2(AliRawReader *reader) :
TObject(),
fRawReader(reader),
fVerbose(kFALSE),
fLogErrors(kFALSE),
fV2718Patch(kFALSE),
fRecoverError(kTRUE),
fRecoverErrorThr(0),
fSpider(kTRUE),
fRunNumber(0),
fEventNumber(0),
fEquipmentID(0),
fDecoderSummaryData(0x0),
fDRMSummaryData(0x0),
fLTMSummaryData(0x0),
fTRMSummaryData(0x0),
fChainSummaryData(0x0),
fTDCHitBuffer(0x0),
fTDCPackedHitBuffer(0x0),
fTDCErrorBuffer(0x0),
fDRMGlobalHeader(0x0),
fDRMGlobalTrailer(0x0),
fDRMStatusHeader1(0x0),
fDRMStatusHeader2(0x0),
fDRMStatusHeader3(0x0),
fDRMStatusHeader4(0x0),
fDRMEventCRC(0x0),
fLTMGlobalHeader(0x0),
fLTMGlobalTrailer(0x0),
fLTMPDLData(0x0),
fLTMADCData(0x0),
fLTMORData(0x0),
fTRMGlobalHeader(0x0),
fTRMGlobalTrailer(0x0),
fTRMChainHeader(0x0),
fTRMChainTrailer(0x0),
fTDCPackedHit(0x0),
fTDCUnpackedHit(0x0),
fTRMTDCError(0x0),
fTRMDiagnosticErrorWord1(0x0),
fTRMDiagnosticErrorWord2(0x0),
fSpiderTDCID(-1),
fSpiderTDCPackedHitBuffer(0x0)
{
if (fRawReader)
fRawReader->Select("TOF", 0, 71);
fDecoderSummaryData = new AliTOFDecoderSummaryData();
for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++)
fSpiderBufferFull[iChan] = kFALSE;
}
AliTOFDecoderV2::AliTOFDecoderV2(const AliTOFDecoderV2 &source) :
TObject(),
fRawReader(source.fRawReader),
fVerbose(source.fVerbose),
fLogErrors(source.fLogErrors),
fV2718Patch(source.fV2718Patch),
fRecoverError(source.fRecoverError),
fRecoverErrorThr(source.fRecoverErrorThr),
fSpider(source.fSpider),
fRunNumber(source.fRunNumber),
fEventNumber(source.fEventNumber),
fEquipmentID(source.fEquipmentID),
fDecoderSummaryData(0x0),
fDRMSummaryData(0x0),
fLTMSummaryData(0x0),
fTRMSummaryData(0x0),
fChainSummaryData(0x0),
fTDCHitBuffer(0x0),
fTDCPackedHitBuffer(0x0),
fTDCErrorBuffer(0x0),
fDRMGlobalHeader(0x0),
fDRMGlobalTrailer(0x0),
fDRMStatusHeader1(0x0),
fDRMStatusHeader2(0x0),
fDRMStatusHeader3(0x0),
fDRMStatusHeader4(0x0),
fDRMEventCRC(0x0),
fLTMGlobalHeader(0x0),
fLTMGlobalTrailer(0x0),
fLTMPDLData(0x0),
fLTMADCData(0x0),
fLTMORData(0x0),
fTRMGlobalHeader(0x0),
fTRMGlobalTrailer(0x0),
fTRMChainHeader(0x0),
fTRMChainTrailer(0x0),
fTDCPackedHit(0x0),
fTDCUnpackedHit(0x0),
fTRMTDCError(0x0),
fTRMDiagnosticErrorWord1(0x0),
fTRMDiagnosticErrorWord2(0x0),
fSpiderTDCID(-1),
fSpiderTDCPackedHitBuffer(0x0)
{
fDecoderSummaryData = new AliTOFDecoderSummaryData(*source.fDecoderSummaryData);
for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++)
fSpiderBufferFull[iChan] = kFALSE;
}
AliTOFDecoderV2 &
AliTOFDecoderV2::operator = (const AliTOFDecoderV2 &source)
{
if (this == &source) return *this;
TObject::operator=(source);
fRawReader = source.fRawReader;
fVerbose = source.fVerbose;
fLogErrors = source.fLogErrors;
fV2718Patch = source.fV2718Patch;
fRecoverError = source.fRecoverError;
fRecoverErrorThr = source.fRecoverErrorThr;
fSpider = source.fSpider;
fRunNumber = source.fRunNumber;
fEventNumber = source.fEventNumber;
fEquipmentID = source.fEquipmentID;
*fDecoderSummaryData = *source.fDecoderSummaryData;
return *this;
}
AliTOFDecoderV2::~AliTOFDecoderV2()
{
delete fDecoderSummaryData;
}
Bool_t
AliTOFDecoderV2::Decode(UInt_t *rawData, UInt_t nWords)
{
fDecoderSummaryData->Reset();
fDecoderSummaryData->SetRunNumber(fRunNumber);
fDecoderSummaryData->SetEventNumber(fEventNumber);
fDecoderSummaryData->SetEquipmentID(fEquipmentID);
fDecoderSummaryData->SetInputWords(nWords);
fDecoderSummaryData->SetRecoverError(fRecoverError);
fDecoderSummaryData->SetSpider(fSpider);
AliTOFTDCHit hit;
AliTOFTDCError error;
UShort_t decoderStatus = 0x0;
UInt_t drmCRC = 0x0;
UInt_t ltmCRC = 0x0;
UInt_t trmCRC = 0x0;
Int_t errorWarning = 0;
if (fRecoverError && fVerbose)
AliInfo("Recover error option enabled: potentially dangerous!");
if (fV2718Patch){
decoderStatus = decoderStatus | DRM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
fDecoderSummaryData->SetCurrentDRMID(0x0);
fDecoderSummaryData->SetV2718Patch(kTRUE);
fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
fDRMSummaryData->SetHeader(kTRUE);
fDRMSummaryData->SetDRMID(0x0);
if (fVerbose)
AliInfo("DRM not present: - V2718 patch decoding -");
}
if (fVerbose)
AliInfo("Start decoding");
if (fVerbose)
AliInfo("Loop over the data and decode");
if (fVerbose)
AliInfo(" St Hex Word \t Decoded Word");
for (UInt_t iWord = 0;
iWord < nWords;
iWord++, rawData++, fDecoderSummaryData->SetDecodedWords(iWord)){
if (fDecoderSummaryData->GetRecoveringError() && fVerbose)
AliInfo(Form(" %02x - 0x%08x",decoderStatus,*rawData));
drmCRC ^= *rawData;
ltmCRC ^= *rawData;
trmCRC ^= *rawData;
switch (*rawData & WORD_TYPE_MASK){
case GLOBAL_HEADER:
switch (*rawData & SLOT_ID_MASK){
case 1:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != DRM_HEADER_STATUS ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fDRMGlobalHeader = (AliTOFDRMGlobalHeader *)rawData;
drmCRC = 0x0;
fDecoderSummaryData->SetCurrentDRMID(fDRMGlobalHeader->GetDRMID());
fDecoderSummaryData->SetCurrentSlotID(fDRMGlobalHeader->GetSlotID());
fDRMSummaryData = fDecoderSummaryData->GetDRMSummaryData();
fDRMSummaryData->Reset();
FillDRMSummaryData(fDRMGlobalHeader);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM global header",decoderStatus,*rawData));
decoderStatus = decoderStatus | DRM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
for (Int_t i = 0; i < DRM_STATUS_HEADER_WORDS; i++){
iWord++;
rawData++;
drmCRC ^= *rawData;
switch (i){
case 0:
fDRMStatusHeader1 = (AliTOFDRMStatusHeader1 *)rawData;
FillDRMSummaryData(fDRMStatusHeader1);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM status header 1",decoderStatus,*rawData));
break;
case 1:
fDRMStatusHeader2 = (AliTOFDRMStatusHeader2 *)rawData;
FillDRMSummaryData(fDRMStatusHeader2);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM status header 2",decoderStatus,*rawData));
break;
case 2:
fDRMStatusHeader3 = (AliTOFDRMStatusHeader3 *)rawData;
FillDRMSummaryData(fDRMStatusHeader3);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM status header 3",decoderStatus,*rawData));
break;
case 3:
fDRMStatusHeader4 = (AliTOFDRMStatusHeader4 *)rawData;
FillDRMSummaryData(fDRMStatusHeader4);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM status header 4",decoderStatus,*rawData));
break;
}
}
iWord++;
rawData++;
drmCRC ^= *rawData;
drmCRC ^= *rawData;
fDRMEventCRC = (AliTOFDRMEventCRC *)rawData;
FillDRMSummaryData(fDRMEventCRC);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM event CRC",decoderStatus,*rawData));
break;
case 2:
if (fDecoderSummaryData->GetRecoveringError()){
decoderStatus = LTM_HEADER_STATUS;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
fDecoderSummaryData->SetRecoveringError(kFALSE);
if (fVerbose)
AliInfo("LTM global header found: error probably recovered");
}
if ( decoderStatus != LTM_HEADER_STATUS ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fLTMGlobalHeader = (AliTOFLTMGlobalHeader *)rawData;
ltmCRC = 0x0;
fDecoderSummaryData->SetCurrentSlotID(fLTMGlobalHeader->GetSlotID());
fLTMSummaryData = fDRMSummaryData->GetLTMSummaryData();
fLTMSummaryData->Reset();
FillLTMSummaryData(fLTMGlobalHeader);
fDRMSummaryData->SetDecoderSlotEnableMaskBit(fLTMGlobalHeader->GetSlotID() - 2);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t LTM global header",decoderStatus,*rawData));
decoderStatus = decoderStatus | LTM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
for (Int_t iPDLWord = 0; iPDLWord < LTM_PDL_DATA_WORDS; iPDLWord++){
iWord++;
rawData++;
drmCRC ^= *rawData;
ltmCRC ^= *rawData;
fLTMPDLData = (AliTOFLTMPDLData *)rawData;
FillLTMSummaryData(fLTMPDLData, iPDLWord);
if (fVerbose)
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()));
}
for (Int_t iADCWord = 0; iADCWord < LTM_ADC_DATA_WORDS; iADCWord++){
iWord++;
rawData++;
drmCRC ^= *rawData;
ltmCRC ^= *rawData;
fLTMADCData = (AliTOFLTMADCData *)rawData;
FillLTMSummaryData(fLTMADCData, iADCWord);
if (fVerbose)
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()));
}
for (Int_t iORWord = 0; iORWord < LTM_OR_DATA_WORDS; iORWord++){
iWord++;
rawData++;
drmCRC ^= *rawData;
ltmCRC ^= *rawData;
fLTMORData = (AliTOFLTMORData *)rawData;
FillLTMSummaryData(fLTMORData, iORWord);
if (fVerbose)
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()));
}
break;
case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
if (fDecoderSummaryData->GetRecoveringError()){
decoderStatus = TRM_HEADER_STATUS;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
fDecoderSummaryData->SetRecoveringError(kFALSE);
if (fVerbose)
AliInfo("TRM global header found: error probably recovered");
}
if ( decoderStatus != TRM_HEADER_STATUS ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fTRMGlobalHeader = (AliTOFTRMGlobalHeader *)rawData;
trmCRC = 0x0;
fDecoderSummaryData->SetCurrentSlotID(fTRMGlobalHeader->GetSlotID());
fTRMSummaryData = fDRMSummaryData->GetTRMSummaryData(fTRMGlobalHeader->GetSlotID() - TRM_FIRST_SLOT_ID);
fTRMSummaryData->Reset();
FillTRMSummaryData(fTRMGlobalHeader);
fDRMSummaryData->SetDecoderSlotEnableMaskBit(fTRMGlobalHeader->GetSlotID() - 2);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TRM global header \t slotID=%02d ACQ=%01d L=%01d",decoderStatus,*rawData,fTRMGlobalHeader->GetSlotID(),fTRMGlobalHeader->GetACQBits(),fTRMGlobalHeader->GetLBit()));
decoderStatus = decoderStatus | TRM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
break;
default:
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID in global header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
break;
}
break;
case GLOBAL_TRAILER:
switch (*rawData & SLOT_ID_MASK){
case 1:
if (fDecoderSummaryData->GetRecoveringError()){
decoderStatus = DRM_TRAILER_STATUS;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
fDecoderSummaryData->SetRecoveringError(kFALSE);
if (fVerbose)
AliInfo("DRM global trailer found: error probably recovered");
}
if ( decoderStatus != DRM_TRAILER_STATUS ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected DRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fDRMGlobalTrailer = (AliTOFDRMGlobalTrailer *)rawData;
drmCRC ^= *rawData;
FillDRMSummaryData(fDRMGlobalTrailer);
fDRMSummaryData->SetDecoderCRC(COMPUTE_DRM_CRC(drmCRC));
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t DRM global trailer",decoderStatus,*rawData));
decoderStatus = decoderStatus & ~DRM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
break;
case 2:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != LTM_TRAILER_STATUS ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected LTM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fLTMGlobalTrailer = (AliTOFLTMGlobalTrailer *)rawData;
ltmCRC ^= *rawData;
FillLTMSummaryData(fLTMGlobalTrailer);
fLTMSummaryData->SetDecoderCRC(COMPUTE_LTM_CRC(ltmCRC));
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t LTM global trailer",decoderStatus,*rawData));
decoderStatus = decoderStatus & ~LTM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
break;
case 15:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != TRM_TRAILER_STATUS ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fTRMGlobalTrailer = (AliTOFTRMGlobalTrailer *)rawData;
trmCRC ^= *rawData;
FillTRMSummaryData(fTRMGlobalTrailer);
fTRMSummaryData->SetDecoderCRC(COMPUTE_TRM_CRC(trmCRC));
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TRM global trailer \t CRC=%04d eventCounter=%04d",decoderStatus,*rawData,fTRMGlobalTrailer->GetEventCRC(),fTRMGlobalTrailer->GetEventCounter()));
decoderStatus = decoderStatus & ~TRM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
break;
default:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
return(fDecoderSummaryData->GetErrorDetected());
break;
}
break;
case CHAIN_A_HEADER:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != CHAIN_A_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError() ){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
fDecoderSummaryData->SetCurrentChain(0);
fChainSummaryData = fTRMSummaryData->GetChainSummaryData(0);
fChainSummaryData->Reset();
FillChainSummaryData(fTRMChainHeader);
fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
fTDCHitBuffer->Reset();
fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
fTDCPackedHitBuffer->Reset();
fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
fTDCErrorBuffer->Reset();
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TRM chain A header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,0,fTRMChainHeader->GetBunchID()));
decoderStatus = decoderStatus | CHAIN_A_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
if (fSpider)
ResetSpider();
break;
case CHAIN_A_TRAILER:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != CHAIN_A_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain A trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
FillChainSummaryData(fTRMChainTrailer);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TRM chain A trailer",decoderStatus,*rawData));
decoderStatus = decoderStatus & ~CHAIN_A_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
break;
case CHAIN_B_HEADER:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != CHAIN_B_HEADER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B header (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fTRMChainHeader = (AliTOFTRMChainHeader *)rawData;
fDecoderSummaryData->SetCurrentChain(1);
fChainSummaryData = fTRMSummaryData->GetChainSummaryData(1);
fChainSummaryData->Reset();
FillChainSummaryData(fTRMChainHeader);
fTDCHitBuffer = fChainSummaryData->GetTDCHitBuffer();
fTDCHitBuffer->Reset();
fTDCPackedHitBuffer = fChainSummaryData->GetTDCPackedHitBuffer();
fTDCPackedHitBuffer->Reset();
fTDCErrorBuffer = fChainSummaryData->GetTDCErrorBuffer();
fTDCErrorBuffer->Reset();
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TRM chain B header \t chain=%01d bunchID=%04d",decoderStatus,*rawData,1,fTRMChainHeader->GetBunchID()));
decoderStatus = decoderStatus | CHAIN_B_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
if (fSpider)
ResetSpider();
break;
case CHAIN_B_TRAILER:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != CHAIN_B_TRAILER_STATUS && !fDecoderSummaryData->GetRecoveringError()){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected TRM chain B trailer (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
fTRMChainTrailer = (AliTOFTRMChainTrailer *)rawData;
FillChainSummaryData(fTRMChainTrailer);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TRM chain B trailer",decoderStatus,*rawData));
decoderStatus = decoderStatus & ~CHAIN_B_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
break;
case ERROR:
if (fDecoderSummaryData->GetRecoveringError())
continue;
fTRMTDCError = (AliTOFTRMTDCError *)rawData;
if (fTRMTDCError->GetTDCID() == 15) {
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t Diagnostic error word",decoderStatus,*rawData));
break;
}
error.SetErrorFlags(fTRMTDCError->GetErrorFlags());
error.SetTDCID(fTRMTDCError->GetTDCID());
fTDCErrorBuffer->Add(error);
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t TDC error",decoderStatus,*rawData));
break;
case FILLER:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t Filler",decoderStatus,*rawData));
break;
default:
if (fDecoderSummaryData->GetRecoveringError())
continue;
if ( decoderStatus != CHAIN_A_TDC_HIT_STATUS &&
decoderStatus != CHAIN_B_TDC_HIT_STATUS && !fDecoderSummaryData->GetRecoveringError()){
if (fLogErrors)
AliError(Form(" %02x - 0x%08x [ERROR] Unexpected or unknown word (curslot=%d)",decoderStatus,*rawData,fDecoderSummaryData->GetCurrentSlotID()));
fDecoderSummaryData->SetErrorDetected(kTRUE);
fDecoderSummaryData->SetErrorSlotID(fDecoderSummaryData->GetCurrentSlotID());
errorWarning++;
if (fRecoverError){
if (errorWarning > fRecoverErrorThr) {
if (fVerbose)
AliInfo("Trying to recover the error: searching for the next header");
fDecoderSummaryData->SetRecoveringError(kTRUE);
continue;
}
else {
if (fVerbose)
AliInfo("Do not try to recover error yet, go on with decoding process");
continue;
}
}
return(fDecoderSummaryData->GetErrorDetected());
}
errorWarning = 0;
switch (fTRMSummaryData->GetACQBits()){
case PACKING_ENABLED_ACQ:
fTDCPackedHit = (AliTOFTDCPackedHit *)rawData;
fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
hit.SetChan(fTDCUnpackedHit->GetChan());
hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
hit.SetEBit(fTDCUnpackedHit->GetEBit());
hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
switch (hit.GetPSBits()){
case PACKED_HIT_PS: case TOT_OVF_HIT_PS:
hit.SetHitTime(fTDCPackedHit->GetHitTime());
hit.SetTOTWidth(fTDCPackedHit->GetTOTWidth());
fTDCHitBuffer->Add(hit);
fTDCPackedHitBuffer->Add(hit);
break;
case LEADING_HIT_PS:
hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
hit.SetTOTWidth(0);
fTDCHitBuffer->Add(hit);
fTDCPackedHitBuffer->Add(hit);
break;
case TRAILING_HIT_PS:
hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
hit.SetTOTWidth(0);
fTDCHitBuffer->Add(hit);
break;
}
if (fVerbose)
switch (hit.GetPSBits()){
case PACKED_HIT_PS:
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));
break;
case LEADING_HIT_PS:
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));
break;
case TRAILING_HIT_PS:
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));
break;
case TOT_OVF_HIT_PS:
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));
break;
}
break;
case LEADING_ONLY_ACQ: case TRAILING_ONLY_ACQ:
fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
hit.SetChan(fTDCUnpackedHit->GetChan());
hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
hit.SetEBit(fTDCUnpackedHit->GetEBit());
hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
hit.SetTOTWidth(0);
fTDCHitBuffer->Add(hit);
if (fVerbose)
switch (hit.GetPSBits()){
case LEADING_HIT_PS:
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));
break;
case TRAILING_HIT_PS:
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));
}
break;
case PACKING_DISABLED_ACQ:
fTDCUnpackedHit = (AliTOFTDCUnpackedHit *)rawData;
hit.SetChan(fTDCUnpackedHit->GetChan());
hit.SetTDCID(fTDCUnpackedHit->GetTDCID());
hit.SetEBit(fTDCUnpackedHit->GetEBit());
hit.SetPSBits(fTDCUnpackedHit->GetPSBits());
hit.SetHitTime(fTDCUnpackedHit->GetHitTime());
hit.SetTOTWidth(0);
fTDCHitBuffer->Add(hit);
if (fVerbose)
switch (hit.GetPSBits()){
case LEADING_HIT_PS:
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));
break;
case TRAILING_HIT_PS:
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));
}
if (fSpider)
Spider(hit);
break;
}
break;
}
}
if (fVerbose)
AliInfo("End of data loop");
if (fSpider)
ResetSpider();
if (fV2718Patch){
decoderStatus = decoderStatus & ~DRM_BIT;
fDecoderSummaryData->SetDecoderStatus(decoderStatus);
fDRMSummaryData->SetTrailer(kTRUE);
fDRMSummaryData->SetSlotEnableMask(fDRMSummaryData->GetDecoderSlotEnableMask());
fDRMSummaryData->SetCBit(1);
fDRMSummaryData->SetLocalEventCounter(fTRMSummaryData->GetEventCounter());
if (fVerbose)
AliInfo("DRM was not present: - V2718 end patch decoding -");
}
if (fVerbose)
AliInfo("Decoder is exiting succesfully.");
return(fDecoderSummaryData->GetErrorDetected());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalHeader *DRMGlobalHeader)
{
fDRMSummaryData->SetHeader(kTRUE);
fDRMSummaryData->SetSlotID(DRMGlobalHeader->GetSlotID());
fDRMSummaryData->SetEventWords(DRMGlobalHeader->GetEventWords());
fDRMSummaryData->SetDRMID(DRMGlobalHeader->GetDRMID());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMGlobalTrailer *DRMGlobalTrailer)
{
fDRMSummaryData->SetTrailer(kTRUE);
fDRMSummaryData->SetLocalEventCounter(DRMGlobalTrailer->GetLocalEventCounter());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader1 *DRMStatusHeader1)
{
fDRMSummaryData->SetPartecipatingSlotID(DRMStatusHeader1->GetPartecipatingSlotID());
fDRMSummaryData->SetCBit(DRMStatusHeader1->GetCBit());
fDRMSummaryData->SetVersID(DRMStatusHeader1->GetVersID());
fDRMSummaryData->SetDRMhSize(DRMStatusHeader1->GetDRMhSize());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader2 *DRMStatusHeader2)
{
fDRMSummaryData->SetSlotEnableMask(DRMStatusHeader2->GetSlotEnableMask());
fDRMSummaryData->SetFaultID(DRMStatusHeader2->GetFaultID());
fDRMSummaryData->SetRTOBit(DRMStatusHeader2->GetRTOBit());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader3 *DRMStatusHeader3)
{
fDRMSummaryData->SetL0BCID(DRMStatusHeader3->GetL0BCID());
fDRMSummaryData->SetRunTimeInfo(DRMStatusHeader3->GetRunTimeInfo());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMStatusHeader4 *DRMStatusHeader4)
{
fDRMSummaryData->SetTemperature(DRMStatusHeader4->GetTemperature());
fDRMSummaryData->SetACKBit(DRMStatusHeader4->GetACKBit());
fDRMSummaryData->SetSensAD(DRMStatusHeader4->GetSensAD());
}
void
AliTOFDecoderV2::FillDRMSummaryData(const AliTOFDRMEventCRC *DRMEventCRC)
{
fDRMSummaryData->SetEventCRC(DRMEventCRC->GetEventCRC());
}
void
AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalHeader *LTMGlobalHeader)
{
fLTMSummaryData->SetHeader(kTRUE);
fLTMSummaryData->SetSlotID(LTMGlobalHeader->GetSlotID());
fLTMSummaryData->SetEventWords(LTMGlobalHeader->GetEventWords());
fLTMSummaryData->SetCBit(LTMGlobalHeader->GetCBit());
fLTMSummaryData->SetFault(LTMGlobalHeader->GetFault());
}
void
AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMGlobalTrailer *LTMGlobalTrailer)
{
fLTMSummaryData->SetTrailer(kTRUE);
fLTMSummaryData->SetEventCRC(LTMGlobalTrailer->GetEventCRC());
fLTMSummaryData->SetEventNumber(LTMGlobalTrailer->GetEventNumber());
}
void
AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord)
{
fLTMSummaryData->SetPDL(4 * PDLWord + 0, LTMPDLData->GetPDLValue1());
fLTMSummaryData->SetPDL(4 * PDLWord + 1, LTMPDLData->GetPDLValue2());
fLTMSummaryData->SetPDL(4 * PDLWord + 2, LTMPDLData->GetPDLValue3());
fLTMSummaryData->SetPDL(4 * PDLWord + 3, LTMPDLData->GetPDLValue4());
}
void
AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMADCData *LTMADCData, Int_t ADCWord)
{
fLTMSummaryData->SetADC(3 * ADCWord + 0, LTMADCData->GetADCValue1());
fLTMSummaryData->SetADC(3 * ADCWord + 1, LTMADCData->GetADCValue2());
fLTMSummaryData->SetADC(3 * ADCWord + 2, LTMADCData->GetADCValue3());
}
void
AliTOFDecoderV2::FillLTMSummaryData(const AliTOFLTMORData *LTMORData, Int_t ORWord)
{
fLTMSummaryData->SetOR(3 * ORWord + 0, LTMORData->GetORValue1());
fLTMSummaryData->SetOR(3 * ORWord + 1, LTMORData->GetORValue2());
fLTMSummaryData->SetOR(3 * ORWord + 2, LTMORData->GetORValue3());
}
void
AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalHeader *TRMGlobalHeader)
{
fTRMSummaryData->SetHeader(kTRUE);
fTRMSummaryData->SetSlotID(TRMGlobalHeader->GetSlotID());
fTRMSummaryData->SetEventWords(TRMGlobalHeader->GetEventWords());
fTRMSummaryData->SetACQBits(TRMGlobalHeader->GetACQBits());
fTRMSummaryData->SetLBit(TRMGlobalHeader->GetLBit());
fTRMSummaryData->SetEBit(TRMGlobalHeader->GetEBit());
}
void
AliTOFDecoderV2::FillTRMSummaryData(const AliTOFTRMGlobalTrailer *TRMGlobalTrailer)
{
fTRMSummaryData->SetTrailer(kTRUE);
fTRMSummaryData->SetEventCRC(TRMGlobalTrailer->GetEventCRC());
fTRMSummaryData->SetEventCounter(TRMGlobalTrailer->GetEventCounter());
}
void
AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainHeader *TRMChainHeader)
{
fChainSummaryData->SetHeader(kTRUE);
switch (*(UInt_t *)TRMChainHeader & WORD_TYPE_MASK){
case CHAIN_A_HEADER:
fChainSummaryData->SetChain(0);
break;
case CHAIN_B_HEADER:
fChainSummaryData->SetChain(1);
break;
}
fChainSummaryData->SetBunchID(TRMChainHeader->GetBunchID());
fChainSummaryData->SetPB24Temp(TRMChainHeader->GetPB24Temp());
fChainSummaryData->SetPB24ID(TRMChainHeader->GetPB24ID());
fChainSummaryData->SetTSBit(TRMChainHeader->GetTSBit());
}
void
AliTOFDecoderV2::FillChainSummaryData(const AliTOFTRMChainTrailer *TRMChainTrailer)
{
fChainSummaryData->SetTrailer(kTRUE);
fChainSummaryData->SetStatus(TRMChainTrailer->GetStatus());
fChainSummaryData->SetEventCounter(TRMChainTrailer->GetEventCounter());
}
void
AliTOFDecoderV2::ResetSpider()
{
if (fVerbose)
AliInfo("Reset signal received, empty and reset buffer");
for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
if (fSpiderBufferFull[iChan]) {
if (fVerbose)
AliInfo(Form("Spider buffer is full for channel %d", iChan));
fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
}
fSpiderBufferFull[iChan] = kFALSE;
}
fSpiderTDCID = -1;
return;
}
void
AliTOFDecoderV2::Spider(AliTOFTDCHit &hit){
if (fVerbose)
AliInfo("Hit has been received from decode main routine");
if (fSpiderTDCID != hit.GetTDCID()){
if (fVerbose)
AliInfo("Data coming from a new TDC, empty and reset buffer");
for (Int_t iChan = 0; iChan < N_CHANNEL; iChan++){
if (fSpiderBufferFull[iChan])
fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[iChan]);
fSpiderBufferFull[iChan] = kFALSE;
}
fSpiderTDCPackedHitBuffer = fTDCPackedHitBuffer;
fSpiderTDCID = hit.GetTDCID();
}
switch(hit.GetPSBits()){
case LEADING_HIT_PS:
if (fSpiderBufferFull[hit.GetChan()]){
fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()]);
fSpiderBuffer[hit.GetChan()] = hit;
if (fVerbose)
AliInfo("Leading hit and buffer full, buffered hit is a orphane leading hit");
}
else{
fSpiderBuffer[hit.GetChan()] = hit;
fSpiderBufferFull[hit.GetChan()] = kTRUE;
}
break;
case TRAILING_HIT_PS:
if (fSpiderBufferFull[hit.GetChan()]){
fSpiderTDCPackedHitBuffer->Add(fSpiderBuffer[hit.GetChan()] << hit);
fSpiderBufferFull[hit.GetChan()] = kFALSE;
if (fVerbose)
AliInfo("Trailing hit and buffer full, pack leading and trailing hit");
}
else{
;
if (fVerbose)
AliInfo("Trailing hit and buffer empty, trow trailing hit away");
}
break;
}
}
Bool_t
AliTOFDecoderV2::DecodeNext()
{
if (!fRawReader || !fRawReader->ReadHeader())
return kFALSE;
const Int_t size = fRawReader->GetDataSize();
UChar_t *data = new UChar_t[size];
if (fRawReader->ReadNext(data, size) != 1) {
delete [] data;
return kFALSE;
}
SetEquipmentID(fRawReader->GetEquipmentId());
Decode((UInt_t *)data, size / 4);
delete [] data;
return kTRUE;
}