6 #include "AliEMCALGeometry.h"
7 #include "AliOADBContainer.h"
8 #include "AliEMCALRecoUtils.h"
9 #include "AliAODEvent.h"
23 ,fUseAutomaticRecalib(1)
24 ,fUseAutomaticRunDepRecalib(1)
25 ,fCellEnergyDistBefore(0)
26 ,fCellEnergyDistAfter(0)
29 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
42 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
48 AliWarning(
"Init EMCAL cell recalibration");
58 fRecoUtils->SetPositionAlgorithm(AliEMCALRecoUtils::kPosTowerGlobal);
66 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
81 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
85 AliError(
"Event ptr = 0, returning");
94 AliWarning(Form(
"Run changed, initializing parameters for %d",
fRun));
95 if (dynamic_cast<AliAODEvent*>(
fEvent)) {
96 AliWarning(
"=============================================================");
97 AliWarning(
"=== Running on AOD is not equivalent to running on ESD! ===");
98 AliWarning(
"=============================================================");
102 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(
fRun);
106 AliFatal(
"Can not create geometry");
115 AliError(
"InitRecalib returned false, returning");
117 AliWarning(
"InitRecalib OK");
119 AliWarning(Form(
"No recalibration available: %d - %s",
fEvent->GetRunNumber(),
fFilepass.Data()));
125 if (fInitRunDepRecalib==0)
126 AliError(
"InitrunDepRecalib returned false, returning");
127 if (fInitRunDepRecalib==1)
128 AliWarning(
"InitRecalib OK");
129 if (fInitRunDepRecalib>1)
130 AliWarning(Form(
"No Temperature recalibration available: %d - %s",
fEvent->GetRunNumber(),
fFilepass.Data()));
143 AliDebug(2, Form(
"Number of EMCAL cells = %d, returning",
fCaloCells->GetNumberOfCells()));
177 AliInfo(
"Initialising recalibration factors");
180 if (!
fRecoUtils->GetEMCALRecalibrationFactorsArray())
185 AliOADBContainer *contRF=
new AliOADBContainer(
"");
188 AliInfo(Form(
"Loading Recalib OADB from given path %s",
fBasePath.Data()));
190 TFile *fRecalib=
new TFile(Form(
"%s/EMCALRecalib.root",
fBasePath.Data()),
"read");
191 if (!fRecalib || fRecalib->IsZombie())
193 AliFatal(Form(
"EMCALRecalib.root not found in %s",
fBasePath.Data()));
197 if (fRecalib)
delete fRecalib;
199 contRF->InitFromFile(Form(
"%s/EMCALRecalib.root",
fBasePath.Data()),
"AliEMCALRecalib");
203 AliInfo(
"Loading Recalib OADB from $ALICE_PHYSICS/OADB/EMCAL");
205 TFile *fRecalib=
new TFile(
"$ALICE_PHYSICS/OADB/EMCAL/EMCALRecalib.root",
"read");
206 if (!fRecalib || fRecalib->IsZombie())
208 AliFatal(
"$ALICE_PHYSICS/OADB/EMCAL/EMCALRecalib.root was not found");
212 if (fRecalib)
delete fRecalib;
214 contRF->InitFromFile(
"$ALICE_PHYSICS/OADB/EMCAL/EMCALRecalib.root",
"AliEMCALRecalib");
220 AliError(Form(
"No Objects for run: %d",runRC));
228 AliError(Form(
"No Objects for run: %d - %s",runRC,
fFilepass.Data()));
236 AliError(Form(
"No Recalib histos found for %d - %s",runRC,
fFilepass.Data()));
243 Int_t sms =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
244 for (
Int_t i=0; i<sms; ++i)
249 h = (
TH2F*)recalib->FindObject(Form(
"EMCALRecalFactors_SM%d",i));
252 AliError(Form(
"Could not load EMCALRecalFactors_SM%d",i));
256 fRecoUtils->SetEMCALChannelRecalibrationFactors(i,h);
272 AliInfo(
"Initialising recalibration factors");
275 if (!
fRecoUtils->GetEMCALRecalibrationFactorsArray())
280 AliOADBContainer *contRF=
new AliOADBContainer(
"");
283 AliInfo(Form(
"Loading Recalib OADB from given path %s",
fBasePath.Data()));
285 TFile *fRunDepRecalib=
new TFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fBasePath.Data()),
"read");
286 if (!fRunDepRecalib || fRunDepRecalib->IsZombie())
288 AliFatal(Form(
"EMCALTemperatureCorrCalib.root not found in %s",
fBasePath.Data()));
292 if (fRunDepRecalib)
delete fRunDepRecalib;
294 contRF->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fBasePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
298 AliInfo(
"Loading Recalib OADB from $ALICE_PHYSICS/OADB/EMCAL");
300 TFile *fRunDepRecalib=
new TFile(
"$ALICE_PHYSICS/OADB/EMCAL/EMCALTemperatureCorrCalib.root",
"read");
301 if (!fRunDepRecalib || fRunDepRecalib->IsZombie())
303 AliFatal(
"$ALICE_PHYSICS/OADB/EMCAL/EMCALTemperatureCorrCalib.root was not found");
307 if (fRunDepRecalib)
delete fRunDepRecalib;
309 contRF->InitFromFile(
"$ALICE_PHYSICS/OADB/EMCAL/EMCALTemperatureCorrCalib.root",
"AliEMCALRunDepTempCalibCorrections");
312 TH1S *rundeprecal=(TH1S*)contRF->GetObject(runRC);
316 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runRC));
320 Int_t maxEntry = contRF->GetNumberOfEntries();
322 while ((ic < maxEntry) && (contRF->UpperLimit(ic) < runRC)) {
327 Int_t closest = lower;
329 (contRF->LowerLimit(ic)-runRC) < (runRC - contRF->UpperLimit(lower))) {
333 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d", closest, contRF->LowerLimit(closest)));
334 rundeprecal = (TH1S*) contRF->GetObjectByIndex(closest);
337 Int_t nSM =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
341 if(nSM > 12 && nbins < 12288)
343 AliError(Form(
"Total SM is %d but T corrections available for %d channels, skip Init of T recalibration factors",nSM,nbins));
352 for (
Int_t ism=0; ism<nSM; ++ism)
354 for (
Int_t icol=0; icol<48; ++icol)
356 for (
Int_t irow=0; irow<24; ++irow)
360 Int_t absID =
fGeom->GetAbsCellIdFromCellIndexes(ism, irow, icol);
361 factor *= rundeprecal->GetBinContent(absID) / 10000. ;
363 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
Energy calibration correction component in the EMCal correction framework.
AliEMCALGeometry * fGeom
! Geometry object
TH1F * fCellEnergyDistAfter
! cell energy distribution, after energy calibration
Bool_t fUseAutomaticRunDepRecalib
On by default the check in the OADB of the run dependent energy recalibration.
Int_t InitRunDepRecalib()
virtual void UserCreateOutputObjects()
AliVCaloCells * fCaloCells
! Pointer to CaloCells
AliEMCALRecoUtils * fRecoUtils
Pointer to RecoUtils.
Bool_t fUseAutomaticRecalib
On by default the check in the OADB of the energy recalibration.
Base class for correction components in the EMCal correction framework.
static RegisterCorrectionComponent< AliEmcalCorrectionCellEnergy > reg
TString fBasePath
Base folder path to get root files.
AliVEvent * fEvent
! Pointer to event
TList * fOutput
! List of output histograms
Bool_t fCreateHisto
Default YAML configuration.
TH1F * fCellEnergyDistBefore
! cell energy distribution, before energy calibration
virtual Bool_t Initialize()
virtual ~AliEmcalCorrectionCellEnergy()
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void UserCreateOutputObjects()
AliEmcalCorrectionCellEnergy()
TString fFilepass
Input data pass number.
bool GetProperty(std::string propertyName, T &property, bool requiredProperty=true, std::string correctionName="")
Retrieve property.