#include "TRandom.h"
#include "AliLog.h"
#include "AliPHOSCalibData.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBId.h"
#include "AliCDBEntry.h"
#include "AliPHOSEmcCalibData.h"
#include "AliPHOSCpvCalibData.h"
#include "AliPHOSEmcBadChannelsMap.h"
#include "AliCDBMetaData.h"
ClassImp(AliPHOSCalibData)
AliPHOSCalibData::AliPHOSCalibData():
TNamed(),
fCalibDataEmc(0x0),
fCalibDataCpv(0x0),
fEmcBadChannelsMap(0x0),
fEmcDataPath("PHOS/Calib/EmcGainPedestals"),
fCpvDataPath("PHOS/Calib/CpvGainPedestals"),
fEmcBadChannelsMapPath("PHOS/Calib/EmcBadChannels")
{
}
AliPHOSCalibData::AliPHOSCalibData(Int_t runNumber) :
TNamed("phosCalib","PHOS Calibration Data Manager"),
fCalibDataEmc(0x0), fCalibDataCpv(0x0), fEmcBadChannelsMap(0x0),
fEmcDataPath("PHOS/Calib/EmcGainPedestals"),
fCpvDataPath("PHOS/Calib/CpvGainPedestals"),
fEmcBadChannelsMapPath("PHOS/Calib/EmcBadChannels")
{
AliCDBEntry* entryEmc = AliCDBManager::Instance()->Get(fEmcDataPath.Data(),runNumber);
if(entryEmc)
fCalibDataEmc = (AliPHOSEmcCalibData*)entryEmc->GetObject();
if(!fCalibDataEmc)
AliFatal("Calibration parameters for PHOS EMC not found. Stop reconstruction!\n");
AliCDBEntry* entryCpv = AliCDBManager::Instance()->Get(fCpvDataPath.Data(),runNumber);
if(entryCpv)
fCalibDataCpv = (AliPHOSCpvCalibData*)entryCpv->GetObject();
if(!fCalibDataCpv)
AliFatal("Calibration parameters for PHOS CPV not found. Stop reconstruction!\n");
AliCDBEntry* entryEmcBadMap = AliCDBManager::Instance()->
Get(fEmcBadChannelsMapPath.Data(),runNumber);
if(entryEmcBadMap)
fEmcBadChannelsMap = (AliPHOSEmcBadChannelsMap*)entryEmcBadMap->GetObject();
}
AliPHOSCalibData::AliPHOSCalibData(AliPHOSCalibData & phosCDB) :
TNamed(phosCDB),
fCalibDataEmc(phosCDB.fCalibDataEmc),
fCalibDataCpv(phosCDB.fCalibDataCpv),
fEmcBadChannelsMap(phosCDB.fEmcBadChannelsMap),
fEmcDataPath(phosCDB.fEmcDataPath),
fCpvDataPath(phosCDB.fCpvDataPath),
fEmcBadChannelsMapPath(phosCDB.fEmcBadChannelsMapPath)
{
}
AliPHOSCalibData::~AliPHOSCalibData()
{
}
AliPHOSCalibData & AliPHOSCalibData::operator = (const AliPHOSCalibData & rhs)
{
TNamed::operator=(rhs);
if (this != &rhs) {
fCalibDataEmc = rhs.fCalibDataEmc;
fCalibDataCpv = rhs.fCalibDataCpv;
fEmcBadChannelsMap = rhs.fEmcBadChannelsMap;
fEmcDataPath = rhs.fEmcDataPath;
fCpvDataPath = rhs.fCpvDataPath;
fEmcBadChannelsMapPath = rhs.fEmcBadChannelsMapPath;
}
else {
AliFatal("Self assignment!");
}
return *this;
}
void AliPHOSCalibData::Reset()
{
fCalibDataEmc ->Reset();
fCalibDataCpv ->Reset();
fEmcBadChannelsMap->Reset();
}
void AliPHOSCalibData::Print(Option_t *option) const
{
if (fCalibDataEmc) fCalibDataEmc->Print(option);
if (fCalibDataCpv) fCalibDataCpv->Print(option);
}
void AliPHOSCalibData::CreateNew()
{
if(fCalibDataEmc) delete fCalibDataEmc;
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
if(fCalibDataCpv) delete fCalibDataCpv;
fCalibDataCpv = new AliPHOSCpvCalibData("PHOS-CPV");
if(fEmcBadChannelsMap) delete fEmcBadChannelsMap;
fEmcBadChannelsMap = new AliPHOSEmcBadChannelsMap();
}
Bool_t AliPHOSCalibData::WriteEmc(Int_t firstRun, Int_t lastRun, AliCDBMetaData *md)
{
if(!fCalibDataEmc) return kFALSE;
AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS/*");
if(!storage)
storage = AliCDBManager::Instance()->GetDefaultStorage();
if(storage) {
AliCDBId id(fEmcDataPath.Data(),firstRun,lastRun);
storage->Put(fCalibDataEmc,id, md);
return kTRUE;
}
else
return kFALSE;
}
Bool_t AliPHOSCalibData::WriteCpv(Int_t firstRun, Int_t lastRun, AliCDBMetaData *md)
{
if(!fCalibDataCpv) return kFALSE;
AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS/*");
if(!storage)
storage = AliCDBManager::Instance()->GetDefaultStorage();
if(storage) {
AliCDBId id(fCpvDataPath.Data(),firstRun,lastRun);
storage->Put(fCalibDataCpv,id, md);
return kTRUE;
}
else
return kFALSE;
}
Bool_t AliPHOSCalibData::WriteEmcBadChannelsMap(Int_t firstRun,Int_t lastRun,AliCDBMetaData *md)
{
if(!fEmcBadChannelsMap) return kFALSE;
AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS/*");
if(!storage)
storage = AliCDBManager::Instance()->GetDefaultStorage();
if(storage) {
AliCDBId id(fEmcBadChannelsMapPath.Data(),firstRun,lastRun);
storage->Put(fEmcBadChannelsMap,id, md);
return kTRUE;
}
else
return kFALSE;
}
Float_t AliPHOSCalibData::GetADCchannelEmc(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetADCchannelEmc(module,column,row);
else
return 1.0;
}
void AliPHOSCalibData::SetADCchannelEmc(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetADCchannelEmc(module,column,row,value);
}
Float_t AliPHOSCalibData::GetADCpedestalEmc(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetADCpedestalEmc(module,column,row);
else
return 0.0;
}
void AliPHOSCalibData::SetADCpedestalEmc(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetADCpedestalEmc(module,column,row,value);
}
Float_t AliPHOSCalibData::GetHighLowRatioEmc(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetHighLowRatioEmc(module,column,row);
else
return 1.0;
}
void AliPHOSCalibData::SetHighLowRatioEmc(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetHighLowRatioEmc(module,column,row,value);
}
Float_t AliPHOSCalibData::GetTimeShiftEmc(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetTimeShiftEmc(module,column,row);
else
return 0.0;
}
Float_t AliPHOSCalibData::GetLGTimeShiftEmc(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetLGTimeShiftEmc(module,column,row);
else
return 0.0;
}
void AliPHOSCalibData::SetLGTimeShiftEmc(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetLGTimeShiftEmc(module,column,row,value);
}
void AliPHOSCalibData::SetTimeShiftEmc(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetTimeShiftEmc(module,column,row,value);
}
Float_t AliPHOSCalibData::GetSampleTimeStep() const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetSampleTimeStep();
else
return 0.0;
}
void AliPHOSCalibData::SetSampleTimeStep(Float_t step)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetSampleTimeStep(step) ;
}
Int_t AliPHOSCalibData::GetAltroOffsetEmc(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetAltroOffsetEmc(module,column,row);
else
return 0;
}
void AliPHOSCalibData::SetAltroOffsetEmc(Int_t module, Int_t column, Int_t row, Int_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetAltroOffsetEmc(module,column,row,value);
}
Float_t AliPHOSCalibData::GetADCchannelCpv(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataCpv)
return fCalibDataCpv->GetADCchannelCpv(module,column,row);
else
return 0.0012;
}
Float_t AliPHOSCalibData::GetADCpedestalCpv(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataCpv)
return fCalibDataCpv->GetADCpedestalCpv(module,column,row);
else
return 0.012;
}
void AliPHOSCalibData::SetADCchannelCpv(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataCpv)
fCalibDataCpv = new AliPHOSCpvCalibData("PHOS-CPV");
fCalibDataCpv->SetADCchannelCpv(module,column,row,value);
}
void AliPHOSCalibData::SetADCpedestalCpv(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataCpv)
fCalibDataCpv = new AliPHOSCpvCalibData("PHOS-CPV");
fCalibDataCpv->SetADCpedestalCpv(module,column,row,value);
}
void AliPHOSCalibData::RandomEmc(Float_t ccMin, Float_t ccMax)
{
if(fCalibDataEmc) delete fCalibDataEmc;
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
TRandom rn;
rn.SetSeed(0);
Float_t adcChannelEmc,adcPedestalEmc;
for(Int_t module=1; module<6; module++) {
for(Int_t column=1; column<57; column++) {
for(Int_t row=1; row<65; row++) {
adcChannelEmc =rn.Uniform(ccMin,ccMax);
adcPedestalEmc=rn.Uniform(0.0,0.0);
fCalibDataEmc->SetADCchannelEmc(module,column,row,adcChannelEmc);
fCalibDataEmc->SetADCpedestalEmc(module,column,row,adcPedestalEmc);
}
}
}
}
void AliPHOSCalibData::RandomCpv(Float_t ccMin, Float_t ccMax)
{
if(fCalibDataCpv) delete fCalibDataCpv;
fCalibDataCpv = new AliPHOSCpvCalibData("PHOS-CPV");
TRandom rn;
rn.SetSeed(0);
Float_t adcChannelCpv,adcPedestalCpv;
for(Int_t module=1; module<6; module++) {
for(Int_t column=1; column<57; column++) {
for(Int_t row=1; row<129; row++) {
adcChannelCpv =rn.Uniform(ccMin,ccMax);
adcPedestalCpv=rn.Uniform(0.0048,0.0192);
fCalibDataCpv->SetADCchannelCpv(module,column,row,adcChannelCpv);
fCalibDataCpv->SetADCpedestalCpv(module,column,row,adcPedestalCpv);
}
}
}
}
Bool_t AliPHOSCalibData::IsBadChannelEmc(Int_t module, Int_t col, Int_t row) const
{
if(fEmcBadChannelsMap)
return fEmcBadChannelsMap->IsBadChannel(module,col,row);
else
return kFALSE;
}
Int_t AliPHOSCalibData::GetNumOfEmcBadChannels() const
{
if(fEmcBadChannelsMap)
return fEmcBadChannelsMap->GetNumOfBadChannels();
else
return 0;
}
void AliPHOSCalibData::EmcBadChannelIds(Int_t *badIds)
{
if(fEmcBadChannelsMap)
fEmcBadChannelsMap->BadChannelIds(badIds);
}
Float_t AliPHOSCalibData::GetADCchannelEmcDecalib(Int_t module, Int_t column, Int_t row) const
{
if(fCalibDataEmc)
return fCalibDataEmc->GetADCchannelEmcDecalib(module,column,row);
else
return 1.0;
}
void AliPHOSCalibData::SetADCchannelEmcDecalib(Int_t module, Int_t column, Int_t row, Float_t value)
{
if(!fCalibDataEmc)
fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC");
fCalibDataEmc->SetADCchannelEmcDecalib(module,column,row,value);
}