From 0e68ee98e0f152acb40952f6ec923b816c0d52b5 Mon Sep 17 00:00:00 2001 From: Dmitrijus Bugelskis Date: Wed, 20 Nov 2013 15:39:57 +0100 Subject: [PATCH] Define condition objects for Ecal time bias corrections (reco). Currently, RecoLocalCalo.EcalRecProducers.EcalUncalibRecHitWorkerGlobal (ecal reconstruction) uses a list of hardcoded parameters for time bias correction. To increase the flexibily they will be moved into a database payload. --- CondCore/EcalPlugins/src/plugin.cc | 6 +- .../interface/EcalTimeBiasCorrectionsRcd.h | 17 ++++ .../src/EcalTimeBiasCorrectionsRcd.cc | 9 ++ .../interface/EcalTimeBiasCorrections.h | 30 ++++++ .../src/EcalTimeBiasCorrections.cc | 34 +++++++ .../T_EventSetup_EcalTimeBiasCorrections.cc | 4 + CondFormats/EcalObjects/src/classes.h | 2 + CondFormats/EcalObjects/src/classes_def.xml | 3 + CondFormats/EcalObjects/test/BuildFile.xml | 4 + .../test/fillEcalTimeCorrections_cfg.py | 50 ++++++++++ .../EcalTimeBiasCorrectionsFillInitial.cc | 94 +++++++++++++++++++ 11 files changed, 252 insertions(+), 1 deletion(-) create mode 100644 CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h create mode 100644 CondFormats/DataRecord/src/EcalTimeBiasCorrectionsRcd.cc create mode 100644 CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h create mode 100644 CondFormats/EcalObjects/src/EcalTimeBiasCorrections.cc create mode 100644 CondFormats/EcalObjects/src/T_EventSetup_EcalTimeBiasCorrections.cc create mode 100644 CondFormats/EcalObjects/test/fillEcalTimeCorrections_cfg.py create mode 100644 CondFormats/EcalObjects/test/stubs/EcalTimeBiasCorrectionsFillInitial.cc diff --git a/CondCore/EcalPlugins/src/plugin.cc b/CondCore/EcalPlugins/src/plugin.cc index 5e8fe9e02c740..35ee1752971df 100644 --- a/CondCore/EcalPlugins/src/plugin.cc +++ b/CondCore/EcalPlugins/src/plugin.cc @@ -142,6 +142,8 @@ #include "CondFormats/EcalObjects/interface/EcalSampleMask.h" #include "CondFormats/DataRecord/interface/EcalSampleMaskRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" +#include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" REGISTER_PLUGIN(EcalPedestalsRcd,EcalPedestals); @@ -193,4 +195,6 @@ REGISTER_PLUGIN(EcalDQMChannelStatusRcd,EcalDQMChannelStatus); REGISTER_PLUGIN(EcalDQMTowerStatusRcd,EcalDQMTowerStatus); REGISTER_PLUGIN(EcalSRSettingsRcd, EcalSRSettings); -REGISTER_PLUGIN(EcalSampleMaskRcd,EcalSampleMask); +REGISTER_PLUGIN(EcalSampleMaskRcd, EcalSampleMask); + +REGISTER_PLUGIN(EcalTimeBiasCorrectionsRcd, EcalTimeBiasCorrections); diff --git a/CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h b/CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h new file mode 100644 index 0000000000000..1356a7b97e375 --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h @@ -0,0 +1,17 @@ +#ifndef CondFormats_EcalObjects_EcalTimeBiasCorrectionsRcd_HH +#define CondFormats_EcalObjects_EcalTimeBiasCorrectionsRcd_HH + +// -*- C++ -*- +// +// Author: Dmitrijus Bugelskis +// Created: Thu, 14 Nov 2013 17:12:16 GMT +// + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" + +class EcalTimeBiasCorrectionsRcd + : public edm::eventsetup::EventSetupRecordImplementation< + EcalTimeBiasCorrectionsRcd> { +}; + +#endif diff --git a/CondFormats/DataRecord/src/EcalTimeBiasCorrectionsRcd.cc b/CondFormats/DataRecord/src/EcalTimeBiasCorrectionsRcd.cc new file mode 100644 index 0000000000000..6663492c76465 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalTimeBiasCorrectionsRcd.cc @@ -0,0 +1,9 @@ +// -*- C++ -*- + +// Author: Dmitrijus Bugelskis +// Created: Thu, 14 Nov 2013 17:12:16 GMT + +#include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalTimeBiasCorrectionsRcd); diff --git a/CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h b/CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h new file mode 100644 index 0000000000000..1fd3fea01fccb --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h @@ -0,0 +1,30 @@ +#ifndef CondFormats_EcalObjects_EcalTimeBiasCorrections_HH +#define CondFormats_EcalObjects_EcalTimeBiasCorrections_HH + +// -*- C++ -*- +// +// Author: Dmitrijus Bugelskis +// Created: Thu, 14 Nov 2013 17:12:16 GMT +// + +#include "DataFormats/Math/interface/Matrix.h" +#include +#include + +class EcalTimeBiasCorrections { + public: + EcalTimeBiasCorrections(); + EcalTimeBiasCorrections(const EcalTimeBiasCorrections& aset); + ~EcalTimeBiasCorrections(); + + // there is no need to getters/setters, just access data directly + std::vector EBTimeCorrAmplitudeBins; + std::vector EBTimeCorrShiftBins; + + std::vector EETimeCorrAmplitudeBins; + std::vector EETimeCorrShiftBins; + + void print(std::ostream& o) const; +}; + +#endif diff --git a/CondFormats/EcalObjects/src/EcalTimeBiasCorrections.cc b/CondFormats/EcalObjects/src/EcalTimeBiasCorrections.cc new file mode 100644 index 0000000000000..7164d91cd2a31 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalTimeBiasCorrections.cc @@ -0,0 +1,34 @@ +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" + +EcalTimeBiasCorrections::EcalTimeBiasCorrections() {} +EcalTimeBiasCorrections::~EcalTimeBiasCorrections() {} + +EcalTimeBiasCorrections::EcalTimeBiasCorrections( + const EcalTimeBiasCorrections& aset) {} + +template +static inline void print_vector(std::ostream& o, const std::vector& vect) { + o << "["; + for (std::vector::const_iterator i = vect.begin(); i != vect.end(); + ++i) { + + std::cout << *i << ", "; + } + o << "]"; +} + +void EcalTimeBiasCorrections::print(std::ostream& o) const { + o << "EB Amplitude bins:"; + print_vector(o, this->EBTimeCorrAmplitudeBins); + o << std::endl; + o << "EE Amplitude bins:"; + print_vector(o, this->EETimeCorrAmplitudeBins); + o << std::endl; + + o << "EB Shift bins:"; + print_vector(o, this->EBTimeCorrShiftBins); + o << std::endl; + o << "EE Shift bins:"; + print_vector(o, this->EETimeCorrShiftBins); + o << std::endl; +} diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalTimeBiasCorrections.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalTimeBiasCorrections.cc new file mode 100644 index 0000000000000..eabf366243a93 --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalTimeBiasCorrections.cc @@ -0,0 +1,4 @@ +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalTimeBiasCorrections); diff --git a/CondFormats/EcalObjects/src/classes.h b/CondFormats/EcalObjects/src/classes.h index f71b980f2d902..d40b3e6a0269a 100644 --- a/CondFormats/EcalObjects/src/classes.h +++ b/CondFormats/EcalObjects/src/classes.h @@ -59,6 +59,7 @@ #include "CondFormats/EcalObjects/interface/EcalTPGStripStatus.h" #include "CondFormats/EcalObjects/interface/EcalTPGSpike.h" #include "CondFormats/EcalObjects/interface/EcalSRSettings.h" +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" @@ -200,5 +201,6 @@ namespace{ // std::vector ecalSRSettings_dccNormalizedWeights_1; // float ecalSRSettings_dccNormalizedWeights_elt_2; + EcalTimeBiasCorrections timeBiasCorrections; }; } diff --git a/CondFormats/EcalObjects/src/classes_def.xml b/CondFormats/EcalObjects/src/classes_def.xml index e06bc3ccab53e..0cdf5f1628836 100644 --- a/CondFormats/EcalObjects/src/classes_def.xml +++ b/CondFormats/EcalObjects/src/classes_def.xml @@ -284,4 +284,7 @@ + + + diff --git a/CondFormats/EcalObjects/test/BuildFile.xml b/CondFormats/EcalObjects/test/BuildFile.xml index 6910c15ffe982..7f61838c0af43 100644 --- a/CondFormats/EcalObjects/test/BuildFile.xml +++ b/CondFormats/EcalObjects/test/BuildFile.xml @@ -5,8 +5,12 @@ + + + + diff --git a/CondFormats/EcalObjects/test/fillEcalTimeCorrections_cfg.py b/CondFormats/EcalObjects/test/fillEcalTimeCorrections_cfg.py new file mode 100644 index 0000000000000..1b07507393879 --- /dev/null +++ b/CondFormats/EcalObjects/test/fillEcalTimeCorrections_cfg.py @@ -0,0 +1,50 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("InitialData") +process.load("CondCore.DBCommon.CondDBCommon_cfi") +process.CondDBCommon.connect = 'sqlite_file:/tmp/ecal_timebias_corrections.db' + +process.source = cms.Source("EmptyIOVSource", + lastValue = cms.uint64(1), + timetype = cms.string('runnumber'), + firstValue = cms.uint64(1), + interval = cms.uint64(1) +) + +process.PoolDBOutputService = cms.Service("PoolDBOutputService", + process.CondDBCommon, + timetype = cms.untracked.string('runnumber'), + toPut = cms.VPSet(cms.PSet( + record = cms.string('EcalTimeBiasCorrectionsRcd'), + tag = cms.string('initial') + )) +) + +process.timebias = cms.EDAnalyzer("EcalTimeBiasCorrectionsFillInitial", + EBtimeCorrAmplitudeBins = cms.vdouble( + 7.9, 8.9, 10, 11.2, 12.5, 14.1, 15.8, 17.7, 19.9, 22.3, 25, 28.1, 31.5, 35.3, 39.7, + 44.5, 49.9, 56, 62.8, 70.5, 79.1, 88.8, 99.6, 111.7, 125.4, 140.7, 157.9, 177.1, 198.7, 223, + 250.2, 280.7, 315, 353.4, 396.5, 444.9, 499.2, 560.1, 628.4, 705.1, 791.1, 887.7, 996, 1117.5, 1253.9, + 1406.8, 1578.5, 1771.1, 1987.2, 2229.7, 2501.8, 2807, 3149.5, 3533.8, 3895.9, 3896, 4311.8, 4837.9, 5428.2, 6090.6, + 6833.7, 7667.5, 8603.1, 9652.9, 10830, 12152, 13635, 15298, 17165, 19260, 21610), + + EBtimeCorrShiftBins = cms.vdouble( + -1.770, -1.770, -1.770, -1.770, -1.666, -1.430, -1.233, -1.012, -0.866, -0.736, -0.640, -0.561, -0.505, -0.452, -0.405, + -0.363, -0.335, -0.305, -0.279, -0.260, -0.239, -0.220, -0.204, -0.191, -0.186, -0.177, -0.158, -0.137, -0.126, -0.115, + -0.104, -0.096, -0.085, -0.064, -0.056, -0.036, -0.020, -0.006, -0.020, -0.009, -0.020, 0.005, 0.053, 0.076, 0.093, + 0.137, 0.143, 0.171, 0.222, 0.229, 0.271, 0.298, 0.312, 0.307, 0.254 , -0.997 ,-0.859 , -0.819, -0.775, -0.589, + -0.428, -0.288, -0.434, -0.277, -0.210, -0.179, -0.134, 0.362, 0.152, -0.282, -0.382), + + EEtimeCorrAmplitudeBins = cms.vdouble( + 15.7, 17.6, 19.7, 22.1, 24.8, 27.9, 31.3, 35.1, 39.4, 44.2, 49.6, 55.6, 62.4, 70, 78.6, + 88.1, 98.9, 111, 124.5, 139.7, 156.7, 175.9, 197.3, 221.4, 248.4, 278.7, 312.7, 350.9, 393.7, 441.7, + 495.6, 556.1, 624, 700.1, 785.5, 881.4, 988.9, 1109.6, 1245, 1396.9, 1567.3, 1758.6, 1973.1, 2213.9, 2484, + 2787.1, 3127.2, 3508.8, 3936.9, 4417.3, 4956.3, 5561.1, 6239.6, 7001, 7522.8, 8440.7, 9470.6, 10626), + + EEtimeCorrShiftBins = cms.vdouble( + -0.896, -0.896, -0.896, -0.896, -0.563, -0.392, -0.287, -0.203, -0.135, -0.100, -0.068, -0.050, -0.060, -0.052, -0.055, + -0.050, -0.052, -0.056, -0.055, -0.056, -0.048, -0.037, -0.038, -0.037, -0.025, -0.026, -0.024, -0.013, -0.003, 0.005, + 0.020, 0.026, 0.008, 0.007, -0.006, 0.024, 0.045, 0.062, 0.085, 0.088 , 0.111 , 0.139, 0.156, 0.176, 0.210, + 0.242, 0.267, 0.301, 0.318, 0.278, 0.287, 0.218, 0.305, 0.245, 0.184, -0.159, -0.095, 0.037), +) +process.p = cms.Path(process.timebias) diff --git a/CondFormats/EcalObjects/test/stubs/EcalTimeBiasCorrectionsFillInitial.cc b/CondFormats/EcalObjects/test/stubs/EcalTimeBiasCorrectionsFillInitial.cc new file mode 100644 index 0000000000000..8127dc0497cde --- /dev/null +++ b/CondFormats/EcalObjects/test/stubs/EcalTimeBiasCorrectionsFillInitial.cc @@ -0,0 +1,94 @@ +// -*- C++ -*- +// +// Description: Fill in time bias record from an old configuration file. +// Original Author: Dmitrijus Bugelskis +// Created: Thu, 14 Nov 2013 17:44:11 GMT +// + +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/ESProducts.h" + +#include "CondFormats/EcalObjects/interface/EcalTimeBiasCorrections.h" +#include "CondFormats/DataRecord/interface/EcalTimeBiasCorrectionsRcd.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CondCore/DBOutputService/interface/PoolDBOutputService.h" + +class EcalTimeBiasCorrectionsFillInitial : public edm::EDAnalyzer { + public: + explicit EcalTimeBiasCorrectionsFillInitial(const edm::ParameterSet &); + ~EcalTimeBiasCorrectionsFillInitial(); + + void analyze(const edm::Event &, const edm::EventSetup &); + void beginJob(const edm::EventSetup &); + void endJob(); + + private: + std::vector EBtimeCorrAmplitudeBins_; + std::vector EBtimeCorrShiftBins_; + std::vector EEtimeCorrAmplitudeBins_; + std::vector EEtimeCorrShiftBins_; + + EcalTimeBiasCorrections *bias_; +}; + +EcalTimeBiasCorrectionsFillInitial::EcalTimeBiasCorrectionsFillInitial( + const edm::ParameterSet &ps) { + + EBtimeCorrAmplitudeBins_ = + ps.getParameter >("EBtimeCorrAmplitudeBins"); + EBtimeCorrShiftBins_ = + ps.getParameter >("EBtimeCorrShiftBins"); + EEtimeCorrAmplitudeBins_ = + ps.getParameter >("EEtimeCorrAmplitudeBins"); + EEtimeCorrShiftBins_ = + ps.getParameter >("EEtimeCorrShiftBins"); + + if (EBtimeCorrAmplitudeBins_.size() != EBtimeCorrShiftBins_.size()) { + edm::LogError("EcalRecHitError") << "Size of EBtimeCorrAmplitudeBins " + "different from EBtimeCorrShiftBins."; + } + + if (EEtimeCorrAmplitudeBins_.size() != EEtimeCorrShiftBins_.size()) { + edm::LogError("EcalRecHitError") << "Size of EEtimeCorrAmplitudeBins " + "different from EEtimeCorrShiftBins."; + } + + bias_ = new EcalTimeBiasCorrections(); + + copy(EBtimeCorrAmplitudeBins_.begin(), EBtimeCorrAmplitudeBins_.end(), + back_inserter(bias_->EBTimeCorrAmplitudeBins)); + + copy(EBtimeCorrShiftBins_.begin(), EBtimeCorrShiftBins_.end(), + back_inserter(bias_->EBTimeCorrShiftBins)); + + copy(EEtimeCorrAmplitudeBins_.begin(), EEtimeCorrAmplitudeBins_.end(), + back_inserter(bias_->EETimeCorrAmplitudeBins)); + + copy(EEtimeCorrShiftBins_.begin(), EEtimeCorrShiftBins_.end(), + back_inserter(bias_->EETimeCorrShiftBins)); +} + +EcalTimeBiasCorrectionsFillInitial::~EcalTimeBiasCorrectionsFillInitial() {} + +void EcalTimeBiasCorrectionsFillInitial::beginJob( + const edm::EventSetup &iSetup) {} +void EcalTimeBiasCorrectionsFillInitial::analyze( + const edm::Event &iEvent, const edm::EventSetup &iSetup) {} +void EcalTimeBiasCorrectionsFillInitial::endJob() { + edm::Service poolDbService; + if (poolDbService.isAvailable()) { + poolDbService->writeOne(this->bias_, poolDbService->beginOfTime(), + "EcalTimeBiasCorrectionsRcd"); + } +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(EcalTimeBiasCorrectionsFillInitial);