6 #include "AliEMCALGeometry.h" 7 #include "AliOADBContainer.h" 9 #include "AliAODEvent.h" 10 #include "AliDataFile.h" 26 ,fCellEnergyDistBefore(0)
27 ,fCellEnergyDistAfter(0)
28 ,fUseAutomaticRecalib(1)
29 ,fUseAutomaticRunDepRecalib(1)
48 AliWarning(
"Init EMCAL cell recalibration");
68 fCellEnergyDistBefore =
new TH1F(
"hCellEnergyDistBefore",
"hCellEnergyDistBefore;E_{cell} (GeV)",1000,0,10);
70 fCellEnergyDistAfter =
new TH1F(
"hCellEnergyDistAfter",
"hCellEnergyDistAfter;E_{cell} (GeV)",1000,0,10);
83 AliError(
"Event ptr = 0, returning");
96 AliDebug(2, Form(
"Number of EMCAL cells = %d, returning",
fCaloCells->GetNumberOfCells()));
130 AliInfo(
"Initialising recalibration factors");
138 std::unique_ptr<AliOADBContainer> contRF;
139 std::unique_ptr<TFile> recalibFile;
142 AliInfo(Form(
"Loading Recalib OADB from given path %s",
fBasePath.Data()));
144 recalibFile = std::unique_ptr<TFile>(TFile::Open(Form(
"%s/EMCALRecalib.root",
fBasePath.Data()),
"read"));
145 if (!recalibFile || recalibFile->IsZombie())
147 AliFatal(Form(
"EMCALRecalib.root not found in %s",
fBasePath.Data()));
151 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(recalibFile->Get(
"AliEMCALRecalib")));
155 AliInfo(
"Loading Recalib OADB from OADB/EMCAL");
157 recalibFile = std::unique_ptr<TFile>(TFile::Open(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALRecalib.root").data(),
"read"));
158 if (!recalibFile || recalibFile->IsZombie())
160 AliFatal(
"OADB/EMCAL/EMCALRecalib.root was not found");
164 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(recalibFile->Get(
"AliEMCALRecalib")));
167 AliError(
"No OADB container found");
170 contRF->SetOwner(
true);
175 AliError(Form(
"No Objects for run: %d",runRC));
182 AliError(Form(
"No Objects for run: %d - %s",runRC,
fFilepass.Data()));
189 AliError(Form(
"No Recalib histos found for %d - %s",runRC,
fFilepass.Data()));
195 Int_t sms =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
196 for (
Int_t i=0; i<sms; ++i)
201 h = (
TH2F*)recalib->FindObject(Form(
"EMCALRecalFactors_SM%d",i));
204 AliError(Form(
"Could not load EMCALRecalFactors_SM%d",i));
222 AliInfo(
"Initialising recalibration factors");
230 std::unique_ptr<AliOADBContainer> contRF;
231 std::unique_ptr<TFile> runDepRecalibFile;
234 AliInfo(Form(
"Loading Recalib OADB from given path %s",
fBasePath.Data()));
236 runDepRecalibFile = std::unique_ptr<TFile>(TFile::Open(Form(
"%s/EMCALTemperatureCorrCalib.root",
fBasePath.Data()),
"read"));
237 if (!runDepRecalibFile || runDepRecalibFile->IsZombie())
239 AliFatal(Form(
"EMCALTemperatureCorrCalib.root not found in %s",
fBasePath.Data()));
243 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(runDepRecalibFile->Get(
"AliEMCALRunDepTempCalibCorrections")));
247 AliInfo(
"Loading Recalib OADB from OADB/EMCAL");
249 runDepRecalibFile = std::unique_ptr<TFile>(TFile::Open(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALTemperatureCorrCalib.root").data(),
"read"));
250 if (!runDepRecalibFile || runDepRecalibFile->IsZombie())
252 AliFatal(
"OADB/EMCAL/EMCALTemperatureCorrCalib.root was not found");
256 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(runDepRecalibFile->Get(
"AliEMCALRunDepTempCalibCorrections")));
259 AliError(
"No OADB container found");
262 contRF->SetOwner(
true);
264 TH1S *rundeprecal=(TH1S*)contRF->GetObject(runRC);
268 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runRC));
272 Int_t maxEntry = contRF->GetNumberOfEntries();
274 while ((ic < maxEntry) && (contRF->UpperLimit(ic) < runRC)) {
279 Int_t closest = lower;
281 (contRF->LowerLimit(ic)-runRC) < (runRC - contRF->UpperLimit(lower))) {
285 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d", closest, contRF->LowerLimit(closest)));
286 rundeprecal = (TH1S*) contRF->GetObjectByIndex(closest);
289 Int_t nSM =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
293 if(nSM > 12 && nbins < 12288)
295 AliError(Form(
"Total SM is %d but T corrections available for %d channels, skip Init of T recalibration factors",nSM,nbins));
302 for (
Int_t ism=0; ism<nSM; ++ism)
304 for (
Int_t icol=0; icol<48; ++icol)
306 for (
Int_t irow=0; irow<24; ++irow)
310 Int_t absID =
fGeom->GetAbsCellIdFromCellIndexes(ism, irow, icol);
311 factor *= rundeprecal->GetBinContent(absID) / 10000. ;
334 if (fInitRecalib==0) {
335 AliError(
"InitRecalib returned false, returning");
337 if (fInitRecalib==1) {
338 AliWarning(
"InitRecalib OK");
340 if (fInitRecalib>1) {
348 if (fInitRunDepRecalib==0) {
349 AliError(
"InitrunDepRecalib returned false, returning");
351 if (fInitRunDepRecalib==1) {
352 AliWarning(
"InitRecalib OK");
354 if (fInitRunDepRecalib>1) {
Energy calibration correction component in the EMCal correction framework.
AliEMCALGeometry * fGeom
! Geometry object
TObjArray * GetEMCALRecalibrationFactorsArray() const
TH1F * fCellEnergyDistAfter
! cell energy distribution, after energy calibration
TH2F * GetEMCALChannelRecalibrationFactors(Int_t iSM) const
void InitEMCALRecalibrationFactors()
Bool_t fUseAutomaticRunDepRecalib
On by default the check in the OADB of the run dependent energy recalibration.
Int_t InitRunDepRecalib()
void SetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow, Double_t c=1)
virtual void UserCreateOutputObjects()
AliVEvent * InputEvent() const
void SwitchOffRecalibration()
AliVCaloCells * fCaloCells
! Pointer to CaloCells
Some utilities for cluster and cell treatment.
AliEMCALRecoUtils * fRecoUtils
Pointer to RecoUtils.
Float_t GetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow) const
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
void SwitchOnRecalibration()
TString fBasePath
Base folder path to get root files.
void SetPositionAlgorithm(Int_t alg)
TList * fOutput
! List of output histograms
Bool_t fCreateHisto
Flag to make some basic histograms.
TH1F * fCellEnergyDistBefore
! cell energy distribution, before energy calibration
virtual Bool_t Initialize()
virtual ~AliEmcalCorrectionCellEnergy()
AliEmcalCorrectionEventManager fEventManager
Minimal task which inherits from AliAnalysisTaskSE and manages access to the event.
void UserCreateOutputObjects()
virtual Bool_t CheckIfRunChanged()
AliEmcalCorrectionCellEnergy()
Bool_t CheckIfRunChanged()
void SetEMCALChannelRecalibrationFactors(const TObjArray *map)
void ResetCellsCalibrated()
TString fFilepass
Input data pass number.