#include "AliRawDataHeader.h"
#include <cstdlib>
#include <cerrno>
+#include <memory>
#include "TString.h"
#include "TObjString.h"
#include "TObjArray.h"
AliHLTTPCHWCFEmulatorComponent::AliHLTTPCHWCFEmulatorComponent()
:
AliHLTProcessor(),
- fDoDeconvTime(1),
- fDoDeconvPad(1),
- fDoMC(1),
+ fDoDeconvTime(0),
+ fDoDeconvPad(0),
+ fDoMC(0),
fDoFlowControl(0),
- fDoSinglePadSuppression(1),
+ fDoSinglePadSuppression(0),
fBypassMerger(0),
fClusterLowerLimit(0),
fSingleSeqLimit(0),
- fMergerDistance(3),
- fTimeBinWindow(5),
+ fMergerDistance(0),
+ fUseTimeBinWindow(0),
+ fUseTimeFollow(0),
+ fChargeFluctuation(0),
fDebug(0),
fCFSupport(),
fCFEmulator(),
AliHLTTPCHWCFEmulatorComponent::AliHLTTPCHWCFEmulatorComponent(const AliHLTTPCHWCFEmulatorComponent&)
:
AliHLTProcessor(),
- fDoDeconvTime(1),
- fDoDeconvPad(1),
- fDoMC(1),
+ fDoDeconvTime(0),
+ fDoDeconvPad(0),
+ fDoMC(0),
fDoFlowControl(0),
- fDoSinglePadSuppression(1),
+ fDoSinglePadSuppression(0),
fBypassMerger(0),
fClusterLowerLimit(0),
fSingleSeqLimit(0),
- fMergerDistance(3),
- fTimeBinWindow(5),
+ fMergerDistance(0),
+ fUseTimeBinWindow(0),
+ fUseTimeFollow(0),
+ fChargeFluctuation(0),
fDebug(0),
fCFSupport(),
fCFEmulator(),
// Set default configuration for the FPGA ClusterFinder Emulator component
// Some parameters can be later overwritten from the OCDB
- fDoDeconvTime = 0;
- fDoDeconvPad = 0;
- fDoMC = 1;
+ fDoDeconvTime = 1;
+ fDoDeconvPad = 1;
+ fDoMC = 0;
fDoFlowControl = 0;
- fDoSinglePadSuppression = 1;
+ fDoSinglePadSuppression = 0;
fBypassMerger = 0;
- fClusterLowerLimit = 0;
+ fClusterLowerLimit = 10;
fSingleSeqLimit = 0;
- fMergerDistance = 3;
- fTimeBinWindow = 250;
+ fMergerDistance = 4;
+ fUseTimeBinWindow = 1;
+ fUseTimeFollow = 1;
+ fChargeFluctuation = 0;
fDebug = 0;
fBenchmark.Reset();
fBenchmark.SetTimer(0,"total");
int iResult = 0;
if ( !arguments ) return iResult;
-
+ //cout<<"["<<arguments<<"]"<<endl;
TString allArgs = arguments;
TString argument;
int bMissingParam = 0;
continue;
}
- if ( argument.CompareTo( "-timebin-window" ) == 0 ) {
+ if ( argument.CompareTo( "-use-timebin-window" ) == 0 ) {
if ( ( bMissingParam = ( ++i >= pTokens->GetEntries() ) ) ) break;
- fTimeBinWindow = ( ( TObjString* )pTokens->At( i ) )->GetString().Atoi();
- HLTInfo( "TimeBin window is set to: %d", fTimeBinWindow );
+ fUseTimeBinWindow = ( ( TObjString* )pTokens->At( i ) )->GetString().Atoi();
+ HLTInfo( "Using TimeBin window is set to: %d", fUseTimeBinWindow );
+ continue;
+ }
+
+ if ( argument.CompareTo( "-charge-fluctuation" ) == 0 ) {
+ if ( ( bMissingParam = ( ++i >= pTokens->GetEntries() ) ) ) break;
+ fChargeFluctuation = ( ( TObjString* )pTokens->At( i ) )->GetString().Atoi();
+ HLTInfo( "Charge fluctuation is set to: %d", fChargeFluctuation );
+ continue;
+ }
+
+ if ( argument.CompareTo( "-use-time-follow" ) == 0 ) {
+ if ( ( bMissingParam = ( ++i >= pTokens->GetEntries() ) ) ) break;
+ fUseTimeFollow = ( ( TObjString* )pTokens->At( i ) )->GetString().Atoi();
+ HLTInfo( "Use of time follow algorithm is set to: %d", fUseTimeFollow );
continue;
}
AliHLTUInt32_t configWord1=0, configWord2=0;
AliHLTTPCHWCFEmulator::CreateConfiguration
- ( fDoDeconvTime, fDoDeconvPad, fDoFlowControl, fDoSinglePadSuppression, fBypassMerger, fClusterLowerLimit, fSingleSeqLimit, fMergerDistance, fTimeBinWindow, configWord1, configWord2 );
+ ( fDoDeconvTime, fDoDeconvPad, fDoFlowControl, fDoSinglePadSuppression, fBypassMerger, fClusterLowerLimit, fSingleSeqLimit, fMergerDistance, fUseTimeBinWindow, fChargeFluctuation, fUseTimeFollow, configWord1, configWord2 );
for ( unsigned long ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
{
int slice = AliHLTTPCDefinitions::GetMinSliceNr( *iter );
int patch = AliHLTTPCDefinitions::GetMinPatchNr( *iter );
- const char *str=Form("slice %d patch %d:", slice, patch);
-
fBenchmark.AddInput(iter->fSize);
if (!iter->fPtr) continue;
AliHLTUInt32_t clustersSize32 = maxNClusters*AliHLTTPCHWCFData::fgkAliHLTTPCHWClusterSize;
AliHLTUInt32_t nOutputMC = maxNClusters;
- AliHLTUInt32_t headerSize = sizeof(AliRawDataHeader);
- AliHLTUInt8_t *outBlock = new AliHLTUInt8_t[ headerSize+clustersSize32*sizeof(AliHLTUInt32_t) ];
+ AliHLTUInt32_t headerSize = sizeof(AliRawDataHeader);
+ AliHLTUInt32_t outBlockSize=headerSize+clustersSize32*sizeof(AliHLTUInt32_t);
+ std::auto_ptr<AliHLTUInt8_t> outBlock(new AliHLTUInt8_t[outBlockSize]);
+ std::auto_ptr<AliHLTTPCClusterMCLabel> allocOutMC(new AliHLTTPCClusterMCLabel[nOutputMC+1]);
- AliHLTTPCClusterMCData *outMC = reinterpret_cast<AliHLTTPCClusterMCData *>(new AliHLTTPCClusterMCLabel[nOutputMC+1]);
-
- if( !outBlock || !outMC ){
- HLTWarning("%s Not enouth memory!!!", str);
- delete[] outBlock;
- delete[] outMC;
- continue;
+ if( !outBlock.get() || !allocOutMC.get() ){
+ return -ENOMEM;
}
+
+ memset(outBlock.get(), 0, outBlockSize*sizeof(AliHLTUInt8_t));
+ memset(allocOutMC.get(), 0, (nOutputMC+1)*sizeof(AliHLTTPCClusterMCLabel));
+ AliHLTTPCClusterMCData *outMC = reinterpret_cast<AliHLTTPCClusterMCData *>(allocOutMC.get());
// fill CDH header here, since the HW clusterfinder does not receive it
AliRawDataHeader *cdhHeader = reinterpret_cast<AliRawDataHeader*>(iter->fPtr);
- AliRawDataHeader *outCDHHeader = reinterpret_cast<AliRawDataHeader*>(outBlock);
+ AliRawDataHeader *outCDHHeader = reinterpret_cast<AliRawDataHeader*>(outBlock.get());
*outCDHHeader = *cdhHeader;
outCDHHeader->fSize = 0xFFFFFFFF;
- AliHLTUInt32_t *outClusters = reinterpret_cast<AliHLTUInt32_t*> (outBlock + headerSize);
+ AliHLTUInt32_t *outClusters = reinterpret_cast<AliHLTUInt32_t*> (outBlock.get() + headerSize);
fBenchmark.Start(1);
fCFEmulator.Init
else if( err==-2 ){ HLTWarning("No space left in the output buffer (warning %d)",err); }
else if( err<0 ){ HLTWarning("HWCF emulator finished with error code %d",err); }
if( err<0 ){
- delete[] outBlock;
- delete[] outMC;
continue;
}
AliHLTUInt32_t flag = (c[0]>>30);
if( flag == 0x3){ //beginning of a cluster
int padRow = (c[0]>>24)&0x3f;
- int q = (c[0]&0xFFFFFF)>>6;
- double p = *((AliHLTFloat32_t*)&c[1]);
- double t = *((AliHLTFloat32_t*)&c[2]);
- AliHLTFloat32_t p2 = *((AliHLTFloat32_t*)&c[3]);
- AliHLTFloat32_t t2 = *((AliHLTFloat32_t*)&c[4]);
+ int q = c[1];
+ double p = *((AliHLTFloat32_t*)&c[2]);
+ double t = *((AliHLTFloat32_t*)&c[3]);
+ AliHLTFloat32_t p2 = *((AliHLTFloat32_t*)&c[4]);
+ AliHLTFloat32_t t2 = *((AliHLTFloat32_t*)&c[5]);
printf("N: %3d R: %3d C: %4d P: %7.4f T: %8.4f DP: %6.4f DT: %6.4f\n",
i/elsize+1, padRow, q, p, t, sqrt(fabs(p2-p*p)), sqrt(fabs(t2-t*t)));
if( size + outSize <= maxSize ){
- memcpy( outputPtr, outBlock, outSize );
+ memcpy( outputPtr, outBlock.get(), outSize );
AliHLTComponentBlockData bd;
FillBlockData( bd );
iResult=-ENOSPC;
}
}
-
- delete[] outBlock;
- delete[] outMC;
}
fBenchmark.Stop(0);