Skip to content

Commit

Permalink
Prepare CastorDbProducer for concurrent IOVs
Browse files Browse the repository at this point in the history
  • Loading branch information
wddgit committed Aug 31, 2018
1 parent 5bc50b1 commit 17e6165
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 54 deletions.
111 changes: 81 additions & 30 deletions CalibCalorimetry/CastorCalib/plugins/CastorDbProducer.cc
Expand Up @@ -35,22 +35,13 @@

CastorDbProducer::CastorDbProducer( const edm::ParameterSet& fConfig)
: ESProducer(),
mService (new CastorDbService (fConfig)),
mDumpRequest (),
mDumpStream(nullptr)
{
//the following line is needed to tell the framework what
// data is being produced
setWhatProduced (this, (dependsOn (&CastorDbProducer::pedestalsCallback,
&CastorDbProducer::gainsCallback) &
&CastorDbProducer::pedestalWidthsCallback &
&CastorDbProducer::QIEDataCallback &
&CastorDbProducer::gainWidthsCallback &
&CastorDbProducer::channelQualityCallback &
&CastorDbProducer::electronicsMapCallback
)
);

setWhatProduced(this);

//now do what ever other initialization is needed

mDumpRequest = fConfig.getUntrackedParameter <std::vector <std::string> > ("dump", std::vector<std::string>());
Expand All @@ -75,84 +66,144 @@ CastorDbProducer::~CastorDbProducer()
//

// ------------ method called to produce the data ------------
std::shared_ptr<CastorDbService> CastorDbProducer::produce( const CastorDbRecord&)
std::shared_ptr<CastorDbService> CastorDbProducer::produce( const CastorDbRecord& record)
{
return mService;
auto host = holder_.makeOrGet([]() {
return new HostType;
});

bool needBuildCalibrations = false;
bool needBuildCalibWidths = false;

host->ifRecordChanges<CastorElectronicsMapRcd>(record,
[this, h=host.get()](auto const& rec) {
setupElectronicsMap(rec, h);
});
host->ifRecordChanges<CastorChannelQualityRcd>(record,
[this, h=host.get()](auto const& rec) {
setupChannelQuality(rec, h);
});
host->ifRecordChanges<CastorGainWidthsRcd>(record,
[this, h=host.get(),
&needBuildCalibWidths](auto const& rec) {
setupGainWidths(rec, h);
needBuildCalibWidths = true;
});
host->ifRecordChanges<CastorQIEDataRcd>(record,
[this, h=host.get(),
&needBuildCalibrations,
&needBuildCalibWidths](auto const& rec) {
setupQIEData(rec, h);
needBuildCalibrations = true;
needBuildCalibWidths = true;
});
host->ifRecordChanges<CastorPedestalWidthsRcd>(record,
[this, h=host.get(),
&needBuildCalibWidths](auto const& rec) {
setupPedestalWidths(rec, h);
needBuildCalibWidths = true;
});
host->ifRecordChanges<CastorGainsRcd>(record,
[this, h=host.get(),
&needBuildCalibrations](auto const& rec) {
setupGains(rec, h);
needBuildCalibrations = true;
});
host->ifRecordChanges<CastorPedestalsRcd>(record,
[this, h=host.get(),
&needBuildCalibrations](auto const& rec) {
setupPedestals(rec, h);
needBuildCalibrations = true;
});

if (needBuildCalibWidths) {
host->buildCalibWidths();
}

if (needBuildCalibrations) {
host->buildCalibrations();
}

return host; // automatically converts to std::shared_ptr<CastorDbService>
}

void CastorDbProducer::pedestalsCallback (const CastorPedestalsRcd& fRecord) {
void CastorDbProducer::setupPedestals(const CastorPedestalsRcd& fRecord,
CastorDbService* service) {

edm::ESHandle <CastorPedestals> item;
fRecord.get (item);

mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("Pedestals")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR Pedestals set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}

void CastorDbProducer::pedestalWidthsCallback (const CastorPedestalWidthsRcd& fRecord) {
void CastorDbProducer::setupPedestalWidths(const CastorPedestalWidthsRcd& fRecord,
CastorDbService* service) {
edm::ESHandle <CastorPedestalWidths> item;
fRecord.get (item);
mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("PedestalWidths")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR Pedestals set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}


void CastorDbProducer::gainsCallback (const CastorGainsRcd& fRecord) {
void CastorDbProducer::setupGains(const CastorGainsRcd& fRecord,
CastorDbService* service) {
edm::ESHandle <CastorGains> item;
fRecord.get (item);
mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("Gains")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR Gains set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}


void CastorDbProducer::gainWidthsCallback (const CastorGainWidthsRcd& fRecord) {
void CastorDbProducer::setupGainWidths(const CastorGainWidthsRcd& fRecord,
CastorDbService* service) {
edm::ESHandle <CastorGainWidths> item;
fRecord.get (item);
mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("GainWidths")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR GainWidths set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}

void CastorDbProducer::QIEDataCallback (const CastorQIEDataRcd& fRecord) {
void CastorDbProducer::setupQIEData(const CastorQIEDataRcd& fRecord,
CastorDbService* service) {
edm::ESHandle <CastorQIEData> item;
fRecord.get (item);
mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("QIEData")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR QIEData set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}

void CastorDbProducer::channelQualityCallback (const CastorChannelQualityRcd& fRecord) {
void CastorDbProducer::setupChannelQuality(const CastorChannelQualityRcd& fRecord,
CastorDbService* service) {
edm::ESHandle <CastorChannelQuality> item;
fRecord.get (item);
mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("ChannelQuality")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR ChannelQuality set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}

void CastorDbProducer::electronicsMapCallback (const CastorElectronicsMapRcd& fRecord) {
void CastorDbProducer::setupElectronicsMap(const CastorElectronicsMapRcd& fRecord,
CastorDbService* service) {
edm::ESHandle <CastorElectronicsMap> item;
fRecord.get (item);
mService->setData (item.product ());
service->setData(item.product());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("ElectronicsMap")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL/CASTOR Electronics Map set" << std::endl;
CastorDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}



37 changes: 24 additions & 13 deletions CalibCalorimetry/CastorCalib/plugins/CastorDbProducer.h
Expand Up @@ -4,6 +4,8 @@
// user include files
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/ESProductHost.h"
#include "FWCore/Utilities/interface/ReusableObjectHolder.h"

class CastorDbService;
class CastorDbRecord;
Expand All @@ -17,24 +19,33 @@ class CastorDbRecord;
#include "CondFormats/DataRecord/interface/CastorQIEDataRcd.h"

class CastorDbProducer : public edm::ESProducer {
public:
public:
CastorDbProducer( const edm::ParameterSet& );
~CastorDbProducer() override;

std::shared_ptr<CastorDbService> produce( const CastorDbRecord& );

// callbacks
void pedestalsCallback (const CastorPedestalsRcd& fRecord);
void pedestalWidthsCallback (const CastorPedestalWidthsRcd& fRecord);
void gainsCallback (const CastorGainsRcd& fRecord);
void gainWidthsCallback (const CastorGainWidthsRcd& fRecord);
void QIEDataCallback (const CastorQIEDataRcd& fRecord);
void channelQualityCallback (const CastorChannelQualityRcd& fRecord);
void electronicsMapCallback (const CastorElectronicsMapRcd& fRecord);

private:
// ----------member data ---------------------------
std::shared_ptr<CastorDbService> mService;
private:
// ----------member data ---------------------------
using HostType = edm::ESProductHost<CastorDbService,
CastorPedestalsRcd,
CastorPedestalWidthsRcd,
CastorGainsRcd,
CastorGainWidthsRcd,
CastorQIEDataRcd,
CastorChannelQualityRcd,
CastorElectronicsMapRcd>;

void setupPedestals(const CastorPedestalsRcd&, CastorDbService*);
void setupPedestalWidths(const CastorPedestalWidthsRcd&, CastorDbService*);
void setupGains(const CastorGainsRcd&, CastorDbService*);
void setupGainWidths(const CastorGainWidthsRcd&, CastorDbService*);
void setupQIEData(const CastorQIEDataRcd&, CastorDbService*);
void setupChannelQuality(const CastorChannelQualityRcd&, CastorDbService*);
void setupElectronicsMap(const CastorElectronicsMapRcd&, CastorDbService*);

edm::ReusableObjectHolder<HostType> holder_;

std::vector<std::string> mDumpRequest;
std::ostream* mDumpStream;
};
Expand Up @@ -8,7 +8,7 @@
*/
class CastorCalibrationWidths {
public:
CastorCalibrationWidths () {};
CastorCalibrationWidths () : mGain{}, mPedestal{} {};
CastorCalibrationWidths (const float fGain [4], const float fPedestal [4]);
/// get gain width for capid=0..3
double gain (int fCapId) const {return mGain [fCapId];}
Expand Down
2 changes: 1 addition & 1 deletion CalibFormats/CastorObjects/interface/CastorCalibrations.h
Expand Up @@ -8,7 +8,7 @@
*/
class CastorCalibrations {
public:
CastorCalibrations () {};
CastorCalibrations () : mGain{}, mPedestal{} {};
CastorCalibrations (const float fGain [4], const float fPedestal [4]);
/// get gain for capid=0..3
double gain (int fCapId) const {return mGain [fCapId];}
Expand Down
13 changes: 7 additions & 6 deletions CalibFormats/CastorObjects/interface/CastorDbService.h
Expand Up @@ -27,7 +27,7 @@ class CastorCalibrationWidths;

class CastorDbService {
public:
CastorDbService (const edm::ParameterSet&);
CastorDbService ();

const CastorCalibrations& getCastorCalibrations(const HcalGenericDetId& fId) const
{ return mCalibSet.getCalibrations(fId); }
Expand All @@ -43,21 +43,22 @@ class CastorDbService {
const CastorElectronicsMap* getCastorMapping () const;
const CastorChannelStatus* getCastorChannelStatus (const HcalGenericDetId& fId) const;

void setData (const CastorPedestals* fItem) {mPedestals = fItem; buildCalibrations(); }
void setData (const CastorPedestalWidths* fItem) {mPedestalWidths = fItem; buildCalibWidths(); }
void setData (const CastorGains* fItem) {mGains = fItem; buildCalibrations(); }
void setData (const CastorPedestals* fItem) { mPedestals = fItem; }
void setData (const CastorPedestalWidths* fItem) { mPedestalWidths = fItem; }
void setData (const CastorGains* fItem) { mGains = fItem; }
void setData (const CastorGainWidths* fItem) {mGainWidths = fItem; }
void setData (const CastorQIEData* fItem) {mQIEData = fItem; }
void setData (const CastorChannelQuality* fItem) {mChannelQuality = fItem;}
void setData (const CastorElectronicsMap* fItem) {mElectronicsMap = fItem;}

void buildCalibrations();
void buildCalibWidths();

private:
bool makeCastorCalibration (const HcalGenericDetId& fId, CastorCalibrations* fObject,
bool pedestalInADC) const;
void buildCalibrations();
bool makeCastorCalibrationWidth (const HcalGenericDetId& fId, CastorCalibrationWidths* fObject,
bool pedestalInADC) const;
void buildCalibWidths();
const CastorPedestals* mPedestals;
const CastorPedestalWidths* mPedestalWidths;
const CastorGains* mGains;
Expand Down
3 changes: 2 additions & 1 deletion CalibFormats/CastorObjects/src/CastorDbService.cc
Expand Up @@ -13,13 +13,14 @@

#include <cmath>

CastorDbService::CastorDbService (const edm::ParameterSet& cfg)
CastorDbService::CastorDbService ()
:
mPedestals (nullptr),
mPedestalWidths (nullptr),
mGains (nullptr),
mGainWidths (nullptr),
mQIEData(nullptr),
mChannelQuality(nullptr),
mElectronicsMap(nullptr)
{}

Expand Down
5 changes: 3 additions & 2 deletions SimCalorimetry/CastorSim/test/CastorDigitizerTest.cpp
Expand Up @@ -153,14 +153,15 @@ int main() {
*/

edm::ParameterSet emptyPSet;
CastorDbService calibratorHandle(emptyPSet);
CastorDbService calibratorHandle;

// CastorDbService calibratorHandle;
calibratorHandle.setData(&pedestals);
calibratorHandle.setData(&pedestalWidths);
calibratorHandle.setData(&gains);
calibratorHandle.setData(&gainWidths);
calibratorHandle.buildCalibrations();
calibratorHandle.buildCalibWidths();
cout << "set data" << std::endl;
bool addNoise = false;

Expand Down

0 comments on commit 17e6165

Please sign in to comment.