]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TRD/AliHLTTRDClusterizerComponent.cxx
update for bug #100726
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDClusterizerComponent.cxx
index e679fba2349d390e87a2350e6ac89009cca750c7..0b809f2b7975731844eb6fb8ee06a1d38ba97d3a 100644 (file)
@@ -17,7 +17,7 @@
 //**************************************************************************
 
 /** @file   AliHLTTRDClusterizerComponent.cxx
-    @author 
+    @author Theodor Rascanu
     @date   
     @brief  A TRDClusterizer processing component for the HLT. 
 */
 // or                                                                        //
 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt                          //
 
-#if __GNUC__ >= 3
-using namespace std;
-#endif
-
 #include "TTree.h"
 #include "TFile.h"
 #include "TBranch.h"
@@ -39,6 +35,7 @@ using namespace std;
 #include "AliHLTTRDClusterizerComponent.h"
 #include "AliHLTTRDDefinitions.h"
 #include "AliHLTTRDClusterizer.h"
+#include "AliHLTTRDUtils.h"
 
 #include "AliGeomManager.h"
 #include "AliTRDReconstructor.h"
@@ -46,7 +43,7 @@ using namespace std;
 #include "AliCDBStorage.h"
 #include "AliCDBEntry.h"
 #include "AliTRDrecoParam.h"
-#include "AliTRDrawStreamBase.h"
+#include "AliTRDrawStream.h"
 #include "AliTRDcluster.h"
 
 #include "AliRawReaderMemory.h"
@@ -54,22 +51,21 @@ 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"
+using namespace std;
 
 ClassImp(AliHLTTRDClusterizerComponent)
    
 AliHLTTRDClusterizerComponent::AliHLTTRDClusterizerComponent()
 : AliHLTProcessor(),
-  fOutputPercentage(500),
+  fOutputPercentage(100),
   fOutputConst(0),
   fClusterizer(NULL),
   fRecoParam(NULL),
@@ -131,7 +127,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()
@@ -187,10 +183,9 @@ int AliHLTTRDClusterizerComponent::DoDeinit()
   delete fClusterizer;
   fClusterizer = 0;
   
-  fReconstructor->SetClusters(0x0);
+  //fReconstructor->SetClusters(0x0);
   delete fReconstructor;
   fReconstructor = 0x0;
-  return 0;
 
   if (fRecoParam)
     {
@@ -198,6 +193,8 @@ int AliHLTTRDClusterizerComponent::DoDeinit()
       delete fRecoParam;
       fRecoParam = 0;
     }
+
+  return 0;
 }
 
 int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtData, 
@@ -209,9 +206,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;
@@ -238,8 +242,6 @@ int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtD
                    evtData.fEventID, evtData.fEventID, 
                    DataType2Text(inputDataType).c_str(), 
                    DataType2Text(expectedDataType).c_str());
-         if(block.fDataType == kAliHLTDataTypeEOR)
-           CALLGRIND_STOP_INSTRUMENTATION;
          continue;
        }
       else 
@@ -265,17 +267,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);
@@ -346,15 +340,22 @@ int AliHLTTRDClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtD
        HLTDebug("Array of clusters is empty!");
       }
     }
-  fReconstructor->SetClusters(0x0);
+  //fReconstructor->SetClusters(0x0);
 
   size = totalSize;
   HLTDebug("Event is done. size written to the output is %i", size);
   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++){
@@ -364,7 +365,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){
@@ -424,7 +425,7 @@ int AliHLTTRDClusterizerComponent::Configure(const char* arguments){
        continue;
       }
       else if (argument.CompareTo("-noZS")==0) {
-       fOutputPercentage = 100;
+       fOutputPercentage = 10;
        HLTInfo("Awaiting non zero surpressed data");
        continue;
       }
@@ -485,19 +486,19 @@ int AliHLTTRDClusterizerComponent::Configure(const char* arguments){
        }
        continue;
       }
-      else if (argument.CompareTo("-emulateHLTClusters")==0) {
+      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 emulateHLTTracks to: %s", toCompareTo.Data());
+         HLTWarning("Setting emulateHLToutput to: %s", toCompareTo.Data());
          fEmulateHLTClusters=kTRUE;
        }
        else if (toCompareTo.CompareTo("no")==0){
-         HLTInfo("Setting emulateHLTTracks to: %s", toCompareTo.Data());
+         HLTInfo("Setting emulateHLToutput to: %s", toCompareTo.Data());
          fEmulateHLTClusters=kFALSE;
        }
        else {
-         HLTError("unknown argument for emulateHLTTracks: %s", toCompareTo.Data());
+         HLTError("unknown argument for emulateHLToutput: %s", toCompareTo.Data());
          iResult=-EINVAL;
          break;
        }
@@ -581,15 +582,31 @@ int AliHLTTRDClusterizerComponent::SetParams()
     HLTInfo("RecoParam already set!");
   }else{
     if(fRecoParamType == 0){
-      HLTDebug("Low flux params init.");
-      fRecoParam = AliTRDrecoParam::GetLowFluxParam();
+#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();
+#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.");
+      HLTInfo("Cosmic Test params init.");
       fRecoParam = AliTRDrecoParam::GetCosmicTestParam();
     }
   }
@@ -600,32 +617,33 @@ int AliHLTTRDClusterizerComponent::SetParams()
       return -EINVAL;
     }
 
-  // backward compatibility to AliTRDrecoParam < r34995
-# ifndef HAVE_NOT_ALITRDRECOPARAM_r34995
-#   define AliTRDRecoParamSetTailCancelation(b) fRecoParam->SetTailCancelation(b)
-#   define AliTRDRecoParamSetGAUS(b) fRecoParam->SetGAUS(b)
-#   define AliTRDRecoParamSetLUT(b) fRecoParam->SetLUT(b)
-# else
-#   define AliTRDRecoParamSetTailCancelation(b) fRecoParam->SetTailCancelation()
-#   define AliTRDRecoParamSetGAUS(b) fRecoParam->SetGAUS()
-#   define AliTRDRecoParamSetLUT(b) fRecoParam->SetLUT()
-# endif
-
   if(fTC){fRecoParam->SetTailCancelation(kTRUE); HLTDebug("Enableing Tail Cancelation"); }
   else{fRecoParam->SetTailCancelation(kFALSE); HLTDebug("Disableing Tail Cancelation"); }
 
   switch(fyPosMethod){
-  case 0: AliTRDRecoParamSetGAUS(kFALSE); AliTRDRecoParamSetLUT(kFALSE); break;
-  case 1: AliTRDRecoParamSetGAUS(kFALSE); AliTRDRecoParamSetLUT(kTRUE); break;
-  case 2: AliTRDRecoParamSetGAUS(kTRUE); AliTRDRecoParamSetLUT(kFALSE); break;
+  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)
+  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";
 
@@ -640,27 +658,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;
@@ -695,3 +700,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"));
+}