]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TRD/AliHLTTRDClusterizerComponent.cxx
correcting small memory leak, removing unnecessary pointer checks (Theo)
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDClusterizerComponent.cxx
index da56abbe6666ef7502486a602bef2ef5435e01f2..05965f543b74021f6e35b12ca9e5393f074d4a77 100644 (file)
@@ -17,7 +17,7 @@
 //**************************************************************************
 
 /** @file   AliHLTTRDClusterizerComponent.cxx
-    @author 
+    @author Theodor Rascanu
     @date   
     @brief  A TRDClusterizer processing component for the HLT. 
 */
@@ -38,16 +38,16 @@ using namespace std;
 
 #include "AliHLTTRDClusterizerComponent.h"
 #include "AliHLTTRDDefinitions.h"
-#include "AliHLTTRDCluster.h"
+#include "AliHLTTRDClusterizer.h"
+#include "AliHLTTRDUtils.h"
 
 #include "AliGeomManager.h"
 #include "AliTRDReconstructor.h"
 #include "AliCDBManager.h"
 #include "AliCDBStorage.h"
 #include "AliCDBEntry.h"
-#include "AliHLTTRDClusterizer.h"
 #include "AliTRDrecoParam.h"
-#include "AliTRDrawStreamBase.h"
+#include "AliTRDrawStream.h"
 #include "AliTRDcluster.h"
 
 #include "AliRawReaderMemory.h"
@@ -55,22 +55,19 @@ using namespace std;
 #ifdef HAVE_VALGRIND_CALLGRIND_H
 #include <valgrind/callgrind.h>
 #else
-#define CALLGRIND_START_INSTRUMENTATION do { } while (0)
-#define CALLGRIND_STOP_INSTRUMENTATION do { } while (0)
+#define CALLGRIND_START_INSTRUMENTATION (void)0
+#define CALLGRIND_STOP_INSTRUMENTATION (void)0
 #endif
 
 #include <cstdlib>
 #include <cerrno>
 #include <string>
 
-#include "AliTRDrawStream.h"
-#include "AliTRDrawFastStream.h"
-
 ClassImp(AliHLTTRDClusterizerComponent)
    
 AliHLTTRDClusterizerComponent::AliHLTTRDClusterizerComponent()
 : AliHLTProcessor(),
-  fOutputPercentage(500),
+  fOutputPercentage(100),
   fOutputConst(0),
   fClusterizer(NULL),
   fRecoParam(NULL),
@@ -82,7 +79,11 @@ AliHLTTRDClusterizerComponent::AliHLTTRDClusterizerComponent()
   fyPosMethod(1),
   fgeometryFileName(""),
   fProcessTracklets(kFALSE),
-  fHLTstreamer(kTRUE)
+  fHLTstreamer(kTRUE),
+  fTC(kFALSE),
+  fHLTflag(kTRUE),
+  fHighLevelOutput(kFALSE),
+  fEmulateHLTClusters(kFALSE)
 {
   // Default constructor
 
@@ -128,7 +129,7 @@ void AliHLTTRDClusterizerComponent::GetOutputDataSize( unsigned long& constBase,
 {
   // Get the output data size
   constBase = fOutputConst;
-  inputMultiplier = ((double)fOutputPercentage)/100.0;
+  inputMultiplier = ((double)fOutputPercentage)*4/100.0;
 }
 
 AliHLTComponent* AliHLTTRDClusterizerComponent::Spawn()
@@ -173,9 +174,6 @@ int AliHLTTRDClusterizerComponent::DoInit( int argc, const char** argv )
   if(fReconstructor->IsProcessingTracklets())
     fOutputConst = fClusterizer->GetTrMemBlockSize();
 
-  AliTRDrawStream::SetSubtractBaseline(10);
-  AliTRDrawFastStream::SetSubtractBaseline(10);
-
   return iResult;
 }
 
@@ -190,7 +188,6 @@ int AliHLTTRDClusterizerComponent::DoDeinit()
   fReconstructor->SetClusters(0x0);
   delete fReconstructor;
   fReconstructor = 0x0;
-  return 0;
 
   if (fRecoParam)
     {
@@ -198,6 +195,8 @@ int AliHLTTRDClusterizerComponent::DoDeinit()
       delete fRecoParam;
       fRecoParam = 0;
     }
+
+  return 0;
 }
 
 int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtData, 
