X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSCalibData.cxx;h=c9b82ad047d127267705a3bee81866c76c25c147;hb=0d4fe08881610868c753636c70025b89bb847bf3;hp=275fdbbdf6690298f00fca0ba8fd378db4d6ecd1;hpb=3f7dbdb7c4c8384d26a76f68dc71382659c1410d;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSCalibData.cxx b/PHOS/AliPHOSCalibData.cxx index 275fdbbdf66..c9b82ad047d 100644 --- a/PHOS/AliPHOSCalibData.cxx +++ b/PHOS/AliPHOSCalibData.cxx @@ -22,6 +22,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "TRandom.h" +#include "AliLog.h" #include "AliPHOSCalibData.h" #include "AliCDBManager.h" #include "AliCDBStorage.h" @@ -29,6 +30,7 @@ #include "AliCDBEntry.h" #include "AliPHOSEmcCalibData.h" #include "AliPHOSCpvCalibData.h" +#include "AliPHOSEmcBadChannelsMap.h" #include "AliCDBMetaData.h" ClassImp(AliPHOSCalibData) @@ -38,37 +40,66 @@ ClassImp(AliPHOSCalibData) TNamed(), fCalibDataEmc(0x0), fCalibDataCpv(0x0), + fEmcBadChannelsMap(0x0), fEmcDataPath("PHOS/Calib/EmcGainPedestals"), - fCpvDataPath("PHOS/Calib/CpvGainPedestals") + fCpvDataPath("PHOS/Calib/CpvGainPedestals"), + fEmcBadChannelsMapPath("PHOS/Calib/EmcBadChannels") { - // Default constructor + // Default constructor. + // Open CDB entry, get EMC and CPV calibration data and bad channel map. + // If EMC or CPV calibration data does not exist, stop the run - AliCDBEntry* entryEmc = AliCDBManager::Instance()->Get(fEmcDataPath.Data()); + AliCDBEntry* entryEmc = AliCDBManager::Instance()->Get(fEmcDataPath.Data()); if(entryEmc) fCalibDataEmc = (AliPHOSEmcCalibData*)entryEmc->GetObject(); - + + if(!fCalibDataEmc) + AliWarning("Calibration parameters for PHOS EMC not found. Create a new set.\n"); + AliCDBEntry* entryCpv = AliCDBManager::Instance()->Get(fCpvDataPath.Data()); if(entryCpv) fCalibDataCpv = (AliPHOSCpvCalibData*)entryCpv->GetObject(); + if(!fCalibDataCpv) + AliWarning("Calibration parameters for PHOS CPV not found. Create a new set.\n"); + + AliCDBEntry* entryEmcBadMap = AliCDBManager::Instance()->Get(fEmcBadChannelsMapPath.Data()); + if(entryEmcBadMap) + fEmcBadChannelsMap = (AliPHOSEmcBadChannelsMap*)entryEmcBadMap->GetObject(); + } //________________________________________________________________ AliPHOSCalibData::AliPHOSCalibData(Int_t runNumber) : TNamed("phosCalib","PHOS Calibration Data Manager"), - fCalibDataEmc(0x0), fCalibDataCpv(0x0), + fCalibDataEmc(0x0), fCalibDataCpv(0x0), fEmcBadChannelsMap(0x0), fEmcDataPath("PHOS/Calib/EmcGainPedestals"), - fCpvDataPath("PHOS/Calib/CpvGainPedestals") + fCpvDataPath("PHOS/Calib/CpvGainPedestals"), + fEmcBadChannelsMapPath("PHOS/Calib/EmcBadChannels") { // Constructor + // Open CDB entry, get EMC and CPV calibration data and bad channel map. + // If EMC or CPV calibration data does not exist, stop the run + 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(); + } //________________________________________________________________ @@ -76,8 +107,10 @@ AliPHOSCalibData::AliPHOSCalibData(AliPHOSCalibData & phosCDB) : TNamed(phosCDB), fCalibDataEmc(phosCDB.fCalibDataEmc), fCalibDataCpv(phosCDB.fCalibDataCpv), + fEmcBadChannelsMap(phosCDB.fEmcBadChannelsMap), fEmcDataPath(phosCDB.fEmcDataPath), - fCpvDataPath(phosCDB.fCpvDataPath) + fCpvDataPath(phosCDB.fCpvDataPath), + fEmcBadChannelsMapPath(phosCDB.fEmcBadChannelsMapPath) { // Copy constructor } @@ -96,8 +129,10 @@ AliPHOSCalibData & AliPHOSCalibData::operator = (const AliPHOSCalibData & rhs) TNamed::operator=(rhs); fCalibDataEmc = rhs.fCalibDataEmc; fCalibDataCpv = rhs.fCalibDataCpv; + fEmcBadChannelsMap = rhs.fEmcBadChannelsMap; fEmcDataPath = rhs.fEmcDataPath; fCpvDataPath = rhs.fCpvDataPath; + fEmcBadChannelsMapPath = rhs.fEmcBadChannelsMapPath; return *this; } @@ -105,10 +140,12 @@ AliPHOSCalibData & AliPHOSCalibData::operator = (const AliPHOSCalibData & rhs) //________________________________________________________________ void AliPHOSCalibData::Reset() { - // Set all pedestals to 0 and all ADC channels to 1 + // Set all pedestals to 0 and all ADC channels to 1, + // and all channels are good (alive) - fCalibDataEmc->Reset(); - fCalibDataCpv->Reset(); + fCalibDataEmc ->Reset(); + fCalibDataCpv ->Reset(); + fEmcBadChannelsMap->Reset(); } //________________________________________________________________ @@ -132,6 +169,9 @@ void AliPHOSCalibData::CreateNew() if(fCalibDataCpv) delete fCalibDataCpv; fCalibDataCpv = new AliPHOSCpvCalibData("PHOS-CPV"); + if(fEmcBadChannelsMap) delete fEmcBadChannelsMap; + fEmcBadChannelsMap = new AliPHOSEmcBadChannelsMap(); + } //________________________________________________________________ @@ -141,7 +181,7 @@ Bool_t AliPHOSCalibData::WriteEmc(Int_t firstRun, Int_t lastRun, AliCDBMetaData if(!fCalibDataEmc) return kFALSE; - AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS"); + AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS/*"); if(!storage) storage = AliCDBManager::Instance()->GetDefaultStorage(); @@ -162,7 +202,7 @@ Bool_t AliPHOSCalibData::WriteCpv(Int_t firstRun, Int_t lastRun, AliCDBMetaData if(!fCalibDataCpv) return kFALSE; - AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS"); + AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage("PHOS/*"); if(!storage) storage = AliCDBManager::Instance()->GetDefaultStorage(); @@ -176,6 +216,27 @@ Bool_t AliPHOSCalibData::WriteCpv(Int_t firstRun, Int_t lastRun, AliCDBMetaData } + +//________________________________________________________________ +Bool_t AliPHOSCalibData::WriteEmcBadChannelsMap(Int_t firstRun,Int_t lastRun,AliCDBMetaData *md) +{ + //Write EMC bad channels map into CDB. + + 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 { @@ -192,6 +253,17 @@ Float_t AliPHOSCalibData::GetADCchannelEmc(Int_t module, Int_t column, Int_t row return 1.0; // default width of one EMC ADC channel in GeV } +//________________________________________________________________ +void AliPHOSCalibData::SetADCchannelEmc(Int_t module, Int_t column, Int_t row, Float_t value) +{ + // Set EMC calibration coefficient for (module,column,row) + + 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 { @@ -208,27 +280,70 @@ Float_t AliPHOSCalibData::GetADCpedestalEmc(Int_t module, Int_t column, Int_t ro } //________________________________________________________________ -void AliPHOSCalibData::SetADCchannelEmc(Int_t module, Int_t column, Int_t row, Float_t value) +void AliPHOSCalibData::SetADCpedestalEmc(Int_t module, Int_t column, Int_t row, Float_t value) { - // Set EMC calibration coefficient for (module,column,row) + // Set EMC pedestal for (module,column,row) if(!fCalibDataEmc) fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC"); - fCalibDataEmc->SetADCchannelEmc(module,column,row,value); + fCalibDataEmc->SetADCpedestalEmc(module,column,row,value); } //________________________________________________________________ -void AliPHOSCalibData::SetADCpedestalEmc(Int_t module, Int_t column, Int_t row, Float_t value) +Float_t AliPHOSCalibData::GetHighLowRatioEmc(Int_t module, Int_t column, Int_t row) const { - // Set EMC pedestal for (module,column,row) - + // Return EMC calibration coefficient + // for channel defined by (module,column,row) + // module, column,raw should follow the internal PHOS convention: + // module 1:5, column 1:56, row 1:64 + // if CBD instance exists, the value is taken from CDB. + // Otherwise it is an ideal one + + if(fCalibDataEmc) + return fCalibDataEmc->GetHighLowRatioEmc(module,column,row); + else + return 1.0; // default width of one EMC ADC channel in GeV +} + +//________________________________________________________________ +void AliPHOSCalibData::SetHighLowRatioEmc(Int_t module, Int_t column, Int_t row, Float_t value) +{ + // Set EMC calibration coefficient for (module,column,row) + if(!fCalibDataEmc) fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC"); - - fCalibDataEmc->SetADCpedestalEmc(module,column,row,value); + + fCalibDataEmc->SetHighLowRatioEmc(module,column,row,value); } - + +//________________________________________________________________ +Float_t AliPHOSCalibData::GetTimeShiftEmc(Int_t module, Int_t column, Int_t row) const +{ + // Return EMC calibration coefficient + // for channel defined by (module,column,row) + // module, column,raw should follow the internal PHOS convention: + // module 1:5, column 1:56, row 1:64 + // if CBD instance exists, the value is taken from CDB. + // Otherwise it is an ideal one + + if(fCalibDataEmc) + return fCalibDataEmc->GetTimeShiftEmc(module,column,row); + else + return 1.0; // default width of one EMC ADC channel in GeV +} + +//________________________________________________________________ +void AliPHOSCalibData::SetTimeShiftEmc(Int_t module, Int_t column, Int_t row, Float_t value) +{ + // Set EMC calibration coefficient for (module,column,row) + + if(!fCalibDataEmc) + fCalibDataEmc = new AliPHOSEmcCalibData("PHOS-EMC"); + + fCalibDataEmc->SetTimeShiftEmc(module,column,row,value); +} + //________________________________________________________________ Float_t AliPHOSCalibData::GetADCchannelCpv(Int_t module, Int_t column, Int_t row) const { @@ -337,3 +452,33 @@ void AliPHOSCalibData::RandomCpv(Float_t ccMin, Float_t ccMax) } } } + +//________________________________________________________________ +Bool_t AliPHOSCalibData::IsBadChannelEmc(Int_t module, Int_t col, Int_t row) const +{ + //If no bad channels map found, channel considered good + + 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) +{ + //Fill array badIds by the Ids of EMC bad channels. + //Array badIds of length GetNumOfBadChannels() should be prepared in advance. + + if(fEmcBadChannelsMap) + fEmcBadChannelsMap->BadChannelIds(badIds); +}