X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALClusterizer.cxx;h=fd263106c032c71c51160184c5d4d0dce40df635;hb=0eb9d39882d4df56d295ba6eec8b953643adb172;hp=2120f10e829d9ae5b4bef11e2f36cdca0b08897b;hpb=294553d1c13e09b2c2aea6d8389dd9f9546c82c5;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALClusterizer.cxx b/EMCAL/AliEMCALClusterizer.cxx index 2120f10e829..fd263106c03 100644 --- a/EMCAL/AliEMCALClusterizer.cxx +++ b/EMCAL/AliEMCALClusterizer.cxx @@ -25,8 +25,7 @@ ////////////////////////////////////////////////////////////////////////////// // --- ROOT system --- -#include "TClonesArray.h" -#include "TTree.h" +#include #include class TFolder; #include @@ -69,7 +68,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 +90,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 +129,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 +157,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) { + 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 +235,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 +250,27 @@ 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) + if (fIsInputCalibrated || !fCalibData) { AliDebug(10, Form("Input already calibrated!")); - return amp; + return ; } + Int_t bc = 0; // Get somehow the bunch crossing number + fADCchannelECA = fCalibData->GetADCchannel (iSupMod,ieta,iphi); fADCpedestalECA = fCalibData->GetADCpedestal(iSupMod,ieta,iphi); - - return -fADCpedestalECA + amp * fADCchannelECA ; + fTimeECA = fCalibData->GetTimeChannel(iSupMod,ieta,iphi, bc); + + time -= fTimeECA ; + amp = amp * fADCchannelECA - fADCpedestalECA ; + } //____________________________________________________________________________ @@ -336,7 +383,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));