@@ -209,9 +208,16 @@ int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtD
 {
   // Process an event
 
-  if (evtData.fEventID == 1)
+#ifdef HAVE_VALGRIND_CALLGRIND_H
+  if (evtData.fEventID == 10)
     CALLGRIND_START_INSTRUMENTATION;
 
+  if(GetFirstInputBlock(kAliHLTDataTypeEOR))
+    CALLGRIND_STOP_INSTRUMENTATION;
+#endif
+
+  if(!IsDataEvent())return 0;
+
   HLTDebug( "NofBlocks %i", evtData.fBlockCnt );
   // Process an event
   AliHLTUInt32_t totalSize = 0, offset = 0;
@@ -263,17 +269,9 @@ int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtD
 
       AliHLTUInt32_t spec = block.fSpecification;
       
-      Int_t id = 1024;
-      
-      for ( Int_t ii = 0; ii < 18 ; ii++ ) {
-       if ( spec & 0x1 ) {
-         id += ii;
-         break;
-       }
-       spec = spec >> 1 ;
-      }
+      Int_t id = AliHLTTRDUtils::GetSM(spec) + 1024;
 
-      fMemReader->SetEquipmentID( id ); 
+      fMemReader->SetEquipmentID(id);
       
       fClusterizer->SetMemBlock(outputPtr+offset);
       Bool_t bclustered = fClusterizer->Raw2ClustersChamber(fMemReader);
@@ -351,8 +349,15 @@ int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtD
   return 0;
 }
 
