// //\r
////////////////////////////////////////////////////////////////////////////////\r
\r
-#include "TString.h"\r
#include "TFile.h"\r
-#include "TTreeStream.h"\r
\r
#include "AliTRDrawFastStream.h"\r
#include "AliTRDgeometry.h"\r
#include "AliTRDarrayDictionary.h"\r
#include "AliTRDarrayADC.h"\r
#include "AliTRDSignalIndex.h"\r
-#include "AliTRDrawTPStream.h"\r
+#include "AliTRDdigitsParam.h"\r
\r
-#include "AliLog.h"\r
#include "AliRawReader.h"\r
\r
#define END_OF_TRACKLET_MARKEROLD 0xaaaaaaaa\r
#define HC_NTIMEBINS(w) GET_VALUE_AT(w,0x3f,26)\r
#define HC_BUNCH_CROSS_COUNTER(w) GET_VALUE_AT(w,0xffff,10)\r
#define HC_PRETRIGGER_COUNTER(w) GET_VALUE_AT(w,0xf,6)\r
-#define HC_PRETRIGGER_PHASE(w) GET_VALUE_AT(w,0xf,6)\r
+#define HC_PRETRIGGER_PHASE(w) GET_VALUE_AT(w,0xf,2)\r
\r
// MCM word and ADC mask\r
#define MCM_HEADER_MASK_ERR(w) ( ((w) & (0xf)) == (0xc) ? 0 : 1) // 0 if OK!!!\r
\r
Bool_t AliTRDrawFastStream::fgExtraSkip = kFALSE;\r
Bool_t AliTRDrawFastStream::fgSkipCDH = kFALSE;\r
-Bool_t AliTRDrawFastStream::fgWarnError = kTRUE;\r
Bool_t AliTRDrawFastStream::fgCleanDataOnly = kFALSE;\r
Bool_t AliTRDrawFastStream::fgDebugFlag = kTRUE;\r
Bool_t AliTRDrawFastStream::fgEnableMemoryReset = kTRUE;\r
Bool_t AliTRDrawFastStream::fgStackNumberChecker = kTRUE;\r
-Bool_t AliTRDrawFastStream::fgStackLinkNumberChecker = kTRUE;\r
+Bool_t AliTRDrawFastStream::fgStackLinkNumberChecker = kFALSE;\r
Bool_t AliTRDrawFastStream::fgSkipData = kTRUE;\r
Bool_t AliTRDrawFastStream::fgEnableDecodeConfigData = kFALSE;\r
Int_t AliTRDrawFastStream::fgDumpHead = -1;\r
-Int_t AliTRDrawFastStream::fgCommonAdditive = 0;\r
Short_t AliTRDrawFastStream::fgMCMordering[] =\r
{\r
12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3 \r
{\r
0, 1, 2, 3\r
};\r
-Bool_t AliTRDrawFastStream::fDumpingEnable = kFALSE;\r
-Int_t AliTRDrawFastStream::fDumpingSM = -1;\r
-Int_t AliTRDrawFastStream::fDumpingStack = -1;\r
-Int_t AliTRDrawFastStream::fDumpingLayer = -1;\r
-Int_t AliTRDrawFastStream::fDumpingROB = -1;\r
-Int_t AliTRDrawFastStream::fDumpingMCM = -1;\r
\r
Int_t AliTRDrawFastStream::fgLastHC = -1;\r
Int_t AliTRDrawFastStream::fgLastROB = -1;\r
, fSM()\r
, fStack(0)\r
, fHC(0)\r
+ , fLastHC(0)\r
, fMCM()\r
, fpPos(0)\r
, fpBegin(0)\r
, fpEnd(0)\r
, fWordLength(0)\r
+ , fpPosTemp(0)\r
+ , fGlobalNTimeBins(0)\r
+ , fIsTimeBinSet(kFALSE)\r
, fStackNumber(-1)\r
, fStackLinkNumber(-1)\r
, fLinkTrackletCounter(-1)\r
, fCOL(0)\r
, fExtendedCOL(0)\r
, fIsShared(0)\r
+ , fWarnError(kTRUE)\r
+ , fWarnWarning(kFALSE)\r
, fBufferRead(0)\r
, fGeometry(0)\r
, fRawReader(0)\r
, fTRDfeeParam(0)\r
+ , fCommonAdditive(0)\r
{\r
//\r
// default constructor\r
, fSM()\r
, fStack(0)\r
, fHC(0)\r
+ , fLastHC(0)\r
, fMCM()\r
, fpPos(0)\r
, fpBegin(0)\r
, fpEnd(0)\r
, fWordLength(0)\r
+ , fpPosTemp(0)\r
+ , fGlobalNTimeBins(0)\r
+ , fIsTimeBinSet(kFALSE)\r
, fStackNumber(-1)\r
, fStackLinkNumber(-1)\r
, fLinkTrackletCounter(-1)\r
, fCOL(0)\r
, fExtendedCOL(0)\r
, fIsShared(0)\r
+ , fWarnError(kTRUE)\r
+ , fWarnWarning(kFALSE)\r
, fBufferRead(0)\r
, fGeometry(0)\r
, fRawReader(rawReader)\r
, fTRDfeeParam(0)\r
+ , fCommonAdditive(0)\r
{\r
//\r
// default constructor\r
, fSM()\r
, fStack(0)\r
, fHC(0)\r
+ , fLastHC(0)\r
, fMCM()\r
, fpPos(0)\r
, fpBegin(0)\r
, fpEnd(0)\r
, fWordLength(0)\r
+ , fpPosTemp(0)\r
+ , fGlobalNTimeBins(0)\r
+ , fIsTimeBinSet(kFALSE)\r
, fStackNumber(-1)\r
, fStackLinkNumber(-1)\r
, fLinkTrackletCounter(-1)\r
, fCOL(0)\r
, fExtendedCOL(0)\r
, fIsShared(0)\r
+ , fWarnError(kTRUE)\r
+ , fWarnWarning(kFALSE)\r
, fBufferRead(0)\r
, fGeometry(0)\r
, fRawReader(0)\r
, fTRDfeeParam(0)\r
+ , fCommonAdditive(0)\r
{\r
//\r
// Copy constructor\r
return kTRUE;\r
}\r
else {\r
- if (fgWarnError) AliWarning(Form("Skip %d words failed. %d available", iw, fpEnd - fpPos - 1));\r
+ if (fWarnWarning) AliWarning(Form("Skip %u words failed. %ld available", iw, fpEnd - fpPos - 1));\r
return kFALSE;\r
}\r
\r
//------------------------------------------------------------\r
Bool_t AliTRDrawFastStream::SetReader(AliRawReader *reader)\r
{\r
-\r
+ // \r
+ // set raw reader pointer\r
+ // \r
if (reader != 0) {\r
fRawReader = reader;\r
if (fRawReader) {\r
fMCM.fADCMaskWord = 0;\r
fMCM.fADCmax = 0;\r
fMCM.fADCcount = 0;\r
- fMCM.fMCMADCWords = 0;\r
fMCM.fSingleADCwords = 0;\r
fMCM.fMCMhdCorrupted = 0;\r
fMCM.fADCmaskCorrupted = 0;\r
AliTRDarrayDictionary *track1 = 0;\r
AliTRDarrayDictionary *track2 = 0; \r
AliTRDSignalIndex *indexes = 0;\r
+ AliTRDdigitsParam *digitsparam = 0;\r
\r
Int_t lastdet = -1;\r
Int_t det = -1;\r
\r
if (det != lastdet) {\r
// If new detector found\r
- if (lastdet == -1) lastdet = det;\r
- else {fStackLinkNumber--; return lastdet;}\r
+ if (lastdet == -1) {lastdet = det; fLastHC = fHC;}\r
+ else {fStackLinkNumber--; fHC = fLastHC ; return lastdet;}\r
\r
if (det < 0 || det >= AliTRDgeometry::kNdet) continue;\r
\r
\r
if (!digits) return -1;\r
\r
- Int_t rowMax = GetRowMax();\r
+ //Int_t rowMax = GetRowMax();\r
+ Int_t rowMax = fGeometry->RowmaxC1(); // we use maximum row number among all detectors to reuse memory\r
Int_t colMax = GetColMax();\r
- //Int_t ntbins = GetNumberOfTimeBins();\r
- Int_t ntbins = 30; //[mj temp]\r
+ Int_t ntbins = GetGlobalNTimeBins(); \r
+\r
+ // Set digitsparam variables\r
+ digitsparam = (AliTRDdigitsParam *) digitsManager->GetDigitsParam();\r
+ digitsparam->SetNTimeBins(det,ntbins);\r
+ fCommonAdditive=10;\r
+ digitsparam->SetADCbaseline(det,fCommonAdditive);\r
\r
// Allocate memory space for the digits buffer\r
- if (digits->GetNtime() == 0) {\r
+ //if (digits->GetNtime() == 0) {\r
+ if (ntbins != digits->GetNtime()) {\r
digits->Allocate(rowMax, colMax, ntbins);\r
if (digitsManager->UsesDictionaries()) {\r
track0->Allocate(rowMax, colMax, ntbins);\r
indexes->SetStack(GetStack());\r
indexes->SetLayer(GetLayer());\r
indexes->SetDetNumber(det);\r
- if (indexes->IsAllocated() == kFALSE)\r
+ if (indexes->GetNtime() != ntbins)\r
indexes->Allocate(rowMax, colMax, ntbins);\r
}\r
\r
if (DecodeTracklets() == kFALSE) {\r
SeekEndOfData();\r
\r
- if (fgWarnError) AliError(Form("Tracklet decoding failed stack %d link %d", GetStack(), fStackLinkNumber));\r
+ if (fWarnWarning) AliWarning(Form("Tracklet decoding failed stack %d link %d", GetStack(), fStackLinkNumber));\r
\r
// copy error codes in memory into error container\r
if (errorCodeContainer) {\r
if (fHC->fEOTECorrupted != kTRUE) SeekEndOfData();\r
\r
/*\r
- if (fgWarnError) {\r
+ if (fWarnError) {\r
AliError(Form("Failed HC : %s", DumpHCinfoH0(fHC)));\r
AliError(Form("Failed HC : %s", DumpHCinfoH1(fHC)));\r
}\r
}\r
else SeekEndOfData(); // make sure that finish off with the end of data markers\r
\r
+ // set pretrigger phase since it is only avaliable after decoding HC header \r
+ digitsparam->SetPretriggerPhase(det,GetPreTriggerPhase());\r
+\r
// copy tracklets in memory into tracklet container\r
if (trackletContainer) {\r
ntracklets = GetNTracklets();\r
fpPos = fpBegin;\r
\r
if (fpBegin == 0 || length <= 0) {\r
- AliError(Form("Buffer size or pointer is strange. pointer to the buffer is 0x%08x of size %d", fpBegin, length));\r
+ AliError(Form("Buffer size or pointer is strange. pointer to the buffer is 0x%p of size %u", fpBegin, length));\r
return kFALSE;\r
}\r
\r
ResetIterators(); \r
\r
if (InitBuffer(buffer, length) == kFALSE) {\r
- if (fgWarnError) AliError("InitBuffer failed."); \r
+ if (fWarnError) AliError("InitBuffer failed."); \r
return kFALSE;\r
}\r
\r
if (DecodeGTUheader()== kFALSE)\r
return kFALSE;\r
\r
+ Int_t nLinkErrors=0;\r
for (Int_t istack = 0; istack < 5; istack++) {\r
fStackNumber = istack; \r
if (fSM.fStackActive[istack] == kFALSE) continue;\r
if (!(fStack->fLinksDataType[ilink] == 0 && fStack->fLinksMonitor[ilink] == 0)) {\r
fStack->fLinkMonitorError[ilink] = 1;\r
fStack->fLinkMonitorError[ilink] += fNWordsCounter; // counts words of given hc having link monitor error\r
+ nLinkErrors++;\r
//continue;\r
}\r
\r
if (fpPos >= fpEnd) {\r
if (fRawReader) fRawReader->AddMajorErrorLog(kLinkDataMissing, "Link data missing"); \r
- if (fgWarnError) AliError("Link data missing.");\r
+ if (fWarnWarning) AliWarning("Link data missing.");\r
break;\r
}\r
\r
- // HLT streamer set det number using SM header \r
+ // set det number using SM header \r
fHC = &fStack->fHalfChambers[ilink];\r
fHC->fSM = fRawReader->GetEquipmentId() - 1024;\r
fHC->fStack = fStackNumber;\r
}\r
} \r
\r
+ // set number of timebin to be used in the digit container \r
+ if (nLinkErrors>30) fGlobalNTimeBins=30;\r
+ else if (!fIsTimeBinSet) {\r
+ fpPosTemp = fpPos;\r
+ SetGlobalNTimebins();\r
+ fIsTimeBinSet = kTRUE;\r
+ }\r
+\r
ResetIterators(); // need to do it again for Next() function\r
\r
return kTRUE;\r
}\r
}\r
else {\r
- if (fgWarnError) AliWarning("No additional sm headers and stack index words present.");\r
+ if (fWarnWarning) AliWarning("No additional sm headers and stack index words present.");\r
if (fRawReader) fRawReader->AddMajorErrorLog(kDecodeStackInfo, "Stack info missing");\r
return kFALSE;\r
}\r
if (fgDebugFlag) AliDebug(5, "GTU headers are OK.");\r
}\r
else {\r
- if (fgWarnError) AliWarning("No data just after GTU headers.");\r
+ if (fWarnError) AliError("No data just after GTU headers.");\r
if (fRawReader) fRawReader->AddMajorErrorLog(kMissingData, "Missing sm data");\r
return kFALSE;\r
}\r
fEndOfTrackletCount = 0; // tracklet endmarker counter of this link\r
fHC->fNTracklets = 0; // number of tracklet of this link, should be less than 256\r
\r
- if (fgDebugFlag) AliDebug(10, Form("Decode tracklets at 0x%08x : 0x%08x", fpPos, *fpPos));\r
+ if (fgDebugFlag) AliDebug(10, Form("Decode tracklets at 0x%p : 0x%08x", fpPos, *fpPos));\r
\r
while (!(*fpPos == END_OF_TRACKLET_MARKEROLD || *fpPos == END_OF_TRACKLET_MARKERNEW) && fpPos < fpEnd) {\r
- if (fgDebugFlag) AliDebug(10, Form("Tracklet found at 0x%08x : 0x%08x", fpPos, *fpPos));\r
+ if (fgDebugFlag) AliDebug(10, Form("Tracklet found at 0x%p : 0x%08x", fpPos, *fpPos));\r
\r
fLinkTrackletCounter++;\r
\r
fHC->fNTracklets = fLinkTrackletCounter;\r
\r
while ((*fpPos == END_OF_TRACKLET_MARKEROLD || *fpPos == END_OF_TRACKLET_MARKERNEW) && fpPos < fpEnd) {\r
- if (fgDebugFlag) AliDebug(10, Form("EoTracklets found at 0x%08x : 0x%08x", fpPos, *fpPos));\r
+ if (fgDebugFlag) AliDebug(10, Form("EoTracklets found at 0x%p : 0x%08x", fpPos, *fpPos));\r
\r
fEndOfTrackletCount++;\r
fpPos++;\r
//\r
if (fpPos >= fpEnd) {\r
fHC->fCorrupted += 1; \r
- if (fgWarnError) AliError("No data(including HC header) in the buffer");\r
+ if (fWarnError) AliError("No data(including HC header) in the buffer");\r
return kFALSE;;\r
}\r
\r
if (DecodeHCheader() == kFALSE) {\r
- if (fgWarnError) AliWarning(Form("HC Header decode failed. H0 Error: %d H1 Error: %d",fHC->fH0Corrupted,fHC->fH1Corrupted));\r
+ if (fWarnWarning) AliWarning(Form("HC Header decode failed. H0 Error: %d H1 Error: %d",fHC->fH0Corrupted,fHC->fH1Corrupted));\r
return kFALSE;\r
}\r
else {\r
fpPos++;\r
if (fpPos >= fpEnd) {\r
fHC->fCorrupted += 2; \r
- if (fgWarnError) AliError("No data right after HC header in the buffer");\r
+ if (fWarnError) AliError("No data right after HC header in the buffer");\r
return kFALSE;\r
}\r
}\r
\r
- if ((fHC->fRawVMajor & 64) == 64) { // test pattern data\r
- AliTRDrawTPStream *tpStream = new AliTRDrawTPStream(fHC->fRawVMajorOpt, fpPos);\r
- if (tpStream->DecodeTPdata() == kFALSE) {\r
- if (fgWarnError) AliError("Failed to decode test pattern data");\r
- return kFALSE;\r
- }\r
- return kTRUE;\r
- }\r
+// if ((fHC->fRawVMajor & 64) == 64) { // test pattern data\r
+// AliTRDrawTPStream *tpStream = new AliTRDrawTPStream(fHC->fRawVMajorOpt, fpPos);\r
+// if (tpStream->DecodeTPdata() == kFALSE) {\r
+// if (fWarnError) AliError("Failed to decode test pattern data");\r
+// return kFALSE;\r
+// }\r
+// return kTRUE;\r
+// }\r
\r
fHC->fMCMmax = 0; // count number of mcms in a hc \r
while (*fpPos != ENDOFRAWDATAMARKER && fpPos < fpEnd) {\r
fHC->fErrorCodes[fHC->fMCMmax+2] += (fMCM.fADCmaskCorrupted << 4);\r
fHC->fErrorCodes[fHC->fMCMmax+2] += ((fMCM.fDataCorrupted & 1) << 6);\r
fHC->fErrorCodes[fHC->fMCMmax+2] += (fMCM.fMCM << 7); // encode MCM number\r
- fHC->fErrorCodes[fHC->fMCMmax+2] += (fMCM.fROB << 13); // encode ROB number\r
+ fHC->fErrorCodes[fHC->fMCMmax+2] += (fMCM.fROB << 11); // encode ROB number\r
\r
fHC->fMCMmax++; // increase mcm counter to match with expected rob/mcm number\r
\r
fADCnumber = 0;\r
for (Int_t iadc = 0; iadc < fMCM.fADCmax; iadc++) {\r
fADCnumber = fMCM.fADCchannel[iadc];\r
-\r
- if ( fADCnumber >= fMaxADCgeom - 1) {\r
- fExtendedCOL = fTRDfeeParam->GetExtendedPadColFromADC(fMCM.fROB, fMCM.fMCM, fADCnumber-1);\r
- fExtendedCOL--;\r
- fCOL = fTRDfeeParam->GetPadColFromADC(fMCM.fROB, fMCM.fMCM, fADCnumber-1);\r
- fCOL--;\r
- }\r
- else {\r
fExtendedCOL = fTRDfeeParam->GetExtendedPadColFromADC(fMCM.fROB, fMCM.fMCM, fADCnumber);\r
fCOL = fTRDfeeParam->GetPadColFromADC(fMCM.fROB, fMCM.fMCM, fADCnumber);\r
- }\r
\r
if (fADCnumber <= 1 || fADCnumber == fMaxADCgeom - 1) // if adc number = 0, 1, 20\r
fIsShared = kTRUE;\r
return kFALSE;\r
}\r
\r
- if (DecodeADC(digitsManager, digits, track0, track1, track2, indexes) == kFALSE) {\r
- return kFALSE;\r
+ //if (GetGlobalNTimeBins() < 31){\r
+ if (fHC->fTimeBins < 31){\r
+ if (DecodeADC(digitsManager, digits, track0, track1, track2, indexes) == kFALSE) {\r
+ return kFALSE;\r
+ }\r
+ }\r
+ //else if (GetGlobalNTimeBins() > 32) {\r
+ else if (fHC->fTimeBins > 32) {\r
+ if (DecodeADCExtended(digitsManager, digits, track0, track1, track2, indexes) == kFALSE) {\r
+ return kFALSE;\r
+ }\r
+ }\r
+ else { // nsamples = 31, 32 are not implemented in the TRAP and should never happen \r
+ if (fWarnError) AliError("nsamples are 31 or 32. These are not implemented in the TRAP and should never happen!");\r
}\r
+\r
} // iadc\r
}\r
else { // if there is no adc activated\r
\r
if (IsHCheaderOK() == kFALSE) {\r
fHC->fH0Corrupted += 2;\r
- if (fgDebugFlag) AliDebug(11,Form("H0 Header Insane. Word 0x%08x", *fHC->fPos));\r
+ if (fgDebugFlag) AliDebug(11,Form("H0 Header Insane. Word 0x%p", *fHC->fPos));\r
return kFALSE;\r
}\r
\r
\r
hc->fH0Corrupted = HC_HEADER_MASK_ERR(vword);\r
if (hc->fH0Corrupted > 0) {\r
- if (fgDebugFlag) AliDebug(11,Form("H0 Header Mask Error. Word 0x%08x",*fHC->fPos ));\r
+ if (fgDebugFlag) AliDebug(11,Form("H0 Header Mask Error. Word 0x%p",*fHC->fPos ));\r
return kFALSE;\r
}\r
hc->fSpecialRawV = HC_SPECIAL_RAW_VERSION(vword);\r
\r
hc->fH1Corrupted = HC_HEADER_MASK_ERR(vword);\r
if (hc->fH1Corrupted > 0) {\r
- if (fgDebugFlag) AliDebug(11,Form("H1 Header Mask Error. Word 0x%08x", *(fHC->fPos+1) ));\r
+ if (fgDebugFlag) AliDebug(11,Form("H1 Header Mask Error. Word 0x%p", *(fHC->fPos+1) ));\r
return kFALSE;\r
}\r
hc->fTimeBins = HC_NTIMEBINS(vword);\r
}\r
\r
if (fgStackLinkNumberChecker) {\r
- if (fHC->fLayerHCheader != fHC->fLayer) {\r
+ if (fHC->fLayerHCheader * 2 + fHC->fSideHCheader != fHC->fLayer * 2 + fHC->fSide) {\r
if (fgDebugFlag) AliDebug(11,Form("Missmatch: Layer number between HC header %d and GTU link mask %d | %s",\r
fHC->fLayerHCheader, fHC->fLayer, DumpStackInfo(fStack)));\r
return kFALSE;\r
UInt_t vword = *word;\r
\r
if (vword == END_OF_TRACKLET_MARKERNEW) {\r
- if (fgWarnError) AliError(Form("There should be MCM header. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
+ if (fWarnError) AliError(Form("There should be MCM header. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
fHC->fEOTECorrupted = kTRUE; //to finish data reading of this HC\r
}\r
\r
mcm->fADCMaskWord = vword;\r
\r
if (vword == END_OF_TRACKLET_MARKERNEW) {\r
- if (fgWarnError) AliError(Form("There should be MCMadcMask. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
+ if (fWarnError) AliError(Form("There should be MCMadcMask. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
fHC->fEOTECorrupted = kTRUE; //to finish data reading of this HC\r
}\r
\r
//\r
// decode the adc mask - adcs to be read out\r
//\r
- mcm->fMCMADCWords = 0;\r
mcm->fSingleADCwords = 0;\r
mcm->fADCmax = 0;\r
mcm->fADCMask = GetMCMadcMask(word, mcm);\r
//\r
// count the expected mcm words for a given tbins\r
//\r
- mcm->fMCMADCWords = ( mcm->fADCmax ) * ( fTbins / 3 );\r
mcm->fSingleADCwords = 0;\r
- if (mcm->fADCmax > 0) {\r
- mcm->fSingleADCwords = mcm->fMCMADCWords/mcm->fADCmax;\r
- }\r
+ mcm->fSingleADCwords = (fTbins-1)/3+1;\r
+ if (fTbins > 32) mcm->fSingleADCwords = 10; // if the timebin is more than 30, then fix the number of adc words to 10\r
}\r
\r
//------------------------------------------------------------\r
\r
for (Int_t iw = 0; iw < fMCM.fSingleADCwords; iw++) {\r
if (HC_HEADER_MASK_ERR(*fpPos) == 0 || *fpPos == END_OF_TRACKLET_MARKERNEW) {\r
- if (fgWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
+ if (fWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
fHC->fEOTECorrupted = kTRUE; \r
fpPos--;\r
return kFALSE;\r
if (!isWritten) { \r
fHC->fErrorCodes[index+66] += (fADCnumber << 4);; \r
fHC->fErrorCodes[index+66] += (fMCM.fMCM << 9);; \r
- fHC->fErrorCodes[index+66] += (fMCM.fROB << 15);; \r
+ fHC->fErrorCodes[index+66] += (fMCM.fROB << 13);; \r
isWritten = kTRUE; \r
}\r
fMCM.fDataCorrupted = kTRUE;\r
}\r
// decode and put into the digit container\r
Int_t adcSignals[3];\r
- adcSignals[0] = ((*fpPos & 0x00000ffc) >> 2) - fgCommonAdditive;\r
- adcSignals[1] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
- adcSignals[2] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+ adcSignals[0] = ((*fpPos & 0x00000ffc) >> 2);\r
+ adcSignals[1] = ((*fpPos & 0x003ff000) >> 12);\r
+ adcSignals[2] = ((*fpPos & 0xffc00000) >> 22);\r
\r
if(GetCol() < 0 || (!fSharedPadsOn & fIsShared)) {fpPos++; continue;}; \r
+\r
for (Int_t i = 0; i < 3; i++) {\r
- if (adcSignals[i] > 0) { \r
- if (fSharedPadsOn) \r
- digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), fTbinADC + i, adcSignals[i]);\r
- else \r
- digits->SetData(GetRow(), GetCol(), fTbinADC + i, adcSignals[i]);\r
- indexes->AddIndexRC(GetRow(), GetCol());\r
- } \r
+ digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), fTbinADC + i, adcSignals[i]);\r
+ indexes->AddIndexRC(GetRow(), GetCol());\r
if (digitsManager->UsesDictionaries()) {\r
- track0->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
- track1->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
- track2->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ track0->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ track1->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ track2->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ }\r
+ } // i\r
+ fTbinADC += 3;\r
+ fpPos++;\r
+ } // iw\r
+\r
+ return kTRUE;\r
+}\r
+\r
+//------------------------------------------------------------\r
+Bool_t AliTRDrawFastStream::DecodeADCExtended(AliTRDdigitsManager *digitsManager, AliTRDarrayADC *digits, \r
+ AliTRDarrayDictionary *track0, AliTRDarrayDictionary *track1, AliTRDarrayDictionary *track2, \r
+ AliTRDSignalIndex *indexes)\r
+{\r
+ //\r
+ // decode single ADC channel\r
+ //\r
+ if(fADCnumber%2==1) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL1);\r
+ if(fADCnumber%2==0) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL2);\r
+\r
+ Bool_t isWritten = kFALSE; //for error code recording\r
+\r
+ fTbinADC = ((*fpPos & 0x000000fc) >> 2);\r
+ fMCM.fSingleADCwords = ((*fpPos & 0x00000f00) >> 8);\r
+ \r
+ Int_t adcFirst2Signals[2];\r
+ adcFirst2Signals[0] = ((*fpPos & 0x003ff000) >> 12);\r
+ adcFirst2Signals[1] = ((*fpPos & 0xffc00000) >> 22);\r
+\r
+ for (Int_t i = 0; i < 2; i++) {\r
+ digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), fTbinADC + i, adcFirst2Signals[i]);\r
+ indexes->AddIndexRC(GetRow(), GetCol());\r
+ if (digitsManager->UsesDictionaries()) {\r
+ track0->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ track1->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ track2->SetData(GetRow(), GetCol(), fTbinADC + i, 0);\r
+ }\r
+ } // i\r
+\r
+ fpPos++;\r
+ for (Int_t iw = 0; iw < fMCM.fSingleADCwords-1; iw++) {\r
+ if (HC_HEADER_MASK_ERR(*fpPos) == 0 || *fpPos == END_OF_TRACKLET_MARKERNEW) {\r
+ if (fWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
+ fHC->fEOTECorrupted = kTRUE; \r
+ fpPos--;\r
+ return kFALSE;\r
+ }\r
+ if (fMaskADCword != ADC_WORD_MASK(*fpPos)) {\r
+ if (fgDebugFlag) AliDebug(11,Form("Wrong ADC data mask! [Expected mask: 0x%08x Current mask: 0x%08x] ADC channel number: %02d MCM= %s ",\r
+ fMaskADCword, ADC_WORD_MASK(*fpPos), fADCnumber, DumpMCMinfo(&fMCM)));\r
+ // encode adc level error codes\r
+ Int_t index = 21*(fMCM.fMCM + 16*int(fMCM.fROB/2)) + fADCnumber;\r
+ fHC->fErrorCodes[index+66] += 1; \r
+ if (!isWritten) { \r
+ fHC->fErrorCodes[index+66] += (fADCnumber << 4);; \r
+ fHC->fErrorCodes[index+66] += (fMCM.fMCM << 9);; \r
+ fHC->fErrorCodes[index+66] += (fMCM.fROB << 13);; \r
+ isWritten = kTRUE; \r
+ }\r
+ fMCM.fDataCorrupted = kTRUE;\r
+ fHC->fDataCorrupted = kTRUE;\r
+ fpPos++;\r
+ continue;\r
+ }\r
+ // decode and put into the digit container\r
+ Int_t adcSignals[3];\r
+ adcSignals[0] = ((*fpPos & 0x00000ffc) >> 2);\r
+ adcSignals[1] = ((*fpPos & 0x003ff000) >> 12);\r
+ adcSignals[2] = ((*fpPos & 0xffc00000) >> 22);\r
+\r
+ if(GetCol() < 0 || (!fSharedPadsOn & fIsShared)) {fpPos++; continue;}; \r
+ for (Int_t i = 0; i < 3; i++) {\r
+ digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), fTbinADC + 2 + i, adcSignals[i]);\r
+ indexes->AddIndexRC(GetRow(), GetCol());\r
+ if (digitsManager->UsesDictionaries()) {\r
+ track0->SetData(GetRow(), GetCol(), fTbinADC + 2 + i, 0);\r
+ track1->SetData(GetRow(), GetCol(), fTbinADC + 2 + i, 0);\r
+ track2->SetData(GetRow(), GetCol(), fTbinADC + 2 + i, 0);\r
}\r
} // i\r
fTbinADC += 3;\r
Int_t fEndOfDataCount = 0;\r
fNWordsCounter = 0;\r
\r
- while ( *fpPos != ENDOFRAWDATAMARKER && fpPos < fpEnd ) {\r
+ while ( fpPos < fpEnd && *fpPos != ENDOFRAWDATAMARKER ) {\r
fpPos++;\r
fNWordsCounter++;\r
}\r
- while (*fpPos == ENDOFRAWDATAMARKER && fpPos < fpEnd ) {\r
+ while ( fpPos < fpEnd && *fpPos == ENDOFRAWDATAMARKER ) {\r
fEndOfDataCount++;\r
fpPos++;\r
}\r
\r
while ( *fpPos != ENDOFRAWDATAMARKER && fpPos < fpEnd ) {\r
if (MCM_HEADER_MASK_ERR(*fpPos) == 0 && MCM_HEADER_MASK_ERR(*(fpPos+1)) == 0) {\r
- if (fgDebugFlag) AliDebug(11,Form("Found : Pos 0x%08x : Val 0x%08x", fpPos, *fpPos));\r
+ if (fgDebugFlag) AliDebug(11,Form("Found : Pos 0x%p : Val 0x%08x", fpPos, *fpPos));\r
return kTRUE;\r
}\r
if ( *fpPos == END_OF_TRACKLET_MARKERNEW) {\r
return kFALSE;\r
}\r
\r
+//------------------------------------------------------------\r
+Bool_t AliTRDrawFastStream::SetGlobalNTimebins()\r
+{\r
+ // get number of time bin info from HC headers then set \r
+ Int_t nHCs=0;\r
+ while (SetNTimebins()==kFALSE){\r
+ if (fgDebugFlag) AliDebug(11,Form("Failed to get number of time bin information from the %dth HC",nHCs));\r
+ nHCs++;\r
+ }\r
+\r
+ return kTRUE;\r
+}\r
+\r
+//------------------------------------------------------------\r
+Bool_t AliTRDrawFastStream::SetNTimebins()\r
+{\r
+ // goes to the HC header position\r
+ while (!(*fpPosTemp == END_OF_TRACKLET_MARKERNEW) && fpPosTemp < fpEnd) {\r
+ fpPosTemp++;\r
+ }\r
+ while (*fpPosTemp == END_OF_TRACKLET_MARKERNEW) {\r
+ fpPosTemp++;\r
+ }\r
+ // skip H0 \r
+ fpPosTemp++;\r
+\r
+ UInt_t vword = 0;\r
+ if (!(vword = *fpPosTemp)) {\r
+ fGlobalNTimeBins = 30; // default number of timebins \r
+ return kFALSE;\r
+ }\r
+\r
+ // get the number of time bins \r
+ if (HC_HEADER_MASK_ERR(vword) == 0) {\r
+ fGlobalNTimeBins = HC_NTIMEBINS(vword);\r
+ if (fGlobalNTimeBins > 64 || fGlobalNTimeBins < 10) return kFALSE; // minimal protection\r
+ }\r
+ else\r
+ return kFALSE;\r
+\r
+ return kTRUE;\r
+}\r
+\r
//------------------------------------------------------------\r
Bool_t AliTRDrawFastStream::DumpWords(UInt_t *px, UInt_t iw, UInt_t marker)\r
{\r
//\r
// dump given number of words for debugging\r
//\r
- TString tsreturn = Form("\n[ Dump Sequence at 0x%08x ] : ", px);\r
+ TString tsreturn = Form("\n[ Dump Sequence at 0x%p ] : ", px);\r
for (UInt_t i = 0; i < iw; i++) {\r
if ( iw != 0 && px + iw > fpEnd) \r
return kFALSE;\r
if (!hc)\r
return Form("Unable to dump. Null received as parameter!?!");\r
else\r
- return Form("[ HC[0] at 0x%08x ] : 0x%08x Info is : RawV %d SM %d Stack %d Layer %d Side %d DCSboard %d",\r
- hc->fPos[0], *(hc->fPos[0]), hc->fRawVMajor, hc->fSM, hc->fStack, hc->fLayer, hc->fSide, hc->fDCSboard);\r
+ return Form("[ HC[0] at 0x%p ] : 0x%08x Info is : RawV %d SM %d Stack %d Layer %d Side %d DCSboard %d",\r
+ hc->fPos[0], *(hc->fPos[0]), hc->fRawVMajor, fRawReader->GetEquipmentId()-1024, \r
+ hc->fStack, hc->fLayer, hc->fSide, hc->fDCSboard);\r
}\r
\r
//--------------------------------------------------------\r
if (!hc)\r
return Form("Unable to dump. Null received as parameter!?!");\r
else\r
- return Form("[ HC[1] at 0x%08x ] : 0x%08x Info is : TBins %d BCcount %d PreTrigCount %d PreTrigPhase %d",\r
+ return Form("[ HC[1] at 0x%p ] : 0x%08x Info is : TBins %d BCcount %d PreTrigCount %d PreTrigPhase %d",\r
hc->fPos[1], *(hc->fPos[1]), hc->fTimeBins, hc->fBunchCrossCounter, hc->fPreTriggerCounter, hc->fPreTriggerPhase);\r
}\r
\r
tsreturn += "";\r
return tsreturn.Data();\r
}\r
+\r
+\r