]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALClusterizer.cxx
Recalculate time in cluster just taking time of maximum energy cell, do not weight
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALClusterizer.cxx
index 0ae93528387cac276021a301debe5ce18bc54975..dd9b375f4169648eb36c3c5d0cc2ea394bf0ba5e 100644 (file)
@@ -69,7 +69,7 @@ AliEMCALClusterizer::AliEMCALClusterizer():
   fGeom(NULL),
   fCalibData(NULL), 
   fCaloPed(NULL),
-  fADCchannelECA(0.),fADCpedestalECA(0.),
+  fADCchannelECA(0.),fADCpedestalECA(0.), fTimeECA(0.),
   fTimeMin(-1.),fTimeMax(1.),fTimeCut(1.),
   fDefaultInit(kFALSE),fToUnfold(kFALSE),
   fNumberOfECAClusters(0), fECAClusteringThreshold(0.),
@@ -91,7 +91,7 @@ AliEMCALClusterizer::AliEMCALClusterizer(AliEMCALGeometry* geometry):
   fGeom(geometry),
   fCalibData(NULL), 
   fCaloPed(NULL),
-  fADCchannelECA(0.),fADCpedestalECA(0.),
+  fADCchannelECA(0.),fADCpedestalECA(0.), fTimeECA(0.),
   fTimeMin(-1.),fTimeMax(1.),fTimeCut(1.),
   fDefaultInit(kFALSE),fToUnfold(kFALSE),
   fNumberOfECAClusters(0), fECAClusteringThreshold(0.),
@@ -130,7 +130,7 @@ AliEMCALClusterizer::AliEMCALClusterizer(AliEMCALGeometry *geometry,
   fGeom(geometry),
   fCalibData(calib),
   fCaloPed(caloped),
-  fADCchannelECA(0.),fADCpedestalECA(0.),
+  fADCchannelECA(0.),fADCpedestalECA(0.), fTimeECA(0.),
   fTimeMin(-1.),fTimeMax(1.),fTimeCut(1.),
   fDefaultInit(kFALSE),fToUnfold(kFALSE),
   fNumberOfECAClusters(0), fECAClusteringThreshold(0.),
@@ -158,24 +158,65 @@ AliEMCALClusterizer::~AliEMCALClusterizer()
   //Already deleted in AliEMCALReconstructor.
 
   if(fClusterUnfolding) delete fClusterUnfolding;
+
+  // make sure we delete the rec points array
+  DeleteRecPoints();
+
+  //Delete digits array
+  DeleteDigits();
+
+}
+
+//____________________________________________________________________________
+void AliEMCALClusterizer::DeleteRecPoints()
+{
+  // free the cluster array
+  if (fRecPoints) 
+    {
+      AliDebug(2, "Deleting fRecPoints.");
+      fRecPoints->Delete();
+      delete fRecPoints;
+      fRecPoints = 0;
+    }
+}
+
+//____________________________________________________________________________
+void AliEMCALClusterizer::DeleteDigits()
+{
+  // free the digits array
+  if (fDigitsArr) 
+    {
+      AliDebug(2, "Deleting fDigitsArr.");
+      fDigitsArr->Clear("C");
+      delete fDigitsArr;
+      fDigitsArr = 0;
+    }
 }
 
 //____________________________________________________________________________
-Float_t AliEMCALClusterizer::Calibrate(const Float_t amp, const Float_t time, const Int_t absId) 
+void AliEMCALClusterizer::Calibrate(Float_t & amp, Float_t & time, const Int_t absId) 
 {
-  // Convert digitized amplitude into energy.
-  // Calibration parameters are taken from calibration data base for raw data,
-  // or from digitizer parameters for simulated data.
+  // Convert digitized amplitude into energy, calibrate time
+  // Calibration parameters are taken from OCDB : OCDB/EMCAL/Calib/Data
 
+  //Check if time is too large or too small, indication of a noisy channel, remove in this case
+  if(time > fTimeMax || time < fTimeMin) {
+    amp  = 0 ;
+    time = 0 ;
+    return ;
+  }  
+  
   //Return energy with default parameters if calibration is not available
-  if (!fCalibData&&!fCaloPed) {
+  if (!fCalibData && !fCaloPed) {
     if (fIsInputCalibrated == kTRUE)
     {
       AliDebug(10, Form("Input already calibrated!"));
-      return amp;
-    }    
-    
-    return -fADCpedestalECA + amp * fADCchannelECA ; 
+      return ;
+    }
+    else{
+      AliFatal("OCDB calibration and bad map parameters are not available");
+      return;
+    }   
   }
   
   if (fGeom==0)
@@ -195,7 +236,9 @@ Float_t AliEMCALClusterizer::Calibrate(const Float_t amp, const Float_t time, co
     //assert(0); // GCB: This aborts reconstruction of raw simulations 
     //where simulation had more SM than default geometry, 
     //change to return 0, to avoid aborting good generations.
-    return 0;
+    amp  = 0;
+    time = 0;
+    return ;
   }
     
   fGeom->GetCellPhiEtaIndexInSModule(iSupMod,nModule,nIphi, nIeta,iphi,ieta);
@@ -208,22 +251,25 @@ Float_t AliEMCALClusterizer::Calibrate(const Float_t amp, const Float_t time, co
     Int_t channelStatus = (Int_t)(fCaloPed->GetDeadMap(iSupMod))->GetBinContent(ieta,iphi);
     if(channelStatus == AliCaloCalibPedestal::kHot || channelStatus == AliCaloCalibPedestal::kDead) {
       AliDebug(2,Form("Tower from SM %d, ieta %d, iphi %d is BAD : status %d !!!",iSupMod,ieta,iphi, channelStatus));
-      return 0;
+      amp  = 0 ;
+      time = 0 ;
+      return ;
     }
   }
-  //Check if time is too large or too small, indication of a noisy channel, remove in this case
-  if(time > fTimeMax || time < fTimeMin) return 0;
     
-  if (fIsInputCalibrated||!fCalibData)
+  if (fIsInputCalibrated || !fCalibData)
   {
     AliDebug(10, Form("Input already calibrated!"));
-    return amp;
+    return ;
   }
          
   fADCchannelECA  = fCalibData->GetADCchannel (iSupMod,ieta,iphi);
   fADCpedestalECA = fCalibData->GetADCpedestal(iSupMod,ieta,iphi);
-      
-  return -fADCpedestalECA + amp * fADCchannelECA ;        
+  fTimeECA        = fCalibData->GetTimeChannel(iSupMod,ieta,iphi);
+  
+  time -= fTimeECA ;
+  amp   = amp * fADCchannelECA - fADCpedestalECA ;  
+  
 }
 
 //____________________________________________________________________________
@@ -336,7 +382,11 @@ void AliEMCALClusterizer::InitParameters(const AliEMCALRecParam* recParam)
   fTimeCut                = recParam->GetTimeCut();
   fTimeMin                = recParam->GetTimeMin();
   fTimeMax                = recParam->GetTimeMax();
-    
+  
+  //For NxN
+  SetNRowDiff(recParam->GetNRowDiff());
+  SetNColDiff(recParam->GetNColDiff());
+  
   AliDebug(1,Form("Reconstruction parameters: fECAClusteringThreshold=%.3f GeV, fECAW=%.3f, fMinECut=%.3f GeV, "
                   "fToUnfold=%d, fECALocMaxCut=%.3f GeV, fTimeCut=%e s,fTimeMin=%e s,fTimeMax=%e s",
                   fECAClusteringThreshold,fECAW0,fMinECut,fToUnfold,fECALocMaxCut,fTimeCut, fTimeMin, fTimeMax));