-void AliHLTTRDClusterizerComponent::PrintObject( TClonesArray* inClustersArray)
+void AliHLTTRDClusterizerComponent::PrintObject(
+#ifdef __DEBUG
+               TClonesArray* inClustersArray
+#else
+               TClonesArray*
+#endif
+       )
 {
+#ifdef __DEBUG
   AliTRDcluster* cluster=0x0;
   
   for (Int_t i=0; i < inClustersArray->GetEntriesFast(); i++){
@@ -362,7 +367,7 @@ void AliHLTTRDClusterizerComponent::PrintObject( TClonesArray* inClustersArray)
     HLTDebug("  Detector = %i, Amplitude = %f, Center = %f", cluster->GetDetector(), cluster->GetQ(), cluster->GetCenter());
     HLTDebug("  LocalTimeBin =  %i; NPads = %i; maskedPosition: %s, status: %s", cluster->GetLocalTimeBin(), cluster->GetNPads(),cluster->GetPadMaskedPosition(),cluster->GetPadMaskedPosition());
   }
-  
+#endif
 }
 
 int AliHLTTRDClusterizerComponent::Configure(const char* arguments){
@@ -422,10 +427,28 @@ int AliHLTTRDClusterizerComponent::Configure(const char* arguments){
        continue;
       }
       else if (argument.CompareTo("-noZS")==0) {
-       fOutputPercentage = 100;
+       fOutputPercentage = 10;
        HLTInfo("Awaiting non zero surpressed data");
        continue;
       }
+      else if (argument.CompareTo("-HLTflag")==0) {
+       if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+       TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+       if (toCompareTo.CompareTo("yes")==0){
+         HLTInfo("Setting HLTflag to: %s", toCompareTo.Data());
+         fHLTflag=kTRUE;
+       }
+       else if (toCompareTo.CompareTo("no")==0){
+         HLTInfo("Setting HLTflag to: %s", toCompareTo.Data());
+         fHLTflag=kFALSE;
+       }
+       else {
+         HLTError("unknown argument for HLTflag: %s", toCompareTo.Data());
+         iResult=-EINVAL;
+         break;
+       }
+       continue;
+      }
       else if (argument.CompareTo("-faststreamer")==0) {
        fHLTstreamer = kTRUE;
        HLTInfo("Useing fast raw streamer");
@@ -436,12 +459,53 @@ int AliHLTTRDClusterizerComponent::Configure(const char* arguments){
        HLTInfo("Don't use fast raw streamer");
        continue;
       }
+      else if (argument.CompareTo("-tailcancellation")==0) {
+       fTC = kTRUE;
+       HLTInfo("Useing tailcancellation");
+       continue;
+      }
       else if (argument.CompareTo("-rawver")==0) {
        if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
        HLTInfo("Raw data version is: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
        fRawDataVersion=((TObjString*)pTokens->At(i))->GetString().Atoi();
        continue;
       } 
+      else if (argument.CompareTo("-highLevelOutput")==0) {
+       if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+       TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+       if (toCompareTo.CompareTo("yes")==0){
+         HLTWarning("Setting highLevelOutput to: %s", toCompareTo.Data());
+         fHighLevelOutput=kTRUE;
+       }
+       else if (toCompareTo.CompareTo("no")==0){
+         HLTInfo("Setting highLevelOutput to: %s", toCompareTo.Data());
+         fHighLevelOutput=kFALSE;
+       }
+       else {
+         HLTError("unknown argument for highLevelOutput: %s", toCompareTo.Data());
+         iResult=-EINVAL;
+         break;
+       }
+       continue;
+      }
+      else if (argument.CompareTo("-emulateHLToutput")==0) {
+       if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+       TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
+       if (toCompareTo.CompareTo("yes")==0){
+         HLTWarning("Setting emulateHLToutput to: %s", toCompareTo.Data());
+         fEmulateHLTClusters=kTRUE;
+       }
+       else if (toCompareTo.CompareTo("no")==0){
+         HLTInfo("Setting emulateHLToutput to: %s", toCompareTo.Data());
+         fEmulateHLTClusters=kFALSE;
+       }
+       else {
+         HLTError("unknown argument for emulateHLToutput: %s", toCompareTo.Data());
+         iResult=-EINVAL;
+         break;
+       }
+       continue;
+      }
       else if (argument.CompareTo("-yPosMethod")==0) {
        if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
        TString toCompareTo=((TObjString*)pTokens->At(i))->GetString();
@@ -508,53 +572,83 @@ int AliHLTTRDClusterizerComponent::SetParams()
       HLTError("Could not load geometry");
       return -EINVAL;
     }
+    HLTInfo("Applying Alignment from CDB object");
+    AliGeomManager::ApplyAlignObjsFromCDB("TRD");
   }
   else{
     HLTInfo("Geometry Already Loaded!");
   }
 
-  TString recoOptions="hlt,!cw,sl_cl_0";
-
-  switch(fRecoDataType){
-  case 0: recoOptions += ",tc"; break;
-  case 1: recoOptions += ",!tc"; break;
-  }
-  switch(fyPosMethod){
-  case 0: recoOptions += ",!gs,!lut"; break;
-  case 1: recoOptions += ",!gs,lut"; break;
-  case 2: recoOptions += ",gs,!lut"; break;
-  }
-  if(fProcessTracklets) recoOptions += ",tp";
-  else  recoOptions += ",!tp";
-
-
-  if (fRecoParamType == 0)
-    {
-      HLTDebug("Low flux params init.");
-      fRecoParam = AliTRDrecoParam::GetLowFluxParam();
+  if(fReconstructor->GetRecoParam()){
+    fRecoParam = new AliTRDrecoParam(*fReconstructor->GetRecoParam());
+    HLTInfo("RecoParam already set!");
+  }else{
+    if(fRecoParamType == 0){
+#ifndef HAVE_NOT_ALITRD_RECOPARAM_r41621
+      if(fHLTflag){
+       HLTInfo("Low flux HLT params init.");
+       fRecoParam = AliTRDrecoParam::GetLowFluxHLTParam();
+      }else
+#endif
+       {
+         HLTInfo("Low flux params init.");
+         fRecoParam = AliTRDrecoParam::GetLowFluxParam();
+       }
     }
-
-  if (fRecoParamType == 1)
-    {
-      HLTDebug("High flux params init.");
-      fRecoParam = AliTRDrecoParam::GetHighFluxParam();
+    if(fRecoParamType == 1){
+#ifndef HAVE_NOT_ALITRD_RECOPARAM_r41621
+      if(fHLTflag){
+       HLTInfo("High flux HLT params init.");
+       fRecoParam = AliTRDrecoParam::GetHighFluxHLTParam();
+      }else
+#endif
+       {
+         HLTInfo("High flux params init.");
+         fRecoParam = AliTRDrecoParam::GetHighFluxParam();
+       }
     }
-  
-  if (fRecoParamType == 2)
-    {
-      HLTDebug("Cosmic Test params init.");
+    if(fRecoParamType == 2){
+      HLTInfo("Cosmic Test params init.");
       fRecoParam = AliTRDrecoParam::GetCosmicTestParam();
     }
+  }
 
-  if (fRecoParam == 0)
+  if (!fRecoParam)
     {
       HLTError("No reco params initialized. Sniffing big trouble!");
       return -EINVAL;
     }
 
+  if(fTC){fRecoParam->SetTailCancelation(kTRUE); HLTDebug("Enableing Tail Cancelation"); }
+  else{fRecoParam->SetTailCancelation(kFALSE); HLTDebug("Disableing Tail Cancelation"); }
+
+  switch(fyPosMethod){
+  case 0: fRecoParam->SetGAUS(kFALSE); fRecoParam->SetLUT(kFALSE); break;
+  case 1: fRecoParam->SetGAUS(kFALSE); fRecoParam->SetLUT(kTRUE); break;
+  case 2: fRecoParam->SetGAUS(kTRUE); fRecoParam->SetLUT(kFALSE); break;
+  }
+
   fRecoParam->SetStreamLevel(AliTRDrecoParam::kClusterizer, 0);
   fReconstructor->SetRecoParam(fRecoParam);
 
+  if(!fClusterizer){
+    fClusterizer = new AliHLTTRDClusterizer("TRDCclusterizer", "TRDCclusterizer");  
+    HLTDebug("TRDClusterizer at 0x%x", fClusterizer);
+  }
+
+  TString recoOptions="!cw";
+  if(fHLTflag){
+    recoOptions += ",hlt";
+    
+    // we transfer clusters that do no contain the XYZ coodrinates (AliHLTTRDCluster),
+    // thus this coordinate transformation ist useless
+#ifndef HAVE_NOT_ALITRD_CLUSTERIZER_r42837
+    fClusterizer->SetSkipTransform();
+#endif
+  }
+  if(fProcessTracklets) recoOptions += ",tp";
+  else  recoOptions += ",!tp";
+
   HLTDebug("Reconstructor options are: %s",recoOptions.Data());
   fReconstructor->SetOption(recoOptions.Data());
 
@@ -566,27 +660,14 @@ int AliHLTTRDClusterizerComponent::SetParams()
 
   if (fRecoDataType == 0)
     {
-      AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDsimStream);
       HLTDebug("Data type expected is SIMULATION!");
     }
 
   if (fRecoDataType == 1)
     {
-      AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDrealStream);
       HLTDebug("Data type expected is EXPERIMENT!");
     }
 
-  if (fHLTstreamer)
-    {
-      AliTRDrawStreamBase::SetRawStreamVersion("FAST");
-      HLTDebug("fast rawstreamer used");  
-    }
-
-  if(!fClusterizer){
-    fClusterizer = new AliHLTTRDClusterizer("TRDCclusterizer", "TRDCclusterizer");  
-    HLTDebug("TRDClusterizer at 0x%x", fClusterizer);
-  }
-
   fClusterizer->SetRawVersion(fRawDataVersion);
 
   return iResult;
@@ -621,3 +702,19 @@ int AliHLTTRDClusterizerComponent::Reconfigure(const char* cdbEntry, const char*
 
   return iResult;
 }
+
+void AliHLTTRDClusterizerComponent::GetOCDBObjectDescription(TMap* const targetMap){
+  // Get a list of OCDB object description needed for the particular component
+  if (!targetMap) return;
+  targetMap->Add(new TObjString("HLT/ConfigTRD/ClusterizerComponent"), new TObjString("component arguments"));
+  targetMap->Add(new TObjString("TRD/Calib/ChamberGainFactor"), new TObjString("gain factor of chambers"));
+  targetMap->Add(new TObjString("TRD/Calib/ChamberT0"), new TObjString("T0 of chambers"));
+  targetMap->Add(new TObjString("TRD/Calib/ChamberVdrift"), new TObjString("drift velocity of chambers"));
+  targetMap->Add(new TObjString("TRD/Calib/DetNoise"), new TObjString("noise of chambers"));
+  targetMap->Add(new TObjString("TRD/Calib/LocalGainFactor"), new TObjString("per pad gain factor"));
+  targetMap->Add(new TObjString("TRD/Calib/LocalT0"), new TObjString("per pad T0"));
+  targetMap->Add(new TObjString("TRD/Calib/LocalVdrift"), new TObjString("per pad drift velocity"));
+  targetMap->Add(new TObjString("TRD/Calib/PadNoise"), new TObjString("per pad noise"));
+  targetMap->Add(new TObjString("TRD/Calib/PadStatus"), new TObjString("pad status"));
+  targetMap->Add(new TObjString("TRD/Calib/PRFWidth"), new TObjString("pad response function"));
+}