]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TPCLib/HWCFemulator/AliHLTTPCHWCFEmulatorComponent.cxx
default parameters are set for the clusterfinder
[u/mrichter/AliRoot.git] / HLT / TPCLib / HWCFemulator / AliHLTTPCHWCFEmulatorComponent.cxx
index 87ee5c229de3319a8355a4094b5e3b00b8be3f57..c1a65ec9381d6f259182b3a24d1d338595dcfa73 100644 (file)
@@ -41,6 +41,7 @@ using namespace std;
 #include "AliRawDataHeader.h"
 #include <cstdlib>
 #include <cerrno>
+#include <memory>
 #include "TString.h"
 #include "TObjString.h"
 #include "TObjArray.h"
@@ -52,16 +53,18 @@ using namespace std;
 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(),
@@ -78,16 +81,18 @@ AliHLTTPCHWCFEmulatorComponent::AliHLTTPCHWCFEmulatorComponent()
 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(),
@@ -203,16 +208,18 @@ void AliHLTTPCHWCFEmulatorComponent::SetDefaultConfiguration()
   // 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");
@@ -226,7 +233,7 @@ int AliHLTTPCHWCFEmulatorComponent::ReadConfigurationString(  const char* argume
 
   int iResult = 0;
   if ( !arguments ) return iResult;
-
+  //cout<<"["<<arguments<<"]"<<endl;
   TString allArgs = arguments;
   TString argument;
   int bMissingParam = 0;
@@ -310,10 +317,24 @@ int AliHLTTPCHWCFEmulatorComponent::ReadConfigurationString(  const char* argume
       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;
     }
    
@@ -433,7 +454,7 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
 
   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++ )
     {
@@ -445,8 +466,6 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
       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;
@@ -470,26 +489,27 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
       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
@@ -504,8 +524,6 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
       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;
       }
 
@@ -517,11 +535,11 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
          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)));
 
@@ -541,7 +559,7 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
       
       if( size + outSize <= maxSize ){
        
-       memcpy( outputPtr, outBlock, outSize );
+       memcpy( outputPtr, outBlock.get(), outSize );
        
        AliHLTComponentBlockData bd;
        FillBlockData( bd );
@@ -577,9 +595,6 @@ int AliHLTTPCHWCFEmulatorComponent::DoEvent( const AliHLTComponentEventData& evt
          iResult=-ENOSPC;          
        }
       }
-      
-      delete[] outBlock;
-      delete[] outMC;      
     }
   
   fBenchmark.Stop(0);