#include "AliTOFDecoder.h"
#include "AliTOFGeometry.h"
#include "AliRawDataHeader.h"
+#include "AliRawDataHeaderV3.h"
#include "AliTOFRawDataFormat.h"
ClassImp(AliTOFDecoder)
fSpiderCurrentTDC(-1)
{
//default constructor
+
+ for (Int_t chan=0;chan<N_CHANNEL;chan++)
+ fSpiderLeadingFlag[chan] = kFALSE;
+
}
//_________________________________________________________________
fSpiderCurrentTDC(-1)
{
//another constructor
+
+ for (Int_t chan=0;chan<N_CHANNEL;chan++)
+ fSpiderLeadingFlag[chan] = kFALSE;
+
}
//_________________________________________________________________
fSpiderCurrentTDC(source.fSpiderCurrentTDC)
{
//copy constructor
+
+ for (Int_t chan=0;chan<N_CHANNEL;chan++)
+ fSpiderLeadingFlag[chan] = source.fSpiderLeadingFlag[chan];
}
fSpiderCurrentSlotID = source.fSpiderCurrentSlotID;
fSpiderCurrentChain = source.fSpiderCurrentChain;
fSpiderCurrentTDC = source.fSpiderCurrentTDC;
+ for (Int_t chan=0;chan<N_CHANNEL;chan++)
+ fSpiderLeadingFlag[chan] = source.fSpiderLeadingFlag[chan];
+
return *this;
}
//_________________________________________________________________
Bool_t
-AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh)
+AliTOFDecoder::Decode(const UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh, const AliRawDataHeaderV3 *cdhV3)
{
/* main decoding routine.
* it loops over nWords 32-bit words
* classes.
*/
+ AliTOFDRMStatusHeader3 *lDRMStatusHeader3;
AliTOFTRMGlobalHeader *lTRMGlobalHeader; //TRM global header
AliTOFTRMGlobalTrailer *lTRMGlobalTrailer; //TRM global trailer
AliTOFTRMChainHeader *lTRMChainHeader; //TRM chain header
Short_t currentACQ = -1;
Short_t currentChain = -1;
Short_t currentBunchID = -1;
- Short_t currentMiniEventID = cdh ? cdh->GetMiniEventID() : (Short_t)-1;
- Short_t currentEventID1 = cdh ? cdh->GetEventID1() : (Short_t)-1;
- AliDebug(1, Form("EvID1 = %d, EvID2 = %d, currentMiniEventID = %d", currentEventID1, cdh->GetEventID2(), currentMiniEventID));
- if (!cdh)
+ Short_t currentL0BCID = -1;
+ Short_t currentMiniEventID = cdh ? cdh->GetMiniEventID() : (Short_t)(-1);
+ currentMiniEventID = cdhV3 ? cdhV3->GetMiniEventID() : currentMiniEventID;
+ Short_t currentEventID1 = cdh ? cdh->GetEventID1() : (Short_t)(-1);
+ currentEventID1 = cdhV3 ? cdhV3->GetEventID1() : currentEventID1;
+ if (!cdh && !cdhV3)
AliWarning("CDH not valid: deltaBunchID not reliable ");
+ else
+ AliDebug(1, Form("EvID1 = %d, EvID2 = %d, currentMiniEventID = %d", currentEventID1, cdh? cdh->GetEventID2() : cdhV3->GetEventID2(), currentMiniEventID));
/*** V2718 patch ***/
if (fV2718Patch){
decodeStatus = decodeStatus | DRM_BIT;
//skip DRM data
- for (Int_t i = 0; i < DRM_DATA_WORDS; i++, iWord++, rawData++){
+ for (Int_t i = 0; i < DRM_DATA_WORDS; i++, iWord++){
+ rawData++;
if (fVerbose)
- AliInfo(Form(" %02x - 0x%08x \t DRM data",decodeStatus,*rawData));
+ AliInfo(Form(" %02x - 0x%08x \t DRM data",decodeStatus,*rawData));
+ switch (i) {
+ case 2:
+ lDRMStatusHeader3 = (AliTOFDRMStatusHeader3*)rawData;
+ currentL0BCID = lDRMStatusHeader3->GetL0BCID();
+ break;
+ default:
+ break;
+ }
}
break;
decodeStatus = decodeStatus | LTM_BIT;
//skip LTM data
- for (Int_t i = 0; i < LTM_DATA_WORDS; i++, iWord++, rawData++){
+ for (Int_t i = 0; i < LTM_DATA_WORDS; i++, iWord++){
+ rawData++;
if (fVerbose)
AliInfo(Form(" %02x - 0x%08x \t LTM data",decodeStatus,*rawData));
}
hitData.SetTOT((float)lTDCPackedHit->GetTOTWidth() * TOT_BIN_WIDTH);
hitData.SetTOTBin(lTDCPackedHit->GetTOTWidth());
hitData.SetDeltaBunchID(currentBunchID - currentEventID1);
+ hitData.SetL0L1Latency(currentMiniEventID - currentL0BCID);
//orphane leading hit
if (hitData.GetPS()==LEADING_HIT_PS){
hitData.SetTime((float)lTDCUnpackedHit->GetHitTime() * TIME_BIN_WIDTH);
hitData.SetTOT(-1.);
hitData.SetTOTBin(-1);
hitData.SetDeltaBunchID(currentBunchID - currentEventID1);
+ hitData.SetL0L1Latency(currentMiniEventID - currentL0BCID);
//push hit data in data buffer
if (fDataBuffer != 0x0)
fDataBuffer->Add(hitData);
hitData.SetTOT(-1.);
hitData.SetTOTBin(-1);
hitData.SetDeltaBunchID(currentBunchID - currentEventID1);
+ hitData.SetL0L1Latency(currentMiniEventID - currentL0BCID);
//push hit data in data buffer
if (fDataBuffer != 0x0)
fDataBuffer->Add(hitData);
}
return;
}
+
+//------------------------------------------------------------
+void AliTOFDecoder::PrintStack(const UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh, const AliRawDataHeaderV3 *cdhV3)
+{
+ /* It loops over nWords 32-bit words
+ * starting at *rawData and prints them in 0x format.
+ * It does not decode them!
+ */
+
+ Short_t currentMiniEventID = cdh ? cdh->GetMiniEventID() : (Short_t)(-1);
+ currentMiniEventID = cdhV3 ? cdhV3->GetMiniEventID() : currentMiniEventID;
+ Short_t currentEventID1 = cdh ? cdh->GetEventID1() : (Short_t)(-1);
+ currentEventID1 = cdhV3 ? cdhV3->GetEventID1() : currentEventID1;
+ if (!cdh && !cdhV3)
+ AliWarning("CDH not valid: deltaBunchID not reliable ");
+ else
+ AliDebug(1, Form("EvID1 = %d, EvID2 = %d, currentMiniEventID = %d", currentEventID1, cdh ? cdh->GetEventID2() : cdhV3->GetEventID2(), currentMiniEventID));
+
+ AliInfo("Printing raw data stack for current equipment\n");
+ AliInfo(" wordN - Hex Word ");
+ //loop over raw data
+ for (Int_t iWord = 0; iWord < nWords; iWord++, rawData++){
+ if (iWord<10) AliInfo(Form(" %i - 0x%08x",iWord,*rawData));
+ if (iWord>9 &&iWord<100) AliInfo(Form(" %i - 0x%08x",iWord,*rawData));
+ if (iWord>99) AliInfo(Form(" %i - 0x%08x",iWord,*rawData));
+ }
+ return;
+}