- fixing major bug in clusterizer causing almost all events to contain only one cluster
[u/mrichter/AliRoot.git] / HLT / CALO / AliHLTCaloClusterizer.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