#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;
- AliInfo(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);
AliTOFGeometry *geom = new AliTOFGeometry();
Int_t indexDDL = ddl%4;
Int_t iSector = Int_t(ddl/4);
- //AliInfo(Form(" Sector = %i, DDL within sector = %i",iSector, indexDDL));
- if (fVerbose){
+ if (fVerbose)
AliInfo(Form(" Sector = %i, DDL within sector = %i",iSector, indexDDL));
- }
+
Int_t volume[5];
volume[0]=iSector;
Int_t minPlate=0, maxPlate=0, minStrip2=0, maxStrip2=0, minPadz=0, maxPadz=0, minPadx=0, maxPadx=0;
volume[2]=iStrip;
volume[3]=iPadz;
volume[4]=iPadx;
- if (fVerbose){
+ if (fVerbose)
AliInfo(Form(" volume[0] = %i, volume[1] = %i, volume[2] = %i, volume[3] = %i, volume[4] = %i",volume[0],volume[1],volume[2],volume[3],volume[4]));
- }
+
if (indexDDL==0 || indexDDL==2){
array[ichTOF]=geom->GetIndex(volume);
- if (fVerbose){
+ if (fVerbose)
AliInfo(Form(" ichTOF = %i, TOFChannel = %i",ichTOF,array[ichTOF]));
- }
+
}
else {
array[ichTOF]=geom->GetIndex(volume);
- if (fVerbose){
+ if (fVerbose)
AliInfo(Form(" ichTOF = %i, TOFChannel = %i",ichTOF,array[ichTOF]));
- }
+
}
ichTOF++;
}
}
}
//AliInfo(Form("ichTOF = %i",ichTOF));
- if ((((indexDDL==0 || indexDDL==2)&ichTOF)!=2160) || (((indexDDL==1 || indexDDL==3)&ichTOF)!=2208)){
+ if ((indexDDL%2==0 && ichTOF!=2160) ||
+ (indexDDL%2==1 && ichTOF!=2208)) {
AliWarning(Form("Something strange occurred, number of entries in array different from expected! Please, check! ichTOF = %i",ichTOF));
}
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;
+}