Provide more shower shape parameters after recalculation of main axis
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 29 Mar 2012 08:38:27 +0000 (08:38 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 29 Mar 2012 08:38:27 +0000 (08:38 +0000)
EMCAL/AliEMCALRecoUtils.cxx
EMCAL/AliEMCALRecoUtils.h

index 842b5e3..d709f55 100644 (file)
@@ -1469,10 +1469,13 @@ void AliEMCALRecoUtils::RecalculateClusterPID(AliVCluster * cluster)
   cluster->SetPID(pidlist);
 }
 
-//____________________________________________________________________________________________
+//___________________________________________________________________________________________________________________
 void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGeometry * geom, 
                                                                 AliVCaloCells* cells, 
-                                                                AliVCluster * cluster)
+                                                                AliVCluster * cluster,
+                                                                Float_t & l0,   Float_t & l1,   
+                                                                Float_t & disp, Float_t & dEta, Float_t & dPhi,
+                                                                Float_t & sEta, Float_t & sPhi, Float_t & sEtaPhi)
 {
   // Calculates new center of gravity in the local EMCAL-module coordinates 
   // and tranfers into global ALICE coordinates
@@ -1484,28 +1487,24 @@ void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGe
     return;
   }
     
-  Int_t nstat  = 0;
-  Float_t wtot = 0. ;
   Double_t eCell       = 0.;
   Float_t  fraction    = 1.;
   Float_t  recalFactor = 1.;
 
-  Int_t iSupMod = -1;
-  Int_t iTower  = -1;
-  Int_t iIphi   = -1;
-  Int_t iIeta   = -1;
-  Int_t iphi    = -1;
-  Int_t ieta    = -1;
-  Double_t etai = -1.;
-  Double_t phii = -1.;
-  
-  Double_t w     = 0.;
-  Double_t d     = 0.;
-  Double_t dxx   = 0.;
-  Double_t dzz   = 0.;
-  Double_t dxz   = 0.;  
-  Double_t xmean = 0.;
-  Double_t zmean = 0.;
+  Int_t    iSupMod = -1;
+  Int_t    iTower  = -1;
+  Int_t    iIphi   = -1;
+  Int_t    iIeta   = -1;
+  Int_t    iphi    = -1;
+  Int_t    ieta    = -1;
+  Double_t etai    = -1.;
+  Double_t phii    = -1.;
+  
+  Int_t    nstat   = 0 ;
+  Float_t  wtot    = 0.;
+  Double_t w       = 0.;
+  Double_t etaMean = 0.;
+  Double_t phiMean = 0.;
     
   //Loop on cells
   for(Int_t iDigit=0; iDigit < cluster->GetNCells(); iDigit++) 
@@ -1533,17 +1532,18 @@ void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGe
       w  = GetCellWeight(eCell,cluster->E());
       
       etai=(Double_t)ieta;
-      phii=(Double_t)iphi;             
+      phii=(Double_t)iphi;     
+      
       if(w > 0.0) 
       {
         wtot += w ;
         nstat++;                       
         //Shower shape
-        dxx  += w * etai * etai ;
-        xmean+= w * etai ;
-        dzz  += w * phii * phii ;
-        zmean+= w * phii ; 
-        dxz  += w * etai * phii ; 
+        sEta     += w * etai * etai ;
+        etaMean  += w * etai ;
+        sPhi     += w * phii * phii ;
+        phiMean  += w * phii ; 
+        sEtaPhi  += w * etai * phii ; 
       }
     } 
     else
@@ -1553,8 +1553,8 @@ void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGe
   //Normalize to the weight    
   if (wtot > 0) 
   {
-    xmean /= wtot ;
-    zmean /= wtot ;
+    etaMean /= wtot ;
+    phiMean /= wtot ;
   }
   else
     AliError(Form("Wrong weight %f\n", wtot));
@@ -1581,7 +1581,12 @@ void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGe
       
       etai=(Double_t)ieta;
       phii=(Double_t)iphi;             
-      if(w > 0.0)  d +=  w*((etai-xmean)*(etai-xmean)+(phii-zmean)*(phii-zmean)); 
+      if(w > 0.0) 
+      { 
+        disp +=  w *((etai-etaMean)*(etai-etaMean)+(phii-phiMean)*(phii-phiMean)); 
+        dEta +=  w * (etai-etaMean)*(etai-etaMean) ; 
+        dPhi +=  w * (phii-phiMean)*(phii-phiMean) ; 
+      }
     }
     else
       AliError(Form("Wrong energy %f and/or amplitude %f\n", eCell, cluster->E()));
