#include "AliHLTProcessor.h"
#include <string.h>
#include "TDatime.h"
#include "TString.h"
ClassImp(AliHLTProcessor)
AliHLTProcessor::AliHLTProcessor()
: AliHLTComponent()
, fpDebugCounters(NULL)
{
}
AliHLTProcessor::~AliHLTProcessor()
{
if (fpDebugCounters) delete fpDebugCounters;
fpDebugCounters=NULL;
}
int AliHLTProcessor::DoProcessing( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
AliHLTUInt32_t& size,
AliHLTComponentBlockDataList& outputBlocks,
AliHLTComponentEventDoneData*& edd )
{
int iResult=0;
ReleaseEventDoneData();
iResult=DoEvent(evtData, blocks, trigData, outputPtr, size, outputBlocks);
edd = NULL;
AliHLTComponentEventDoneData* eddTmp = GetCurrentEventDoneData();
if (eddTmp) {
int ret = GetEventDoneData(eddTmp->fDataSize, &edd);
if (ret) {
HLTError( "Cannot get event done data of %u bytes for event %lu: error (%d)",
eddTmp->fDataSize, evtData.fEventID, ret );
return -ENOMEM;
}
edd->fStructSize = sizeof(AliHLTComponentEventDoneData);
edd->fDataSize = eddTmp->fDataSize;
edd->fData = reinterpret_cast<AliHLTUInt8_t*>(edd)+edd->fStructSize;
memcpy( edd->fData, eddTmp->fData, eddTmp->fDataSize );
if (false) {
if (!fpDebugCounters) {
fpDebugCounters=new AliHLTProcessorCounters;
}
if (fpDebugCounters) {
int wordCnt=edd->fDataSize/4;
AliHLTUInt32_t* buffer=reinterpret_cast<AliHLTUInt32_t*>(edd->fData);
int word=0;
while (word<wordCnt) {
switch (buffer[word]) {
case 3:
fpDebugCounters->fReadoutFilter++;
word+=1+buffer[word+1]*4;
break;
case 4:
fpDebugCounters->fMonitoringFilter++;
word+=1+buffer[word+1]*4;
break;
case 5:
fpDebugCounters->fMonitoringEvent++;
break;
default:
fpDebugCounters->fMismatch++;
break;
}
word++;
}
static UInt_t lastTime=0;
TDatime time;
if (time.Get()-lastTime>1) {
lastTime=time.Get();
HLTImportant("EventDoneData size %d: readout %d, monitoring filter %d, monitoring event %d, format error %d",
edd->fDataSize, fpDebugCounters->fReadoutFilter, fpDebugCounters->fMonitoringFilter, fpDebugCounters->fMonitoringEvent, fpDebugCounters->fMismatch);
for (int i=0; i< wordCnt; ) {
TString message;
for (int j=0; j<4 && i<wordCnt; j++) {
TString number; number.Form("0x%08x ", buffer[i++]);
message+=number;
}
HLTImportant(" %s", message.Data());
}
}
}
}
}
return iResult;
}
int AliHLTProcessor::DoEvent( const AliHLTComponentEventData& evtData,
const AliHLTComponentBlockData* ,
AliHLTComponentTriggerData& trigData,
AliHLTUInt8_t* ,
AliHLTUInt32_t& size,
AliHLTComponentBlockDataList& )
{
size=0;
return DoEvent(evtData, trigData);
}
int AliHLTProcessor::DoEvent( const AliHLTComponentEventData& , AliHLTComponentTriggerData& )
{
HLTFatal("no processing method implemented");
return -ENOSYS;
}