From 9f4672896bea68f94bba0a93ade9a857ea10f722 Mon Sep 17 00:00:00 2001 From: gconesab Date: Wed, 13 Jan 2010 11:24:59 +0000 Subject: [PATCH] 1) First Year Geometry option added, name "EMCAL_FIRSTYEAR". Not useful yet until changes done in AliGeomManager 2) Set in OCDB the type of the fitting algorithm and if the bad channels are fitted or not 3) 2 fitters available, kStandard (used until now) and kFastFit from Aleksei, the call to this one needs checks, not working properly yet. --- EMCAL/AliEMCALEMCGeometry.cxx | 38 ++++------ EMCAL/AliEMCALRawUtils.cxx | 61 +++++++++++++--- EMCAL/AliEMCALRawUtils.h | 21 ++++-- EMCAL/AliEMCALRecParam.cxx | 66 ++++++++++-------- EMCAL/AliEMCALRecParam.h | 28 +++++--- EMCAL/AliEMCALReconstructor.cxx | 2 + .../Calib/RecoParam/Run0_999999999_v0_s0.root | Bin 5176 -> 5140 bytes 7 files changed, 138 insertions(+), 78 deletions(-) diff --git a/EMCAL/AliEMCALEMCGeometry.cxx b/EMCAL/AliEMCALEMCGeometry.cxx index aa1feffc8dc..630c69f73fa 100644 --- a/EMCAL/AliEMCALEMCGeometry.cxx +++ b/EMCAL/AliEMCALEMCGeometry.cxx @@ -233,7 +233,7 @@ void AliEMCALEMCGeometry::Init(void){ if(fGeoName.Contains("WSUC")) fGeoName = "EMCAL_WSUC"; //check that we have a valid geometry name - if(!(fGeoName.Contains("EMCAL_PDC06") || fGeoName.Contains("EMCAL_COMPLETE") || fGeoName.Contains("EMCAL_WSUC") || fGeoName.Contains("EMCAL_1stYear"))) { + if(!(fGeoName.Contains("EMCAL_PDC06") || fGeoName.Contains("EMCAL_COMPLETE") || fGeoName.Contains("EMCAL_WSUC") || fGeoName.Contains("EMCAL_FIRSTYEAR"))) { Fatal("Init", "%s is an undefined geometry!", fGeoName.Data()) ; } @@ -294,26 +294,15 @@ void AliEMCALEMCGeometry::Init(void){ CheckAdditionalOptions(); } - if(fGeoName.Contains("1stYear")){ - fNumberOfSuperModules = 2; - - if(fGeoName.Contains("LowerEta")) { - fNPhiSuperModule = 1; - } - else if(fGeoName.Contains("LowerPhi_SideA")){ - fNPhiSuperModule = 2; - fArm1EtaMax=0; - } - else if(fGeoName.Contains("LowerPhi_SideC")){ - fNPhiSuperModule = 2; - fArm1EtaMin=0; - } - - CheckAdditionalOptions(); - } - + //In 2009-2010 data taking runs only 4 SM, in the upper position. + if(fGeoName.Contains("FIRSTYEAR")){ + fNumberOfSuperModules = 4; + fArm1PhiMax = 120.0; + CheckAdditionalOptions(); + } + // constant for transition absid <--> indexes - fNCellsInModule = fNPHIdiv*fNETAdiv; + fNCellsInModule = fNPHIdiv*fNETAdiv; fNCellsInSupMod = fNCellsInModule*fNPhi*fNZ; fNCells = fNCellsInSupMod*fNumberOfSuperModules; if(GetKey110DEG()) fNCells -= fNCellsInSupMod; @@ -347,16 +336,18 @@ void AliEMCALEMCGeometry::Init(void){ if(fNumberOfSuperModules > 1) fPhiBoundariesOfSM[1] = TMath::PiOver2() + TMath::ATan2(fParSM[1] , fIPDistance); if(fNumberOfSuperModules > 2) { - for(int i=1; i<=4; i++) { // from 2th ro 9th + Int_t maxPhiBlock =fNumberOfSuperModules/2-1; + if(fNumberOfSuperModules > 10) maxPhiBlock = 4; + for(int i=1; i<=maxPhiBlock; i++) { // from 2th ro 9th fPhiBoundariesOfSM[2*i] = fPhiBoundariesOfSM[0] + 20.*TMath::DegToRad()*i; fPhiBoundariesOfSM[2*i+1] = fPhiBoundariesOfSM[1] + 20.*TMath::DegToRad()*i; - fPhiCentersOfSM[i] = fPhiCentersOfSM[0] + 20.*TMath::DegToRad()*i; + fPhiCentersOfSM[i] = fPhiCentersOfSM[0] + 20.*TMath::DegToRad()*i; } } if(fNumberOfSuperModules > 10) { fPhiBoundariesOfSM[11] = 190.*TMath::DegToRad(); fPhiBoundariesOfSM[10] = fPhiBoundariesOfSM[11] - TMath::ATan2((fParSM[1]) , fIPDistance); - fPhiCentersOfSM[5] = (fPhiBoundariesOfSM[10]+fPhiBoundariesOfSM[11])/2.; + fPhiCentersOfSM[5] = (fPhiBoundariesOfSM[10]+fPhiBoundariesOfSM[11])/2.; } //called after setting of scintillator and lead layer parameters @@ -374,7 +365,6 @@ void AliEMCALEMCGeometry::Init(void){ // Jet trigger // 3*6*10 + 2*6*2 = 204 -> matrix (nphi(17), neta(12)) fNEtaSubOfTRU = 6; - fgInit = kTRUE; } diff --git a/EMCAL/AliEMCALRawUtils.cxx b/EMCAL/AliEMCALRawUtils.cxx index 2b7500b80bb..77feaaac49d 100644 --- a/EMCAL/AliEMCALRawUtils.cxx +++ b/EMCAL/AliEMCALRawUtils.cxx @@ -48,7 +48,8 @@ class AliEMCALDigitizer; #include "AliEMCALDigit.h" #include "AliEMCAL.h" #include "AliCaloCalibPedestal.h" - +#include "AliCaloFastAltroFitv0.h" + ClassImp(AliEMCALRawUtils) // Signal shape parameters @@ -64,17 +65,21 @@ Double_t AliEMCALRawUtils::fgFEENoise = 3.; // 3 ADC channels of noise AliEMCALRawUtils::AliEMCALRawUtils() : fHighLowGainFactor(0.), fOrder(0), fTau(0.), fNoiseThreshold(0), - fNPedSamples(0), fGeom(0), fOption("") + fNPedSamples(0), fGeom(0), fOption(""), + fRemoveBadChannels(kTRUE),fFittingAlgorithm(0) { //These are default parameters. //Can be re-set from without with setter functions + //Already set in the OCDB and passed via setter in the AliEMCALReconstructor fHighLowGainFactor = 16. ; // adjusted for a low gain range of 82 GeV (10 bits) fOrder = 2; // order of gamma fn fTau = 2.35; // in units of timebin, from CERN 2007 testbeam fNoiseThreshold = 3; // 3 ADC counts is approx. noise level fNPedSamples = 4; // less than this value => likely pedestal samples - + fRemoveBadChannels = kTRUE; //Remove bad channels before fitting + fFittingAlgorithm = kFastFit;//kStandard; // Use default minuit fitter + //Get Mapping RCU files from the AliEMCALRecParam const TObjArray* maps = AliEMCALRecParam::GetMappings(); if(!maps) AliFatal("Cannot retrieve ALTRO mappings!!"); @@ -101,7 +106,8 @@ AliEMCALRawUtils::AliEMCALRawUtils() //____________________________________________________________________________ AliEMCALRawUtils::AliEMCALRawUtils(AliEMCALGeometry *pGeometry) : fHighLowGainFactor(0.), fOrder(0), fTau(0.), fNoiseThreshold(0), - fNPedSamples(0), fGeom(pGeometry), fOption("") + fNPedSamples(0), fGeom(pGeometry), fOption(""), + fRemoveBadChannels(kTRUE),fFittingAlgorithm(0) { // // Initialize with the given geometry - constructor required by HLT @@ -112,12 +118,15 @@ AliEMCALRawUtils::AliEMCALRawUtils(AliEMCALGeometry *pGeometry) //These are default parameters. //Can be re-set from without with setter functions + //Already set in the OCDB and passed via setter in the AliEMCALReconstructor fHighLowGainFactor = 16. ; // adjusted for a low gain range of 82 GeV (10 bits) fOrder = 2; // order of gamma fn fTau = 2.35; // in units of timebin, from CERN 2007 testbeam fNoiseThreshold = 3; // 3 ADC counts is approx. noise level fNPedSamples = 4; // less than this value => likely pedestal samples - + fRemoveBadChannels = kTRUE; //Remove bad channels before fitting + fFittingAlgorithm = kStandard; // Use default minuit fitter + //Get Mapping RCU files from the AliEMCALRecParam const TObjArray* maps = AliEMCALRecParam::GetMappings(); if(!maps) AliFatal("Cannot retrieve ALTRO mappings!!"); @@ -139,7 +148,9 @@ AliEMCALRawUtils::AliEMCALRawUtils(const AliEMCALRawUtils& rawU) fNoiseThreshold(rawU.fNoiseThreshold), fNPedSamples(rawU.fNPedSamples), fGeom(rawU.fGeom), - fOption(rawU.fOption) + fOption(rawU.fOption), + fRemoveBadChannels(rawU.fRemoveBadChannels), + fFittingAlgorithm(rawU.fFittingAlgorithm) { //copy ctor fMapping[0] = rawU.fMapping[0]; @@ -161,6 +172,8 @@ AliEMCALRawUtils& AliEMCALRawUtils::operator =(const AliEMCALRawUtils &rawU) fNPedSamples = rawU.fNPedSamples; fGeom = rawU.fGeom; fOption = rawU.fOption; + fRemoveBadChannels = rawU.fRemoveBadChannels; + fFittingAlgorithm = rawU.fFittingAlgorithm; fMapping[0] = rawU.fMapping[0]; fMapping[1] = rawU.fMapping[1]; fMapping[2] = rawU.fMapping[2]; @@ -341,7 +354,7 @@ void AliEMCALRawUtils::Raw2Digits(AliRawReader* reader,TClonesArray *digitsArr, if (caloFlag != 0 && caloFlag != 1) continue; //Do not fit bad channels - if(pedbadmap->IsBadChannel(in.GetModule(),in.GetColumn(),in.GetRow())) { + if(fRemoveBadChannels && pedbadmap->IsBadChannel(in.GetModule(),in.GetColumn(),in.GetRow())) { //printf("Tower from SM %d, column %d, row %d is BAD!!! Skip \n", in.GetModule(),in.GetColumn(),in.GetRow()); continue; } @@ -386,10 +399,38 @@ void AliEMCALRawUtils::Raw2Digits(AliRawReader* reader,TClonesArray *digitsArr, ampEstimate = -1 ; timeEstimate = -1 ; pedEstimate = -1; - if ( (max - min) > fNoiseThreshold) { - FitRaw(gSig, signalF, maxTimeBin, amp, time, ped, + + if ( (max - min) > fNoiseThreshold) { + switch(fFittingAlgorithm) + { + case kStandard: + { + //printf("Standard fitter \n"); + FitRaw(gSig, signalF, maxTimeBin, amp, time, ped, ampEstimate, timeEstimate, pedEstimate); - } + break; + } + case kFastFit: + { + //printf("FastFitter \n"); + Double_t eSignal = 0; + Double_t dAmp = amp; + Double_t dTimeEstimate = timeEstimate; + Double_t eTimeEstimate = 0; + Double_t eAmp = 0; + Double_t chi2 = 0; + + AliCaloFastAltroFitv0::FastFit(gSig->GetX(), gSig->GetY(), gSig->GetN(), + eSignal, fTau, + dAmp, eAmp, dTimeEstimate, eTimeEstimate, chi2); + amp=dAmp; + timeEstimate = dTimeEstimate; + //printf("FastFitter: Amp %f, time %f, eAmp %f, eTimeEstimate %f, chi2 %f\n",amp, timeEstimate,eAmp,eTimeEstimate,chi2); + + break; + } + } + } if ( amp>0 && amp<2000 && time>0 && time<(maxTimeBin*GetRawFormatTimeBinWidth()) ) { //check both high and low end of amplitude result, and time //2000 is somewhat arbitrary - not nice with magic numbers in the code.. diff --git a/EMCAL/AliEMCALRawUtils.h b/EMCAL/AliEMCALRawUtils.h index 018a71da859..ef3cc2f744c 100644 --- a/EMCAL/AliEMCALRawUtils.h +++ b/EMCAL/AliEMCALRawUtils.h @@ -33,7 +33,9 @@ class AliEMCALRawUtils : public TObject { AliEMCALRawUtils(); AliEMCALRawUtils(AliEMCALGeometry *pGeometry); virtual ~AliEMCALRawUtils(); - + + enum fitAlgorithm {kStandard = 0, kFastFit= 1}; + AliEMCALRawUtils(const AliEMCALRawUtils& rawUtils); //copy ctor AliEMCALRawUtils& operator =(const AliEMCALRawUtils& rawUtils); @@ -52,11 +54,16 @@ class AliEMCALRawUtils : public TObject { Double_t GetPedestalValue() const {return fgPedestalValue;} Double_t GetFEENoise() const {return fgFEENoise;} + Bool_t GetRemoveBadChannels() const {return fRemoveBadChannels;} + Int_t GetFittingAlgorithm() const {return fFittingAlgorithm; } + void SetRawFormatHighLowGainFactor(Double_t val) {fHighLowGainFactor=val;} void SetRawFormatOrder(Int_t val) {fOrder=val; } void SetRawFormatTau(Double_t val) {fTau=val; } void SetNoiseThreshold(Int_t val) {fNoiseThreshold=val; } void SetNPedSamples(Int_t val) {fNPedSamples=val; } + void SetRemoveBadChannels(Bool_t val) {fRemoveBadChannels=val; } + void SetFittingAlgorithm(Int_t val) {fFittingAlgorithm=val; } // set methods for fast fit simulation void SetFEENoise(Double_t val) {fgFEENoise = val;} @@ -70,11 +77,12 @@ class AliEMCALRawUtils : public TObject { Double_t GetRawFormatTimeTrigger() const { return fgTimeTrigger ; } Int_t GetRawFormatThreshold() const { return fgThreshold ; } Int_t GetRawFormatDDLPerSuperModule() const { return fgDDLPerSuperModule ; } - + virtual Option_t* GetOption() const { return fOption.Data(); } void SetOption(Option_t* opt) { fOption = opt; } // Signal shape functions + void FitRaw(TGraph * gSig, TF1* signalF, const Int_t lastTimeBin, Float_t & amp, Float_t & time, Float_t & ped, Float_t & ampEstimate, Float_t & timeEstimate, Float_t & pedEstimate, const Float_t cut = 0) const ; static Double_t RawResponseFunction(Double_t *x, Double_t *par); Bool_t RawSampledResponse(Double_t dtime, Double_t damp, Int_t * adcH, Int_t * adcL) const; @@ -98,12 +106,15 @@ class AliEMCALRawUtils : public TObject { static Int_t fgPedestalValue; // pedestal value for Digits2Raw static Double_t fgFEENoise; // electronics noise in ADC units - AliEMCALGeometry* fGeom; //geometry - AliAltroMapping* fMapping[4]; //only two for now + AliEMCALGeometry* fGeom; //geometry + AliAltroMapping* fMapping[4]; //only two for now TString fOption; //! option passed from Reconstructor - ClassDef(AliEMCALRawUtils,3) // utilities for raw signal fitting + Bool_t fRemoveBadChannels; // select if bad channels are removed before fitting + Int_t fFittingAlgorithm; // select the fitting algorithm + + ClassDef(AliEMCALRawUtils,4) // utilities for raw signal fitting }; #endif diff --git a/EMCAL/AliEMCALRecParam.cxx b/EMCAL/AliEMCALRecParam.cxx index d3f6c84c328..d19c90c05cc 100644 --- a/EMCAL/AliEMCALRecParam.cxx +++ b/EMCAL/AliEMCALRecParam.cxx @@ -57,7 +57,9 @@ AliEMCALRecParam::AliEMCALRecParam() : fOrderParameter(2), fTau(2.35), fNoiseThreshold(3), - fNPedSamples(5) //raw signal + fNPedSamples(5), + fRemoveBadChannels(kTRUE), + fFittingAlgorithm(0)//raw signal { // default reco values @@ -86,7 +88,7 @@ AliEMCALRecParam::AliEMCALRecParam() : fGamma[i][j] = fPiZero[i][j] = fHadron[i][j] = 0.; fGamma1to10[i][j] = fHadron1to10[i][j]= 0.; } - fGammaEnergyProb[i]=0.; // not yet implemented + fGammaEnergyProb[i] =0.; // not yet implemented fHadronEnergyProb[i]=0.; fPiZeroEnergyProb[i]=0.; // not yet implemented @@ -244,7 +246,9 @@ AliEMCALRecParam::AliEMCALRecParam(const AliEMCALRecParam& rp) : fOrderParameter(rp.fOrderParameter), fTau(rp.fTau), fNoiseThreshold(rp.fNoiseThreshold), - fNPedSamples(rp.fNPedSamples) //raw signal + fNPedSamples(rp.fNPedSamples), + fRemoveBadChannels(rp.fRemoveBadChannels), + fFittingAlgorithm(rp.fFittingAlgorithm) //raw signal { //copy constructor @@ -252,13 +256,13 @@ AliEMCALRecParam::AliEMCALRecParam(const AliEMCALRecParam& rp) : Int_t i, j; for (i = 0; i < 6; i++) { for (j = 0; j < 6; j++) { - fGamma[i][j] = rp.fGamma[i][j]; - fGamma1to10[i][j] = rp.fGamma1to10[i][j]; - fHadron[i][j] = rp.fHadron[i][j]; + fGamma[i][j] = rp.fGamma[i][j]; + fGamma1to10[i][j] = rp.fGamma1to10[i][j]; + fHadron[i][j] = rp.fHadron[i][j]; fHadron1to10[i][j] = rp.fHadron1to10[i][j]; - fPiZero[i][j] = rp.fPiZero[i][j]; + fPiZero[i][j] = rp.fPiZero[i][j]; } - fGammaEnergyProb[i] = rp.fGammaEnergyProb[i]; + fGammaEnergyProb[i] = rp.fGammaEnergyProb[i]; fPiZeroEnergyProb[i] = rp.fPiZeroEnergyProb[i]; fHadronEnergyProb[i] = rp.fHadronEnergyProb[i]; @@ -273,37 +277,39 @@ AliEMCALRecParam& AliEMCALRecParam::operator = (const AliEMCALRecParam& rp) if(this != &rp) { fClusteringThreshold = rp.fClusteringThreshold; - fW0 = rp.fW0; - fMinECut = rp.fMinECut; - fUnfold = rp.fUnfold; + fW0 = rp.fW0; + fMinECut = rp.fMinECut; + fUnfold = rp.fUnfold; fLocMaxCut = rp.fLocMaxCut; - fTimeCut = rp.fTimeCut;//clustering - fTrkCutX = rp.fTrkCutX; - fTrkCutY = rp.fTrkCutY; - fTrkCutZ = rp.fTrkCutZ; - fTrkCutR = rp.fTrkCutR; + fTimeCut = rp.fTimeCut;//clustering + fTrkCutX = rp.fTrkCutX; + fTrkCutY = rp.fTrkCutY; + fTrkCutZ = rp.fTrkCutZ; + fTrkCutR = rp.fTrkCutR; fTrkCutAlphaMin = rp.fTrkCutAlphaMin; fTrkCutAlphaMax = rp.fTrkCutAlphaMax; - fTrkCutAngle = rp.fTrkCutAngle; - fTrkCutNITS = rp.fTrkCutNITS; - fTrkCutNTPC = rp.fTrkCutNTPC; //track matching + fTrkCutAngle = rp.fTrkCutAngle; + fTrkCutNITS = rp.fTrkCutNITS; + fTrkCutNTPC = rp.fTrkCutNTPC; //track matching fHighLowGainFactor = rp.fHighLowGainFactor; - fOrderParameter = rp.fOrderParameter; - fTau = rp.fTau; - fNoiseThreshold = rp.fNoiseThreshold; - fNPedSamples = rp.fNPedSamples; //raw signal - + fOrderParameter = rp.fOrderParameter; + fTau = rp.fTau; + fNoiseThreshold = rp.fNoiseThreshold; + fNPedSamples = rp.fNPedSamples; + fRemoveBadChannels = rp.fRemoveBadChannels; + fFittingAlgorithm = rp.fFittingAlgorithm;//raw signal + //PID values Int_t i, j; for (i = 0; i < 6; i++) { for (j = 0; j < 6; j++) { - fGamma[i][j] = rp.fGamma[i][j]; - fGamma1to10[i][j] = rp.fGamma1to10[i][j]; - fHadron[i][j] = rp.fHadron[i][j]; + fGamma[i][j] = rp.fGamma[i][j]; + fGamma1to10[i][j] = rp.fGamma1to10[i][j]; + fHadron[i][j] = rp.fHadron[i][j]; fHadron1to10[i][j] = rp.fHadron1to10[i][j]; - fPiZero[i][j] = rp.fPiZero[i][j]; + fPiZero[i][j] = rp.fPiZero[i][j]; } - fGammaEnergyProb[i] = rp.fGammaEnergyProb[i]; + fGammaEnergyProb[i] = rp.fGammaEnergyProb[i]; fPiZeroEnergyProb[i] = rp.fPiZeroEnergyProb[i]; fHadronEnergyProb[i] = rp.fHadronEnergyProb[i]; } @@ -575,6 +581,8 @@ void AliEMCALRecParam::Print(Option_t *) const AliInfo(Form("Raw signal parameters: \n gain factor=%f, order=%d, tau=%f, noise threshold=%d, nped samples=%d \n", fHighLowGainFactor,fOrderParameter,fTau,fNoiseThreshold,fNPedSamples)); + AliInfo(Form("Raw signal: with bad channels? %d, \n \t with fitting algorithm %d \n", + fRemoveBadChannels, fFittingAlgorithm)); } diff --git a/EMCAL/AliEMCALRecParam.h b/EMCAL/AliEMCALRecParam.h index 65d4ac63c41..17b077eec36 100644 --- a/EMCAL/AliEMCALRecParam.h +++ b/EMCAL/AliEMCALRecParam.h @@ -90,15 +90,21 @@ class AliEMCALRecParam : public AliDetectorRecoParam void SetOrderParameter(Int_t value) {fOrderParameter = value;} void SetTau(Double_t value) {fTau = value;} void SetNoiseThreshold(Int_t value) {fNoiseThreshold = value;} - void SetNPedSamples(Int_t value) {fNPedSamples = value;} + void SetNPedSamples(Int_t value) {fNPedSamples = value;} + void SetRemoveBadChannels(Bool_t val) {fRemoveBadChannels=val; } + void SetFittingAlgorithm(Int_t val) {fFittingAlgorithm=val; } + /* raw signal getters */ Double_t GetHighLowGainFactor() const {return fHighLowGainFactor;} Int_t GetOrderParameter() const {return fOrderParameter;} Double_t GetTau() const {return fTau;} Int_t GetNoiseThreshold() const {return fNoiseThreshold;} Int_t GetNPedSamples() const {return fNPedSamples;} - - virtual void Print(Option_t * option="") const ; + Bool_t GetRemoveBadChannels() const {return fRemoveBadChannels;} + Int_t GetFittingAlgorithm() const {return fFittingAlgorithm; } + + + virtual void Print(Option_t * option="") const ; static AliEMCALRecParam* GetDefaultParameters(); static AliEMCALRecParam* GetLowFluxParam(); @@ -140,15 +146,17 @@ class AliEMCALRecParam : public AliDetectorRecoParam Double_t fTrkCutNTPC; // Number of TPC hits for track matching //Raw signal fitting parameters (Jenn) - Double_t fHighLowGainFactor; //gain factor to convert between high and low gain - Int_t fOrderParameter; //order parameter for raw signal fit - Double_t fTau; //decay constant for raw signal fit - Int_t fNoiseThreshold; //threshold to consider signal or noise - Int_t fNPedSamples; //number of time samples to use in pedestal calculation - + Double_t fHighLowGainFactor; // gain factor to convert between high and low gain + Int_t fOrderParameter; // order parameter for raw signal fit + Double_t fTau; // decay constant for raw signal fit + Int_t fNoiseThreshold; // threshold to consider signal or noise + Int_t fNPedSamples; // number of time samples to use in pedestal calculation + Bool_t fRemoveBadChannels; // select if bad channels are removed before fitting + Int_t fFittingAlgorithm; // select the fitting algorithm + static TObjArray* fgkMaps; // ALTRO mappings for RCU0..RCUX - ClassDef(AliEMCALRecParam,8) // Reconstruction parameters + ClassDef(AliEMCALRecParam,9) // Reconstruction parameters } ; diff --git a/EMCAL/AliEMCALReconstructor.cxx b/EMCAL/AliEMCALReconstructor.cxx index 1c8a5a3500e..ba067dfd507 100644 --- a/EMCAL/AliEMCALReconstructor.cxx +++ b/EMCAL/AliEMCALReconstructor.cxx @@ -183,6 +183,8 @@ void AliEMCALReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digits fgRawUtils->SetRawFormatTau(GetRecParam()->GetTau()); fgRawUtils->SetNoiseThreshold(GetRecParam()->GetNoiseThreshold()); fgRawUtils->SetNPedSamples(GetRecParam()->GetNPedSamples()); + fgRawUtils->SetRemoveBadChannels(GetRecParam()->GetRemoveBadChannels()); + fgRawUtils->SetFittingAlgorithm(GetRecParam()->GetFittingAlgorithm()); fgRawUtils->Raw2Digits(rawReader,digitsArr,fPedestalData); diff --git a/OCDB/EMCAL/Calib/RecoParam/Run0_999999999_v0_s0.root b/OCDB/EMCAL/Calib/RecoParam/Run0_999999999_v0_s0.root index 14d4c1b836be13e339fa5c8af3c4b8823033c0cc..9898430e410ba7c152f81486aee6d3476a9c2135 100644 GIT binary patch literal 5140 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 literal 5176 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 a39NsU`0LOimG=Jw2_yv)QD5P7z<&W1E>`dW -- 2.43.0