Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / CALO / AliHLTCaloClusterizerComponent.cxx
index 794cf49..cde658f 100644 (file)
@@ -43,12 +43,12 @@ ClassImp(AliHLTCaloClusterizerComponent);
 AliHLTCaloClusterizerComponent::AliHLTCaloClusterizerComponent(TString det):
         AliHLTCaloProcessor(),
         AliHLTCaloConstantsHandler(det),
-        fDataOrigin('\0'),
+        fDataOrigin(0),
         fAnalyserPtr(0),
         fRecoParamsPtr(0),
+        fClusterizerPtr(0),
         fDigitsPointerArray(0),
         fOutputDigitsArray(0),
-        fClusterizerPtr(0),
         fDigitCount(0),
         fCopyDigitsToOuput(kTRUE)
 {
@@ -61,11 +61,10 @@ AliHLTCaloClusterizerComponent::AliHLTCaloClusterizerComponent(TString det):
 AliHLTCaloClusterizerComponent::~AliHLTCaloClusterizerComponent()
 {
     //See headerfile for documentation
-    delete fAnalyserPtr;
-    if (fClusterizerPtr)
+    if(fAnalyserPtr)
     {
-        delete fClusterizerPtr;
-        fClusterizerPtr = 0;
+      delete fAnalyserPtr;
+      fAnalyserPtr = 0;
     }
 }
 
@@ -115,9 +114,14 @@ AliHLTCaloClusterizerComponent::DoEvent(const AliHLTComponentEventData& evtData,
             // Could be changed if this is a bottle neck.
             for (Int_t i = 0; i < nDigits; i++)
             {
+              // If we have a digit based on a low gain channel, but there has been no high gain channel, 
+              // we shouldn't use it since we are then very sensitive to noise (e.g. for PHOS 1 LG ADC count = 40 MeV)
+              if(digitDataPtr->fHgPresent)
+              {
                 fDigitsPointerArray[digCount] = digitDataPtr;
                 digCount++;
                 digitDataPtr++;
+              }
             }
         }
     }
@@ -204,7 +208,7 @@ AliHLTCaloClusterizerComponent::Reconfigure(const char* cdbEntry, const char* /*
 
     if (cdbEntry) path = cdbEntry;
 
-    return ConfigureFromCDBTObjString(cdbEntry);
+    return ConfigureFromCDBTObjString(path);
 }
 
 int
@@ -214,37 +218,41 @@ AliHLTCaloClusterizerComponent::ScanConfigurationArgument(int argc, const char *
 
     if (argc <= 0) return 0;
 
-    int i=0;
-
-    TString argument=argv[i];
-
-    if (argument.CompareTo("-digitthreshold") == 0)
-    {
-        if (++i >= argc) return -EPROTO;
-        argument = argv[i];
-        fClusterizerPtr->SetEmcMinEnergyThreshold(argument.Atof());
-        return 1;
-    }
-
-    if (argument.CompareTo("-recpointthreshold") == 0)
-    {
-        if (++i >= argc) return -EPROTO;
-        argument = argv[i];
-        fClusterizerPtr->SetEmcClusteringThreshold(argument.Atof());
-        return 1;
-    }
-
-    if (argument.CompareTo("-cutonsinglecell") == 0)
-    {
-        if (++i >= argc) return -EPROTO;
-        argument = argv[i];
-        fAnalyserPtr->SetCutOnSingleCellClusters(true, argument.Atof());
-        return 1;
-    }
-    if (argument.CompareTo("-sortbyposition") == 0)
-    {
-        fClusterizerPtr->SetSortDigitsByPosition();
-        return 1;
+    for(int i=0;i<argc;i++){
+      TString argument=argv[i];
+
+      if (argument.CompareTo("-digitthreshold") == 0)
+       {
+         if (++i >= argc) return -EPROTO;
+         argument = argv[i];
+         fClusterizerPtr->SetEmcMinEnergyThreshold(argument.Atof());
+       }
+
+      if (argument.CompareTo("-recpointthreshold") == 0)
+       {
+         if (++i >= argc) return -EPROTO;
+         argument = argv[i];
+         fClusterizerPtr->SetEmcClusteringThreshold(argument.Atof());
+       }
+
+      if (argument.CompareTo("-cutonsinglecell") == 0)
+       {
+         if (++i >= argc) return -EPROTO;
+         argument = argv[i];
+         fAnalyserPtr->SetCutOnSingleCellClusters(true, argument.Atof());
+       }
+
+      if (argument.CompareTo("-emctimegate") == 0)
+       {
+         if (++i >= argc) return -EPROTO;
+         argument = argv[i];
+         fClusterizerPtr->SetEmcTimeGate(argument.Atof());
+       }
+
+      if (argument.CompareTo("-sortbyposition") == 0)
+       {
+         fClusterizerPtr->SetSortDigitsByPosition();
+       }
     }
 
     return 0;
@@ -255,14 +263,18 @@ AliHLTCaloClusterizerComponent::DoInit(int argc, const char** argv )
 {
     //See headerfile for documentation
 
+  if (fCaloConstants->GetDETNAME() == "EMCAL") 
+    
+    fDigitsPointerArray = new AliHLTCaloDigitDataStruct*[2*fCaloConstants->GetNXCOLUMNSMOD()*fCaloConstants->GetNZROWSMOD()];
+  else 
     fDigitsPointerArray = new AliHLTCaloDigitDataStruct*[fCaloConstants->GetNXCOLUMNSMOD()*fCaloConstants->GetNZROWSMOD()];
 
-    fClusterizerPtr = new AliHLTCaloClusterizer(fCaloConstants->GetDETNAME());
-
     fClusterizerPtr->SetDigitArray(fDigitsPointerArray);
 
     fClusterizerPtr->SetSortDigitsByEnergy();
 
+    fClusterizerPtr->SetDetector(TString(fCaloConstants->GetDETNAME()));
+    
     fAnalyserPtr = new AliHLTCaloClusterAnalyser();
 
     if (fCaloConstants->GetDETNAME() == "PHOS")
@@ -285,6 +297,7 @@ AliHLTCaloClusterizerComponent::DoInit(int argc, const char** argv )
             fAnalyserPtr->SetRecoParamHandler(fRecoParamsPtr);
             fClusterizerPtr->SetEmcClusteringThreshold(fRecoParamsPtr->GetRecPointThreshold());
             fClusterizerPtr->SetEmcMinEnergyThreshold(fRecoParamsPtr->GetRecPointMemberThreshold());
+           HLTInfo("Setting thresholds for clusterizer: %f, %f", fRecoParamsPtr->GetRecPointThreshold(), fRecoParamsPtr->GetRecPointMemberThreshold());
         }
     }
     //
@@ -293,10 +306,7 @@ AliHLTCaloClusterizerComponent::DoInit(int argc, const char** argv )
 
     //  ConfigureFromCDBTObjString(path);
 
-    for (int i = 0; i < argc; i++)
-    {
-        ScanConfigurationArgument(i, argv);
-    }
+    ScanConfigurationArgument(argc, argv);
 
     return 0;
 }