@@ -1590,29 +1595,52 @@ void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGe
   //Normalize to the weigth and set shower shape parameters
   if (wtot > 0 && nstat > 1) 
   {
-    d /= wtot ;
-    dxx /= wtot ;
-    dzz /= wtot ;
-    dxz /= wtot ;
-    dxx -= xmean * xmean ;
-    dzz -= zmean * zmean ;
-    dxz -= xmean * zmean ;
-    cluster->SetM02(0.5 * (dxx + dzz) + TMath::Sqrt( 0.25 * (dxx - dzz) * (dxx - dzz) + dxz * dxz ));
-    cluster->SetM20(0.5 * (dxx + dzz) - TMath::Sqrt( 0.25 * (dxx - dzz) * (dxx - dzz) + dxz * dxz ));
+    disp    /= wtot ;
+    dEta    /= wtot ;
+    dPhi    /= wtot ;
+    sEta    /= wtot ;
+    sPhi    /= wtot ;
+    sEtaPhi /= wtot ;
+    
+    sEta    -= etaMean * etaMean ;
+    sPhi    -= phiMean * phiMean ;
+    sEtaPhi -= etaMean * phiMean ;
+    
+    l0 = (0.5 * (sEta + sPhi) + TMath::Sqrt( 0.25 * (sEta - sPhi) * (sEta - sPhi) + sEtaPhi * sEtaPhi ));
+    l1 = (0.5 * (sEta + sPhi) - TMath::Sqrt( 0.25 * (sEta - sPhi) * (sEta - sPhi) + sEtaPhi * sEtaPhi ));
   }
   else
   {
-    d=0. ;
-    cluster->SetM20(0.) ;
-    cluster->SetM02(0.) ;
+    l0   = 0. ;
+    l1   = 0. ;
+    dEta = 0. ; dPhi = 0. ; disp    = 0. ;
+    sEta = 0. ; sPhi = 0. ; sEtaPhi = 0. ;
   }    
   
-  if (d>=0)
-    cluster->SetDispersion(TMath::Sqrt(d)) ;
-  else    
-    cluster->SetDispersion(0) ;
 }
 
+//____________________________________________________________________________________________
+void AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(const AliEMCALGeometry * geom, 
+                                                                AliVCaloCells* cells, 
+                                                                AliVCluster * cluster)
+{
+  // Calculates new center of gravity in the local EMCAL-module coordinates 
+  // and tranfers into global ALICE coordinates
+  // Calculates Dispersion and main axis and puts them into the cluster
+  
+  Float_t l0   = 0., l1   = 0.;
+  Float_t disp = 0., dEta = 0., dPhi    = 0.; 
+  Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
+  
+  AliEMCALRecoUtils::RecalculateClusterShowerShapeParameters(geom,cells,cluster,l0,l1,disp,
+                                                             dEta, dPhi, sEta, sPhi, sEtaPhi);
+  
+  cluster->SetM02(l0);
+  cluster->SetM20(l1);
+  if(disp > 0. ) cluster->SetDispersion(TMath::Sqrt(disp)) ;
+  
+} 
+
 //____________________________________________________________________________
 void AliEMCALRecoUtils::FindMatches(AliVEvent *event,
                                     TObjArray * clusterArr,  
index 80febf7..c5c12a2 100644 (file)
@@ -242,6 +242,11 @@ public:
 
   void     RecalculateClusterDistanceToBadChannel (const AliEMCALGeometry * geom, AliVCaloCells* cells, AliVCluster * cluster);
   void     RecalculateClusterShowerShapeParameters(const AliEMCALGeometry * geom, AliVCaloCells* cells, AliVCluster * cluster);
+  void     RecalculateClusterShowerShapeParameters(const AliEMCALGeometry * geom, AliVCaloCells* cells, AliVCluster * cluster,
+                                                   Float_t & l0,   Float_t & l1,   
+                                                   Float_t & disp, Float_t & dEta, Float_t & dPhi,
+                                                   Float_t & sEta, Float_t & sPhi, Float_t & sEtaPhi);
+
   void     RecalculateClusterPID(AliVCluster * cluster);
 
   AliEMCALPIDUtils * GetPIDUtils() { return fPIDUtils;}