\r
Bool_t AliTRDrawStream::fgExtraSkip = kFALSE;\r
Bool_t AliTRDrawStream::fgSkipCDH = kFALSE;\r
-Bool_t AliTRDrawStream::fgWarnError = kTRUE;\r
Bool_t AliTRDrawStream::fgCleanDataOnly = kFALSE;\r
Bool_t AliTRDrawStream::fgDebugFlag = kTRUE;\r
Bool_t AliTRDrawStream::fgEnableMemoryReset = kTRUE;\r
Bool_t AliTRDrawStream::fgSkipData = kTRUE;\r
Bool_t AliTRDrawStream::fgEnableDecodeConfigData = kFALSE;\r
Int_t AliTRDrawStream::fgDumpHead = -1;\r
-Int_t AliTRDrawStream::fgCommonAdditive = 0;\r
Int_t AliTRDrawStream::fgEmptySignals[] = \r
{\r
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1\r
, fGeometry(0)\r
, fRawReader(0)\r
, fTRDfeeParam(0)\r
+ , fCommonAdditive(0)\r
+ , fWarnError(kTRUE)\r
{\r
//\r
// default constructor\r
, fGeometry(0)\r
, fRawReader(rawReader)\r
, fTRDfeeParam(0)\r
+ , fCommonAdditive(0)\r
+ , fWarnError(kTRUE)\r
{\r
//\r
// default constructor\r
, fGeometry(0)\r
, fRawReader(0)\r
, fTRDfeeParam(0)\r
+ , fCommonAdditive(0)\r
+ , fWarnError(kTRUE)\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 (fWarnError) AliWarning(Form("Skip %d words failed. %d available", iw, fpEnd - fpPos - 1));\r
return kFALSE;\r
}\r
\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
}\r
\r
//------------------------------------------------------------\r
-Int_t AliTRDrawStream::NextChamber(AliTRDdigitsManager *const digitsManager, UInt_t **trackletContainer, UShort_t **errorCodeContainer) \r
+Int_t AliTRDrawStream::NextChamber(AliTRDdigitsManager *const digitsManager, UInt_t **trackletContainer, UShort_t **/*errorCodeContainer*/) \r
{\r
//\r
// Fills single chamber digit array \r
return -1;\r
}\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
\r
- // Set number of timebin into digitparam\r
+ // Set digitparam variables\r
+ digitsparam = (AliTRDdigitsParam *) digitsManager->GetDigitsParam();\r
+ digitsparam->SetPretiggerPhase(det,GetPreTriggerPhase());\r
if (!fIsGlobalDigitsParamSet){\r
- digitsparam = (AliTRDdigitsParam *) digitsManager->GetDigitsParam();\r
- digitsparam->SetCheckOCDB(kFALSE);\r
digitsparam->SetNTimeBins(ntbins);\r
+ fCommonAdditive=10;\r
+ digitsparam->SetADCbaseline(fCommonAdditive);\r
fIsGlobalDigitsParamSet = kTRUE;\r
}\r
\r
\r
// ntimebins data are ready to read\r
for (it = 0; it < GetNumberOfTimeBins(); it++) {\r
- if (GetSignals()[it] > 0) {\r
-\r
- if (fSharedPadsOn) \r
- digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), it, GetSignals()[it]);\r
- else \r
- digits->SetData(GetRow(), GetCol(), it, GetSignals()[it]);\r
-\r
- indexes->AddIndexRC(GetRow(), GetCol());\r
- if (digitsManager->UsesDictionaries()) {\r
- track0->SetData(GetRow(), GetCol(), it, 0);\r
- track1->SetData(GetRow(), GetCol(), it, 0);\r
- track2->SetData(GetRow(), GetCol(), it, 0);\r
- }\r
+ digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), it, GetSignals()[it]);\r
+ if (!(GetCol()<0)) indexes->AddIndexRC(GetRow(), GetCol());\r
+ if (digitsManager->UsesDictionaries()) {\r
+ track0->SetData(GetRow(), GetCol(), it, 0);\r
+ track1->SetData(GetRow(), GetCol(), it, 0);\r
+ track2->SetData(GetRow(), GetCol(), it, 0);\r
}\r
} // it\r
} // while Next()\r
}\r
}\r
else {\r
- if (fgWarnError) AliWarning("No additional sm headers and stack index words present.");\r
+ if (fWarnError) 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) AliWarning("No data just after GTU headers.");\r
if (fRawReader) fRawReader->AddMajorErrorLog(kMissingData, "Missing sm data");\r
return kFALSE;\r
}\r
\r
fSM.fClean = kTRUE;\r
if (InitBuffer(buffer, length) == kFALSE) {\r
- if (fgWarnError) AliError("InitBuffer failed."); \r
+ if (fWarnError) AliError("InitBuffer failed."); \r
fSM.fClean = kFALSE;\r
return kFALSE;\r
}\r
\r
if (fpPos >= fpEnd) {\r
if (fRawReader) fRawReader->AddMajorErrorLog(kLinkDataMissing, "Link data missing"); \r
- if (fgWarnError) AliError("Link data missing."); \r
+ if (fWarnError) AliError("Link data missing."); \r
fSM.fClean = kFALSE;\r
break;\r
}\r
fSM.fClean = kFALSE;\r
SeekEndOfData();\r
\r
- if (fgWarnError) {\r
+ if (fWarnError) {\r
AliError(Form("Tracklet decoding failed stack %d link %d", fStackNumber, fStackLinkNumber));\r
}\r
continue;\r
\r
if (fpPos >= fpEnd) {\r
if (fRawReader) fRawReader->AddMajorErrorLog(kHCdataMissing, "HC data missing"); \r
- if (fgWarnError) AliError("HC data missing."); \r
+ if (fWarnError) AliError("HC data missing."); \r
fSM.fClean = kFALSE;\r
break;\r
}\r
if (fHC->fCorrupted < 16) SeekEndOfData(); // In case that we meet END_OF_TRACKLET_MARKERNEW \r
// during ADC data decoding or MCM header decoding\r
// we don't seek ENDOFRAWDATAMARKER\r
- if (fgWarnError) {\r
+ if (fWarnError) {\r
AliError(Form("Failed HC : %s", DumpHCinfoH0(fHC)));\r
AliError(Form("Failed HC : %s", DumpHCinfoH1(fHC)));\r
}\r
return kTRUE;\r
\r
if (fgCleanDataOnly && (fSM.fClean == kFALSE)) {\r
- if (fgWarnError) {\r
+ if (fWarnError) {\r
AliWarning("Buffer with errors. Returning FALSE.");\r
AliWarning(Form("--- Failed SM : %s ---", DumpSMInfo(&fSM)));\r
}\r
if (fgDebugFlag) AliDebug(11,Form("Event from the past? Current %d Last %d %s.\n", fEventCounter, fLastEventCounter, DumpMCMinfo(fMCM)));\r
}\r
\r
- if ( fMCM->fADCmaskCorrupted > 0 )\r
+ if ( fMCM->fADCmaskCorrupted > 0 ) {\r
return kFALSE;\r
+ }\r
\r
- if ( fMCM->fMCMhdCorrupted > 0 )\r
+ if ( fMCM->fMCMhdCorrupted > 0 ) {\r
return kFALSE;\r
+ }\r
\r
return kTRUE;\r
}\r
fpPos--; \r
return kFALSE;\r
}\r
-\r
fMCM->fROW = fTRDfeeParam->GetPadRowFromMCM(fMCM->fROB, fMCM->fMCM); \r
\r
if ((fHC->fRawVMajor > 2 && fHC->fRawVMajor <5) || ((fHC->fRawVMajor & 32) == 32)) { //cover old and new version definition of ZS data\r
AliDebug(7, DumpMCMadcMask(fMCM));\r
}\r
\r
- if (IsMCMheaderOK() == kFALSE)\r
+ if (IsMCMheaderOK() == kFALSE) {\r
return kFALSE;\r
- \r
+ } \r
+\r
return kTRUE;\r
}\r
\r
//\r
// decode hc header and data\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 (fWarnError) AliWarning(Form("HC Header decode failed. H0 Error: %d H1 Error: %d",fHC->fH0Corrupted,fHC->fH1Corrupted));\r
if (fRawReader) fRawReader->AddMajorErrorLog(kHCHeaderCorrupt, "HC header corrupted"); \r
return kFALSE;\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
+ if (fWarnError) AliError("failed to decode test pattern data");\r
return kFALSE; \r
}\r
return kTRUE;\r
if (fHC->fCorrupted < 4) fHC->fCorrupted += 4; // benchmark hc data corruption as 4\r
\r
if (fgSkipData == kTRUE || fHC->fCorrupted >= 16) { // stop HC data reading\r
- fHC->fMCMmax++; \r
+ fHC->fMCMmax++;\r
return kFALSE;\r
} \r
\r
}\r
}\r
else { // nsamples = 31, 32 are not implemented in the TRAP and should never happen \r
- if (fgWarnError) AliError("nsamples are 31 or 32. These 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
} // if fHC->fRawVMajor\r
else { // test pattern data\r
- if (fgWarnError) AliError("These are test pattern data. You need other reader"); // will be served in other class\r
+ if (fWarnError) AliError("These are test pattern data. You need other reader"); // will be served in other class\r
}\r
} // for iadc \r
} // if fMCM->fADCmax\r
//\r
// decode single ADC channel\r
//\r
+\r
fADC->fCorrupted = 0;\r
if(fADC->fADCnumber%2==1) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL1);\r
if(fADC->fADCnumber%2==0) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL2);\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
fADC->fCorrupted += 16;\r
fHC->fCorrupted += 16; \r
fpPos--;\r
continue;\r
}\r
\r
- // here we subtract the baseline ( == common additive)\r
- fADC->fSignals[fTbinADC + 0] = ((*fpPos & 0x00000ffc) >> 2) - fgCommonAdditive;\r
- fADC->fSignals[fTbinADC + 1] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
- fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+ fADC->fSignals[fTbinADC + 0] = ((*fpPos & 0x00000ffc) >> 2);\r
+ fADC->fSignals[fTbinADC + 1] = ((*fpPos & 0x003ff000) >> 12);\r
+ fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0xffc00000) >> 22);\r
\r
fTbinADC += 3;\r
fpPos++;\r
//\r
// decode single ADC channel\r
//\r
+\r
fADC->fCorrupted = 0;\r
if(fADC->fADCnumber%2==1) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL1);\r
if(fADC->fADCnumber%2==0) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL2);\r
\r
fTbinADC = ((*fpPos & 0x000000fc) >> 2);\r
fMCM->fSingleADCwords = ((*fpPos & 0x00000f00) >> 8);\r
- fADC->fSignals[fTbinADC] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
- fADC->fSignals[fTbinADC+1] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+ fADC->fSignals[fTbinADC] = ((*fpPos & 0x003ff000) >> 12);\r
+ fADC->fSignals[fTbinADC+1] = ((*fpPos & 0xffc00000) >> 22);\r
\r
fpPos++; \r
for (Int_t iw = 0; iw < fMCM->fSingleADCwords-1; iw++) { // it goes up to fMCM->fSingleADCwords-1 since the first word was already decoded above\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
fADC->fCorrupted += 16;\r
fHC->fCorrupted += 16; \r
fpPos--;\r
continue;\r
}\r
\r
- // here we subtract the baseline ( == common additive)\r
- fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0x00000ffc) >> 2) - fgCommonAdditive;\r
- fADC->fSignals[fTbinADC + 3] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
- fADC->fSignals[fTbinADC + 4] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+ fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0x00000ffc) >> 2);\r
+ fADC->fSignals[fTbinADC + 3] = ((*fpPos & 0x003ff000) >> 12);\r
+ fADC->fSignals[fTbinADC + 4] = ((*fpPos & 0xffc00000) >> 22);\r
\r
fTbinADC += 3;\r
fpPos++;\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
mcm->fMCMhdCorrupted += 16;\r
fHC->fCorrupted += 16; //to finish data reading of this HC\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
mcm->fADCmaskCorrupted += 16;\r
fHC->fCorrupted += 16; //to finish data reading of this HC\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