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)
30 ,fUseRunDepTempCalibRun2(0)
31 ,fCustomRecalibFilePath(
"")
50 AliWarning(
"Init EMCAL cell recalibration");
76 fCellEnergyDistBefore =
new TH1F(
"hCellEnergyDistBefore",
"hCellEnergyDistBefore;E_{cell} (GeV)",1000,0,10);
78 fCellEnergyDistAfter =
new TH1F(
"hCellEnergyDistAfter",
"hCellEnergyDistAfter;E_{cell} (GeV)",1000,0,10);
91 AliError(
"Event ptr = 0, returning");
104 AliDebug(2, Form(
"Number of EMCAL cells = %d, returning",
fCaloCells->GetNumberOfCells()));
138 AliInfo(
"Initialising recalibration factors");
146 std::unique_ptr<AliOADBContainer> contRF;
147 std::unique_ptr<TFile> recalibFile;
150 AliInfo(Form(
"Loading Recalib OADB from given path %s",
fBasePath.Data()));
152 recalibFile = std::unique_ptr<TFile>(TFile::Open(Form(
"%s/EMCALRecalib.root",
fBasePath.Data()),
"read"));
153 if (!recalibFile || recalibFile->IsZombie())
155 AliFatal(Form(
"EMCALRecalib.root not found in %s",
fBasePath.Data()));
159 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(recalibFile->Get(
"AliEMCALRecalib")));
166 if (!recalibFile || recalibFile->IsZombie())
172 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(recalibFile->Get(
"AliEMCALRecalib")));
176 AliInfo(
"Loading Recalib OADB from OADB/EMCAL");
178 recalibFile = std::unique_ptr<TFile>(TFile::Open(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALRecalib.root").data(),
"read"));
179 if (!recalibFile || recalibFile->IsZombie())
181 AliFatal(
"OADB/EMCAL/EMCALRecalib.root was not found");
185 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(recalibFile->Get(
"AliEMCALRecalib")));
188 AliError(
"No OADB container found");
191 contRF->SetOwner(
true);
196 AliError(Form(
"No Objects for run: %d",runRC));
203 AliError(Form(
"No Objects for run: %d - %s",runRC,
fFilepass.Data()));
210 AliError(Form(
"No Recalib histos found for %d - %s",runRC,
fFilepass.Data()));
216 Int_t sms =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
217 for (
Int_t i=0; i<sms; ++i)
222 h = (
TH2F*)recalib->FindObject(Form(
"EMCALRecalFactors_SM%d",i));
225 AliError(Form(
"Could not load EMCALRecalFactors_SM%d",i));
253 AliInfo(
"Initialising Run2 recalibration factors");
256 AliInfo(
"Temperature calibration for Run2 not requested");
261 std::unique_ptr<AliOADBContainer> contTemperature;
262 std::unique_ptr<AliOADBContainer> contParams;
263 std::unique_ptr<TFile> runDepTemperatureFile;
264 std::unique_ptr<TFile> temperatureCalibParamFile;
268 runDepTemperatureFile = std::unique_ptr<TFile>(TFile::Open(Form(
"%s/EMCALTemperatureCalibSM.root",
fBasePath.Data()),
"read"));
269 if (!runDepTemperatureFile || runDepTemperatureFile->IsZombie()) {
270 AliFatal(Form(
"EMCALTemperatureCalibSM.root not found in %s",
fBasePath.Data()));
274 temperatureCalibParamFile = std::unique_ptr<TFile>(TFile::Open(Form(
"%s/EMCALTemperatureCalibParam.root",
fBasePath.Data()),
"read"));
275 if (!temperatureCalibParamFile || temperatureCalibParamFile->IsZombie()) {
276 AliFatal(Form(
"EMCALTemperatureCalibParam.root not found in %s",
fBasePath.Data()));
280 contTemperature = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(runDepTemperatureFile->Get(
"AliEMCALTemperatureCalibSM")));
281 contParams = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(temperatureCalibParamFile->Get(
"AliEMCALTemperatureCalibParam")));
285 runDepTemperatureFile = std::unique_ptr<TFile>(TFile::Open(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALTemperatureCalibSM.root").data(),
"read"));
286 if (!runDepTemperatureFile || runDepTemperatureFile->IsZombie()) {
287 AliFatal(
"OADB/EMCAL/EMCALTemperatureCalibSM.root was not found");
291 temperatureCalibParamFile = std::unique_ptr<TFile>(TFile::Open(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALTemperatureCalibParam.root").data(),
"read"));
292 if (!temperatureCalibParamFile || temperatureCalibParamFile->IsZombie()) {
293 AliFatal(
"OADB/EMCAL/EMCALTemperatureCalibParam.root was not found");
297 contTemperature = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(runDepTemperatureFile->Get(
"AliEMCALTemperatureCalibSM")));
298 contParams = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(temperatureCalibParamFile->Get(
"AliEMCALTemperatureCalibParam")));
301 if(!contTemperature || !contParams) {
302 AliError(
"Temperature or parametrization OADB container not found");
305 contTemperature->SetOwner(
true);
306 contParams->SetOwner(
true);
311 AliError(Form(
"No temperature calibration parameters can be found for run number: %d", runRC));
314 TH1D *hRundepTemp = (
TH1D*)contTemperature->GetObject(runRC);
315 TH1F *hSlopeParam = (TH1F*)arrayParams->FindObject(
"hParamSlope");
316 TH1F *hA0Param = (TH1F*)arrayParams->FindObject(
"hParamA0");
318 if (!hRundepTemp || !hSlopeParam || !hA0Param)
320 AliError(Form(
"Histogram missing for Run2 temperature calibration for run number: %d", runRC));
324 Int_t nSM =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
325 for (
Int_t ism=0; ism<nSM; ++ism)
327 Double_t temperature = hRundepTemp->GetBinContent(ism+1);
328 for (
Int_t icol=0; icol<48; ++icol)
330 for (
Int_t irow=0; irow<24; ++irow)
332 Int_t absID =
fGeom->GetAbsCellIdFromCellIndexes(ism, irow, icol);
336 slope = hSlopeParam->GetBinContent(absID+1);
337 offset = hA0Param->GetBinContent(absID+1);
340 factor *= 1 / (offset + (slope * temperature) );
351 AliInfo(
"Initialising recalibration factors");
353 std::unique_ptr<AliOADBContainer> contRF;
354 std::unique_ptr<TFile> runDepRecalibFile;
357 AliInfo(Form(
"Loading Recalib OADB from given path %s",
fBasePath.Data()));
359 runDepRecalibFile = std::unique_ptr<TFile>(TFile::Open(Form(
"%s/EMCALTemperatureCorrCalib.root",
fBasePath.Data()),
"read"));
360 if (!runDepRecalibFile || runDepRecalibFile->IsZombie())
362 AliFatal(Form(
"EMCALTemperatureCorrCalib.root not found in %s",
fBasePath.Data()));
366 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(runDepRecalibFile->Get(
"AliEMCALRunDepTempCalibCorrections")));
370 AliInfo(
"Loading Recalib OADB from OADB/EMCAL");
372 runDepRecalibFile = std::unique_ptr<TFile>(TFile::Open(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALTemperatureCorrCalib.root").data(),
"read"));
373 if (!runDepRecalibFile || runDepRecalibFile->IsZombie())
375 AliFatal(
"OADB/EMCAL/EMCALTemperatureCorrCalib.root was not found");
379 contRF = std::unique_ptr<AliOADBContainer>(
static_cast<AliOADBContainer *
>(runDepRecalibFile->Get(
"AliEMCALRunDepTempCalibCorrections")));
382 AliError(
"No OADB container found");
385 contRF->SetOwner(
true);
387 TH1S *rundeprecal=(TH1S*)contRF->GetObject(runRC);
391 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runRC));
395 Int_t maxEntry = contRF->GetNumberOfEntries();
397 while ((ic < maxEntry) && (contRF->UpperLimit(ic) < runRC)) {
402 Int_t closest = lower;
404 (contRF->LowerLimit(ic)-runRC) < (runRC - contRF->UpperLimit(lower))) {
408 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d", closest, contRF->LowerLimit(closest)));
409 rundeprecal = (TH1S*) contRF->GetObjectByIndex(closest);
412 Int_t nSM =
fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
416 for (
Int_t ism=0; ism<nSM; ++ism)
418 for (
Int_t icol=0; icol<48; ++icol)
420 for (
Int_t irow=0; irow<24; ++irow)
424 Int_t absID =
fGeom->GetAbsCellIdFromCellIndexes(ism, irow, icol);
425 factor *= rundeprecal->GetBinContent(absID) / 10000. ;
449 if (fInitRecalib==0) {
450 AliError(
"InitRecalib returned false, returning");
452 if (fInitRecalib==1) {
453 AliWarning(
"InitRecalib OK");
455 if (fInitRecalib>1) {
463 if (fInitRunDepRecalib==0) {
464 AliError(
"InitrunDepRecalib returned false, returning");
466 if (fInitRunDepRecalib==1) {
467 AliWarning(
"InitRecalib OK");
469 if (fInitRunDepRecalib>1) {
Energy calibration correction component in the EMCal correction framework.
AliEMCALGeometry * fGeom
! Geometry object
TString fCustomRecalibFilePath
Empty string by default the path to the OADB file of the custom energy recalibration.
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()
Bool_t fUseRunDepTempCalibRun2
Off by default the check in the OADB of the run dependent temp calib Run2.
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.
bool GetProperty(std::string propertyName, T &property, bool requiredProperty=true, std::string correctionName="")
Retrieve property.