- fixing major bug in clusterizer causing almost all events to contain only one cluster
authorodjuvsla <odjuvsla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 7 Jul 2011 13:21:06 +0000 (13:21 +0000)
committerodjuvsla <odjuvsla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 7 Jul 2011 13:21:06 +0000 (13:21 +0000)
- adding handling of cluster overlapping two modules in EMCAL

HLT/CALO/AliHLTCaloClusterizer.cxx
HLT/CALO/AliHLTCaloClusterizer.h
HLT/CALO/AliHLTCaloClusterizerComponent.cxx

index b5f5d471ce3066d51e20e3ab8ba3b486012be45f..97aa0e9537c29aa039a58789bb480b8fd6a72f15 100644 (file)
@@ -60,7 +60,9 @@ AliHLTCaloClusterizer::AliHLTCaloClusterizer(TString det):
         fSortedByPosition(false),\r
         fSortedByEnergy(false),\r
         fSortDigits(false),\r
         fSortedByPosition(false),\r
         fSortedByEnergy(false),\r
         fSortDigits(false),\r
+        fIsEMCAL(false),\r
        fBuffer(0)\r
        fBuffer(0)\r
+       \r
 {\r
     //See header file for documentation\r
     //fEmcClusteringThreshold = 0.2;\r
 {\r
     //See header file for documentation\r
     //fEmcClusteringThreshold = 0.2;\r
@@ -238,14 +240,15 @@ AliHLTCaloClusterizer::AreNeighbours(AliHLTCaloDigitDataStruct* digit1,
                                      AliHLTCaloDigitDataStruct* digit2)\r
 {\r
     //see header file for documentation\r
                                      AliHLTCaloDigitDataStruct* digit2)\r
 {\r
     //see header file for documentation\r
-    if ( (digit1->fModule == digit2->fModule) /*&& (coord1[1]==coord2[1])*/ ) // inside the same PHOS module\r
+    if ( (digit1->fModule == digit2->fModule) || AreEdgeCells(digit1, digit2))\r
     {\r
         Int_t rowdiff = TMath::Abs( digit1->fZ - digit2->fZ );\r
         Int_t coldiff = TMath::Abs( digit1->fX - digit2->fX );\r
 \r
     {\r
         Int_t rowdiff = TMath::Abs( digit1->fZ - digit2->fZ );\r
         Int_t coldiff = TMath::Abs( digit1->fX - digit2->fX );\r
 \r
-        // As in the offline code we define neighbours as cells that share an edge, a corner is not  enough\r
-       //        if (( coldiff <= 1   &&  rowdiff == 0 ) || ( coldiff == 0 &&  rowdiff <= 1 ))\r
-        if (( coldiff <= 1) || ( rowdiff <= 1 ))\r
+       // Common edge defines neighbour\r
+        //if (( coldiff <= 1   &&  rowdiff == 0 ) || ( coldiff == 0 &&  rowdiff <= 1 ))\r
+         // Common edge and corner defines neighbour\r
+       if (( coldiff <= 1   &&  rowdiff <= 1 ))\r
         {\r
             // Check also for time\r
             if (TMath::Abs(digit1->fTime - digit2->fTime ) < fEmcTimeGate)\r
         {\r
             // Check also for time\r
             if (TMath::Abs(digit1->fTime - digit2->fTime ) < fEmcTimeGate)\r
@@ -341,3 +344,37 @@ AliHLTCaloClusterizer::CompareDigitsByEnergy(const void *dig0, const void *dig1)
   if ( ((*((AliHLTCaloDigitDataStruct**)(dig1)))->fEnergy - (*((AliHLTCaloDigitDataStruct**)(dig0)))->fEnergy) < 0) return -1;\r
   return 1;\r
 }\r
   if ( ((*((AliHLTCaloDigitDataStruct**)(dig1)))->fEnergy - (*((AliHLTCaloDigitDataStruct**)(dig0)))->fEnergy) < 0) return -1;\r
   return 1;\r
 }\r
+\r
+void AliHLTCaloClusterizer::SetDetector(TString det)\r
+{\r
+  if(det.CompareTo("EMCAL"))\r
+  {\r
+    fIsEMCAL = true;\r
+  }\r
+  else\r
+  {\r
+    fIsEMCAL = false;\r
+  }\r
+}\r
+\r
+Bool_t AliHLTCaloClusterizer::AreEdgeCells(AliHLTCaloDigitDataStruct *digit0, AliHLTCaloDigitDataStruct *digit1)\r
+{\r
+  if(fIsEMCAL)\r
+  {\r
+    Int_t modDiff = digit0->fModule - digit1->fModule;\r
+    if(TMath::Abs(modDiff) > 1) return kFALSE;\r
+    if(digit0->fModule > digit1->fModule && digit1->fModule%2 == 0) \r
+    {\r
+      if(digit0->fZ == 0 && digit1->fZ == (fCaloConstants->GetNZROWSMOD()-1))\r
+      return kTRUE;\r
+    }\r
+    if(digit1->fModule > digit0->fModule && digit0->fModule%2 == 0) \r
+    {\r
+      if(digit1->fZ == 0 && digit0->fZ == (fCaloConstants->GetNZROWSMOD()-1))\r
+      return kTRUE;\r
+    }\r
+  }\r
+  \r
+  return false;\r
+\r
+}\r
index adf4826eb60e0532f2e3cff967e82525808a32d9..513964e07ccaec7d57e58cffcfa073a15b6558c2 100644 (file)
@@ -137,7 +137,8 @@ public:
   */\r
   void SetSortingFunction(Int_t (*compare)(const void*, const void*)) { fCompareFunction = compare; }\r
   \r
   */\r
   void SetSortingFunction(Int_t (*compare)(const void*, const void*)) { fCompareFunction = compare; }\r
   \r
-  \r
+  /** Set the detector (PHOS or EMCAL) */\r
+  void SetDetector(TString det);\r
   \r
 protected:\r
 \r
   \r
 protected:\r
 \r
@@ -172,6 +173,9 @@ protected:
   //Int_t (AliHLTCaloClusterizer::*fCompareFunction)(const void*, const void*);\r
   Int_t (*fCompareFunction)(const void*, const void*);\r
   \r
   //Int_t (AliHLTCaloClusterizer::*fCompareFunction)(const void*, const void*);\r
   Int_t (*fCompareFunction)(const void*, const void*);\r
   \r
+  /** Check if two modules are connected */\r
+  Bool_t AreEdgeCells(AliHLTCaloDigitDataStruct *digit0, AliHLTCaloDigitDataStruct *digit1);\r
+  \r
   /** Array of pointers to the rec point output */\r
   AliHLTCaloRecPointDataStruct **fRecPointArray; //COMMENT\r
 \r
   /** Array of pointers to the rec point output */\r
   AliHLTCaloRecPointDataStruct **fRecPointArray; //COMMENT\r
 \r
@@ -228,6 +232,9 @@ protected:
 \r
    /** Are we sorting at all? */\r
    Bool_t fSortDigits; //COMMENT\r
 \r
    /** Are we sorting at all? */\r
    Bool_t fSortDigits; //COMMENT\r
+   \r
+   /** Is this running for EMCAL */\r
+   Bool_t fIsEMCAL; //COMMENT\r
 \r
 private:\r
 \r
 \r
 private:\r
 \r
index a7fb1416d229f5d441da5a5380a01c91d457ccd1..50d4598699ae803aa0df3033a02e2f51894052d5 100644 (file)
@@ -208,7 +208,7 @@ AliHLTCaloClusterizerComponent::Reconfigure(const char* cdbEntry, const char* /*
 
     if (cdbEntry) path = cdbEntry;
 
 
     if (cdbEntry) path = cdbEntry;
 
-    return ConfigureFromCDBTObjString(cdbEntry);
+    return ConfigureFromCDBTObjString(path);
 }
 
 int
 }
 
 int
@@ -265,6 +265,8 @@ AliHLTCaloClusterizerComponent::DoInit(int argc, const char** argv )
 
     fClusterizerPtr->SetSortDigitsByEnergy();
 
 
     fClusterizerPtr->SetSortDigitsByEnergy();
 
+    fClusterizerPtr->SetDetector(TString(fCaloConstants->GetDETNAME()));
+    
     fAnalyserPtr = new AliHLTCaloClusterAnalyser();
 
     if (fCaloConstants->GetDETNAME() == "PHOS")
     fAnalyserPtr = new AliHLTCaloClusterAnalyser();
 
     if (fCaloConstants->GetDETNAME() == "PHOS")