* provided "as is" without express or implied warranty. *
**************************************************************************/
-///
+// $Id$
+
+//-----------------------------------------------------------------------------
/// \class AliMUONPayloadTracker
/// Decodes rawdata from buffer and stores in TClonesArray.
/// First version implement for Tracker
///
/// \author Christian Finck
+//-----------------------------------------------------------------------------
+
+#include <TObjString.h>
#include "AliMUONPayloadTracker.h"
#include "AliMUONBusStruct.h"
#include "AliMUONDDLTracker.h"
+#include "AliMUONLogger.h"
#include "AliLog.h"
/// \cond CLASSIMP
fBusStruct(new AliMUONBusStruct()),
fBlockHeader(new AliMUONBlockHeader()),
fDspHeader(new AliMUONDspHeader()),
- fParityErrBus(),
- fGlitchErrors(0)
+ fLog(new AliMUONLogger(1000)),
+ fParityErrors(0),
+ fGlitchErrors(0),
+ fPaddingErrors(0),
+ fWarnings(kTRUE)
{
///
/// create an object to decode MUON payload
delete fBusStruct;
delete fBlockHeader;
delete fDspHeader;
+ delete fLog;
}
//______________________________________________________
totalDspSize = fDspHeader->GetTotalLength();
if (fDspHeader->GetErrorWord()) {
- fDspHeader->Print("");
- if (fDspHeader->GetErrorWord() == (0x000000B1 | fBlockHeader->GetDspId())){
+// fDspHeader->Print("");
+ if ( fDspHeader->GetErrorWord() == (0x000000B1 | fBlockHeader->GetDspId())
+ || fDspHeader->GetErrorWord() == (0x00000091 | fBlockHeader->GetDspId()) ){
// an event with a glitch in the readout has been detected
// it means that somewhere a 1 byte word has been randomly inserted
// all the readout sequence is shifted untill the next event
-
- AliWarning(Form("Glitch in data detected, skipping event "));
-
+
+ Char_t* msg = Form("Glitch error detected in DSP %d, skipping event ", fBlockHeader->GetDspId());
+
+ if (fWarnings) AliWarning(msg);
+ AddErrorMessage(msg);
fGlitchErrors++;
return kFALSE ;
}
fBusStruct->SetDspId(iDsp);
// check parity
- if(!CheckDataParity())
- AddParityErrBus(fBusStruct->GetBusPatchId());
+ if(!CheckDataParity()) {
+ fParityErrors++;
+ return kFALSE;
+ }
+
// copy in TClonesArray
fDDLTracker->AddBusPatch(*fBusStruct, iBlock, iDsp);
// skipping additionnal word if padding
if (fDspHeader->GetPaddingWord() == 1) {
- if (buffer[index++] != fDspHeader->GetDefaultPaddingWord())
-
- AliError(Form("Error in padding word for iBlock %d, iDsp %d, iBus %d\n",
- iBlock, iDsp, iBusPatch));
-
+ if (buffer[index++] != fDspHeader->GetDefaultPaddingWord()) {
+
+ Char_t *msg = Form("Padding word error for iBlock %d, iDsp %d, iBus %d\n",
+ iBlock, iDsp, iBusPatch);
+
+ if (fWarnings) AliWarning(msg);
+ AddErrorMessage(msg);
+ fPaddingErrors++;
+ }
}
index = indexDsp + totalDspSize;
/// after each DDL
///
fDDLTracker->GetBlkHeaderArray()->Delete();
- fGlitchErrors = 0;
- fParityErrBus.Reset();
+ fGlitchErrors = 0;
+ fPaddingErrors = 0;
+ fParityErrors = 0;
}
// Check
if (parity != fBusStruct->GetParity(idata)) {
- AliWarning(Form("Parity error in word %d for manuId %d and channel %d\n",
- idata, fBusStruct->GetManuId(idata), fBusStruct->GetChannelId(idata)));
-
+ Char_t* msg = Form("Parity error in word %d for manuId %d and channel %d in buspatch %d\n",
+ idata, fBusStruct->GetManuId(idata), fBusStruct->GetChannelId(idata),
+ fBusStruct->GetBusPatchId());
+
+ if (fWarnings) AliWarning(msg);
+ AddErrorMessage(msg);
+ fParityErrors++;
+
return kFALSE;
}
}
//______________________________________________________
-void AliMUONPayloadTracker::AddParityErrBus(Int_t buspatch)
+void AliMUONPayloadTracker::AddErrorMessage(const Char_t* msg)
{
-/// adding bus with at least on parity error
- fParityErrBus.Set(fParityErrBus.GetSize() + 1);
- fParityErrBus.AddAt(buspatch, fParityErrBus.GetSize() - 1);
+/// adding message to logger
+
+ TString tmp(msg);
+
+ Int_t pos = tmp.First("\n");
+ tmp[pos] = 0;
+
+ fLog->Log(tmp.Data());
}
+
+