diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h index 980d07d6f885e..1618215f391b8 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h @@ -21,10 +21,9 @@ class SiPixelGainCalibrationForHLTService final : public SiPixelGainCalibrationServicePayloadGetter { public: - explicit SiPixelGainCalibrationForHLTService(const edm::ParameterSet& conf) + explicit SiPixelGainCalibrationForHLTService(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : SiPixelGainCalibrationServicePayloadGetter( - conf){}; - ~SiPixelGainCalibrationForHLTService() override{}; + conf, std::move(iC)){}; void calibrate( uint32_t detID, DigiIterator b, DigiIterator e, float conversionFactor, float offset, int* electron) override; diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTSimService.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTSimService.h index 507de038f358d..f8a67dc0f834d 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTSimService.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTSimService.h @@ -23,10 +23,9 @@ class SiPixelGainCalibrationForHLTSimService : public SiPixelGainCalibrationServicePayloadGetter { public: - explicit SiPixelGainCalibrationForHLTSimService(const edm::ParameterSet& conf) + explicit SiPixelGainCalibrationForHLTSimService(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : SiPixelGainCalibrationServicePayloadGetter( - conf){}; - ~SiPixelGainCalibrationForHLTSimService() override{}; + conf, std::move(iC)){}; // column granularity float getPedestal(const uint32_t& detID, const int& col, const int& row) override; diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h index 0359df6d8b7b5..fca47397bccc2 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h @@ -21,10 +21,9 @@ class SiPixelGainCalibrationOfflineService : public SiPixelGainCalibrationServicePayloadGetter { public: - explicit SiPixelGainCalibrationOfflineService(const edm::ParameterSet& conf) + explicit SiPixelGainCalibrationOfflineService(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : SiPixelGainCalibrationServicePayloadGetter( - conf){}; - ~SiPixelGainCalibrationOfflineService() override{}; + conf, std::move(iC)){}; // pixel granularity float getPedestal(const uint32_t& detID, const int& col, const int& row) override; diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h index 73bdcf55abce3..5566f4dd090d1 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h @@ -23,10 +23,8 @@ class SiPixelGainCalibrationOfflineSimService : public SiPixelGainCalibrationServicePayloadGetter { public: - explicit SiPixelGainCalibrationOfflineSimService(const edm::ParameterSet& conf) - : SiPixelGainCalibrationServicePayloadGetter( - conf){}; - ~SiPixelGainCalibrationOfflineSimService() override{}; + explicit SiPixelGainCalibrationOfflineSimService(const edm::ParameterSet& conf, edm::ConsumesCollector iC) + : SiPixelGainCalibrationServicePayloadGetter(conf, iC){}; // pixel granularity float getPedestal(const uint32_t& detID, const int& col, const int& row) override; diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h index f114319122a27..ba33864201dce 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h @@ -21,9 +21,9 @@ class SiPixelGainCalibrationService : public SiPixelGainCalibrationServicePayloadGetter { public: - explicit SiPixelGainCalibrationService(const edm::ParameterSet& conf) - : SiPixelGainCalibrationServicePayloadGetter(conf){}; - ~SiPixelGainCalibrationService() override{}; + explicit SiPixelGainCalibrationService(const edm::ParameterSet& conf, edm::ConsumesCollector iC) + : SiPixelGainCalibrationServicePayloadGetter(conf, + std::move(iC)){}; // pixel granularity float getPedestal(const uint32_t& detID, const int& col, const int& row) override; diff --git a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h index 803c039907d0b..b2cb324b171b8 100644 --- a/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h +++ b/CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h @@ -19,10 +19,11 @@ // Framework #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/ESGetToken.h" #include "FWCore/Utilities/interface/Exception.h" // Abstract base class provides common interface to different payload getters @@ -57,8 +58,7 @@ class SiPixelGainCalibrationServiceBase { template class SiPixelGainCalibrationServicePayloadGetter : public SiPixelGainCalibrationServiceBase { public: - explicit SiPixelGainCalibrationServicePayloadGetter(const edm::ParameterSet& conf); - ~SiPixelGainCalibrationServicePayloadGetter() override{}; + explicit SiPixelGainCalibrationServicePayloadGetter(const edm::ParameterSet& conf, edm::ConsumesCollector iC); //Abstract methods float getGain(const uint32_t& detID, const int& col, const int& row) override = 0; @@ -94,7 +94,8 @@ class SiPixelGainCalibrationServicePayloadGetter : public SiPixelGainCalibration edm::ParameterSet conf_; bool ESetupInit_; - edm::ESHandle ped; + const edm::ESGetToken pedToken_; + const thePayloadObject* ped = nullptr; int numberOfRowsAveragedOver_; double gainLow_; double gainHigh_; @@ -123,8 +124,8 @@ class SiPixelGainCalibrationServicePayloadGetter : public SiPixelGainCalibration template SiPixelGainCalibrationServicePayloadGetter::SiPixelGainCalibrationServicePayloadGetter( - const edm::ParameterSet& conf) - : conf_(conf), ESetupInit_(false) { + const edm::ParameterSet& conf, edm::ConsumesCollector iC) + : conf_(conf), ESetupInit_(false), pedToken_(iC.esConsumes()) { edm::LogInfo("SiPixelGainCalibrationServicePayloadGetter") << "[SiPixelGainCalibrationServicePayloadGetter::SiPixelGainCalibrationServicePayloadGetter]"; // Initialize cache variables @@ -145,7 +146,7 @@ SiPixelGainCalibrationServicePayloadGetter::S template void SiPixelGainCalibrationServicePayloadGetter::setESObjects( const edm::EventSetup& es) { - es.get().get(ped); + ped = &es.getData(pedToken_); // ped->initialize(); moved to cond infrastructure numberOfRowsAveragedOver_ = ped->getNumberOfRowsToAverageOver(); ESetupInit_ = true; diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc index 9a4519ffd139b..fe4faf22ab232 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainForHLTReader.cc @@ -9,7 +9,7 @@ namespace cms { : conf_(conf), trackerGeomToken_(esConsumes()), trackerGeomTokenBeginRun_(esConsumes()), - SiPixelGainCalibrationForHLTService_(conf), + SiPixelGainCalibrationForHLTService_(conf, consumesCollector()), filename_(conf.getParameter("fileName")) {} void SiPixelFakeGainForHLTReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc index 66ea38075a0f3..3355ee420c123 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainOfflineReader.cc @@ -7,7 +7,7 @@ namespace cms { SiPixelFakeGainOfflineReader::SiPixelFakeGainOfflineReader(const edm::ParameterSet& conf) : conf_(conf), - SiPixelGainCalibrationOfflineService_(conf), + SiPixelGainCalibrationOfflineService_(conf, consumesCollector()), trackerGeomToken_(esConsumes()), trackerGeomTokenBeginRun_(esConsumes()), filename_(conf.getParameter("fileName")) {} diff --git a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc index 7ca86117ea9ed..0b03f4d89f011 100644 --- a/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc +++ b/CalibTracker/SiPixelESProducers/test/SiPixelFakeGainReader.cc @@ -9,7 +9,7 @@ namespace cms { : conf_(conf), trackerGeomToken_(esConsumes()), trackerGeomTokenBeginRun_(esConsumes()), - SiPixelGainCalibrationService_(conf), + SiPixelGainCalibrationService_(conf, consumesCollector()), filename_(conf.getParameter("fileName")) {} void SiPixelFakeGainReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { diff --git a/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.cc b/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.cc index bac3cd986c3ae..1ef74c59bebff 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.cc @@ -3,20 +3,21 @@ #include "CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" namespace cms { - SiPixelCondObjAllPayloadsReader::SiPixelCondObjAllPayloadsReader(const edm::ParameterSet& conf) : conf_(conf) { + SiPixelCondObjAllPayloadsReader::SiPixelCondObjAllPayloadsReader(const edm::ParameterSet& conf) + : conf_(conf), tkGeomToken_(esConsumes()) { std::string payloadType = conf.getParameter("payloadType"); if (strcmp(payloadType.c_str(), "HLT") == 0) { - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationForHLTService(conf); + SiPixelGainCalibrationService_ = std::make_unique(conf, consumesCollector()); } else if (strcmp(payloadType.c_str(), "Offline") == 0) { - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationOfflineService(conf); + SiPixelGainCalibrationService_ = + std::make_unique(conf, consumesCollector()); } else if (strcmp(payloadType.c_str(), "Full") == 0) { - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationService(conf); + SiPixelGainCalibrationService_ = std::make_unique(conf, consumesCollector()); } } @@ -36,7 +37,7 @@ namespace cms { << "[SiPixelCondObjAllPayloadsReader::beginJob] End Reading CondObjects" << std::endl; // Get the Geometry - iSetup.get().get(tkgeom); + const TrackerGeometry* tkgeom = &iSetup.getData(tkGeomToken_); edm::LogInfo("SiPixelCondObjAllPayloadsReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; @@ -110,9 +111,6 @@ namespace cms { << "[SiPixelCondObjAllPayloadsReader::analyze] ---> PIXEL Channels " << nchannels << std::endl; } - // ------------ method called once each job just before starting event loop ------------ - void SiPixelCondObjAllPayloadsReader::beginJob() {} - // ------------ method called once each job just after ending the event loop ------------ void SiPixelCondObjAllPayloadsReader::endJob() { std::cout << " ---> End job " << std::endl; } } // namespace cms diff --git a/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.h b/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.h index d2663a29ce347..5f75c77ae7a6a 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.h +++ b/CondTools/SiPixel/test/SiPixelCondObjAllPayloadsReader.h @@ -22,11 +22,11 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibration.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h" @@ -45,16 +45,14 @@ namespace cms { public: explicit SiPixelCondObjAllPayloadsReader(const edm::ParameterSet& iConfig); - ~SiPixelCondObjAllPayloadsReader(){}; - virtual void beginJob(); virtual void analyze(const edm::Event&, const edm::EventSetup&); virtual void endJob(); private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; + const edm::ESGetToken tkGeomToken_; //edm::ESHandle SiPixelGainCalibration_; - SiPixelGainCalibrationServiceBase* SiPixelGainCalibrationService_; + std::unique_ptr SiPixelGainCalibrationService_; std::map _TH1F_Pedestals_m; std::map _TH1F_Gains_m; diff --git a/CondTools/SiPixel/test/SiPixelCondObjBuilder.cc b/CondTools/SiPixel/test/SiPixelCondObjBuilder.cc index 2095cfca887f2..fba4b968be672 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjBuilder.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjBuilder.cc @@ -5,9 +5,7 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" @@ -17,8 +15,9 @@ namespace cms { SiPixelCondObjBuilder::SiPixelCondObjBuilder(const edm::ParameterSet& iConfig) : conf_(iConfig), appendMode_(conf_.getUntrackedParameter("appendMode", true)), + pddToken_(esConsumes()), SiPixelGainCalibration_(nullptr), - SiPixelGainCalibrationService_(iConfig), + SiPixelGainCalibrationService_(iConfig, consumesCollector()), recordName_(iConfig.getParameter("record")), meanPed_(conf_.getParameter("meanPed")), rmsPed_(conf_.getParameter("rmsPed")), @@ -52,8 +51,7 @@ namespace cms { float maxped = 255; SiPixelGainCalibration_ = new SiPixelGainCalibration(minped, maxped, mingain, maxgain); - edm::ESHandle pDD; - iSetup.get().get(pDD); + const TrackerGeometry* pDD = &iSetup.getData(pddToken_); edm::LogInfo("SiPixelCondObjBuilder") << " There are " << pDD->dets().size() << " detectors" << std::endl; for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) { diff --git a/CondTools/SiPixel/test/SiPixelCondObjBuilder.h b/CondTools/SiPixel/test/SiPixelCondObjBuilder.h index 6b9f9a0773927..690e39a8bc7cc 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjBuilder.h +++ b/CondTools/SiPixel/test/SiPixelCondObjBuilder.h @@ -22,11 +22,12 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" //#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibration.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h" #include "CondFormats/SiPixelObjects/interface/PixelIndices.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include namespace cms { @@ -43,6 +44,7 @@ namespace cms { private: edm::ParameterSet conf_; bool appendMode_; + edm::ESGetToken pddToken_; SiPixelGainCalibration* SiPixelGainCalibration_; SiPixelGainCalibrationService SiPixelGainCalibrationService_; std::string recordName_; diff --git a/CondTools/SiPixel/test/SiPixelCondObjForHLTBuilder.cc b/CondTools/SiPixel/test/SiPixelCondObjForHLTBuilder.cc index d362adbaa6d64..93c8e06141f3d 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjForHLTBuilder.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjForHLTBuilder.cc @@ -21,7 +21,7 @@ namespace cms { : conf_(iConfig), appendMode_(conf_.getUntrackedParameter("appendMode", true)), SiPixelGainCalibration_(nullptr), - SiPixelGainCalibrationService_(iConfig), + SiPixelGainCalibrationService_(iConfig, consumesCollector()), recordName_(iConfig.getParameter("record")), meanPed_(conf_.getParameter("meanPed")), rmsPed_(conf_.getParameter("rmsPed")), diff --git a/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.cc b/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.cc index b96f0c6e9d082..fc59dd1ca04e2 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.cc @@ -3,7 +3,6 @@ #include "CondTools/SiPixel/test/SiPixelCondObjForHLTReader.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" @@ -12,11 +11,14 @@ #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTSimService.h" namespace cms { - SiPixelCondObjForHLTReader::SiPixelCondObjForHLTReader(const edm::ParameterSet& conf) : conf_(conf) { + SiPixelCondObjForHLTReader::SiPixelCondObjForHLTReader(const edm::ParameterSet& conf) + : conf_(conf), tkGeomToken_(esConsumes()) { if (conf_.getParameter("useSimRcd")) - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationForHLTSimService(conf_); + SiPixelGainCalibrationService_ = + std::make_unique(conf_, consumesCollector()); else - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationForHLTService(conf_); + SiPixelGainCalibrationService_ = + std::make_unique(conf_, consumesCollector()); } void SiPixelCondObjForHLTReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { @@ -37,7 +39,7 @@ namespace cms { << "[SiPixelCondObjForHLTReader::beginJob] End Reading CondObjForHLTects" << std::endl; // Get the Geometry - iSetup.get().get(tkgeom); + const TrackerGeometry* tkgeom = &iSetup.getData(tkGeomToken_); edm::LogInfo("SiPixelCondObjForHLTReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; // Get the list of DetId's @@ -195,9 +197,6 @@ namespace cms { << _TH1F_Pedestals_fpix->GetRMS() << std::endl; } - // ------------ method called once each job just before starting event loop ------------ - void SiPixelCondObjForHLTReader::beginJob() {} - // ------------ method called once each job just after ending the event loop ------------ void SiPixelCondObjForHLTReader::endJob() { std::cout << " ---> End job " << std::endl; } } // namespace cms diff --git a/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.h b/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.h index 3f1b3f6d7dca4..ca20a0e3288e7 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.h +++ b/CondTools/SiPixel/test/SiPixelCondObjForHLTReader.h @@ -22,11 +22,11 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#include "CondFormats/SiPixelObjForHLTects/interface/SiPixelGainCalibration.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h" #include "TROOT.h" @@ -40,16 +40,14 @@ namespace cms { public: explicit SiPixelCondObjForHLTReader(const edm::ParameterSet &iConfig); - ~SiPixelCondObjForHLTReader(){}; - virtual void beginJob(); virtual void analyze(const edm::Event &, const edm::EventSetup &); virtual void endJob(); private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; //edm::ESHandle SiPixelGainCalibration_; - SiPixelGainCalibrationServiceBase *SiPixelGainCalibrationService_; + const edm::ESGetToken tkGeomToken_; + std::unique_ptr SiPixelGainCalibrationService_; std::map _TH1F_Pedestals_m; std::map _TH1F_Gains_m; diff --git a/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.cc b/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.cc index f7205cc62a30b..45eae5bdd9d7f 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.cc @@ -5,9 +5,7 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" #include "DataFormats/DetId/interface/DetId.h" @@ -20,8 +18,9 @@ namespace cms { SiPixelCondObjOfflineBuilder::SiPixelCondObjOfflineBuilder(const edm::ParameterSet& iConfig) : conf_(iConfig), appendMode_(conf_.getUntrackedParameter("appendMode", true)), + pddToken_(esConsumes()), SiPixelGainCalibration_(nullptr), - SiPixelGainCalibrationService_(iConfig), + SiPixelGainCalibrationService_(iConfig, consumesCollector()), recordName_(iConfig.getParameter("record")), meanPed_(conf_.getParameter("meanPed")), rmsPed_(conf_.getParameter("rmsPed")), @@ -64,8 +63,7 @@ namespace cms { float maxgain = 10.; SiPixelGainCalibration_ = new SiPixelGainCalibrationOffline(minped, maxped, mingain, maxgain); - edm::ESHandle pDD; - iSetup.get().get(pDD); + const TrackerGeometry* pDD = &iSetup.getData(pddToken_); edm::LogInfo("SiPixelCondObjOfflineBuilder") << " There are " << pDD->dets().size() << " detectors" << std::endl; for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) { @@ -260,9 +258,6 @@ namespace cms { } } - // ------------ method called once each job just after ending the event loop ------------ - void SiPixelCondObjOfflineBuilder::endJob() {} - bool SiPixelCondObjOfflineBuilder::loadFromFile() { float par0, par1; //,par2,par3; int colid, rowid; //rocid diff --git a/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.h b/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.h index defb0f0cc909d..07a5130ce107c 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.h +++ b/CondTools/SiPixel/test/SiPixelCondObjOfflineBuilder.h @@ -22,11 +22,12 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" //#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibration.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h" #include "CondFormats/SiPixelObjects/interface/PixelIndices.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include namespace cms { @@ -34,15 +35,14 @@ namespace cms { public: explicit SiPixelCondObjOfflineBuilder(const edm::ParameterSet& iConfig); - ~SiPixelCondObjOfflineBuilder(){}; virtual void beginJob(); virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob(); bool loadFromFile(); private: edm::ParameterSet conf_; bool appendMode_; + edm::ESGetToken pddToken_; SiPixelGainCalibrationOffline* SiPixelGainCalibration_; SiPixelGainCalibrationOfflineService SiPixelGainCalibrationService_; std::string recordName_; diff --git a/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.cc b/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.cc index 1c3249762ace3..d151e8e25524a 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.cc @@ -5,18 +5,20 @@ #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" namespace cms { - SiPixelCondObjOfflineReader::SiPixelCondObjOfflineReader(const edm::ParameterSet& conf) : conf_(conf) { + SiPixelCondObjOfflineReader::SiPixelCondObjOfflineReader(const edm::ParameterSet& conf) + : conf_(conf), tkGeomToken_(esConsumes()) { if (conf_.getParameter("useSimRcd")) - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationOfflineSimService(conf_); + SiPixelGainCalibrationService_ = + std::make_unique(conf_, consumesCollector()); else - SiPixelGainCalibrationService_ = new SiPixelGainCalibrationOfflineService(conf_); + SiPixelGainCalibrationService_ = + std::make_unique(conf_, consumesCollector()); } void SiPixelCondObjOfflineReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { @@ -37,7 +39,7 @@ namespace cms { << "[SiPixelCondObjOfflineReader::beginJob] End Reading CondObjOfflineects" << std::endl; // Get the Geometry - iSetup.get().get(tkgeom); + const TrackerGeometry* tkgeom = &iSetup.getData(tkGeomToken_); edm::LogInfo("SiPixelCondObjOfflineReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; // Get the list of DetId's @@ -199,9 +201,6 @@ namespace cms { << _TH1F_Pedestals_fpix->GetRMS() << std::endl; } - // ------------ method called once each job just before starting event loop ------------ - void SiPixelCondObjOfflineReader::beginJob() {} - // ------------ method called once each job just after ending the event loop ------------ void SiPixelCondObjOfflineReader::endJob() { std::cout << " ---> End job " << std::endl; } } // namespace cms diff --git a/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.h b/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.h index 39f28547f0a10..ccd6d89e13ee0 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.h +++ b/CondTools/SiPixel/test/SiPixelCondObjOfflineReader.h @@ -22,11 +22,11 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#include "CondFormats/SiPixelObjOfflineects/interface/SiPixelGainCalibration.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h" #include "TROOT.h" @@ -40,17 +40,15 @@ namespace cms { public: explicit SiPixelCondObjOfflineReader(const edm::ParameterSet &iConfig); - ~SiPixelCondObjOfflineReader(){}; - virtual void beginJob(); virtual void analyze(const edm::Event &, const edm::EventSetup &); virtual void endJob(); private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; + edm::ESGetToken tkGeomToken_; std::string recordName_; //edm::ESHandle SiPixelGainCalibration_; - SiPixelGainCalibrationServiceBase *SiPixelGainCalibrationService_; + std::unique_ptr SiPixelGainCalibrationService_; std::map _TH1F_Pedestals_m; std::map _TH1F_Gains_m; diff --git a/CondTools/SiPixel/test/SiPixelCondObjReader.cc b/CondTools/SiPixel/test/SiPixelCondObjReader.cc index 2859ed75fe4bc..38180d640b805 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjReader.cc +++ b/CondTools/SiPixel/test/SiPixelCondObjReader.cc @@ -3,7 +3,6 @@ #include "CondTools/SiPixel/test/SiPixelCondObjReader.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" @@ -11,7 +10,7 @@ namespace cms { SiPixelCondObjReader::SiPixelCondObjReader(const edm::ParameterSet& conf) - : conf_(conf), SiPixelGainCalibrationService_(conf) {} + : conf_(conf), tkGeomToken_(esConsumes()), SiPixelGainCalibrationService_(conf, consumesCollector()) {} void SiPixelCondObjReader::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { //Create Subdirectories @@ -30,7 +29,7 @@ namespace cms { edm::LogInfo("SiPixelCondObjReader") << "[SiPixelCondObjReader::beginJob] End Reading CondObjects" << std::endl; // Get the Geometry - iSetup.get().get(tkgeom); + const TrackerGeometry* tkgeom = &iSetup.getData(tkGeomToken_); edm::LogInfo("SiPixelCondObjReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl; // Get the list of DetId's diff --git a/CondTools/SiPixel/test/SiPixelCondObjReader.h b/CondTools/SiPixel/test/SiPixelCondObjReader.h index 7b86b908bad28..789940404a4b5 100644 --- a/CondTools/SiPixel/test/SiPixelCondObjReader.h +++ b/CondTools/SiPixel/test/SiPixelCondObjReader.h @@ -22,11 +22,11 @@ #include "FWCore/Framework/interface/EDAnalyzer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" //#include "CondFormats/SiPixelObjects/interface/SiPixelGainCalibration.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationService.h" #include "TROOT.h" @@ -47,7 +47,7 @@ namespace cms { private: edm::ParameterSet conf_; - edm::ESHandle tkgeom; + edm::ESGetToken tkGeomToken_; //edm::ESHandle SiPixelGainCalibration_; SiPixelGainCalibrationService SiPixelGainCalibrationService_; diff --git a/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.cc b/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.cc index 60b80134062e4..26868a87de495 100644 --- a/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.cc +++ b/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.cc @@ -142,8 +142,7 @@ void SiPixelGainCalibrationReadDQMFile::fillDatabase(const edm::EventSetup &iSet << std::endl; uint32_t detid = 0; therootfile->cd(); - edm::ESHandle pDD; - iSetup.get().get(pDD); + const TrackerGeometry *pDD = &iSetup.getData(pddToken_); edm::LogInfo("SiPixelCondObjOfflineBuilder") << " There are " << pDD->dets().size() << " detectors" << std::endl; int NDetid = 0; @@ -486,7 +485,8 @@ void SiPixelGainCalibrationReadDQMFile::fillDatabase(const edm::EventSetup &iSet SiPixelGainCalibrationReadDQMFile::SiPixelGainCalibrationReadDQMFile(const edm::ParameterSet &iConfig) : appendMode_(iConfig.getUntrackedParameter("appendMode", true)), - theGainCalibrationDbInputService_(iConfig), + pddToken_(esConsumes()), + theGainCalibrationDbInputService_(iConfig, consumesCollector()), record_(iConfig.getUntrackedParameter("record", "SiPixelGainCalibrationOfflineRcd")), gainlow_(10.), gainhi_(0.), diff --git a/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.h b/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.h index b84a1cf0c1696..b1be8954326ab 100644 --- a/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.h +++ b/CondTools/SiPixel/test/SiPixelGainCalibrationReadDQMFile.h @@ -62,6 +62,7 @@ class SiPixelGainCalibrationReadDQMFile : public edm::one::EDAnalyzer > > noisyPixelsKeeper_; bool appendMode_; + edm::ESGetToken pddToken_; SiPixelGainCalibrationService theGainCalibrationDbInputService_; std::unique_ptr defaultGain_; std::unique_ptr defaultPed_; diff --git a/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.cc b/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.cc index 13d97de04440b..84dc098506f06 100644 --- a/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.cc +++ b/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.cc @@ -21,9 +21,7 @@ #include "SiPixelGainCalibrationRejectNoisyAndDead.h" -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" // @@ -58,8 +56,7 @@ void SiPixelGainCalibrationRejectNoisyAndDead::fillDatabase(const edm::EventSetu SiPixelGainCalibrationForHLTService_.setESObjects(iSetup); //Get list of ideal detids - edm::ESHandle pDD; - iSetup.get().get(pDD); + const TrackerGeometry* pDD = &iSetup.getData(pddToken_); edm::LogInfo("SiPixelCondObjOfflineBuilder") << " There are " << pDD->dets().size() << " detectors" << std::endl; if (record_ == "SiPixelGainCalibrationOfflineRcd") { @@ -434,8 +431,9 @@ void SiPixelGainCalibrationRejectNoisyAndDead::getDeadPixels() {} SiPixelGainCalibrationRejectNoisyAndDead::SiPixelGainCalibrationRejectNoisyAndDead(const edm::ParameterSet& iConfig) : conf_(iConfig), - SiPixelGainCalibrationOfflineService_(iConfig), - SiPixelGainCalibrationForHLTService_(iConfig), + pddToken_(esConsumes()), + SiPixelGainCalibrationOfflineService_(iConfig, consumesCollector()), + SiPixelGainCalibrationForHLTService_(iConfig, consumesCollector()), noisypixellist_(iConfig.getUntrackedParameter("noisyPixelList", "noisypixel.txt")), insertnoisypixelsindb_(iConfig.getUntrackedParameter("insertNoisyPixelsInDB", 1)), record_(iConfig.getUntrackedParameter("record", "SiPixelGainCalibrationOfflineRcd")), @@ -452,10 +450,4 @@ void SiPixelGainCalibrationRejectNoisyAndDead::analyze(const edm::Event& iEvent, fillDatabase(iSetup); } -// ------------ method called once each job just before starting event loop ------------ -void SiPixelGainCalibrationRejectNoisyAndDead::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void SiPixelGainCalibrationRejectNoisyAndDead::endJob() {} - //define this as a plug-in diff --git a/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.h b/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.h index 49dd9231fac9b..789befdfddb0c 100644 --- a/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.h +++ b/CondTools/SiPixel/test/SiPixelGainCalibrationRejectNoisyAndDead.h @@ -23,6 +23,8 @@ #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineService.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "TH2F.h" #include "TFile.h" @@ -38,6 +40,7 @@ class SiPixelGainCalibrationRejectNoisyAndDead : public edm::EDAnalyzer { private: edm::ParameterSet conf_; + edm::ESGetToken pddToken_; SiPixelGainCalibrationOfflineService SiPixelGainCalibrationOfflineService_; //SiPixelGainCalibrationForHLTService SiPixelGainCalibrationService_; SiPixelGainCalibrationOffline *theGainCalibrationDbInputOffline_; @@ -45,9 +48,7 @@ class SiPixelGainCalibrationRejectNoisyAndDead : public edm::EDAnalyzer { SiPixelGainCalibrationForHLTService SiPixelGainCalibrationForHLTService_; SiPixelGainCalibrationForHLT *theGainCalibrationDbInputForHLT_; - virtual void beginJob(); virtual void analyze(const edm::Event &, const edm::EventSetup &); - virtual void endJob(); std::map > > noisypixelkeeper; std::map > > insertednoisypixel; diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc index 3c0f8b9754089..fbe5007b93c89 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelClusterProducer.cc @@ -59,11 +59,11 @@ SiPixelClusterProducer::SiPixelClusterProducer(edm::ParameterSet const& conf) const auto& payloadType = conf.getParameter("payloadType"); if (payloadType == "HLT") - theSiPixelGainCalibration_ = std::make_unique(conf); + theSiPixelGainCalibration_ = std::make_unique(conf, consumesCollector()); else if (payloadType == "Offline") - theSiPixelGainCalibration_ = std::make_unique(conf); + theSiPixelGainCalibration_ = std::make_unique(conf, consumesCollector()); else if (payloadType == "Full") - theSiPixelGainCalibration_ = std::make_unique(conf); + theSiPixelGainCalibration_ = std::make_unique(conf, consumesCollector()); //--- Make the algorithm(s) according to what the user specified //--- in the ParameterSet. diff --git a/RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h b/RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h index 343796713db79..2f797e96e6d5a 100644 --- a/RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h +++ b/RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h @@ -28,8 +28,8 @@ class SiStripFedZeroSuppression { void suppress(const std::vector& in, std::vector& selectedSignal, uint32_t detId, - edm::ESHandle&, - edm::ESHandle&); + const SiStripNoises&, + const SiStripThreshold&); void suppress(const std::vector& in, std::vector& selectedSignal, uint32_t detId); void suppress(const edm::DetSet& in, edm::DetSet& out); void suppress(const std::vector& in, uint16_t firstAPV, edm::DetSet& out); diff --git a/RecoLocalTracker/SiStripZeroSuppression/src/SiStripFedZeroSuppression.cc b/RecoLocalTracker/SiStripZeroSuppression/src/SiStripFedZeroSuppression.cc index 48621551952f6..4ace9de7efe9a 100644 --- a/RecoLocalTracker/SiStripZeroSuppression/src/SiStripFedZeroSuppression.cc +++ b/RecoLocalTracker/SiStripZeroSuppression/src/SiStripFedZeroSuppression.cc @@ -26,18 +26,18 @@ void SiStripFedZeroSuppression::init(const edm::EventSetup& es) { void SiStripFedZeroSuppression::suppress(const std::vector& in, std::vector& selectedSignal, uint32_t detID) { - suppress(in, selectedSignal, detID, noiseHandle, thresholdHandle); + suppress(in, selectedSignal, detID, *noiseHandle, *thresholdHandle); } void SiStripFedZeroSuppression::suppress(const std::vector& in, std::vector& selectedSignal, uint32_t detID, - edm::ESHandle& noiseHandle, - edm::ESHandle& thresholdHandle) { + const SiStripNoises& noise, + const SiStripThreshold& threshold) { int i; int inSize = in.size(); - SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID); - SiStripThreshold::Range detThRange = thresholdHandle->getRange(detID); + SiStripNoises::Range detNoiseRange = noise.getRange(detID); + SiStripThreshold::Range detThRange = threshold.getRange(detID); // reserving more than needed, but quicker than one at a time selectedSignal.clear(); @@ -48,10 +48,9 @@ void SiStripFedZeroSuppression::suppress(const std::vector& in, adc = in[i].adc(); - SiStripThreshold::Data thresholds = thresholdHandle->getData(strip, detThRange); - theFEDlowThresh = static_cast(thresholds.getLth() * noiseHandle->getNoiseFast(strip, detNoiseRange) + 0.5); - theFEDhighThresh = - static_cast(thresholds.getHth() * noiseHandle->getNoiseFast(strip, detNoiseRange) + 0.5); + SiStripThreshold::Data thresholds = threshold.getData(strip, detThRange); + theFEDlowThresh = static_cast(thresholds.getLth() * noise.getNoiseFast(strip, detNoiseRange) + 0.5); + theFEDhighThresh = static_cast(thresholds.getHth() * noise.getNoiseFast(strip, detNoiseRange) + 0.5); adcPrev = -9999; adcNext = -9999; @@ -80,19 +79,18 @@ void SiStripFedZeroSuppression::suppress(const std::vector& in, theNextFEDhighThresh = 9999; } else if (i + 1 < inSize && in[i + 1].strip() == strip + 1) { adcNext = in[i + 1].adc(); - SiStripThreshold::Data thresholds_1 = thresholdHandle->getData(strip + 1, detThRange); + SiStripThreshold::Data thresholds_1 = threshold.getData(strip + 1, detThRange); theNextFEDlowThresh = - static_cast(thresholds_1.getLth() * noiseHandle->getNoiseFast(strip + 1, detNoiseRange) + 0.5); + static_cast(thresholds_1.getLth() * noise.getNoiseFast(strip + 1, detNoiseRange) + 0.5); theNextFEDhighThresh = - static_cast(thresholds_1.getHth() * noiseHandle->getNoiseFast(strip + 1, detNoiseRange) + 0.5); + static_cast(thresholds_1.getHth() * noise.getNoiseFast(strip + 1, detNoiseRange) + 0.5); if (((strip) % 128) == 126) { adcNext2 = 0; theNext2FEDlowThresh = 9999; } else if (i + 2 < inSize && in[i + 2].strip() == strip + 2) { adcNext2 = in[i + 2].adc(); - theNext2FEDlowThresh = static_cast(thresholdHandle->getData(strip + 2, detThRange).getLth() * - noiseHandle->getNoiseFast(strip + 2, detNoiseRange) + - 0.5); + theNext2FEDlowThresh = static_cast( + threshold.getData(strip + 2, detThRange).getLth() * noise.getNoiseFast(strip + 2, detNoiseRange) + 0.5); } } @@ -102,19 +100,18 @@ void SiStripFedZeroSuppression::suppress(const std::vector& in, thePrevFEDhighThresh = 9999; } else if (i - 1 >= 0 && in[i - 1].strip() == strip - 1) { adcPrev = in[i - 1].adc(); - SiStripThreshold::Data thresholds_1 = thresholdHandle->getData(strip - 1, detThRange); + SiStripThreshold::Data thresholds_1 = threshold.getData(strip - 1, detThRange); thePrevFEDlowThresh = - static_cast(thresholds_1.getLth() * noiseHandle->getNoiseFast(strip - 1, detNoiseRange) + 0.5); + static_cast(thresholds_1.getLth() * noise.getNoiseFast(strip - 1, detNoiseRange) + 0.5); thePrevFEDhighThresh = - static_cast(thresholds_1.getHth() * noiseHandle->getNoiseFast(strip - 1, detNoiseRange) + 0.5); + static_cast(thresholds_1.getHth() * noise.getNoiseFast(strip - 1, detNoiseRange) + 0.5); if (((strip) % 128) == 1) { adcPrev2 = 0; thePrev2FEDlowThresh = 9999; } else if (i - 2 >= 0 && in[i - 2].strip() == strip - 2) { adcPrev2 = in[i - 2].adc(); - thePrev2FEDlowThresh = static_cast(thresholdHandle->getData(strip - 2, detThRange).getLth() * - noiseHandle->getNoiseFast(strip - 2, detNoiseRange) + - 0.5); + thePrev2FEDlowThresh = static_cast( + threshold.getData(strip - 2, detThRange).getLth() * noise.getNoiseFast(strip - 2, detNoiseRange) + 0.5); } } diff --git a/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.cc b/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.cc index 4545cb03149f2..7979f2e5475a4 100644 --- a/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.cc +++ b/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.cc @@ -5,13 +5,11 @@ #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/RandomNumberGenerator.h" #include "FWCore/Utilities/interface/StreamID.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloShapeIntegrator.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloTDigitizer.h" #include "SimCalorimetry/CastorSim/plugins/CastorDigiProducer.h" @@ -22,7 +20,9 @@ CastorDigiProducer::CastorDigiProducer(const edm::ParameterSet &ps, edm::ProducesCollector producesCollector, edm::ConsumesCollector &iC) - : theParameterMap(new CastorSimParameterMap(ps)), + : theConditionsToken(iC.esConsumes()), + theGeometryToken(iC.esConsumes()), + theParameterMap(new CastorSimParameterMap(ps)), theCastorShape(new CastorShape()), theCastorIntegratedShape(new CaloShapeIntegrator(theCastorShape)), theCastorResponse(new CaloHitResponse(theParameterMap, theCastorIntegratedShape)), @@ -75,11 +75,10 @@ CastorDigiProducer::~CastorDigiProducer() { void CastorDigiProducer::initializeEvent(edm::Event const &event, edm::EventSetup const &eventSetup) { // get the appropriate gains, noises, & widths for this event - edm::ESHandle conditions; - eventSetup.get().get(conditions); - theAmplifier->setDbService(conditions.product()); - theCoderFactory->setDbService(conditions.product()); - theParameterMap->setDbService(conditions.product()); + const CastorDbService *conditions = &eventSetup.getData(theConditionsToken); + theAmplifier->setDbService(conditions); + theCoderFactory->setDbService(conditions); + theParameterMap->setDbService(conditions); // Cache random number engine edm::Service rng; @@ -156,14 +155,14 @@ void CastorDigiProducer::fillFakeHits() { } void CastorDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) { - // TODO find a way to avoid doing this every event - edm::ESHandle geometry; - eventSetup.get().get(geometry); - theCastorResponse->setGeometry(&*geometry); + if (theGeometryWatcher.check(eventSetup)) { + const CaloGeometry *geometry = &eventSetup.getData(theGeometryToken); + theCastorResponse->setGeometry(geometry); - const std::vector &castorCells = geometry->getValidDetIds(DetId::Calo, HcalCastorDetId::SubdetectorId); + const std::vector &castorCells = geometry->getValidDetIds(DetId::Calo, HcalCastorDetId::SubdetectorId); - // std::cout<<"CastorDigiProducer::CheckGeometry number of cells: - // "<setDetIds(castorCells); + // std::cout<<"CastorDigiProducer::CheckGeometry number of cells: + // "<setDetIds(castorCells); + } } diff --git a/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.h b/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.h index 9146a3b155971..6b7e61412b315 100644 --- a/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.h +++ b/SimCalorimetry/CastorSim/plugins/CastorDigiProducer.h @@ -1,10 +1,14 @@ #ifndef CastorDigiProducer_h #define CastorDigiProducer_h +#include "CalibFormats/CastorObjects/interface/CastorDbRecord.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESWatcher.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloHitResponse.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloTDigitizer.h" #include "SimCalorimetry/CastorSim/src/CastorAmplifier.h" @@ -20,11 +24,6 @@ #include -namespace edm { - class StreamID; - class ConsumesCollector; -} // namespace edm - namespace CLHEP { class HepRandomEngine; } @@ -54,6 +53,9 @@ class CastorDigiProducer : public DigiAccumulatorMixMod { void checkGeometry(const edm::EventSetup &eventSetup); edm::InputTag theHitsProducerTag; + const edm::ESGetToken theConditionsToken; + const edm::ESGetToken theGeometryToken; + edm::ESWatcher theGeometryWatcher; /** Reconstruction algorithm*/ typedef CaloTDigitizer CastorDigitizer; diff --git a/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h b/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h index e54f8332d7570..a22511ae9f8ec 100644 --- a/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h +++ b/SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h @@ -1,9 +1,29 @@ #ifndef SimCalorimetry_EcalSimProducers_EcalDigiProducer_h #define SimCalorimetry_EcalSimProducers_EcalDigiProducer_h +#include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbRecord.h" +#include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbService.h" +#include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" +#include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h" +#include "CondFormats/DataRecord/interface/EcalIntercalibConstantsMCRcd.h" +#include "CondFormats/DataRecord/interface/ESGainRcd.h" +#include "CondFormats/DataRecord/interface/ESIntercalibConstantsRcd.h" +#include "CondFormats/DataRecord/interface/ESMIPToGeVConstantRcd.h" +#include "CondFormats/DataRecord/interface/ESPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h" +#include "CondFormats/EcalObjects/interface/EcalGainRatios.h" +#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsMC.h" +#include "CondFormats/EcalObjects/interface/EcalPedestals.h" +#include "CondFormats/ESObjects/interface/ESGain.h" +#include "CondFormats/ESObjects/interface/ESIntercalibConstants.h" +#include "CondFormats/ESObjects/interface/ESMIPToGeVConstant.h" +#include "CondFormats/ESObjects/interface/ESPedestals.h" #include "DataFormats/Math/interface/Error.h" #include "CalibFormats/CaloObjects/interface/CaloTSamples.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/ProducesCollector.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/EcalSimAlgos/interface/APDShape.h" #include "SimCalorimetry/EcalSimAlgos/interface/EBShape.h" #include "SimCalorimetry/EcalSimAlgos/interface/EEShape.h" @@ -99,6 +119,18 @@ class EcalDigiProducer : public DigiAccumulatorMixMod { const std::string m_ESdigiCollection; const std::string m_hitsProducerTag; + const edm::ESGetToken m_pedestalsToken; + const edm::ESGetToken m_icalToken; + const edm::ESGetToken m_laserToken; + const edm::ESGetToken m_agcToken; + const edm::ESGetToken m_grToken; + const edm::ESGetToken m_geometryToken; + edm::ESGetToken m_esGainToken; + edm::ESGetToken m_esMIPToGeVToken; + edm::ESGetToken m_esPedestalsToken; + edm::ESGetToken m_esMIPsToken; + edm::ESWatcher m_geometryWatcher; + bool m_useLCcorrection; const bool m_apdSeparateDigi; diff --git a/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h b/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h index 5bd90ff357fed..dd4b85bc31c93 100644 --- a/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h +++ b/SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h @@ -5,8 +5,11 @@ #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" #include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/ESWatcher.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "FWCore/Utilities/interface/EDGetToken.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h" #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" @@ -21,11 +24,8 @@ class PileUpEventPrincipal; class EcalTimeMapDigitizer; namespace edm { - class Event; - class EventSetup; template class Handle; - class ParameterSet; } // namespace edm class EcalTimeDigiProducer : public DigiAccumulatorMixMod { @@ -49,6 +49,8 @@ class EcalTimeDigiProducer : public DigiAccumulatorMixMod { const std::string m_EBdigiCollection; const edm::InputTag m_hitsProducerTagEB; const edm::EDGetTokenT> m_hitsProducerTokenEB; + const edm::ESGetToken m_geometryToken; + edm::ESWatcher m_geometryWatcher; private: int m_timeLayerEB; diff --git a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc index ceb79769f5ebd..57503f598b591 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalDigiProducer.cc @@ -14,20 +14,9 @@ #include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h" #include "SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h" //#include "SimCalorimetry/EcalSimAlgos/interface/ESFastTDigitizer.h" -#include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbRecord.h" -#include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbService.h" #include "CalibFormats/CaloObjects/interface/CaloSamples.h" -#include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h" -#include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h" -#include "CondFormats/DataRecord/interface/EcalIntercalibConstantsMCRcd.h" -#include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h" -#include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h" -#include "CondFormats/EcalObjects/interface/EcalGainRatios.h" -#include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsMC.h" -#include "CondFormats/EcalObjects/interface/EcalPedestals.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/LuminosityBlock.h" @@ -39,19 +28,10 @@ #include "FWCore/Utilities/interface/StreamID.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/EcalSimAlgos/interface/ESDigitizer.h" #include "SimDataFormats/CaloHit/interface/PCaloHit.h" #include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" -#include "CondFormats/DataRecord/interface/ESGainRcd.h" -#include "CondFormats/DataRecord/interface/ESIntercalibConstantsRcd.h" -#include "CondFormats/DataRecord/interface/ESMIPToGeVConstantRcd.h" -#include "CondFormats/DataRecord/interface/ESPedestalsRcd.h" -#include "CondFormats/ESObjects/interface/ESGain.h" -#include "CondFormats/ESObjects/interface/ESIntercalibConstants.h" -#include "CondFormats/ESObjects/interface/ESMIPToGeVConstant.h" -#include "CondFormats/ESObjects/interface/ESPedestals.h" #include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h" EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, @@ -77,6 +57,12 @@ EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, edm::Consume m_EEdigiCollection(params.getParameter("EEdigiCollection")), m_ESdigiCollection(params.getParameter("ESdigiCollection")), m_hitsProducerTag(params.getParameter("hitsProducer")), + m_pedestalsToken(iC.esConsumes()), + m_icalToken(iC.esConsumes()), + m_laserToken(iC.esConsumes()), + m_agcToken(iC.esConsumes()), + m_grToken(iC.esConsumes()), + m_geometryToken(iC.esConsumes()), m_useLCcorrection(params.getUntrackedParameter("UseLCcorrection")), m_apdSeparateDigi(params.getParameter("apdSeparateDigi")), @@ -160,8 +146,13 @@ EcalDigiProducer::EcalDigiProducer(const edm::ParameterSet ¶ms, edm::Consume iC.consumes>(edm::InputTag(m_hitsProducerTag, "EcalHitsEB")); if (m_doEE) iC.consumes>(edm::InputTag(m_hitsProducerTag, "EcalHitsEE")); - if (m_doES) + if (m_doES) { iC.consumes>(edm::InputTag(m_hitsProducerTag, "EcalHitsES")); + m_esGainToken = iC.esConsumes(); + m_esMIPToGeVToken = iC.esConsumes(); + m_esPedestalsToken = iC.esConsumes(); + m_esMIPsToken = iC.esConsumes(); + } const std::vector ebCorMatG12 = params.getParameter>("EBCorrNoiseMatrixG12"); const std::vector eeCorMatG12 = params.getParameter>("EECorrNoiseMatrixG12"); @@ -436,18 +427,14 @@ void EcalDigiProducer::beginLuminosityBlock(edm::LuminosityBlock const &lumi, ed void EcalDigiProducer::checkCalibrations(const edm::Event &event, const edm::EventSetup &eventSetup) { // Pedestals from event setup - edm::ESHandle dbPed; - eventSetup.get().get(dbPed); - const EcalPedestals *pedestals(dbPed.product()); + const EcalPedestals *pedestals = &eventSetup.getData(m_pedestalsToken); m_Coder->setPedestals(pedestals); if (nullptr != m_APDCoder) m_APDCoder->setPedestals(pedestals); // Ecal Intercalibration Constants - edm::ESHandle pIcal; - eventSetup.get().get(pIcal); - const EcalIntercalibConstantsMC *ical(pIcal.product()); + const EcalIntercalibConstantsMC *ical = &eventSetup.getData(m_icalToken); m_Coder->setIntercalibConstants(ical); if (nullptr != m_APDCoder) @@ -458,25 +445,20 @@ void EcalDigiProducer::checkCalibrations(const edm::Event &event, const edm::Eve m_APDResponse->setIntercal(ical); // Ecal LaserCorrection Constants - edm::ESHandle laser; - eventSetup.get().get(laser); + const EcalLaserDbService *laser = &eventSetup.getData(m_laserToken); const edm::TimeValue_t eventTimeValue = event.time().value(); m_EBResponse->setEventTime(eventTimeValue); - m_EBResponse->setLaserConstants(laser.product(), m_useLCcorrection); + m_EBResponse->setLaserConstants(laser, m_useLCcorrection); m_EEResponse->setEventTime(eventTimeValue); - m_EEResponse->setLaserConstants(laser.product(), m_useLCcorrection); + m_EEResponse->setLaserConstants(laser, m_useLCcorrection); // ADC -> GeV Scale - edm::ESHandle pAgc; - eventSetup.get().get(pAgc); - const EcalADCToGeVConstant *agc = pAgc.product(); + const EcalADCToGeVConstant *agc = &eventSetup.getData(m_agcToken); // Gain Ratios - edm::ESHandle pRatio; - eventSetup.get().get(pRatio); - const EcalGainRatios *gr = pRatio.product(); + const EcalGainRatios *gr = &eventSetup.getData(m_grToken); m_Coder->setGainRatios(gr); if (nullptr != m_APDCoder) @@ -514,51 +496,33 @@ void EcalDigiProducer::checkCalibrations(const edm::Event &event, const edm::Eve if (nullptr != m_APDCoder) m_APDCoder->setFullScaleEnergy(EBscale, EEscale); - if (nullptr != m_ESOldDigitizer || nullptr != m_ESDigitizer) { + if (m_doES) { // ES condition objects - edm::ESHandle hesgain; - edm::ESHandle hesMIPToGeV; - edm::ESHandle hesPedestals; - edm::ESHandle hesMIPs; - - eventSetup.get().get(hesgain); - eventSetup.get().get(hesMIPToGeV); - eventSetup.get().get(hesPedestals); - eventSetup.get().get(hesMIPs); - - const ESGain *esgain(hesgain.product()); - const ESPedestals *espeds(hesPedestals.product()); - const ESIntercalibConstants *esmips(hesMIPs.product()); - const ESMIPToGeVConstant *esMipToGeV(hesMIPToGeV.product()); + const ESGain *esgain = &eventSetup.getData(m_esGainToken); + const ESPedestals *espeds = &eventSetup.getData(m_esPedestalsToken); + const ESIntercalibConstants *esmips = &eventSetup.getData(m_esMIPsToken); + const ESMIPToGeVConstant *esMipToGeV = &eventSetup.getData(m_esMIPToGeVToken); const int ESGain(1.1 > esgain->getESGain() ? 1 : 2); const double ESMIPToGeV((1 == ESGain) ? esMipToGeV->getESValueLow() : esMipToGeV->getESValueHigh()); - if (m_doES) { - m_ESShape.setGain(ESGain); - if (!m_doFastES) { - m_ESElectronicsSim->setGain(ESGain); - m_ESElectronicsSim->setPedestals(espeds); - m_ESElectronicsSim->setMIPs(esmips); - m_ESElectronicsSim->setMIPToGeV(ESMIPToGeV); - } else { - m_ESDigitizer->setGain(ESGain); - m_ESElectronicsSimFast->setPedestals(espeds); - m_ESElectronicsSimFast->setMIPs(esmips); - m_ESElectronicsSimFast->setMIPToGeV(ESMIPToGeV); - } + m_ESShape.setGain(ESGain); + if (!m_doFastES) { + m_ESElectronicsSim->setGain(ESGain); + m_ESElectronicsSim->setPedestals(espeds); + m_ESElectronicsSim->setMIPs(esmips); + m_ESElectronicsSim->setMIPToGeV(ESMIPToGeV); + } else { + m_ESDigitizer->setGain(ESGain); + m_ESElectronicsSimFast->setPedestals(espeds); + m_ESElectronicsSimFast->setMIPs(esmips); + m_ESElectronicsSimFast->setMIPToGeV(ESMIPToGeV); } } } void EcalDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) { - // TODO find a way to avoid doing this every event - edm::ESHandle hGeometry; - eventSetup.get().get(hGeometry); - - const CaloGeometry *pGeometry = &*hGeometry; - - if (pGeometry != m_Geometry) { - m_Geometry = pGeometry; + if (m_geometryWatcher.check(eventSetup)) { + m_Geometry = &eventSetup.getData(m_geometryToken); updateGeometry(); } } diff --git a/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc b/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc index 2be3d9f5c9f8f..0f9d29127ea4b 100644 --- a/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc +++ b/SimCalorimetry/EcalSimProducers/src/EcalTimeDigiProducer.cc @@ -4,9 +4,7 @@ #include "CalibFormats/CaloObjects/interface/CaloSamples.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -22,6 +20,7 @@ EcalTimeDigiProducer::EcalTimeDigiProducer(const edm::ParameterSet ¶ms, m_EBdigiCollection(params.getParameter("EBtimeDigiCollection")), m_hitsProducerTagEB(params.getParameter("hitsProducerEB")), m_hitsProducerTokenEB(sumes.consumes>(m_hitsProducerTagEB)), + m_geometryToken(sumes.esConsumes()), m_timeLayerEB(params.getParameter("timeLayerBarrel")), m_Geometry(nullptr) { producesCollector.produces(m_EBdigiCollection); @@ -101,14 +100,8 @@ void EcalTimeDigiProducer::finalizeEvent(edm::Event &event, edm::EventSetup cons } void EcalTimeDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) { - // TODO find a way to avoid doing this every event - edm::ESHandle hGeometry; - eventSetup.get().get(hGeometry); - - const CaloGeometry *pGeometry = &*hGeometry; - - if (pGeometry != m_Geometry) { - m_Geometry = pGeometry; + if (m_geometryWatcher.check(eventSetup)) { + m_Geometry = &eventSetup.getData(m_geometryToken); updateGeometry(); } } diff --git a/SimCalorimetry/EcalTestBeam/interface/EcalTBDigiProducer.h b/SimCalorimetry/EcalTestBeam/interface/EcalTBDigiProducer.h index c19a0dd54db52..930ac0c2d295e 100644 --- a/SimCalorimetry/EcalTestBeam/interface/EcalTBDigiProducer.h +++ b/SimCalorimetry/EcalTestBeam/interface/EcalTBDigiProducer.h @@ -3,6 +3,7 @@ #include "FWCore/Framework/interface/ProducesCollector.h" #include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "RecoTBCalo/EcalTBTDCReconstructor/interface/EcalTBTDCRecInfoAlgo.h" #include "SimCalorimetry/EcalSimProducers/interface/EcalDigiProducer.h" #include "SimCalorimetry/EcalTestBeamAlgos/interface/EcalTBReadout.h" @@ -39,6 +40,7 @@ class EcalTBDigiProducer : public EcalDigiProducer { std::string m_ecalTBInfoLabel; std::string m_EBdigiFinalTag; std::string m_EBdigiTempTag; + const edm::ESGetToken m_geometryToken; bool m_doPhaseShift; double m_thisPhaseShift; diff --git a/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc b/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc index 3e8d3271a72b1..c58a3c20ec4d4 100644 --- a/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc +++ b/SimCalorimetry/EcalTestBeam/src/EcalTBDigiProducer.cc @@ -7,7 +7,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h" #include "SimCalorimetry/EcalSimAlgos/interface/EEHitResponse.h" #include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h" @@ -17,7 +16,7 @@ EcalTBDigiProducer::EcalTBDigiProducer(const edm::ParameterSet ¶ms, edm::ProducesCollector producesCollector, edm::ConsumesCollector &iC) - : EcalDigiProducer(params, producesCollector, iC) { + : EcalDigiProducer(params, producesCollector, iC), m_geometryToken(iC.esConsumes()) { std::string const instance("simEcalUnsuppressedDigis"); m_EBdigiFinalTag = params.getParameter("EBdigiFinalCollection"); m_EBdigiTempTag = params.getParameter("EBdigiCollection"); @@ -63,9 +62,7 @@ EcalTBDigiProducer::~EcalTBDigiProducer() {} void EcalTBDigiProducer::initializeEvent(edm::Event const &event, edm::EventSetup const &eventSetup) { std::cout << "====****Entering EcalTBDigiProducer produce()" << std::endl; - edm::ESHandle hGeometry; - eventSetup.get().get(hGeometry); - const std::vector &theBarrelDets(hGeometry->getValidDetIds(DetId::Ecal, EcalBarrel)); + const std::vector &theBarrelDets = eventSetup.getData(m_geometryToken).getValidDetIds(DetId::Ecal, EcalBarrel); m_theTBReadout->setDetIds(theBarrelDets); diff --git a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h index 6ec3ac4191ae3..7576a0eefa5f0 100644 --- a/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h +++ b/SimCalorimetry/HGCalSimProducers/interface/HGCDigitizer.h @@ -3,6 +3,7 @@ #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "SimDataFormats/CaloHit/interface/PCaloHit.h" @@ -11,7 +12,8 @@ #include "SimCalorimetry/HGCalSimProducers/interface/HGCDigitizerBase.h" #include "DataFormats/HGCDigi/interface/HGCDigiCollections.h" #include "DataFormats/HGCDigi/interface/PHGCSimAccumulator.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" #include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h" @@ -73,12 +75,6 @@ class HGCDigitizer { std::string digiCollection() { return digiCollection_; } - /** - @short actions at the start/end of run - */ - void beginRun(const edm::EventSetup& es); - void endRun(); - private: uint32_t getType() const; std::string hitCollection_, digiCollection_; @@ -108,8 +104,10 @@ class HGCDigitizer { std::unique_ptr theDigitizer_; //geometries + const edm::ESGetToken geomToken_; + edm::ESWatcher geomWatcher_; std::unordered_set validIds_; - const HGCalGeometry* gHGCal_; + const HGCalGeometry* gHGCal_ = nullptr; //misc switches uint32_t verbosity_; diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.cc index 2aab16affcf72..5e0e265e30a10 100644 --- a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.cc +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.cc @@ -57,10 +57,4 @@ void HGCDigiProducer::accumulate(PileUpEventPrincipal const& event, } } -// -void HGCDigiProducer::beginRun(edm::Run const&, edm::EventSetup const& es) { theDigitizer_.beginRun(es); } - -// -void HGCDigiProducer::endRun(edm::Run const&, edm::EventSetup const&) { theDigitizer_.endRun(); } - DEFINE_DIGI_ACCUMULATOR(HGCDigiProducer); diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.h b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.h index ab6a93a119905..441ef247f6335 100644 --- a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.h +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigiProducer.h @@ -29,8 +29,6 @@ class HGCDigiProducer : public DigiAccumulatorMixMod { void finalizeEvent(edm::Event&, edm::EventSetup const&) override; void accumulate(edm::Event const&, edm::EventSetup const&) override; void accumulate(PileUpEventPrincipal const&, edm::EventSetup const&, edm::StreamID const&) override; - void beginRun(edm::Run const&, edm::EventSetup const&) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; ~HGCDigiProducer() override = default; private: diff --git a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc index 4da032651a17e..f9c94fe2c933a 100644 --- a/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc +++ b/SimCalorimetry/HGCalSimProducers/plugins/HGCDigitizer.cc @@ -14,8 +14,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h" #include "DataFormats/Math/interface/liblogintpack.h" #include @@ -233,6 +231,7 @@ namespace { HGCDigitizer::HGCDigitizer(const edm::ParameterSet& ps, edm::ConsumesCollector& iC) : simHitAccumulator_(new HGCSimHitDataAccumulator()), pusimHitAccumulator_(new HGCPUSimHitDataAccumulator()), + geomToken_(iC.esConsumes()), refSpeed_(0.1 * CLHEP::c_light), //[CLHEP::c_light]=mm/ns convert to cm/ns averageOccupancies_(occupancyGuesses), nEvents_(1) { @@ -248,7 +247,6 @@ HGCDigitizer::HGCDigitizer(const edm::ParameterSet& ps, edm::ConsumesCollector& premixStage1_ = ps.getParameter("premixStage1"); premixStage1MinCharge_ = ps.getParameter("premixStage1MinCharge"); premixStage1MaxCharge_ = ps.getParameter("premixStage1MaxCharge"); - std::unordered_set().swap(validIds_); iC.consumes>(edm::InputTag("g4SimHits", hitCollection_)); const auto& myCfg_ = ps.getParameter("digiCfg"); @@ -269,6 +267,28 @@ HGCDigitizer::HGCDigitizer(const edm::ParameterSet& ps, edm::ConsumesCollector& // void HGCDigitizer::initializeEvent(edm::Event const& e, edm::EventSetup const& es) { + if (geomWatcher_.check(es)) { + std::unordered_set().swap(validIds_); + + //get geometry + CaloGeometry const& geom = es.getData(geomToken_); + + gHGCal_ = + dynamic_cast(geom.getSubdetectorGeometry(theDigitizer_->det(), theDigitizer_->subdet())); + + int nadded(0); + //valid ID lists + if (nullptr != gHGCal_) { + getValidDetIds(gHGCal_, validIds_); + } else { + throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; + } + + if (verbosity_ > 0) + edm::LogInfo("HGCDigitizer") << "Added " << nadded << ":" << validIds_.size() << " detIds without " + << hitCollection_ << " in first event processed" << std::endl; + } + // reserve memory for a full detector unsigned idx = getType(); simHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size()); @@ -690,33 +710,6 @@ void HGCDigitizer::accumulate_forPreMix(const PHGCSimAccumulator& simAccumulator } } -// -void HGCDigitizer::beginRun(const edm::EventSetup& es) { - //get geometry - edm::ESHandle geom; - es.get().get(geom); - - gHGCal_ = nullptr; - - gHGCal_ = - dynamic_cast(geom->getSubdetectorGeometry(theDigitizer_->det(), theDigitizer_->subdet())); - - int nadded(0); - //valid ID lists - if (nullptr != gHGCal_) { - getValidDetIds(gHGCal_, validIds_); - } else { - throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!"; - } - - if (verbosity_ > 0) - edm::LogInfo("HGCDigitizer") << "Added " << nadded << ":" << validIds_.size() << " detIds without " - << hitCollection_ << " in first event processed" << std::endl; -} - -// -void HGCDigitizer::endRun() { std::unordered_set().swap(validIds_); } - // void HGCDigitizer::resetSimHitDataAccumulator() { for (HGCSimHitDataAccumulator::iterator it = simHitAccumulator_->begin(); it != simHitAccumulator_->end(); it++) { diff --git a/SimCalorimetry/HGCalSimProducers/plugins/PreMixingHGCalWorker.cc b/SimCalorimetry/HGCalSimProducers/plugins/PreMixingHGCalWorker.cc index 9df9fd779a035..e88515d6e827e 100644 --- a/SimCalorimetry/HGCalSimProducers/plugins/PreMixingHGCalWorker.cc +++ b/SimCalorimetry/HGCalSimProducers/plugins/PreMixingHGCalWorker.cc @@ -24,9 +24,7 @@ class PreMixingHGCalWorker : public PreMixingWorker { PreMixingHGCalWorker(const PreMixingHGCalWorker&) = delete; PreMixingHGCalWorker& operator=(const PreMixingHGCalWorker&) = delete; - void beginRun(const edm::Run& run, const edm::EventSetup& ES) override; - void endRun() override; - void initializeEvent(const edm::Event& e, const edm::EventSetup& ES) override {} + void initializeEvent(const edm::Event& e, const edm::EventSetup& ES) override; void addSignals(const edm::Event& e, const edm::EventSetup& ES) override; void addPileups(const PileUpEventPrincipal&, const edm::EventSetup& ES) override; void put(edm::Event& e, const edm::EventSetup& ES, std::vector const& ps, int bs) override; @@ -47,9 +45,9 @@ PreMixingHGCalWorker::PreMixingHGCalWorker(const edm::ParameterSet& ps, producesCollector.produces(digitizer_.digiCollection()); } -void PreMixingHGCalWorker::beginRun(const edm::Run& run, const edm::EventSetup& ES) { digitizer_.beginRun(ES); } - -void PreMixingHGCalWorker::endRun() { digitizer_.endRun(); } +void PreMixingHGCalWorker::initializeEvent(const edm::Event& e, const edm::EventSetup& ES) { + digitizer_.initializeEvent(e, ES); +} void PreMixingHGCalWorker::addSignals(const edm::Event& e, const edm::EventSetup& ES) { edm::Handle handle; diff --git a/SimCalorimetry/HcalSimProducers/interface/HcalDigitizer.h b/SimCalorimetry/HcalSimProducers/interface/HcalDigitizer.h index a8746947ba475..1e79bc6e6a0f5 100644 --- a/SimCalorimetry/HcalSimProducers/interface/HcalDigitizer.h +++ b/SimCalorimetry/HcalSimProducers/interface/HcalDigitizer.h @@ -2,6 +2,9 @@ #define HcalSimProducers_HcalDigitizer_h #include "CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h" +#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h" +#include "CondFormats/DataRecord/interface/HBHEDarkeningRecord.h" +#include "CondFormats/DataRecord/interface/HcalTimeSlewRecord.h" #include "CondFormats/HcalObjects/interface/HBHEDarkening.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/HcalCalibObjects/interface/HFRecalibration.h" @@ -35,10 +38,6 @@ class HcalShapes; class PileUpEventPrincipal; class HcalTopology; -namespace edm { - class ConsumesCollector; -} - namespace CLHEP { class HepRandomEngine; } @@ -74,6 +73,15 @@ class HcalDigitizer { /// make sure the digitizer has the correct list of all cells that /// exist in the geometry void checkGeometry(const edm::EventSetup &eventSetup); + const edm::ESGetToken conditionsToken_; + const edm::ESGetToken topoToken_; + edm::ESGetToken m_HBDarkeningToken; + edm::ESGetToken m_HEDarkeningToken; + const edm::ESGetToken hcalTimeSlew_delay_token_; + const edm::ESGetToken theGeometryToken; + const edm::ESGetToken theRecNumberToken; + const edm::ESGetToken qieTypesToken_; + edm::ESGetToken mcParamsToken_; edm::ESWatcher theGeometryWatcher_; edm::ESWatcher theRecNumberWatcher_; const CaloGeometry *theGeometry; diff --git a/SimCalorimetry/HcalSimProducers/src/HcalDigitizer.cc b/SimCalorimetry/HcalSimProducers/src/HcalDigitizer.cc index e338be6d601dd..f0786b5653f61 100644 --- a/SimCalorimetry/HcalSimProducers/src/HcalDigitizer.cc +++ b/SimCalorimetry/HcalSimProducers/src/HcalDigitizer.cc @@ -1,8 +1,5 @@ #include "SimCalorimetry/HcalSimProducers/interface/HcalDigitizer.h" -#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h" #include "CalibFormats/HcalObjects/interface/HcalDbService.h" -#include "CondFormats/DataRecord/interface/HBHEDarkeningRecord.h" -#include "CondFormats/DataRecord/interface/HcalTimeSlewRecord.h" #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Common/interface/Wrapper.h" #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" @@ -11,7 +8,6 @@ #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" #include "DataFormats/HcalDigi/interface/HcalQIENum.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -36,7 +32,13 @@ //#define DebugLog HcalDigitizer::HcalDigitizer(const edm::ParameterSet &ps, edm::ConsumesCollector &iC) - : theGeometry(nullptr), + : conditionsToken_(iC.esConsumes()), + topoToken_(iC.esConsumes()), + hcalTimeSlew_delay_token_(iC.esConsumes(edm::ESInputTag("", "HBHE"))), + theGeometryToken(iC.esConsumes()), + theRecNumberToken(iC.esConsumes()), + qieTypesToken_(iC.esConsumes()), + theGeometry(nullptr), theRecNumber(nullptr), theParameterMap(ps), theShapes(), @@ -103,6 +105,16 @@ HcalDigitizer::HcalDigitizer(const edm::ParameterSet &ps, edm::ConsumesCollector iC.consumes>(edm::InputTag(hitsProducer_, "ZDCHITS")); iC.consumes>(edm::InputTag(hitsProducer_, "HcalHits")); + if (agingFlagHB) { + m_HBDarkeningToken = iC.esConsumes(edm::ESInputTag("", "HB")); + } + if (agingFlagHE) { + m_HEDarkeningToken = iC.esConsumes(edm::ESInputTag("", "HE")); + } + if (theHOSiPMCode == 2) { + mcParamsToken_ = iC.esConsumes(); + } + bool doNoise = ps.getParameter("doNoise"); bool PreMix1 = ps.getParameter("HcalPreMixStage1"); // special threshold/pedestal treatment @@ -294,23 +306,22 @@ void HcalDigitizer::initializeEvent(edm::Event const &e, edm::EventSetup const & setup(eventSetup); // get the appropriate gains, noises, & widths for this event - edm::ESHandle conditions; - eventSetup.get().get(conditions); + const HcalDbService *conditions = &eventSetup.getData(conditionsToken_); - theShapes.setDbService(conditions.product()); + theShapes.setDbService(conditions); - theHBHEAmplifier->setDbService(conditions.product()); - theHFAmplifier->setDbService(conditions.product()); - theHOAmplifier->setDbService(conditions.product()); - theZDCAmplifier->setDbService(conditions.product()); - theHFQIE10Amplifier->setDbService(conditions.product()); - theHBHEQIE11Amplifier->setDbService(conditions.product()); + theHBHEAmplifier->setDbService(conditions); + theHFAmplifier->setDbService(conditions); + theHOAmplifier->setDbService(conditions); + theZDCAmplifier->setDbService(conditions); + theHFQIE10Amplifier->setDbService(conditions); + theHBHEQIE11Amplifier->setDbService(conditions); - theHFQIE10ElectronicsSim->setDbService(conditions.product()); - theHBHEQIE11ElectronicsSim->setDbService(conditions.product()); + theHFQIE10ElectronicsSim->setDbService(conditions); + theHBHEQIE11ElectronicsSim->setDbService(conditions); - theCoderFactory->setDbService(conditions.product()); - theParameterMap.setDbService(conditions.product()); + theCoderFactory->setDbService(conditions); + theParameterMap.setDbService(conditions); // initialize hits if (theHBHEDigitizer) @@ -424,9 +435,7 @@ void HcalDigitizer::accumulate(edm::Event const &e, edm::EventSetup const &event e.getByLabel(hcalTag, hcalHandle); isHCAL = hcalHandle.isValid() or injectTestHits_; - edm::ESHandle htopo; - eventSetup.get().get(htopo); - const HcalTopology *htopoP = htopo.product(); + const HcalTopology *htopoP = &eventSetup.getData(topoToken_); accumulateCaloHits(hcalHandle, zdcHandle, 0, engine, htopoP); } @@ -445,9 +454,7 @@ void HcalDigitizer::accumulate(PileUpEventPrincipal const &e, e.getByLabel(hcalTag, hcalHandle); isHCAL = hcalHandle.isValid(); - edm::ESHandle htopo; - eventSetup.get().get(htopo); - const HcalTopology *htopoP = htopo.product(); + const HcalTopology *htopoP = &eventSetup.getData(topoToken_); accumulateCaloHits(hcalHandle, zdcHandle, e.bunchCrossing(), engine, htopoP); } @@ -557,19 +564,13 @@ void HcalDigitizer::setup(const edm::EventSetup &es) { checkGeometry(es); if (agingFlagHB) { - edm::ESHandle hdark; - es.get().get("HB", hdark); - m_HBDarkening = &*hdark; + m_HBDarkening = &es.getData(m_HBDarkeningToken); } if (agingFlagHE) { - edm::ESHandle hdark; - es.get().get("HE", hdark); - m_HEDarkening = &*hdark; + m_HEDarkening = &es.getData(m_HEDarkeningToken); } - edm::ESHandle delay; - es.get().get("HBHE", delay); - hcalTimeSlew_delay_ = &*delay; + hcalTimeSlew_delay_ = &es.getData(hcalTimeSlew_delay_token_); theHBHEAmplifier->setTimeSlew(hcalTimeSlew_delay_); theHBHEQIE11Amplifier->setTimeSlew(hcalTimeSlew_delay_); @@ -578,12 +579,8 @@ void HcalDigitizer::setup(const edm::EventSetup &es) { } void HcalDigitizer::checkGeometry(const edm::EventSetup &eventSetup) { - edm::ESHandle geometry; - eventSetup.get().get(geometry); - theGeometry = &*geometry; - edm::ESHandle pHRNDC; - eventSetup.get().get(pHRNDC); - theRecNumber = &*pHRNDC; + theGeometry = &eventSetup.getData(theGeometryToken); + theRecNumber = &eventSetup.getData(theRecNumberToken); if (theHBHEResponse) theHBHEResponse->setGeometry(theGeometry); @@ -693,14 +690,10 @@ void HcalDigitizer::buildHFQIECells(const std::vector &allCells, const ed return; // get the QIETypes - edm::ESHandle q; - eventSetup.get().get(q); - edm::ESHandle htopo; - eventSetup.get().get(htopo); - - HcalQIETypes qieTypes(*q.product()); + // intentional copy + HcalQIETypes qieTypes = eventSetup.getData(qieTypesToken_); if (qieTypes.topo() == nullptr) { - qieTypes.setTopo(htopo.product()); + qieTypes.setTopo(&eventSetup.getData(topoToken_)); } for (std::vector::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) { @@ -733,14 +726,10 @@ void HcalDigitizer::buildHBHEQIECells(const std::vector &allCells, const return; // get the QIETypes - edm::ESHandle q; - eventSetup.get().get(q); - edm::ESHandle htopo; - eventSetup.get().get(htopo); - - HcalQIETypes qieTypes(*q.product()); + // intentional copy + HcalQIETypes qieTypes = eventSetup.getData(qieTypesToken_); if (qieTypes.topo() == nullptr) { - qieTypes.setTopo(htopo.product()); + qieTypes.setTopo(&eventSetup.getData(topoToken_)); } for (std::vector::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) { @@ -782,14 +771,11 @@ void HcalDigitizer::buildHOSiPMCells(const std::vector &allCells, const e // FIXME pick Zecotek or hamamatsu? } else if (theHOSiPMCode == 2) { std::vector zecotekDetIds, hamamatsuDetIds; - edm::ESHandle p; - eventSetup.get().get(p); - edm::ESHandle htopo; - eventSetup.get().get(htopo); - HcalMCParams mcParams(*p.product()); + // intentional copy + HcalMCParams mcParams = eventSetup.getData(mcParamsToken_); if (mcParams.topo() == nullptr) { - mcParams.setTopo(htopo.product()); + mcParams.setTopo(&eventSetup.getData(topoToken_)); } for (std::vector::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) { diff --git a/SimCalorimetry/HcalTestBeam/interface/HcalTBDigiProducer.h b/SimCalorimetry/HcalTestBeam/interface/HcalTBDigiProducer.h index d8536ad332365..ace8ad1c5bf86 100644 --- a/SimCalorimetry/HcalTestBeam/interface/HcalTBDigiProducer.h +++ b/SimCalorimetry/HcalTestBeam/interface/HcalTBDigiProducer.h @@ -1,10 +1,14 @@ #ifndef SimCalorimetry_HcalTestBeam_HcalTBDigiProducer_h #define SimCalorimetry_HcalTestBeam_HcalTBDigiProducer_h +#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESWatcher.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloHitResponse.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloTDigitizer.h" #include "SimCalorimetry/HcalSimAlgos/interface/HcalAmplifier.h" @@ -24,11 +28,6 @@ class PEcalTBInfo; -namespace edm { - class StreamID; - class ConsumesCollector; -} // namespace edm - namespace CLHEP { class HepRandomEngine; } @@ -82,6 +81,10 @@ class HcalTBDigiProducer : public DigiAccumulatorMixMod { HBHEDigitizer *theHBHEDigitizer; HODigitizer *theHODigitizer; + edm::ESGetToken conditionsToken_; + edm::ESGetToken hcalTimeSlew_delay_token_; + edm::ESGetToken geometryToken_; + edm::ESWatcher geometryWatcher_; const CaloGeometry *theGeometry; std::vector hbheCells; std::vector hoCells; diff --git a/SimCalorimetry/HcalTestBeam/src/HcalTBDigiProducer.cc b/SimCalorimetry/HcalTestBeam/src/HcalTBDigiProducer.cc index bb943afb7f439..b7339a855d9d4 100644 --- a/SimCalorimetry/HcalTestBeam/src/HcalTBDigiProducer.cc +++ b/SimCalorimetry/HcalTestBeam/src/HcalTBDigiProducer.cc @@ -1,17 +1,14 @@ #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/Utilities/interface/RandomNumberGenerator.h" #include "FWCore/Utilities/interface/StreamID.h" #include "SimCalorimetry/HcalTestBeam/interface/HcalTBDigiProducer.h" -#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h" #include "CalibFormats/HcalObjects/interface/HcalDbService.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" #include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloShapeIntegrator.h" #include "SimCalorimetry/CaloSimAlgos/interface/CaloTDigitizer.h" #include "SimDataFormats/EcalTestBeam/interface/PEcalTBInfo.h" @@ -34,6 +31,8 @@ HcalTBDigiProducer::HcalTBDigiProducer(const edm::ParameterSet &ps, theTimeSlewSim(nullptr), theHBHEDigitizer(nullptr), theHODigitizer(nullptr), + conditionsToken_(iC.esConsumes()), + hcalTimeSlew_delay_token_(iC.esConsumes(edm::ESInputTag("", "HBHE"))), theHBHEHits(), theHOHits(), thisPhaseShift(0) { @@ -107,10 +106,9 @@ HcalTBDigiProducer::~HcalTBDigiProducer() { void HcalTBDigiProducer::initializeEvent(edm::Event const &e, edm::EventSetup const &eventSetup) { // get the appropriate gains, noises, & widths for this event - edm::ESHandle conditions; - eventSetup.get().get(conditions); - theAmplifier->setDbService(conditions.product()); - theCoderFactory->setDbService(conditions.product()); + const HcalDbService *conditions = &eventSetup.getData(conditionsToken_); + theAmplifier->setDbService(conditions); + theCoderFactory->setDbService(conditions); // get the correct geometry checkGeometry(eventSetup); @@ -132,9 +130,7 @@ void HcalTBDigiProducer::initializeEvent(edm::Event const &e, edm::EventSetup co setPhaseShift(detIdHO); } - edm::ESHandle delay; - eventSetup.get().get("HBHE", delay); - hcalTimeSlew_delay_ = &*delay; + hcalTimeSlew_delay_ = &eventSetup.getData(hcalTimeSlew_delay_token_); theAmplifier->setTimeSlew(hcalTimeSlew_delay_); @@ -208,15 +204,9 @@ void HcalTBDigiProducer::sortHits(const edm::PCaloHitContainer &hits) { } void HcalTBDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) { - // TODO find a way to avoid doing this every event - edm::ESHandle geometry; - eventSetup.get().get(geometry); - - const CaloGeometry *pGeometry = &*geometry; - // see if we need to update - if (pGeometry != theGeometry) { - theGeometry = pGeometry; + if (geometryWatcher_.check(eventSetup)) { + theGeometry = &eventSetup.getData(geometryToken_); updateGeometry(); } } diff --git a/SimGeneral/CaloAnalysis/plugins/CaloTruthAccumulator.cc b/SimGeneral/CaloAnalysis/plugins/CaloTruthAccumulator.cc index 4f13f5c49f5a7..7b6484ded10b4 100644 --- a/SimGeneral/CaloAnalysis/plugins/CaloTruthAccumulator.cc +++ b/SimGeneral/CaloAnalysis/plugins/CaloTruthAccumulator.cc @@ -23,7 +23,7 @@ #include #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ProducesCollector.h" @@ -132,7 +132,6 @@ class CaloTruthAccumulator : public DigiAccumulatorMixMod { void accumulate(const edm::Event &event, const edm::EventSetup &setup) override; void accumulate(const PileUpEventPrincipal &event, const edm::EventSetup &setup, edm::StreamID const &) override; void finalizeEvent(edm::Event &event, const edm::EventSetup &setup) override; - void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) override; /** @brief Both forms of accumulate() delegate to this templated method. */ template @@ -175,6 +174,8 @@ class CaloTruthAccumulator : public DigiAccumulatorMixMod { edm::InputTag genParticleLabel_; /// Needed to add HepMC::GenVertex to SimVertex edm::InputTag hepMCproductLabel_; + const edm::ESGetToken geomToken_; + edm::ESWatcher geomWatcher_; const double minEnergy_, maxPseudoRapidity_; const bool premixStage1_; @@ -368,6 +369,7 @@ CaloTruthAccumulator::CaloTruthAccumulator(const edm::ParameterSet &config, collectionTags_(), genParticleLabel_(config.getParameter("genParticleCollection")), hepMCproductLabel_(config.getParameter("HepMCProductLabel")), + geomToken_(iC.esConsumes()), minEnergy_(config.getParameter("MinEnergy")), maxPseudoRapidity_(config.getParameter("MaxPseudoRapidity")), premixStage1_(config.getParameter("premixStage1")), @@ -399,50 +401,49 @@ CaloTruthAccumulator::CaloTruthAccumulator(const edm::ParameterSet &config, } } -void CaloTruthAccumulator::beginLuminosityBlock(edm::LuminosityBlock const &iLumiBlock, const edm::EventSetup &iSetup) { - edm::ESHandle geom; - iSetup.get().get(geom); - const HGCalGeometry *eegeom = nullptr, *fhgeom = nullptr, *bhgeomnew = nullptr; - const HcalGeometry *bhgeom = nullptr; - bhgeom = static_cast(geom->getSubdetectorGeometry(DetId::Hcal, HcalEndcap)); - - if (doHGCAL) { - eegeom = static_cast( - geom->getSubdetectorGeometry(DetId::HGCalEE, ForwardSubdetector::ForwardEmpty)); - // check if it's the new geometry - if (eegeom) { - geometryType_ = 1; - fhgeom = static_cast( - geom->getSubdetectorGeometry(DetId::HGCalHSi, ForwardSubdetector::ForwardEmpty)); - bhgeomnew = static_cast( - geom->getSubdetectorGeometry(DetId::HGCalHSc, ForwardSubdetector::ForwardEmpty)); - } else { - geometryType_ = 0; - eegeom = static_cast(geom->getSubdetectorGeometry(DetId::Forward, HGCEE)); - fhgeom = static_cast(geom->getSubdetectorGeometry(DetId::Forward, HGCHEF)); - bhgeom = static_cast(geom->getSubdetectorGeometry(DetId::Hcal, HcalEndcap)); - } - hgtopo_[0] = &(eegeom->topology()); - hgtopo_[1] = &(fhgeom->topology()); - if (bhgeomnew) - hgtopo_[2] = &(bhgeomnew->topology()); - - for (unsigned i = 0; i < 3; ++i) { - if (hgtopo_[i]) - hgddd_[i] = &(hgtopo_[i]->dddConstants()); - } - } - - if (bhgeom) { - hcddd_ = bhgeom->topology().dddConstants(); - } -} - void CaloTruthAccumulator::initializeEvent(edm::Event const &event, edm::EventSetup const &setup) { output_.pSimClusters = std::make_unique(); output_.pCaloParticles = std::make_unique(); m_detIdToTotalSimEnergy.clear(); + + if (geomWatcher_.check(setup)) { + auto const &geom = setup.getData(geomToken_); + const HGCalGeometry *eegeom = nullptr, *fhgeom = nullptr, *bhgeomnew = nullptr; + const HcalGeometry *bhgeom = nullptr; + bhgeom = static_cast(geom.getSubdetectorGeometry(DetId::Hcal, HcalEndcap)); + + if (doHGCAL) { + eegeom = static_cast( + geom.getSubdetectorGeometry(DetId::HGCalEE, ForwardSubdetector::ForwardEmpty)); + // check if it's the new geometry + if (eegeom) { + geometryType_ = 1; + fhgeom = static_cast( + geom.getSubdetectorGeometry(DetId::HGCalHSi, ForwardSubdetector::ForwardEmpty)); + bhgeomnew = static_cast( + geom.getSubdetectorGeometry(DetId::HGCalHSc, ForwardSubdetector::ForwardEmpty)); + } else { + geometryType_ = 0; + eegeom = static_cast(geom.getSubdetectorGeometry(DetId::Forward, HGCEE)); + fhgeom = static_cast(geom.getSubdetectorGeometry(DetId::Forward, HGCHEF)); + bhgeom = static_cast(geom.getSubdetectorGeometry(DetId::Hcal, HcalEndcap)); + } + hgtopo_[0] = &(eegeom->topology()); + hgtopo_[1] = &(fhgeom->topology()); + if (bhgeomnew) + hgtopo_[2] = &(bhgeomnew->topology()); + + for (unsigned i = 0; i < 3; ++i) { + if (hgtopo_[i]) + hgddd_[i] = &(hgtopo_[i]->dddConstants()); + } + } + + if (bhgeom) { + hcddd_ = bhgeom->topology().dddConstants(); + } + } } /** Create handle to edm::HepMCProduct here because event.getByLabel with diff --git a/SimGeneral/MixingModule/plugins/Mixing2DB.cc b/SimGeneral/MixingModule/plugins/Mixing2DB.cc index b33409e9fd8ab..5dde9703b4e10 100644 --- a/SimGeneral/MixingModule/plugins/Mixing2DB.cc +++ b/SimGeneral/MixingModule/plugins/Mixing2DB.cc @@ -31,19 +31,7 @@ Mixing2DB::~Mixing2DB() { // // ------------ method called for each event ------------ -void Mixing2DB::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - -#ifdef THIS_IS_AN_EVENT_EXAMPLE - Handle pIn; - iEvent.getByLabel("example", pIn); -#endif - -#ifdef THIS_IS_AN_EVENTSETUP_EXAMPLE - ESHandle pSetup; - iSetup.get().get(pSetup); -#endif -} +void Mixing2DB::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {} // ------------ method called once each job just before starting event loop ------------ void Mixing2DB::beginJob() {} diff --git a/SimGeneral/MixingModule/plugins/MixingModule.cc b/SimGeneral/MixingModule/plugins/MixingModule.cc index c100a042a99fc..bbd8aff1f51ba 100644 --- a/SimGeneral/MixingModule/plugins/MixingModule.cc +++ b/SimGeneral/MixingModule/plugins/MixingModule.cc @@ -288,6 +288,7 @@ namespace edm { } void MixingModule::reload(const edm::EventSetup& setup) { + // TODO for esConsumes migration: assume for now this function is mostly unused //change the basic parameters. edm::ESHandle config; setup.get().get(config); @@ -612,8 +613,8 @@ namespace edm { std::unique_ptr PileupMixing_; - PileupMixing_ = std::unique_ptr(new PileupMixingContent( - bunchCrossingList, numInteractionList, TrueInteractionList, eventInfoList, bunchSpace_)); + PileupMixing_ = std::make_unique( + bunchCrossingList, numInteractionList, TrueInteractionList, eventInfoList, bunchSpace_); e.put(std::move(PileupMixing_)); diff --git a/SimGeneral/MixingModule/plugins/MixingWorker.h b/SimGeneral/MixingModule/plugins/MixingWorker.h index 94557d9046f30..133da14cbf1c5 100644 --- a/SimGeneral/MixingModule/plugins/MixingWorker.h +++ b/SimGeneral/MixingModule/plugins/MixingWorker.h @@ -109,6 +109,7 @@ namespace edm { public: void reload(const edm::EventSetup &setup) override { + // TODO for esConsumes migration: assume for now this function is mostly unused //get the required parameters from DB. // watch the label/tag edm::ESHandle config; diff --git a/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.cc b/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.cc index fa76c23b345a2..707b42d92c523 100644 --- a/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.cc +++ b/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.cc @@ -50,10 +50,7 @@ #include "DataFormats/HepMCCandidate/interface/GenParticle.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/isFinite.h" -#include "Geometry/Records/interface/TrackerTopologyRcd.h" // Turn on integrity checking //#define DO_DEBUG_TESTING @@ -277,6 +274,7 @@ TrackingTruthAccumulator::TrackingTruthAccumulator(const edm::ParameterSet &conf collectionTags_(), genParticleLabel_(config.getParameter("genParticleCollection")), hepMCproductLabel_(config.getParameter("HepMCProductLabel")), + tTopoToken_(iC.esConsumes()), allowDifferentProcessTypeForDifferentDetectors_(config.getParameter("allowDifferentSimHitProcesses")) { // // Make sure at least one of the merged and unmerged collections have been set @@ -468,9 +466,7 @@ void TrackingTruthAccumulator::accumulateEvent(const T &event, } // Retrieve tracker topology from geometry - edm::ESHandle tTopoHandle; - setup.get().get(tTopoHandle); - const TrackerTopology *const tTopo = tTopoHandle.product(); + const TrackerTopology *const tTopo = &setup.getData(tTopoToken_); // Run through the collections and work out the decay chain of each // track/vertex. The information in SimTrack and SimVertex only allows diff --git a/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.h b/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.h index 39a9d9ab51361..f00d669ce9615 100644 --- a/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.h +++ b/SimGeneral/TrackingAnalysis/plugins/TrackingTruthAccumulator.h @@ -1,6 +1,9 @@ #ifndef TrackingAnalysis_TrackingTruthAccumulator_h #define TrackingAnalysis_TrackingTruthAccumulator_h +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" @@ -9,13 +12,6 @@ #include // required for std::unique_ptr // Forward declarations -namespace edm { - class ParameterSet; - class ConsumesCollector; - class Event; - class EventSetup; - class StreamID; -} // namespace edm class PileUpEventPrincipal; class PSimHit; @@ -147,6 +143,7 @@ class TrackingTruthAccumulator : public DigiAccumulatorMixMod { edm::InputTag genParticleLabel_; /// Needed to add HepMC::GenVertex to SimVertex edm::InputTag hepMCproductLabel_; + const edm::ESGetToken tTopoToken_; bool selectorFlag_; TrackingParticleSelector selector_; diff --git a/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.cc index f44ebde951d5d..f470211970b2b 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.cc @@ -3,28 +3,30 @@ #include "SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h" // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" using namespace edm; void PSPDigitizerAlgorithm::init(const edm::EventSetup& es) { if (use_LorentzAngle_DB_) { // Get Lorentz angle from DB record - es.get().get(siPhase2OTLorentzAngle_); + siPhase2OTLorentzAngle_ = &es.getData(siPhase2OTLorentzAngleToken_); } - es.get().get(geom_); + geom_ = &es.getData(geomToken_); } -PSPDigitizerAlgorithm::PSPDigitizerAlgorithm(const edm::ParameterSet& conf) +PSPDigitizerAlgorithm::PSPDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : Phase2TrackerDigitizerAlgorithm(conf.getParameter("AlgorithmCommon"), - conf.getParameter("PSPDigitizerAlgorithm")) { + conf.getParameter("PSPDigitizerAlgorithm"), + iC), + geomToken_(iC.esConsumes()) { + if (use_LorentzAngle_DB_) + siPhase2OTLorentzAngleToken_ = iC.esConsumes(); pixelFlag_ = false; LogDebug("PSPDigitizerAlgorithm") << "Algorithm constructed " << "Configuration parameters:" diff --git a/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.h b/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.h index 47938039f092b..d731a69826ebf 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.h +++ b/SimTracker/SiPhase2Digitizer/plugins/PSPDigitizerAlgorithm.h @@ -1,11 +1,14 @@ #ifndef _SimTracker_SiPhase2Digitizer_PSPDigitizerAlgorithm_h #define _SimTracker_SiPhase2Digitizer_PSPDigitizerAlgorithm_h +#include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h" class PSPDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { public: - PSPDigitizerAlgorithm(const edm::ParameterSet& conf); + PSPDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~PSPDigitizerAlgorithm() override; // initialization that cannot be done in the constructor @@ -13,5 +16,9 @@ class PSPDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { bool select_hit(const PSimHit& hit, double tCorr, double& sigScale) const override; bool isAboveThreshold(const DigitizerUtility::SimHitInfo* hitInfo, float charge, float thr) const override; + +private: + edm::ESGetToken siPhase2OTLorentzAngleToken_; + const edm::ESGetToken geomToken_; }; #endif diff --git a/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.cc index a71be7deefbe4..70b857bb15c9d 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.cc @@ -3,26 +3,28 @@ #include "SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h" // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" using namespace edm; void PSSDigitizerAlgorithm::init(const edm::EventSetup& es) { if (use_LorentzAngle_DB_) // Get Lorentz angle from DB record - es.get().get(siPhase2OTLorentzAngle_); + siPhase2OTLorentzAngle_ = &es.getData(siPhase2OTLorentzAngleToken_); - es.get().get(geom_); + geom_ = &es.getData(geomToken_); } -PSSDigitizerAlgorithm::PSSDigitizerAlgorithm(const edm::ParameterSet& conf) +PSSDigitizerAlgorithm::PSSDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : Phase2TrackerDigitizerAlgorithm(conf.getParameter("AlgorithmCommon"), - conf.getParameter("PSSDigitizerAlgorithm")) { + conf.getParameter("PSSDigitizerAlgorithm"), + iC), + geomToken_(iC.esConsumes()) { + if (use_LorentzAngle_DB_) + siPhase2OTLorentzAngleToken_ = iC.esConsumes(); pixelFlag_ = false; LogDebug("PSSDigitizerAlgorithm") << "Algorithm constructed " << "Configuration parameters: " diff --git a/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.h b/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.h index af14ce990d9dd..acbbcf2185f85 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.h +++ b/SimTracker/SiPhase2Digitizer/plugins/PSSDigitizerAlgorithm.h @@ -1,11 +1,14 @@ #ifndef _SimTracker_SiPhase2Digitizer_PSSDigitizerAlgorithm_h #define _SimTracker_SiPhase2Digitizer_PSSDigitizerAlgorithm_h +#include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h" class PSSDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { public: - PSSDigitizerAlgorithm(const edm::ParameterSet& conf); + PSSDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~PSSDigitizerAlgorithm() override; // initialization that cannot be done in the constructor @@ -13,5 +16,9 @@ class PSSDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { bool select_hit(const PSimHit& hit, double tCorr, double& sigScale) const override; bool isAboveThreshold(const DigitizerUtility::SimHitInfo* hitInfo, float charge, float thr) const override; + +private: + edm::ESGetToken siPhase2OTLorentzAngleToken_; + const edm::ESGetToken geomToken_; }; #endif diff --git a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.cc b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.cc index 72a0232a2464c..ec0b3ec349f95 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.cc @@ -48,10 +48,8 @@ #include "Geometry/CommonDetUnit/interface/GeomDet.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" @@ -67,7 +65,9 @@ namespace cms { : first_(true), hitsProducer_(iConfig.getParameter("hitsProducer")), trackerContainers_(iConfig.getParameter >("ROUList")), - geometryType_(iConfig.getParameter("GeometryType")), + pDDToken_(iC.esConsumes(edm::ESInputTag("", iConfig.getParameter("GeometryType")))), + pSetupToken_(iC.esConsumes()), + tTopoToken_(iC.esConsumes()), isOuterTrackerReadoutAnalog_(iConfig.getParameter("isOTreadoutAnalog")), premixStage1_(iConfig.getParameter("premixStage1")), makeDigiSimLinks_( @@ -90,32 +90,11 @@ namespace cms { producesCollector.produces >("Tracker").setBranchAlias(alias2); } // creating algorithm objects and pushing them into the map - algomap_[AlgorithmType::InnerPixel] = std::make_unique(iConfig); - algomap_[AlgorithmType::InnerPixel3D] = std::make_unique(iConfig); - algomap_[AlgorithmType::PixelinPS] = std::make_unique(iConfig); - algomap_[AlgorithmType::StripinPS] = std::make_unique(iConfig); - algomap_[AlgorithmType::TwoStrip] = std::make_unique(iConfig); - } - - void Phase2TrackerDigitizer::beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& iSetup) { - iSetup.get().get(pSetup_); - iSetup.get().get(tTopoHand_); - - if (theTkDigiGeomWatcher_.check(iSetup)) { - iSetup.get().get(geometryType_, pDD_); - - // reset cache - ModuleTypeCache().swap(moduleTypeCache_); - detectorUnits_.clear(); - for (auto const& det_u : pDD_->detUnits()) { - uint32_t rawId = det_u->geographicalId().rawId(); - if (DetId(rawId).det() == DetId::Detector::Tracker) { - const Phase2TrackerGeomDetUnit* pixdet = dynamic_cast(det_u); - assert(pixdet); - detectorUnits_.emplace(rawId, pixdet); - } - } - } + algomap_[AlgorithmType::InnerPixel] = std::make_unique(iConfig, iC); + algomap_[AlgorithmType::InnerPixel3D] = std::make_unique(iConfig, iC); + algomap_[AlgorithmType::PixelinPS] = std::make_unique(iConfig, iC); + algomap_[AlgorithmType::StripinPS] = std::make_unique(iConfig, iC); + algomap_[AlgorithmType::TwoStrip] = std::make_unique(iConfig, iC); } Phase2TrackerDigitizer::~Phase2TrackerDigitizer() {} @@ -159,6 +138,25 @@ namespace cms { "in the configuration file or remove the modules that require it."; } + pSetup_ = &iSetup.getData(pSetupToken_); + tTopo_ = &iSetup.getData(tTopoToken_); + + if (theTkDigiGeomWatcher_.check(iSetup)) { + pDD_ = &iSetup.getData(pDDToken_); + + // reset cache + ModuleTypeCache().swap(moduleTypeCache_); + detectorUnits_.clear(); + for (auto const& det_u : pDD_->detUnits()) { + uint32_t rawId = det_u->geographicalId().rawId(); + if (DetId(rawId).det() == DetId::Detector::Tracker) { + const Phase2TrackerGeomDetUnit* pixdet = dynamic_cast(det_u); + assert(pixdet); + detectorUnits_.emplace(rawId, pixdet); + } + } + } + // Must initialize all the algorithms for (auto const& el : algomap_) { if (first_) @@ -274,8 +272,6 @@ namespace cms { void Phase2TrackerDigitizer::addPixelCollection(edm::Event& iEvent, const edm::EventSetup& iSetup, const bool ot_analog) { - const TrackerTopology* tTopo = tTopoHand_.product(); - std::vector > digiVector; std::vector > digiLinkVector; for (auto const& det_u : pDD_->detUnits()) { @@ -290,7 +286,7 @@ namespace cms { continue; } std::map digi_map; - fiter->second->digitize(dynamic_cast(det_u), digi_map, tTopo); + fiter->second->digitize(dynamic_cast(det_u), digi_map, tTopo_); edm::DetSet collector(rawId); edm::DetSet linkcollector(rawId); @@ -342,8 +338,6 @@ namespace { namespace cms { template void Phase2TrackerDigitizer::addOuterTrackerCollection(edm::Event& iEvent, const edm::EventSetup& iSetup) { - const TrackerTopology* tTopo = tTopoHand_.product(); - std::vector > digiVector; std::vector > digiLinkVector; for (auto const& det_u : pDD_->detUnits()) { @@ -355,7 +349,7 @@ namespace cms { continue; } std::map digi_map; - fiter->second->digitize(dynamic_cast(det_u), digi_map, tTopo); + fiter->second->digitize(dynamic_cast(det_u), digi_map, tTopo_); edm::DetSet collector(rawId); edm::DetSet linkcollector(rawId); diff --git a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.h b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.h index 9370d947d46c2..7a8889959700a 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.h +++ b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizer.h @@ -16,12 +16,14 @@ #include #include -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ESWatcher.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerFwd.h" @@ -60,7 +62,6 @@ namespace cms { void accumulate(PileUpEventPrincipal const& e, edm::EventSetup const& c, edm::StreamID const&) override; void finalizeEvent(edm::Event& e, edm::EventSetup const& c) override; virtual void beginJob() {} - void beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& iSetup) override; template void accumulate_local(T const& iEvent, edm::EventSetup const& iSetup); @@ -96,11 +97,13 @@ namespace cms { std::map > algomap_; const std::string hitsProducer_; const vstring trackerContainers_; - const std::string geometryType_; - edm::ESHandle pDD_; - edm::ESHandle pSetup_; + const edm::ESGetToken pDDToken_; + const edm::ESGetToken pSetupToken_; + const edm::ESGetToken tTopoToken_; + const TrackerGeometry* pDD_ = nullptr; + const MagneticField* pSetup_ = nullptr; std::map detectorUnits_; - edm::ESHandle tTopoHand_; + const TrackerTopology* tTopo_ = nullptr; edm::ESWatcher theTkDigiGeomWatcher_; const bool isOuterTrackerReadoutAnalog_; const bool premixStage1_; diff --git a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc index 314171143adbc..a3293b5c7600c 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.cc @@ -57,7 +57,8 @@ namespace { } } // namespace Phase2TrackerDigitizerAlgorithm::Phase2TrackerDigitizerAlgorithm(const edm::ParameterSet& conf_common, - const edm::ParameterSet& conf_specific) + const edm::ParameterSet& conf_specific, + edm::ConsumesCollector iC) : _signal(), makeDigiSimLinks_(conf_common.getUntrackedParameter("makeDigiSimLinks", true)), use_ineff_from_db_(conf_specific.getParameter("Inefficiency_DB")), @@ -165,7 +166,7 @@ Phase2TrackerDigitizerAlgorithm::Phase2TrackerDigitizerAlgorithm(const edm::Para fluctuate_(fluctuateCharge_ ? std::make_unique() : nullptr), theNoiser_(addNoise_ ? std::make_unique() : nullptr), theSiPixelGainCalibrationService_( - use_ineff_from_db_ ? std::make_unique(conf_specific) : nullptr), + use_ineff_from_db_ ? std::make_unique(conf_specific, iC) : nullptr), subdetEfficiencies_(conf_specific) { LogDebug("Phase2TrackerDigitizerAlgorithm") << "Phase2TrackerDigitizerAlgorithm constructed\n" @@ -893,9 +894,9 @@ void Phase2TrackerDigitizerAlgorithm::module_killing_DB(const Phase2TrackerGeomD std::vector badrocpositions; for (size_t j = 0; j < static_cast(ncol); j++) { if (siPixelBadModule_->IsRocBad(detID, j)) { - std::vector path = fedCablingMap_.product()->pathToDetUnit(detID); + std::vector path = fedCablingMap_->pathToDetUnit(detID); for (auto const& p : path) { - const PixelROC* myroc = fedCablingMap_.product()->findItem(p); + const PixelROC* myroc = fedCablingMap_->findItem(p); if (myroc->idInDetUnit() == j) { LocalPixel::RocRowCol local = {39, 25}; //corresponding to center of ROC row, col GlobalPixel global = myroc->toGlobal(LocalPixel(local)); diff --git a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h index dabeff72eb866..df855ff7a0ecd 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h +++ b/SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h @@ -6,7 +6,7 @@ #include #include "DataFormats/GeometrySurface/interface/GloballyPositioned.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "DataFormats/Math/interface/approx_exp.h" #include "SimDataFormats/TrackerDigiSimLink/interface/PixelDigiSimLink.h" @@ -29,11 +29,6 @@ namespace CLHEP { class RandFlat; } // namespace CLHEP -namespace edm { - class EventSetup; - class ParameterSet; -} // namespace edm - class DetId; class GaussianTailNoiseGenerator; class SiG4UniversalFluctuation; @@ -58,7 +53,9 @@ constexpr double c_inv = 1.0 / c_cm_ns; class Phase2TrackerDigitizerAlgorithm { public: - Phase2TrackerDigitizerAlgorithm(const edm::ParameterSet& conf_common, const edm::ParameterSet& conf_specific); + Phase2TrackerDigitizerAlgorithm(const edm::ParameterSet& conf_common, + const edm::ParameterSet& conf_specific, + edm::ConsumesCollector iC); virtual ~Phase2TrackerDigitizerAlgorithm(); // initialization that cannot be done in the constructor @@ -85,17 +82,17 @@ class Phase2TrackerDigitizerAlgorithm { protected: // Accessing Inner Tracker Lorentz angle from DB: - edm::ESHandle siPixelLorentzAngle_; + const SiPixelLorentzAngle* siPixelLorentzAngle_; // Accessing Outer Tracker Lorentz angle from DB: - edm::ESHandle siPhase2OTLorentzAngle_; + const SiPhase2OuterTrackerLorentzAngle* siPhase2OTLorentzAngle_; // Accessing Dead pixel modules from DB: - edm::ESHandle siPixelBadModule_; + const SiPixelQuality* siPixelBadModule_; // Accessing Map and Geom: - edm::ESHandle fedCablingMap_; - edm::ESHandle geom_; + const SiPixelFedCablingMap* fedCablingMap_; + const TrackerGeometry* geom_; struct SubdetEfficiencies { SubdetEfficiencies(const edm::ParameterSet& conf); std::vector barrel_efficiencies; diff --git a/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc index 421425ebe40f7..df9f6bbd0c76e 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.cc @@ -1,19 +1,14 @@ #include "SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.h" // Framework infrastructure +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" // Calibration & Conditions #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h" -#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" //#include @@ -23,9 +18,11 @@ using namespace sipixelobjects; -// Analogously to CMSUnits (no um defined) -constexpr double operator""_um(long double length) { return length * 1e-4; } -constexpr double operator""_um_inv(long double length) { return length * 1e4; } +namespace { + // Analogously to CMSUnits (no um defined) + constexpr double operator""_um(long double length) { return length * 1e-4; } + constexpr double operator""_um_inv(long double length) { return length * 1e4; } +} // namespace void Pixel3DDigitizerAlgorithm::init(const edm::EventSetup& es) { // XXX: Just copied from PixelDigitizer Algorithm @@ -37,22 +34,23 @@ void Pixel3DDigitizerAlgorithm::init(const edm::EventSetup& es) { } if (use_deadmodule_DB_) { - es.get().get(siPixelBadModule_); + siPixelBadModule_ = &es.getData(siPixelBadModuleToken_); } if (use_LorentzAngle_DB_) { // Get Lorentz angle from DB record - es.get().get(siPixelLorentzAngle_); + siPixelLorentzAngle_ = &es.getData(siPixelLorentzAngleToken_); } // gets the map and geometry from the DB (to kill ROCs) - es.get().get(fedCablingMap_); - es.get().get(geom_); + fedCablingMap_ = &es.getData(fedCablingMapToken_); + geom_ = &es.getData(geomToken_); } -Pixel3DDigitizerAlgorithm::Pixel3DDigitizerAlgorithm(const edm::ParameterSet& conf) +Pixel3DDigitizerAlgorithm::Pixel3DDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : Phase2TrackerDigitizerAlgorithm(conf.getParameter("AlgorithmCommon"), - conf.getParameter("Pixel3DDigitizerAlgorithm")), + conf.getParameter("Pixel3DDigitizerAlgorithm"), + iC), np_column_radius_( (conf.getParameter("Pixel3DDigitizerAlgorithm").getParameter("NPColumnRadius")) * 1.0_um), @@ -61,10 +59,17 @@ Pixel3DDigitizerAlgorithm::Pixel3DDigitizerAlgorithm(const edm::ParameterSet& co 1.0_um), np_column_gap_( (conf.getParameter("Pixel3DDigitizerAlgorithm").getParameter("NPColumnGap")) * - 1.0_um) { + 1.0_um), + fedCablingMapToken_(iC.esConsumes()), + geomToken_(iC.esConsumes()) { // XXX - NEEDED? pixelFlag_ = true; + if (use_deadmodule_DB_) + siPixelBadModuleToken_ = iC.esConsumes(); + if (use_LorentzAngle_DB_) + siPixelLorentzAngleToken_ = iC.esConsumes(); + edm::LogInfo("Pixel3DDigitizerAlgorithm") << "Algorithm constructed \n" << "Configuration parameters:\n" diff --git a/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.h b/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.h index 955315960a5ac..f91e9d3b19413 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.h +++ b/SimTracker/SiPhase2Digitizer/plugins/Pixel3DDigitizerAlgorithm.h @@ -12,6 +12,12 @@ // Clara Lasaosa Garcia (IFCA) //-------------------------------------------------------------- +#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" +#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "FWCore/Utilities/interface/ESGetToken.h" #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h" // Data formats @@ -22,7 +28,7 @@ class Pixel3DDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { public: - Pixel3DDigitizerAlgorithm(const edm::ParameterSet& conf); + Pixel3DDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~Pixel3DDigitizerAlgorithm() override; // initialization that cannot be done in the constructor @@ -61,6 +67,11 @@ class Pixel3DDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { // Gap of np column const float np_column_gap_; + edm::ESGetToken siPixelBadModuleToken_; + edm::ESGetToken siPixelLorentzAngleToken_; + const edm::ESGetToken fedCablingMapToken_; + const edm::ESGetToken geomToken_; + // Check if a carrier is inside the column: The point should // be described in the pixel cell frame const bool is_inside_n_column_(const LocalPoint& p, const float& sensor_thickness) const; diff --git a/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.cc index a0561f09516cf..d36d01e883904 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.cc @@ -4,18 +4,12 @@ #include "SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h" -#include "CondFormats/SiPixelObjects/interface/GlobalPixel.h" -#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" - // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" @@ -27,19 +21,20 @@ void PixelDigitizerAlgorithm::init(const edm::EventSetup& es) { theSiPixelGainCalibrationService_->setESObjects(es); if (use_deadmodule_DB_) - es.get().get(siPixelBadModule_); + siPixelBadModule_ = &es.getData(siPixelBadModuleToken_); if (use_LorentzAngle_DB_) // Get Lorentz angle from DB record - es.get().get(siPixelLorentzAngle_); + siPixelLorentzAngle_ = &es.getData(siPixelLorentzAngleToken_); // gets the map and geometry from the DB (to kill ROCs) - es.get().get(fedCablingMap_); - es.get().get(geom_); + fedCablingMap_ = &es.getData(fedCablingMapToken_); + geom_ = &es.getData(geomToken_); } -PixelDigitizerAlgorithm::PixelDigitizerAlgorithm(const edm::ParameterSet& conf) +PixelDigitizerAlgorithm::PixelDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : Phase2TrackerDigitizerAlgorithm(conf.getParameter("AlgorithmCommon"), - conf.getParameter("PixelDigitizerAlgorithm")), + conf.getParameter("PixelDigitizerAlgorithm"), + iC), odd_row_interchannelCoupling_next_row_(conf.getParameter("PixelDigitizerAlgorithm") .getParameter("Odd_row_interchannelCoupling_next_row")), even_row_interchannelCoupling_next_row_(conf.getParameter("PixelDigitizerAlgorithm") @@ -52,7 +47,13 @@ PixelDigitizerAlgorithm::PixelDigitizerAlgorithm(const edm::ParameterSet& conf) .getParameter("Even_column_interchannelCoupling_next_column")), apply_timewalk_(conf.getParameter("PixelDigitizerAlgorithm").getParameter("ApplyTimewalk")), timewalk_model_( - conf.getParameter("PixelDigitizerAlgorithm").getParameter("TimewalkModel")) { + conf.getParameter("PixelDigitizerAlgorithm").getParameter("TimewalkModel")), + fedCablingMapToken_(iC.esConsumes()), + geomToken_(iC.esConsumes()) { + if (use_deadmodule_DB_) + siPixelBadModuleToken_ = iC.esConsumes(); + if (use_LorentzAngle_DB_) + siPixelLorentzAngleToken_ = iC.esConsumes(); pixelFlag_ = true; LogDebug("PixelDigitizerAlgorithm") << "Algorithm constructed " << "Configuration parameters:" diff --git a/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.h b/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.h index 10f3d651dfe83..3fb7a37ded709 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.h +++ b/SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.h @@ -1,6 +1,12 @@ #ifndef _SimTracker_SiPhase2Digitizer_PixelDigitizerAlgorithm_h #define _SimTracker_SiPhase2Digitizer_PixelDigitizerAlgorithm_h +#include "CondFormats/SiPixelObjects/interface/GlobalPixel.h" +#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h" class PixelDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { @@ -35,7 +41,7 @@ class PixelDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { }; public: - PixelDigitizerAlgorithm(const edm::ParameterSet& conf); + PixelDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~PixelDigitizerAlgorithm() override; // initialization that cannot be done in the constructor @@ -54,5 +60,10 @@ class PixelDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { // Timewalk parameters bool apply_timewalk_; const TimewalkModel timewalk_model_; + + edm::ESGetToken siPixelBadModuleToken_; + edm::ESGetToken siPixelLorentzAngleToken_; + const edm::ESGetToken fedCablingMapToken_; + const edm::ESGetToken geomToken_; }; #endif diff --git a/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.cc b/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.cc index 5f748ef70dc6c..ee994cc6a3855 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.cc +++ b/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.cc @@ -3,13 +3,11 @@ #include "SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h" // Geometry -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" @@ -29,19 +27,23 @@ namespace { void SSDigitizerAlgorithm::init(const edm::EventSetup& es) { if (use_LorentzAngle_DB_) { // Get Lorentz angle from DB record - es.get().get(siPhase2OTLorentzAngle_); + siPhase2OTLorentzAngle_ = &es.getData(siPhase2OTLorentzAngleToken_); } - es.get().get(geom_); + geom_ = &es.getData(geomToken_); } -SSDigitizerAlgorithm::SSDigitizerAlgorithm(const edm::ParameterSet& conf) +SSDigitizerAlgorithm::SSDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) : Phase2TrackerDigitizerAlgorithm(conf.getParameter("AlgorithmCommon"), - conf.getParameter("SSDigitizerAlgorithm")), + conf.getParameter("SSDigitizerAlgorithm"), + iC), hitDetectionMode_(conf.getParameter("SSDigitizerAlgorithm").getParameter("HitDetectionMode")), pulseShapeParameters_(conf.getParameter("SSDigitizerAlgorithm") .getParameter >("PulseShapeParameters")), - deadTime_(conf.getParameter("SSDigitizerAlgorithm").getParameter("CBCDeadTime")) { + deadTime_(conf.getParameter("SSDigitizerAlgorithm").getParameter("CBCDeadTime")), + geomToken_(iC.esConsumes()) { + if (use_LorentzAngle_DB_) + siPhase2OTLorentzAngleToken_ = iC.esConsumes(); pixelFlag_ = false; LogDebug("SSDigitizerAlgorithm ") << "SSDigitizerAlgorithm constructed " << "Configuration parameters:" diff --git a/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.h b/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.h index a0ebea3da3d9b..155e2c0c63662 100644 --- a/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.h +++ b/SimTracker/SiPhase2Digitizer/plugins/SSDigitizerAlgorithm.h @@ -1,11 +1,14 @@ #ifndef _SimTracker_SiPhase2Digitizer_SSDigitizerAlgorithm_h #define _SimTracker_SiPhase2Digitizer_SSDigitizerAlgorithm_h +#include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "SimTracker/SiPhase2Digitizer/plugins/Phase2TrackerDigitizerAlgorithm.h" class SSDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { public: - SSDigitizerAlgorithm(const edm::ParameterSet& conf); + SSDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~SSDigitizerAlgorithm() override; // initialization that cannot be done in the constructor @@ -27,6 +30,8 @@ class SSDigitizerAlgorithm : public Phase2TrackerDigitizerAlgorithm { std::vector pulseShapeVec_; std::vector pulseShapeParameters_; float deadTime_; + edm::ESGetToken siPhase2OTLorentzAngleToken_; + const edm::ESGetToken geomToken_; static constexpr float bx_time{25}; static constexpr size_t interpolationPoints{1000}; static constexpr int interpolationStep{10}; diff --git a/SimTracker/SiPixelDigitizer/plugins/PreMixingSiPixelWorker.cc b/SimTracker/SiPixelDigitizer/plugins/PreMixingSiPixelWorker.cc index ec8ae7325c97d..bdd9c8caee2ed 100644 --- a/SimTracker/SiPixelDigitizer/plugins/PreMixingSiPixelWorker.cc +++ b/SimTracker/SiPixelDigitizer/plugins/PreMixingSiPixelWorker.cc @@ -3,7 +3,6 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ProducesCollector.h" #include "FWCore/Utilities/interface/RandomNumberGenerator.h" @@ -55,8 +54,8 @@ class PreMixingSiPixelWorker : public PreMixingWorker { edm::EDGetTokenT> PixelDigiToken_; // Token to retrieve information edm::EDGetTokenT> PixelDigiPToken_; // Token to retrieve information - - edm::ESHandle pDD; + const edm::ESGetToken tTopoToken_; + const edm::ESGetToken pDDToken_; SiPixelDigitizerAlgorithm digitizer_; @@ -73,8 +72,6 @@ class PreMixingSiPixelWorker : public PreMixingWorker { SiGlobalIndex SiHitStorage_; - const std::string geometryType_; - bool firstInitializeEvent_ = true; bool firstFinalizeEvent_ = true; }; @@ -83,7 +80,9 @@ class PreMixingSiPixelWorker : public PreMixingWorker { PreMixingSiPixelWorker::PreMixingSiPixelWorker(const edm::ParameterSet& ps, edm::ProducesCollector producesCollector, edm::ConsumesCollector&& iC) - : digitizer_(ps), geometryType_(ps.getParameter("PixGeometryType")) { + : tTopoToken_(iC.esConsumes()), + pDDToken_(iC.esConsumes(edm::ESInputTag("", ps.getParameter("PixGeometryType")))), + digitizer_(ps, iC) { // declare the products to produce pixeldigi_collectionSig_ = ps.getParameter("pixeldigiCollectionSig"); @@ -103,7 +102,6 @@ PreMixingSiPixelWorker::PreMixingSiPixelWorker(const edm::ParameterSet& ps, // Need an event initialization void PreMixingSiPixelWorker::initializeEvent(edm::Event const& e, edm::EventSetup const& iSetup) { - iSetup.get().get(geometryType_, pDD); if (firstInitializeEvent_) { digitizer_.init(iSetup); firstInitializeEvent_ = false; @@ -277,9 +275,8 @@ void PreMixingSiPixelWorker::put(edm::Event& e, edm::Service rng; CLHEP::HepRandomEngine* engine = &rng->getEngine(e.streamID()); - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + auto const& pDD = iSetup.getData(pDDToken_); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); if (digitizer_.killBadFEDChannels()) { std::unique_ptr PixelFEDChannelCollection_ = digitizer_.chooseScenario(ps, engine); @@ -289,7 +286,7 @@ void PreMixingSiPixelWorker::put(edm::Event& e, e.put(std::move(PixelFEDChannelCollection_), PixelDigiCollectionDM_); } - for (const auto& iu : pDD->detUnits()) { + for (const auto& iu : pDD.detUnits()) { if (iu->type().isTrackerPixel()) { edm::DetSet collector(iu->geographicalId().rawId()); edm::DetSet linkcollector( diff --git a/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.cc b/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.cc index 1d1f601f222c3..a2b894ba5d29d 100644 --- a/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.cc +++ b/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.cc @@ -14,62 +14,23 @@ #include "SimTracker/Common/interface/SiG4UniversalFluctuation.h" #include "SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.h" -#include -#include "FWCore/Utilities/interface/RandomNumberGenerator.h" -#include "CLHEP/Random/RandGaussQ.h" -#include "CLHEP/Random/RandFlat.h" -#include "CLHEP/Random/RandGeneral.h" - //#include "PixelIndices.h" #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" -#include "Geometry/Records/interface/IdealGeometryRecord.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/Utilities/interface/Exception.h" -#include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationOfflineSimService.h" // Accessing dead pixel modules from the DB: #include "DataFormats/DetId/interface/DetId.h" #include "CondFormats/SiPixelObjects/interface/GlobalPixel.h" -#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelDynamicInefficiencyRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelStatusScenarioProbabilityRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelStatusScenariosRcd.h" -#include "CondFormats/DataRecord/interface/SiPixel2DTemplateDBObjectRcd.h" - -#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFedCabling.h" #include "CondFormats/SiPixelObjects/interface/PixelIndices.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelLorentzAngle.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h" #include "CondFormats/SiPixelObjects/interface/PixelROC.h" #include "CondFormats/SiPixelObjects/interface/LocalPixel.h" -#include "CondFormats/SiPixelObjects/interface/CablingPathToDetUnit.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelDynamicInefficiency.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFEDChannelContainer.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelQualityProbabilities.h" #include "CondFormats/SiPixelObjects/interface/SiPixel2DTemplateDBObject.h" -#include "CondFormats/SiPixelObjects/interface/SiPixelFrameReverter.h" -#include "CondFormats/SiPixelObjects/interface/PixelFEDCabling.h" -#include "CondFormats/SiPixelObjects/interface/PixelFEDLink.h" -#include "DataFormats/FEDRawData/interface/FEDNumbering.h" -#include "SimDataFormats/PileupSummaryInfo/interface/PileupMixingContent.h" -#include "SimDataFormats/Track/interface/SimTrack.h" - -// Geometry -#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" -#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" - #include "CondFormats/SiPixelObjects/interface/PixelROC.h" using namespace edm; @@ -78,13 +39,8 @@ using namespace sipixelobjects; void SiPixelChargeReweightingAlgorithm::init(const edm::EventSetup& es) { // Read template files for charge reweighting if (UseReweighting) { - edm::ESHandle SiPixel2DTemp_den; - es.get().get("denominator", SiPixel2DTemp_den); - dbobject_den = SiPixel2DTemp_den.product(); - - edm::ESHandle SiPixel2DTemp_num; - es.get().get("numerator", SiPixel2DTemp_num); - dbobject_num = SiPixel2DTemp_num.product(); + dbobject_den = &es.getData(SiPixel2DTemp_den_token_); + dbobject_num = &es.getData(SiPixel2DTemp_num_token_); int numOfTemplates = dbobject_den->numOfTempl() + dbobject_num->numOfTempl(); templateStores_.reserve(numOfTemplates); @@ -97,7 +53,8 @@ void SiPixelChargeReweightingAlgorithm::init(const edm::EventSetup& es) { //========================================================================= -SiPixelChargeReweightingAlgorithm::SiPixelChargeReweightingAlgorithm(const edm::ParameterSet& conf) +SiPixelChargeReweightingAlgorithm::SiPixelChargeReweightingAlgorithm(const edm::ParameterSet& conf, + edm::ConsumesCollector iC) : templ2D(templateStores_), @@ -109,6 +66,10 @@ SiPixelChargeReweightingAlgorithm::SiPixelChargeReweightingAlgorithm(const edm:: UseReweighting(conf.getParameter("UseReweighting")), PrintClusters(conf.getParameter("PrintClusters")), PrintTemplates(conf.getParameter("PrintTemplates")) { + if (UseReweighting) { + SiPixel2DTemp_den_token_ = iC.esConsumes(edm::ESInputTag("", "denominator")); + SiPixel2DTemp_num_token_ = iC.esConsumes(edm::ESInputTag("", "numerator")); + } edm::LogVerbatim("PixelDigitizer ") << "SiPixelChargeReweightingAlgorithm constructed" << " with UseReweighting = " << UseReweighting; } diff --git a/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.h b/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.h index 240a364ef402e..8e32a7edf7c39 100644 --- a/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.h +++ b/SimTracker/SiPixelDigitizer/plugins/SiPixelChargeReweightingAlgorithm.h @@ -1,39 +1,22 @@ #ifndef SimTracker_SiPixelDigitizer_SiPixelChargeReweightingAlgorithm_h #define SimTracker_SiPixelDigitizer_SiPixelChargeReweightingAlgorithm_h +#include "CondFormats/DataRecord/interface/SiPixel2DTemplateDBObjectRcd.h" +#include "CondFormats/SiPixelObjects/interface/SiPixel2DTemplateDBObject.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.h" // forward declarations - -// For the random numbers -namespace CLHEP { - class HepRandomEngine; -} - -namespace edm { - class EventSetup; - class ParameterSet; -} // namespace edm - class DetId; class GaussianTailNoiseGenerator; class PixelDigi; class PixelDigiSimLink; class PixelGeomDetUnit; class SiG4UniversalFluctuation; -class SiPixelFedCablingMap; -class SiPixelGainCalibrationOfflineSimService; -class SiPixelLorentzAngle; -class SiPixelQuality; -class SiPixelDynamicInefficiency; -class TrackerGeometry; -class TrackerTopology; -class SiPixelFEDChannelContainer; -class SiPixelQualityProbabilities; class SiPixelChargeReweightingAlgorithm { public: - SiPixelChargeReweightingAlgorithm(const edm::ParameterSet& conf); + SiPixelChargeReweightingAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~SiPixelChargeReweightingAlgorithm(); // initialization that cannot be done in the constructor @@ -73,6 +56,8 @@ class SiPixelChargeReweightingAlgorithm { std::vector templateStores_; + edm::ESGetToken SiPixel2DTemp_den_token_; + edm::ESGetToken SiPixel2DTemp_num_token_; const SiPixel2DTemplateDBObject* dbobject_den; const SiPixel2DTemplateDBObject* dbobject_num; diff --git a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.cc b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.cc index 850e403ca1cd0..f78fb35d0a190 100644 --- a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.cc +++ b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.cc @@ -28,7 +28,6 @@ #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "DataFormats/Common/interface/Handle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/SiPixelDigi/interface/PixelDigi.h" @@ -41,14 +40,12 @@ #include "DataFormats/GeometryVector/interface/LocalPoint.h" #include "DataFormats/GeometryVector/interface/LocalVector.h" #include "Geometry/CommonDetUnit/interface/GeomDet.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h" -#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" @@ -57,7 +54,6 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" @@ -90,9 +86,11 @@ namespace cms { _pixeldigialgo(), hitsProducer(iConfig.getParameter("hitsProducer")), trackerContainers(iConfig.getParameter >("RoutList")), - geometryType(iConfig.getParameter("PixGeometryType")), pilotBlades(iConfig.exists("enablePilotBlades") ? iConfig.getParameter("enablePilotBlades") : false), - NumberOfEndcapDisks(iConfig.exists("NumPixelEndcap") ? iConfig.getParameter("NumPixelEndcap") : 2) { + NumberOfEndcapDisks(iConfig.exists("NumPixelEndcap") ? iConfig.getParameter("NumPixelEndcap") : 2), + tTopoToken_(iC.esConsumes()), + pDDToken_(iC.esConsumes(edm::ESInputTag("", iConfig.getParameter("PixGeometryType")))), + pSetupToken_(iC.esConsumes()) { edm::LogInfo("PixelDigitizer ") << "Enter the Pixel Digitizer"; const std::string alias("simSiPixelDigis"); @@ -112,7 +110,7 @@ namespace cms { "in the configuration file or remove the modules that require it."; } - _pixeldigialgo = std::make_unique(iConfig); + _pixeldigialgo = std::make_unique(iConfig, iC); if (NumberOfEndcapDisks != 2) producesCollector.produces(); } @@ -130,9 +128,7 @@ namespace cms { if (hSimHits.isValid()) { std::set detIds; std::vector const& simHits = *hSimHits.product(); - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); for (std::vector::const_iterator it = simHits.begin(), itEnd = simHits.end(); it != itEnd; ++it, ++globalSimHitIndex) { unsigned int detId = (*it).detUnitId(); @@ -177,11 +173,9 @@ namespace cms { randomEngine_ = &rng->getEngine(e.streamID()); _pixeldigialgo->initializeEvent(); - iSetup.get().get(geometryType, pDD); - iSetup.get().get(pSetup); - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + pDD = &iSetup.getData(pDDToken_); + pSetup = &iSetup.getData(pSetupToken_); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); // FIX THIS! We only need to clear and (re)fill this map when the geometry type IOV changes. Use ESWatcher to determine this. if (true) { // Replace with ESWatcher @@ -250,9 +244,7 @@ namespace cms { // ------------ method called to produce the data ------------ void SiPixelDigitizer::finalizeEvent(edm::Event& iEvent, const edm::EventSetup& iSetup) { - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); std::vector > theDigiVector; std::vector > theDigiLinkVector; diff --git a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.h b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.h index 361dc7333f932..500e303d6e133 100644 --- a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.h +++ b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizer.h @@ -18,20 +18,16 @@ #include #include -#include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/ProducesCollector.h" +#include "DataFormats/Common/interface/Handle.h" #include "DataFormats/Provenance/interface/EventID.h" - -namespace edm { - class ConsumesCollector; - class Event; - class EventSetup; - class ParameterSet; - template - class Handle; - class StreamID; -} // namespace edm +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "FWCore/Framework/interface/ProducesCollector.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" class MagneticField; class PileUpEventPrincipal; @@ -91,9 +87,8 @@ namespace cms { typedef std::vector vstring; const std::string hitsProducer; const vstring trackerContainers; - const std::string geometryType; - edm::ESHandle pDD; - edm::ESHandle pSetup; + const TrackerGeometry* pDD = nullptr; + const MagneticField* pSetup = nullptr; std::map detectorUnits; CLHEP::HepRandomEngine* randomEngine_ = nullptr; @@ -102,6 +97,10 @@ namespace cms { const bool pilotBlades; // Default = false const int NumberOfEndcapDisks; // Default = 2 + const edm::ESGetToken tTopoToken_; + const edm::ESGetToken pDDToken_; + const edm::ESGetToken pSetupToken_; + // infrastructure to reject dead pixels as defined in db (added by F.Blekman) }; } // namespace cms diff --git a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.cc b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.cc index 6bd6ef9419d1c..c38e296bde6c2 100644 --- a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.cc +++ b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.cc @@ -74,14 +74,6 @@ #include "CondFormats/SiPixelObjects/interface/GlobalPixel.h" -#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelDynamicInefficiencyRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelStatusScenarioProbabilityRcd.h" -#include "CondFormats/DataRecord/interface/SiPixelStatusScenariosRcd.h" -#include "CondFormats/DataRecord/interface/SiPixel2DTemplateDBObjectRcd.h" - #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h" #include "CondFormats/SiPixelObjects/interface/SiPixelFedCabling.h" @@ -105,7 +97,6 @@ // Geometry #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" #include "CondFormats/SiPixelObjects/interface/PixelROC.h" @@ -118,22 +109,21 @@ void SiPixelDigitizerAlgorithm::init(const edm::EventSetup& es) { theSiPixelGainCalibrationService_->setESObjects(es); } if (use_deadmodule_DB_) { - es.get().get(siPixelQualityLabel, SiPixelBadModule_); + SiPixelBadModule_ = &es.getData(SiPixelBadModuleToken_); } if (use_LorentzAngle_DB_) { // Get Lorentz angle from DB record - es.get().get(SiPixelLorentzAngle_); + SiPixelLorentzAngle_ = &es.getData(SiPixelLorentzAngleToken_); } //gets the map and geometry from the DB (to kill ROCs) - es.get().get(map_); - es.get().get(geom_); + map_ = &es.getData(mapToken_); + geom_ = &es.getData(geomToken_); if (KillBadFEDChannels) { - es.get().get(scenarioProbabilityHandle); - es.get().get(PixelFEDChannelCollectionMapHandle); - quality_map = PixelFEDChannelCollectionMapHandle.product(); + scenarioProbability_ = &es.getData(scenarioProbabilityToken_); + quality_map = &es.getData(PixelFEDChannelCollectionMapToken_); - SiPixelQualityProbabilities::probabilityMap m_probabilities = scenarioProbabilityHandle->getProbability_Map(); + SiPixelQualityProbabilities::probabilityMap m_probabilities = scenarioProbability_->getProbability_Map(); std::vector allScenarios; std::transform(quality_map->begin(), @@ -180,11 +170,10 @@ void SiPixelDigitizerAlgorithm::init(const edm::EventSetup& es) { //========================================================================= -SiPixelDigitizerAlgorithm::SiPixelDigitizerAlgorithm(const edm::ParameterSet& conf) - : +SiPixelDigitizerAlgorithm::SiPixelDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) + : mapToken_(iC.esConsumes()), + geomToken_(iC.esConsumes()), - siPixelQualityLabel( - conf.getParameter("SiPixelQualityLabel")), //string to specify SiPixelQuality label _signal(), makeDigiSimLinks_(conf.getUntrackedParameter("makeDigiSimLinks", true)), use_ineff_from_db_(conf.getParameter("useDB")), @@ -320,10 +309,33 @@ SiPixelDigitizerAlgorithm::SiPixelDigitizerAlgorithm(const edm::ParameterSet& co fluctuate(fluctuateCharge ? new SiG4UniversalFluctuation() : nullptr), theNoiser(addNoise ? new GaussianTailNoiseGenerator() : nullptr), calmap(doMissCalibrate ? initCal() : std::map >()), - theSiPixelGainCalibrationService_(use_ineff_from_db_ ? new SiPixelGainCalibrationOfflineSimService(conf) + theSiPixelGainCalibrationService_(use_ineff_from_db_ ? new SiPixelGainCalibrationOfflineSimService(conf, iC) : nullptr), pixelEfficiencies_(conf, AddPixelInefficiency, NumberOfBarrelLayers, NumberOfEndcapDisks), pixelAging_(conf, AddPixelAging, NumberOfBarrelLayers, NumberOfEndcapDisks) { + if (use_deadmodule_DB_) { + //string to specify SiPixelQuality label + SiPixelBadModuleToken_ = iC.esConsumes(edm::ESInputTag("", conf.getParameter("SiPixelQualityLabel"))); + } + if (use_LorentzAngle_DB_) { + SiPixelLorentzAngleToken_ = iC.esConsumes(); + } + if (AddPixelInefficiency && !pixelEfficiencies_.FromConfig) { + // TODO: in practice the bunchspacing is known at MixingModule + // construction time, and thus we could declare the consumption of + // the actual product. In principle, however, MixingModule is + // capable of updating (parts of) its configuration from the + // EventSetup, so if that capability is really needed we'd need to + // invent something new (similar to mayConsume in the ESProducer + // side). So for now, let's consume both payloads. + SiPixelDynamicInefficiencyToken_ = iC.esConsumes(); + SiPixelDynamicInefficiencyToken50ns_ = iC.esConsumes(edm::ESInputTag("", "50ns")); + } + if (KillBadFEDChannels) { + scenarioProbabilityToken_ = iC.esConsumes(); + PixelFEDChannelCollectionMapToken_ = iC.esConsumes(); + } + LogInfo("PixelDigitizer ") << "SiPixelDigitizerAlgorithm constructed" << "Configuration parameters:" << "Threshold/Gain = " @@ -334,7 +346,7 @@ SiPixelDigitizerAlgorithm::SiPixelDigitizerAlgorithm(const edm::ParameterSet& co << theElectronPerADC << " " << theAdcFullScale << " The delta cut-off is set to " << tMax << " pix-inefficiency " << AddPixelInefficiency; - TheNewSiPixelChargeReweightingAlgorithmClass = std::make_unique(conf); + TheNewSiPixelChargeReweightingAlgorithmClass = std::make_unique(conf, iC); } std::map > SiPixelDigitizerAlgorithm::initCal() const { @@ -587,16 +599,15 @@ SiPixelDigitizerAlgorithm::PixelEfficiencies::PixelEfficiencies(const edm::Param void SiPixelDigitizerAlgorithm::init_DynIneffDB(const edm::EventSetup& es, const unsigned int& bunchspace) { if (AddPixelInefficiency && !pixelEfficiencies_.FromConfig) { if (bunchspace == 50) - es.get().get("50ns", SiPixelDynamicInefficiency_); + SiPixelDynamicInefficiency_ = &es.getData(SiPixelDynamicInefficiencyToken50ns_); else - es.get().get(SiPixelDynamicInefficiency_); + SiPixelDynamicInefficiency_ = &es.getData(SiPixelDynamicInefficiencyToken_); pixelEfficiencies_.init_from_db(geom_, SiPixelDynamicInefficiency_); } } void SiPixelDigitizerAlgorithm::PixelEfficiencies::init_from_db( - const edm::ESHandle& geom, - const edm::ESHandle& SiPixelDynamicInefficiency) { + const TrackerGeometry* geom, const SiPixelDynamicInefficiency* SiPixelDynamicInefficiency) { theInstLumiScaleFactor = SiPixelDynamicInefficiency->gettheInstLumiScaleFactor(); const std::map& PixelGeomFactorsDBIn = SiPixelDynamicInefficiency->getPixelGeomFactors(); const std::map& ColGeomFactorsDB = SiPixelDynamicInefficiency->getColGeomFactors(); @@ -903,7 +914,7 @@ std::unique_ptr SiPixelDigitizerAlgorithm::chooseScen if (pu0 != bunchCrossing.end()) { unsigned int PUBin = TrueInteractionList.at(p); // case delta PU=1, fix me - const auto& theProbabilitiesPerScenario = scenarioProbabilityHandle->getProbabilities(PUBin); + const auto& theProbabilitiesPerScenario = scenarioProbability_->getProbabilities(PUBin); std::vector probabilities; probabilities.reserve(theProbabilitiesPerScenario.size()); for (auto it = theProbabilitiesPerScenario.begin(); it != theProbabilitiesPerScenario.end(); it++) { @@ -947,7 +958,7 @@ std::unique_ptr SiPixelDigitizerAlgorithm::chooseScen if (pu0 != bunchCrossing.end()) { unsigned int PUBin = TrueInteractionList.at(p); // case delta PU=1, fix me - const auto& theProbabilitiesPerScenario = scenarioProbabilityHandle->getProbabilities(PUBin); + const auto& theProbabilitiesPerScenario = scenarioProbability_->getProbabilities(PUBin); std::vector probabilities; probabilities.reserve(theProbabilitiesPerScenario.size()); for (auto it = theProbabilitiesPerScenario.begin(); it != theProbabilitiesPerScenario.end(); it++) { @@ -1767,7 +1778,7 @@ void SiPixelDigitizerAlgorithm::pixel_inefficiency(const PixelEfficiencies& eff, for (const auto& ch : *it) { for (unsigned int i_roc = ch.roc_first; i_roc <= ch.roc_last; ++i_roc) { for (const auto p : path) { - const PixelROC* myroc = map_.product()->findItem(p); + const PixelROC* myroc = map_->findItem(p); if (myroc->idInDetUnit() == static_cast(i_roc)) { LocalPixel::RocRowCol local = {39, 25}; //corresponding to center of ROC row,col GlobalPixel global = myroc->toGlobal(LocalPixel(local)); @@ -2272,10 +2283,10 @@ void SiPixelDigitizerAlgorithm::module_killing_DB(uint32_t detID) { std::vector badrocpositions(0); for (unsigned int j = 0; j < 16; j++) { if (SiPixelBadModule_->IsRocBad(detID, j) == true) { - std::vector path = map_.product()->pathToDetUnit(detID); + std::vector path = map_->pathToDetUnit(detID); typedef std::vector::const_iterator IT; for (IT it = path.begin(); it != path.end(); ++it) { - const PixelROC* myroc = map_.product()->findItem(*it); + const PixelROC* myroc = map_->findItem(*it); if (myroc->idInDetUnit() == j) { LocalPixel::RocRowCol local = {39, 25}; //corresponding to center of ROC row, col GlobalPixel global = myroc->toGlobal(LocalPixel(local)); diff --git a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.h b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.h index 98bd449983491..b2bfcd6216ab1 100644 --- a/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.h +++ b/SimTracker/SiPixelDigitizer/plugins/SiPixelDigitizerAlgorithm.h @@ -7,7 +7,6 @@ #include #include "DataFormats/GeometrySurface/interface/GloballyPositioned.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" #include "SimDataFormats/TrackingHit/interface/PSimHit.h" #include "SimTracker/Common/interface/SimHitInfoForLinks.h" @@ -15,10 +14,17 @@ #include "SimDataFormats/PileupSummaryInfo/interface/PileupMixingContent.h" #include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" #include "Geometry/CommonTopologies/interface/PixelTopology.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "CondFormats/SiPixelTransient/interface/SiPixelTemplate2D.h" -#include "CondFormats/SiPixelObjects/interface/SiPixel2DTemplateDBObject.h" #include "DataFormats/SiPixelDetId/interface/PixelFEDChannel.h" #include "CalibTracker/Records/interface/SiPixelFEDChannelContainerESProducerRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelLorentzAngleSimRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelDynamicInefficiencyRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelStatusScenarioProbabilityRcd.h" +#include "CondFormats/DataRecord/interface/SiPixelStatusScenariosRcd.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" #include "boost/multi_array.hpp" typedef boost::multi_array array_2d; @@ -30,11 +36,6 @@ namespace CLHEP { class HepRandomEngine; } -namespace edm { - class EventSetup; - class ParameterSet; -} // namespace edm - class DetId; class GaussianTailNoiseGenerator; class PixelDigi; @@ -54,7 +55,7 @@ class SiPixelChargeReweightingAlgorithm; class SiPixelDigitizerAlgorithm { public: - SiPixelDigitizerAlgorithm(const edm::ParameterSet& conf); + SiPixelDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); ~SiPixelDigitizerAlgorithm(); // initialization that cannot be done in the constructor @@ -146,22 +147,29 @@ class SiPixelDigitizerAlgorithm { private: //Accessing Lorentz angle from DB: - edm::ESHandle SiPixelLorentzAngle_; + edm::ESGetToken SiPixelLorentzAngleToken_; + const SiPixelLorentzAngle* SiPixelLorentzAngle_ = nullptr; //Accessing Dead pixel modules from DB: - std::string siPixelQualityLabel; - edm::ESHandle SiPixelBadModule_; + edm::ESGetToken SiPixelBadModuleToken_; + const SiPixelQuality* SiPixelBadModule_ = nullptr; //Accessing Map and Geom: - edm::ESHandle map_; - edm::ESHandle geom_; + const edm::ESGetToken mapToken_; + const edm::ESGetToken geomToken_; + const SiPixelFedCablingMap* map_ = nullptr; + const TrackerGeometry* geom_ = nullptr; // Get Dynamic Inefficiency scale factors from DB - edm::ESHandle SiPixelDynamicInefficiency_; + edm::ESGetToken SiPixelDynamicInefficiencyToken_; + edm::ESGetToken SiPixelDynamicInefficiencyToken50ns_; + const SiPixelDynamicInefficiency* SiPixelDynamicInefficiency_ = nullptr; // For BadFEDChannel simulation - edm::ESHandle scenarioProbabilityHandle; - edm::ESHandle PixelFEDChannelCollectionMapHandle; + edm::ESGetToken scenarioProbabilityToken_; + edm::ESGetToken + PixelFEDChannelCollectionMapToken_; + const SiPixelQualityProbabilities* scenarioProbability_ = nullptr; // Define internal classes // definition class @@ -274,7 +282,7 @@ class SiPixelDigitizerAlgorithm { // constants for ROC level simulation for Phase1 enum shiftEnumerator { FPixRocIdShift = 3, BPixRocIdShift = 6 }; static const int rocIdMaskBits = 0x1F; - void init_from_db(const edm::ESHandle&, const edm::ESHandle&); + void init_from_db(const TrackerGeometry*, const SiPixelDynamicInefficiency*); bool matches(const DetId&, const DetId&, const std::vector&); std::unique_ptr PixelFEDChannelCollection_; }; diff --git a/SimTracker/SiStripDigitizer/interface/SiDigitalConverter.h b/SimTracker/SiStripDigitizer/interface/SiDigitalConverter.h index 47bac0f3ab904..478a809c29f11 100644 --- a/SimTracker/SiStripDigitizer/interface/SiDigitalConverter.h +++ b/SimTracker/SiStripDigitizer/interface/SiDigitalConverter.h @@ -2,7 +2,6 @@ #define Tracker_SiDigitalConverter_H #include "SiPileUpSignals.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "CalibFormats/SiStripObjects/interface/SiStripGain.h" #include "DataFormats/SiStripDigi/interface/SiStripDigi.h" #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h" @@ -15,8 +14,8 @@ class SiDigitalConverter { typedef std::vector DigitalRawVecType; virtual ~SiDigitalConverter() {} - virtual DigitalVecType convert(const std::vector&, edm::ESHandle&, unsigned int detid) = 0; - virtual DigitalRawVecType convertRaw(const std::vector&, edm::ESHandle&, unsigned int detid) = 0; + virtual DigitalVecType convert(const std::vector&, const SiStripGain*, unsigned int detid) = 0; + virtual DigitalRawVecType convertRaw(const std::vector&, const SiStripGain*, unsigned int detid) = 0; }; #endif diff --git a/SimTracker/SiStripDigitizer/interface/SiTrivialDigitalConverter.h b/SimTracker/SiStripDigitizer/interface/SiTrivialDigitalConverter.h index 4c5388c668813..285efbf20aed2 100644 --- a/SimTracker/SiStripDigitizer/interface/SiTrivialDigitalConverter.h +++ b/SimTracker/SiStripDigitizer/interface/SiTrivialDigitalConverter.h @@ -9,8 +9,8 @@ class SiTrivialDigitalConverter : public SiDigitalConverter { public: SiTrivialDigitalConverter(float in, bool PreMix); - DigitalVecType convert(const std::vector&, edm::ESHandle&, unsigned int detid) override; - DigitalRawVecType convertRaw(const std::vector&, edm::ESHandle&, unsigned int detid) override; + DigitalVecType convert(const std::vector&, const SiStripGain*, unsigned int detid) override; + DigitalRawVecType convertRaw(const std::vector&, const SiStripGain*, unsigned int detid) override; private: int convert(float in) { return truncate(in / electronperADC); } diff --git a/SimTracker/SiStripDigitizer/plugins/DigiSimLinkAlgorithm.cc b/SimTracker/SiStripDigitizer/plugins/DigiSimLinkAlgorithm.cc index 76c559300241c..cf79b989c929b 100644 --- a/SimTracker/SiStripDigitizer/plugins/DigiSimLinkAlgorithm.cc +++ b/SimTracker/SiStripDigitizer/plugins/DigiSimLinkAlgorithm.cc @@ -198,8 +198,11 @@ void DigiSimLinkAlgorithm::run(edm::DetSet& outdigi, } } digis.clear(); - theSiZeroSuppress->suppress( - theSiDigitalConverter->convert(detAmpl, gainHandle, detID), digis, detID, noiseHandle, thresholdHandle); + theSiZeroSuppress->suppress(theSiDigitalConverter->convert(detAmpl, gainHandle.product(), detID), + digis, + detID, + *noiseHandle, + *thresholdHandle); push_link(digis, theLink, theCounterLink, detAmpl, detID); outdigi.data = digis; } @@ -302,7 +305,7 @@ void DigiSimLinkAlgorithm::run(edm::DetSet& outdigi, //}else{ rawdigis.clear(); - rawdigis = theSiDigitalConverter->convertRaw(detAmpl, gainHandle, detID); + rawdigis = theSiDigitalConverter->convertRaw(detAmpl, gainHandle.product(), detID); push_link_raw(rawdigis, theLink, theCounterLink, detAmpl, detID); outrawdigi.data = rawdigis; diff --git a/SimTracker/SiStripDigitizer/plugins/PreMixingSiStripWorker.cc b/SimTracker/SiStripDigitizer/plugins/PreMixingSiStripWorker.cc index f1cb4be856885..36e027cb03fd0 100644 --- a/SimTracker/SiStripDigitizer/plugins/PreMixingSiStripWorker.cc +++ b/SimTracker/SiStripDigitizer/plugins/PreMixingSiStripWorker.cc @@ -65,6 +65,15 @@ class PreMixingSiStripWorker : public PreMixingWorker { edm::InputTag SiStripAPVPileInputTag_; std::string SistripAPVListDM_; // output tag + edm::ESGetToken const pDDToken_; + edm::ESGetToken const deadChannelToken_; + edm::ESGetToken const gainToken_; + edm::ESGetToken const noiseToken_; + edm::ESGetToken const thresholdToken_; + //edm::ESGetToken const pedestalToken_; + edm::ESGetToken apvSimulationParametersToken_; + edm::ESGetToken tTopoToken_; + // typedef float Amplitude; @@ -100,20 +109,18 @@ class PreMixingSiStripWorker : public PreMixingWorker { // for noise adding: - std::string gainLabel; bool SingleStripNoise; bool peakMode; double theThreshold; double theElectronPerADC; bool APVSaturationFromHIP_; int theFedAlgo; - std::string geometryType; std::unique_ptr theSiNoiseAdder; std::unique_ptr theSiZeroSuppress; std::unique_ptr theSiDigitalConverter; - edm::ESHandle pDD; + const TrackerGeometry* pDD; // bad channels for each detector ID std::map> allBadChannels; @@ -146,14 +153,17 @@ class PreMixingSiStripWorker : public PreMixingWorker { PreMixingSiStripWorker::PreMixingSiStripWorker(const edm::ParameterSet& ps, edm::ProducesCollector producesCollector, edm::ConsumesCollector&& iC) - : gainLabel(ps.getParameter("Gain")), + : pDDToken_(iC.esConsumes(edm::ESInputTag("", ps.getParameter("GeometryType")))), + deadChannelToken_(iC.esConsumes()), + gainToken_(iC.esConsumes(edm::ESInputTag("", ps.getParameter("Gain")))), + noiseToken_(iC.esConsumes()), + thresholdToken_(iC.esConsumes()), SingleStripNoise(ps.getParameter("SingleStripNoise")), peakMode(ps.getParameter("APVpeakmode")), theThreshold(ps.getParameter("NoiseSigmaThreshold")), theElectronPerADC(ps.getParameter(peakMode ? "electronPerAdcPeak" : "electronPerAdcDec")), APVSaturationFromHIP_(ps.getParameter("APVSaturationFromHIP")), theFedAlgo(ps.getParameter("FedAlgorithm_PM")), - geometryType(ps.getParameter("GeometryType")), theSiZeroSuppress(new SiStripFedZeroSuppression(theFedAlgo)), theSiDigitalConverter(new SiTrivialDigitalConverter(theElectronPerADC, false)), // no premixing includeAPVSimulation_(ps.getParameter("includeAPVSimulation")), @@ -181,6 +191,11 @@ PreMixingSiStripWorker::PreMixingSiStripWorker(const edm::ParameterSet& ps, iC.consumes>>>(SistripAPVLabelSig_); } iC.consumes>(SistripLabelSig_); + + if (includeAPVSimulation_) { + tTopoToken_ = iC.esConsumes(); + apvSimulationParametersToken_ = iC.esConsumes(); + } // clear local storage for this event SiHitStorage_.clear(); @@ -197,7 +212,7 @@ PreMixingSiStripWorker::PreMixingSiStripWorker(const edm::ParameterSet& ps, void PreMixingSiStripWorker::initializeEvent(const edm::Event& e, edm::EventSetup const& iSetup) { // initialize individual detectors so we can copy real digitization code: - iSetup.get().get(geometryType, pDD); + pDD = &iSetup.getData(pDDToken_); for (auto iu = pDD->detUnits().begin(); iu != pDD->detUnits().end(); ++iu) { unsigned int detId = (*iu)->geographicalId().rawId(); @@ -213,13 +228,12 @@ void PreMixingSiStripWorker::initializeEvent(const edm::Event& e, edm::EventSetu } void PreMixingSiStripWorker::DMinitializeDetUnit(StripGeomDetUnit const* det, const edm::EventSetup& iSetup) { - edm::ESHandle deadChannelHandle; - iSetup.get().get(deadChannelHandle); + SiStripBadStrip const& deadChannel = iSetup.getData(deadChannelToken_); unsigned int detId = det->geographicalId().rawId(); int numStrips = (det->specificTopology()).nstrips(); - SiStripBadStrip::Range detBadStripRange = deadChannelHandle->getRange(detId); + SiStripBadStrip::Range detBadStripRange = deadChannel.getRange(detId); //storing the bad strip of the the module. the module is not removed but just signal put to 0 std::vector& badChannels = allBadChannels[detId]; std::vector& hipChannels = allHIPChannels[detId]; @@ -229,7 +243,7 @@ void PreMixingSiStripWorker::DMinitializeDetUnit(StripGeomDetUnit const* det, co hipChannels.insert(hipChannels.begin(), numStrips, false); for (SiStripBadStrip::ContainerIterator it = detBadStripRange.first; it != detBadStripRange.second; ++it) { - SiStripBadStrip::data fs = deadChannelHandle->decode(*it); + SiStripBadStrip::data fs = deadChannel.decode(*it); for (int strip = fs.firstStrip; strip < fs.firstStrip + fs.range; ++strip) badChannels[strip] = true; } @@ -342,17 +356,12 @@ void PreMixingSiStripWorker::put(edm::Event& e, std::vector const& ps, int bs) { // set up machinery to do proper noise adding: - edm::ESHandle gainHandle; - edm::ESHandle noiseHandle; - edm::ESHandle thresholdHandle; - edm::ESHandle pedestalHandle; - edm::ESHandle deadChannelHandle; - edm::ESHandle apvSimulationParametersHandle; - edm::ESHandle tTopo; - iSetup.get().get(gainLabel, gainHandle); - iSetup.get().get(noiseHandle); - iSetup.get().get(thresholdHandle); - iSetup.get().get(pedestalHandle); + SiStripGain const& gain = iSetup.getData(gainToken_); + SiStripNoises const& noise = iSetup.getData(noiseToken_); + SiStripThreshold const& threshold = iSetup.getData(thresholdToken_); + //SiStripPedestals const& pedestal = iSetup.getData(pedestalToken_); + SiStripApvSimulationParameters const* apvSimulationParameters = nullptr; + TrackerTopology const* tTopo = nullptr; edm::Service rng; CLHEP::HepRandomEngine* engine = &rng->getEngine(e.streamID()); @@ -360,8 +369,8 @@ void PreMixingSiStripWorker::put(edm::Event& e, const bool simulateAPVInThisEvent = includeAPVSimulation_ && (CLHEP::RandFlat::shoot(engine) < fracOfEventsToSimAPV_); float nTruePU = 0.; // = ps.getTrueNumInteractions(); if (simulateAPVInThisEvent) { - iSetup.get().get(tTopo); - iSetup.get().get(apvSimulationParametersHandle); + tTopo = &iSetup.getData(tTopoToken_); + apvSimulationParameters = &iSetup.getData(apvSimulationParametersToken_); const auto it = std::find_if( std::begin(ps), std::end(ps), [](const PileupSummaryInfo& bxps) { return bxps.getBunchCrossing() == 0; }); if (it != std::begin(ps)) { @@ -573,13 +582,13 @@ void PreMixingSiStripWorker::put(edm::Event& e, // Get APV baseline double baselineV = 0; if (SubDet == SiStripSubdetector::TIB) { - baselineV = apvSimulationParametersHandle->sampleTIB(tTopo->tibLayer(detID), detSet_z, nTruePU, engine); + baselineV = apvSimulationParameters->sampleTIB(tTopo->tibLayer(detID), detSet_z, nTruePU, engine); } else if (SubDet == SiStripSubdetector::TOB) { - baselineV = apvSimulationParametersHandle->sampleTOB(tTopo->tobLayer(detID), detSet_z, nTruePU, engine); + baselineV = apvSimulationParameters->sampleTOB(tTopo->tobLayer(detID), detSet_z, nTruePU, engine); } else if (SubDet == SiStripSubdetector::TID) { - baselineV = apvSimulationParametersHandle->sampleTID(tTopo->tidWheel(detID), detSet_r, nTruePU, engine); + baselineV = apvSimulationParameters->sampleTID(tTopo->tidWheel(detID), detSet_r, nTruePU, engine); } else if (SubDet == SiStripSubdetector::TEC) { - baselineV = apvSimulationParametersHandle->sampleTEC(tTopo->tecWheel(detID), detSet_r, nTruePU, engine); + baselineV = apvSimulationParameters->sampleTEC(tTopo->tecWheel(detID), detSet_r, nTruePU, engine); } // Fitted parameters from G Hall/M Raymond double maxResponse = apv_maxResponse_; @@ -627,8 +636,8 @@ void PreMixingSiStripWorker::put(edm::Event& e, } } - SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID); - SiStripApvGain::Range detGainRange = gainHandle->getRange(detID); + SiStripNoises::Range detNoiseRange = noise.getRange(detID); + SiStripApvGain::Range detGainRange = gain.getRange(detID); // Gain conversion is already done during signal adding //convert our signals back to raw counts so that we can add noise properly: @@ -638,7 +647,7 @@ void PreMixingSiStripWorker::put(edm::Event& e, for(unsigned int iv = 0; iv!=detAmpl.size(); iv++) { float signal = detAmpl[iv]; if(signal > 0) { - float gainValue = gainHandle->getStripGain(iv, detGainRange); + float gainValue = gain.getStripGain(iv, detGainRange); signal *= theElectronPerADC/gainValue; detAmpl[iv] = signal; } @@ -646,7 +655,7 @@ void PreMixingSiStripWorker::put(edm::Event& e, } */ - //SiStripPedestals::Range detPedestalRange = pedestalHandle->getRange(detID); + //SiStripPedestals::Range detPedestalRange = pedestal.getRange(detID); // ----------------------------------------------------------- @@ -659,8 +668,8 @@ void PreMixingSiStripWorker::put(edm::Event& e, noiseRMSv.insert(noiseRMSv.begin(), numStrips, 0.); for (int strip = 0; strip < numStrips; ++strip) { if (!badChannels[strip]) { - float gainValue = gainHandle->getStripGain(strip, detGainRange); - noiseRMSv[strip] = (noiseHandle->getNoise(strip, detNoiseRange)) * theElectronPerADC / gainValue; + float gainValue = gain.getStripGain(strip, detGainRange); + noiseRMSv[strip] = (noise.getNoise(strip, detNoiseRange)) * theElectronPerADC / gainValue; } } theSiNoiseAdder->addNoiseVR(detAmpl, noiseRMSv, engine); @@ -671,8 +680,8 @@ void PreMixingSiStripWorker::put(edm::Event& e, RefStrip++; } if (RefStrip < numStrips) { - float RefgainValue = gainHandle->getStripGain(RefStrip, detGainRange); - float RefnoiseRMS = noiseHandle->getNoise(RefStrip, detNoiseRange) * theElectronPerADC / RefgainValue; + float RefgainValue = gain.getStripGain(RefStrip, detGainRange); + float RefnoiseRMS = noise.getNoise(RefStrip, detNoiseRange) * theElectronPerADC / RefgainValue; theSiNoiseAdder->addNoise( detAmpl, firstChannelWithSignal, lastChannelWithSignal, numStrips, RefnoiseRMS, engine); @@ -681,7 +690,7 @@ void PreMixingSiStripWorker::put(edm::Event& e, DigitalVecType digis; theSiZeroSuppress->suppress( - theSiDigitalConverter->convert(detAmpl, gainHandle, detID), digis, detID, noiseHandle, thresholdHandle); + theSiDigitalConverter->convert(detAmpl, &gain, detID), digis, detID, noise, threshold); SSD.data = digis; diff --git a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.cc b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.cc index d067411616575..5d47cd2ff1ada 100644 --- a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.cc +++ b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.cc @@ -32,23 +32,17 @@ #include "FWCore/Framework/interface/ConsumesCollector.h" //needed for the geometry: #include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" #include "Geometry/CommonDetUnit/interface/GeomDetType.h" -#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" #include "Geometry/CommonTopologies/interface/StripTopology.h" #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h" #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" //needed for the magnetic field: #include "MagneticField/Engine/interface/MagneticField.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" //Data Base infromations #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" -#include "CalibTracker/Records/interface/SiStripDependentRecords.h" -#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" -#include "CondFormats/SiStripObjects/interface/SiStripApvSimulationParameters.h" //Random Number #include "FWCore/ServiceRegistry/interface/Service.h" @@ -59,19 +53,31 @@ SiStripDigitizer::SiStripDigitizer(const edm::ParameterSet& conf, edm::ProducesCollector producesCollector, edm::ConsumesCollector& iC) - : gainLabel(conf.getParameter("Gain")), - hitsProducer(conf.getParameter("hitsProducer")), + : hitsProducer(conf.getParameter("hitsProducer")), trackerContainers(conf.getParameter>("ROUList")), ZSDigi(conf.getParameter("DigiModeList").getParameter("ZSDigi")), SCDigi(conf.getParameter("DigiModeList").getParameter("SCDigi")), VRDigi(conf.getParameter("DigiModeList").getParameter("VRDigi")), PRDigi(conf.getParameter("DigiModeList").getParameter("PRDigi")), - geometryType(conf.getParameter("GeometryType")), useConfFromDB(conf.getParameter("TrackerConfigurationFromDB")), zeroSuppression(conf.getParameter("ZeroSuppression")), makeDigiSimLinks_(conf.getUntrackedParameter("makeDigiSimLinks", false)), includeAPVSimulation_(conf.getParameter("includeAPVSimulation")), - fracOfEventsToSimAPV_(conf.getParameter("fracOfEventsToSimAPV")) { + fracOfEventsToSimAPV_(conf.getParameter("fracOfEventsToSimAPV")), + tTopoToken_(iC.esConsumes()), + pDDToken_(iC.esConsumes(edm::ESInputTag("", conf.getParameter("GeometryType")))), + pSetupToken_(iC.esConsumes()), + gainToken_(iC.esConsumes(edm::ESInputTag("", conf.getParameter("Gain")))), + noiseToken_(iC.esConsumes()), + thresholdToken_(iC.esConsumes()), + pedestalToken_(iC.esConsumes()) { + if (useConfFromDB) { + detCablingToken_ = iC.esConsumes(); + } + if (includeAPVSimulation_) { + apvSimulationParametersToken_ = iC.esConsumes(); + } + const std::string alias("simSiStripDigis"); producesCollector.produces>(ZSDigi).setBranchAlias(ZSDigi); @@ -99,7 +105,7 @@ SiStripDigitizer::SiStripDigitizer(const edm::ParameterSet& conf, "which is not present in the configuration file. You must add the service\n" "in the configuration file or remove the modules that require it."; } - theDigiAlgo = std::make_unique(conf); + theDigiAlgo = std::make_unique(conf, iC); } // Virtual destructor needed. @@ -138,9 +144,7 @@ void SiStripDigitizer::accumulateStripHits(edm::Handle> hSi // Functions that gets called by framework every event void SiStripDigitizer::accumulate(edm::Event const& iEvent, edm::EventSetup const& iSetup) { //Retrieve tracker topology from geometry - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); // Step A: Get Inputs for (auto const& trackerContainer : trackerContainers) { @@ -164,9 +168,7 @@ void SiStripDigitizer::accumulate(edm::Event const& iEvent, edm::EventSetup cons void SiStripDigitizer::accumulate(PileUpEventPrincipal const& iEvent, edm::EventSetup const& iSetup, edm::StreamID const& streamID) { - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); //Re-compute luminosity for accumulation for HIP effects theDigiAlgo->calculateInstlumiScale(PileupInfo_.get()); @@ -200,9 +202,7 @@ void SiStripDigitizer::initializeEvent(edm::Event const& iEvent, edm::EventSetup // Step A: Get Inputs if (useConfFromDB) { - edm::ESHandle detCabling; - iSetup.get().get(detCabling); - detCabling->addConnected(theDetIdList); + iSetup.getData(detCablingToken_).addConnected(theDetIdList); } // Cache random number engine @@ -211,8 +211,8 @@ void SiStripDigitizer::initializeEvent(edm::Event const& iEvent, edm::EventSetup theDigiAlgo->initializeEvent(iSetup); - iSetup.get().get(geometryType, pDD); - iSetup.get().get(pSetup); + pDD = &iSetup.getData(pDDToken_); + pSetup = &iSetup.getData(pSetupToken_); // FIX THIS! We only need to clear and (re)fill detectorUnits when the geometry type IOV changes. Use ESWatcher to determine this. bool changes = true; @@ -233,21 +233,17 @@ void SiStripDigitizer::initializeEvent(edm::Event const& iEvent, edm::EventSetup } void SiStripDigitizer::finalizeEvent(edm::Event& iEvent, edm::EventSetup const& iSetup) { - edm::ESHandle gainHandle; - edm::ESHandle noiseHandle; - edm::ESHandle thresholdHandle; - edm::ESHandle pedestalHandle; - edm::ESHandle apvSimulationParametersHandle; - iSetup.get().get(gainLabel, gainHandle); - iSetup.get().get(noiseHandle); - iSetup.get().get(thresholdHandle); - iSetup.get().get(pedestalHandle); + auto const& gain = iSetup.getData(gainToken_); + auto const& noise = iSetup.getData(noiseToken_); + auto const& threshold = iSetup.getData(thresholdToken_); + auto const& pedestal = iSetup.getData(pedestalToken_); + SiStripApvSimulationParameters const* apvSimulationParameters = nullptr; std::unique_ptr simulateAPVInThisEvent = std::make_unique(false); if (includeAPVSimulation_) { if (CLHEP::RandFlat::shoot(randomEngine_) < fracOfEventsToSimAPV_) { *simulateAPVInThisEvent = true; - iSetup.get().get(apvSimulationParametersHandle); + apvSimulationParameters = &iSetup.getData(apvSimulationParametersToken_); } } std::vector> theDigiVector; @@ -258,9 +254,7 @@ void SiStripDigitizer::finalizeEvent(edm::Event& iEvent, edm::EventSetup const& std::unique_ptr> theStripAPVBaselines(new edm::DetSetVector()); std::unique_ptr> pOutputDigiSimLink(new edm::DetSetVector); - edm::ESHandle tTopoHand; - iSetup.get().get(tTopoHand); - const TrackerTopology* tTopo = tTopoHand.product(); + const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_); // Step B: LOOP on StripGeomDetUnit theDigiVector.reserve(10000); @@ -291,12 +285,12 @@ void SiStripDigitizer::finalizeEvent(edm::Event& iEvent, edm::EventSetup const& collectorStripAPVBaselines, collectorLink, sgd, - gainHandle, - thresholdHandle, - noiseHandle, - pedestalHandle, + gain, + threshold, + noise, + pedestal, *simulateAPVInThisEvent, - apvSimulationParametersHandle, + apvSimulationParameters, theAffectedAPVvector, randomEngine_, tTopo); diff --git a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.h b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.h index 4f535affaafff..02c20bf6c45f5 100644 --- a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.h +++ b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizer.h @@ -6,10 +6,21 @@ #include #include #include -#include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" -#include "SimDataFormats/PileupSummaryInfo/interface/PileupMixingContent.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "CalibFormats/SiStripObjects/interface/SiStripGain.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" +#include "CalibTracker/Records/interface/SiStripDependentRecords.h" +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" +#include "CondFormats/SiStripObjects/interface/SiStripApvSimulationParameters.h" +#include "CondFormats/SiStripObjects/interface/SiStripNoises.h" +#include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" +#include "CondFormats/SiStripObjects/interface/SiStripThreshold.h" #include "FWCore/Framework/interface/ProducesCollector.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "SimDataFormats/PileupSummaryInfo/interface/PileupMixingContent.h" +#include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" class TrackerTopology; @@ -74,19 +85,26 @@ class SiStripDigitizer : public DigiAccumulatorMixMod { typedef std::map>, std::less> simhit_map; typedef simhit_map::iterator simhit_map_iterator; - const std::string gainLabel; const std::string hitsProducer; const vstring trackerContainers; const std::string ZSDigi; const std::string SCDigi; const std::string VRDigi; const std::string PRDigi; - const std::string geometryType; const bool useConfFromDB; const bool zeroSuppression; const bool makeDigiSimLinks_; const bool includeAPVSimulation_; const double fracOfEventsToSimAPV_; + const edm::ESGetToken tTopoToken_; + const edm::ESGetToken pDDToken_; + const edm::ESGetToken pSetupToken_; + const edm::ESGetToken gainToken_; + const edm::ESGetToken noiseToken_; + const edm::ESGetToken thresholdToken_; + const edm::ESGetToken pedestalToken_; + edm::ESGetToken detCablingToken_; + edm::ESGetToken apvSimulationParametersToken_; ///< Whether or not to create the association to sim truth collection. Set in configuration. /** @brief Offset to add to the index of each sim hit to account for which crossing it's in. @@ -101,8 +119,8 @@ class SiStripDigitizer : public DigiAccumulatorMixMod { std::unique_ptr theDigiAlgo; std::map> theDetIdList; - edm::ESHandle pDD; - edm::ESHandle pSetup; + const TrackerGeometry* pDD = nullptr; + const MagneticField* pSetup = nullptr; std::map detectorUnits; CLHEP::HepRandomEngine* randomEngine_ = nullptr; std::vector>> theAffectedAPVvector; diff --git a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.cc b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.cc index 4635d7a854231..b523c6256efa3 100644 --- a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.cc +++ b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.cc @@ -12,6 +12,7 @@ #include #include #include +#include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -23,7 +24,6 @@ #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" #include "CalibTracker/Records/interface/SiStripDependentRecords.h" #include "CondFormats/SiStripObjects/interface/SiStripLorentzAngle.h" -#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" #include "CondFormats/SiStripObjects/interface/SiStripNoises.h" #include "CondFormats/SiStripObjects/interface/SiStripThreshold.h" #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h" @@ -35,9 +35,8 @@ #include -SiStripDigitizerAlgorithm::SiStripDigitizerAlgorithm(const edm::ParameterSet& conf) - : lorentzAngleName(conf.getParameter("LorentzAngle")), - theThreshold(conf.getParameter("NoiseSigmaThreshold")), +SiStripDigitizerAlgorithm::SiStripDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC) + : theThreshold(conf.getParameter("NoiseSigmaThreshold")), cmnRMStib(conf.getParameter("cmnRMStib")), cmnRMStob(conf.getParameter("cmnRMStob")), cmnRMStid(conf.getParameter("cmnRMStid")), @@ -61,6 +60,9 @@ SiStripDigitizerAlgorithm::SiStripDigitizerAlgorithm(const edm::ParameterSet& co inefficiency(conf.getParameter("Inefficiency")), pedOffset((unsigned int)conf.getParameter("PedestalsOffset")), PreMixing_(conf.getParameter("PreMixingMode")), + deadChannelToken_(iC.esConsumes()), + pdtToken_(iC.esConsumes()), + lorentzAngleToken_(iC.esConsumes(edm::ESInputTag("", conf.getParameter("LorentzAngle")))), theSiHitDigitizer(new SiHitDigitizer(conf)), theSiPileUpSignals(new SiPileUpSignals()), theSiNoiseAdder(new SiGaussianTailNoiseAdder(theThreshold)), @@ -107,19 +109,18 @@ SiStripDigitizerAlgorithm::SiStripDigitizerAlgorithm(const edm::ParameterSet& co SiStripDigitizerAlgorithm::~SiStripDigitizerAlgorithm() {} void SiStripDigitizerAlgorithm::initializeDetUnit(StripGeomDetUnit const* det, const edm::EventSetup& iSetup) { - edm::ESHandle deadChannelHandle; - iSetup.get().get(deadChannelHandle); + auto const& deadChannel = iSetup.getData(deadChannelToken_); unsigned int detId = det->geographicalId().rawId(); int numStrips = (det->specificTopology()).nstrips(); - SiStripBadStrip::Range detBadStripRange = deadChannelHandle->getRange(detId); + SiStripBadStrip::Range detBadStripRange = deadChannel.getRange(detId); //storing the bad strip of the the module. the module is not removed but just signal put to 0 std::vector& badChannels = allBadChannels[detId]; badChannels.clear(); badChannels.insert(badChannels.begin(), numStrips, false); for (SiStripBadStrip::ContainerIterator it = detBadStripRange.first; it != detBadStripRange.second; ++it) { - SiStripBadStrip::data fs = deadChannelHandle->decode(*it); + SiStripBadStrip::data fs = deadChannel.decode(*it); for (int strip = fs.firstStrip; strip < fs.firstStrip + fs.range; ++strip) { badChannels[strip] = true; } @@ -146,10 +147,8 @@ void SiStripDigitizerAlgorithm::initializeEvent(const edm::EventSetup& iSetup) { nTruePU_ = 0; //get gain noise pedestal lorentzAngle from ES handle - edm::ESHandle pdt; - iSetup.getData(pdt); - setParticleDataTable(&*pdt); - iSetup.get().get(lorentzAngleName, lorentzAngleHandle); + setParticleDataTable(&iSetup.getData(pdtToken_)); + lorentzAngleHandle = iSetup.getHandle(lorentzAngleToken_); } // Run the algorithm for a given module @@ -289,12 +288,12 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, edm::DetSet& outStripAPVBaselines, edm::DetSet& outLink, const StripGeomDetUnit* det, - edm::ESHandle& gainHandle, - edm::ESHandle& thresholdHandle, - edm::ESHandle& noiseHandle, - edm::ESHandle& pedestalHandle, + const SiStripGain& gain, + const SiStripThreshold& threshold, + const SiStripNoises& noiseObj, + const SiStripPedestals& pedestal, bool simulateAPVInThisEvent, - edm::ESHandle& apvSimulationParametersHandle, + const SiStripApvSimulationParameters* apvSimulationParameters, std::vector>>& theAffectedAPVvector, CLHEP::HepRandomEngine* engine, const TrackerTopology* tTopo) { @@ -344,13 +343,13 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, // Get APV baseline double baselineV = 0; if (SubDet == SiStripSubdetector::TIB) { - baselineV = apvSimulationParametersHandle->sampleTIB(tTopo->tibLayer(detId), detSet_z, nTruePU_, engine); + baselineV = apvSimulationParameters->sampleTIB(tTopo->tibLayer(detId), detSet_z, nTruePU_, engine); } else if (SubDet == SiStripSubdetector::TOB) { - baselineV = apvSimulationParametersHandle->sampleTOB(tTopo->tobLayer(detId), detSet_z, nTruePU_, engine); + baselineV = apvSimulationParameters->sampleTOB(tTopo->tobLayer(detId), detSet_z, nTruePU_, engine); } else if (SubDet == SiStripSubdetector::TID) { - baselineV = apvSimulationParametersHandle->sampleTID(tTopo->tidWheel(detId), detSet_r, nTruePU_, engine); + baselineV = apvSimulationParameters->sampleTID(tTopo->tidWheel(detId), detSet_r, nTruePU_, engine); } else if (SubDet == SiStripSubdetector::TEC) { - baselineV = apvSimulationParametersHandle->sampleTEC(tTopo->tecWheel(detId), detSet_r, nTruePU_, engine); + baselineV = apvSimulationParameters->sampleTEC(tTopo->tecWheel(detId), detSet_r, nTruePU_, engine); } // Store APV baseline for this strip outStripAPVBaselines.emplace_back(SiStripRawDigi(baselineV)); @@ -445,9 +444,9 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, } } - SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID); - SiStripApvGain::Range detGainRange = gainHandle->getRange(detID); - SiStripPedestals::Range detPedestalRange = pedestalHandle->getRange(detID); + SiStripNoises::Range detNoiseRange = noiseObj.getRange(detID); + SiStripApvGain::Range detGainRange = gain.getRange(detID); + SiStripPedestals::Range detPedestalRange = pedestal.getRange(detID); // ----------------------------------------------------------- @@ -467,8 +466,8 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, noiseRMSv.insert(noiseRMSv.begin(), numStrips, 0.); for (int strip = 0; strip < numStrips; ++strip) { if (!badChannels[strip]) { - float gainValue = gainHandle->getStripGain(strip, detGainRange); - noiseRMSv[strip] = (noiseHandle->getNoise(strip, detNoiseRange)) * theElectronPerADC / gainValue; + float gainValue = gain.getStripGain(strip, detGainRange); + noiseRMSv[strip] = (noiseObj.getNoise(strip, detNoiseRange)) * theElectronPerADC / gainValue; //std::cout<<": gainValue: "<& outdigi, RefStrip++; } if (RefStrip < numStrips) { - float RefgainValue = gainHandle->getStripGain(RefStrip, detGainRange); - float RefnoiseRMS = noiseHandle->getNoise(RefStrip, detNoiseRange) * theElectronPerADC / RefgainValue; + float RefgainValue = gain.getStripGain(RefStrip, detGainRange); + float RefnoiseRMS = noiseObj.getNoise(RefStrip, detNoiseRange) * theElectronPerADC / RefgainValue; theSiNoiseAdder->addNoise( detAmpl, firstChannelWithSignal, lastChannelWithSignal, numStrips, RefnoiseRMS, engine); @@ -492,7 +491,7 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, DigitalVecType digis; theSiZeroSuppress->suppress( - theSiDigitalConverter->convert(detAmpl, gainHandle, detID), digis, detID, noiseHandle, thresholdHandle); + theSiDigitalConverter->convert(detAmpl, &gain, detID), digis, detID, noiseObj, threshold); // Now do the association to truth. Note that if truth association was turned off in the configuration this map // will be empty and the iterator will always equal associationInfoForDetId_.end(). if (iAssociationInfoByChannel != @@ -554,7 +553,7 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, if (SingleStripNoise) { for (int strip = 0; strip < numStrips; ++strip) { if (!badChannels[strip]) - noiseRMSv[strip] = (noiseHandle->getNoise(strip, detNoiseRange)) * theElectronPerADC; + noiseRMSv[strip] = (noiseObj.getNoise(strip, detNoiseRange)) * theElectronPerADC; } } else { @@ -564,7 +563,7 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, RefStrip++; } if (RefStrip < numStrips) { - float noiseRMS = noiseHandle->getNoise(RefStrip, detNoiseRange) * theElectronPerADC; + float noiseRMS = noiseObj.getNoise(RefStrip, detNoiseRange) * theElectronPerADC; for (int strip = 0; strip < numStrips; ++strip) { if (!badChannels[strip]) noiseRMSv[strip] = noiseRMS; @@ -608,7 +607,7 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, if (RealPedestals) { for (int strip = 0; strip < numStrips; ++strip) { if (!badChannels[strip]) - vPeds[strip] = (pedestalHandle->getPed(strip, detPedestalRange) + pedOffset) * theElectronPerADC; + vPeds[strip] = (pedestal.getPed(strip, detPedestalRange) + pedOffset) * theElectronPerADC; } } else { for (int strip = 0; strip < numStrips; ++strip) { @@ -624,7 +623,7 @@ void SiStripDigitizerAlgorithm::digitize(edm::DetSet& outdigi, // edm::LogWarning("SiStripDigitizer")<<"You are running the digitizer without Noise generation and without applying Zero Suppression. ARE YOU SURE???"; //}else{ - DigitalRawVecType rawdigis = theSiDigitalConverter->convertRaw(detAmpl, gainHandle, detID); + DigitalRawVecType rawdigis = theSiDigitalConverter->convertRaw(detAmpl, &gain, detID); // Now do the association to truth. Note that if truth association was turned off in the configuration this map // will be empty and the iterator will always equal associationInfoForDetId_.end(). diff --git a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.h b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.h index 0ad74f7bb2100..f713d3047dfee 100644 --- a/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.h +++ b/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.h @@ -24,6 +24,7 @@ #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h" #include "CondFormats/SiStripObjects/interface/SiStripApvSimulationParameters.h" #include "CalibFormats/SiStripObjects/interface/SiStripGain.h" +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" #include "SimTracker/SiStripDigitizer/interface/SiTrivialDigitalConverter.h" #include "SimTracker/SiStripDigitizer/interface/SiGaussianTailNoiseAdder.h" #include "SiHitDigitizer.h" @@ -35,6 +36,8 @@ #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "FWCore/Framework/interface/FrameworkfwdMostUsed.h" +#include "FWCore/Utilities/interface/ESGetToken.h" #include "TH1F.h" @@ -43,10 +46,6 @@ class TrackerTopology; -namespace edm { - class EventSetup; -} - class SiStripLorentzAngle; class StripDigiSimLink; @@ -63,7 +62,7 @@ class SiStripDigitizerAlgorithm { typedef float Amplitude; // Constructor - SiStripDigitizerAlgorithm(const edm::ParameterSet& conf); + SiStripDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC); // Destructor ~SiStripDigitizerAlgorithm(); @@ -89,12 +88,12 @@ class SiStripDigitizerAlgorithm { edm::DetSet& outStripAPVBaselines, edm::DetSet& outLink, const StripGeomDetUnit* stripdet, - edm::ESHandle&, - edm::ESHandle&, - edm::ESHandle&, - edm::ESHandle&, + const SiStripGain&, + const SiStripThreshold&, + const SiStripNoises&, + const SiStripPedestals&, bool simulateAPVInThisEvent, - edm::ESHandle&, + const SiStripApvSimulationParameters*, std::vector>>& theAffectedAPVvector, CLHEP::HepRandomEngine*, const TrackerTopology* tTopo); @@ -108,7 +107,6 @@ class SiStripDigitizerAlgorithm { } private: - const std::string lorentzAngleName; const double theThreshold; const double cmnRMStib; const double cmnRMStob; @@ -136,6 +134,9 @@ class SiStripDigitizerAlgorithm { const double inefficiency; const double pedOffset; const bool PreMixing_; + const edm::ESGetToken deadChannelToken_; + const edm::ESGetToken pdtToken_; + const edm::ESGetToken lorentzAngleToken_; const ParticleDataTable* pdt; const ParticleData* particle; diff --git a/SimTracker/SiStripDigitizer/src/SiTrivialDigitalConverter.cc b/SimTracker/SiStripDigitizer/src/SiTrivialDigitalConverter.cc index 215715c5f708c..e374dcf724891 100644 --- a/SimTracker/SiStripDigitizer/src/SiTrivialDigitalConverter.cc +++ b/SimTracker/SiStripDigitizer/src/SiTrivialDigitalConverter.cc @@ -8,7 +8,7 @@ SiTrivialDigitalConverter::SiTrivialDigitalConverter(float in, bool PreMix) : el } SiDigitalConverter::DigitalVecType SiTrivialDigitalConverter::convert(const std::vector& analogSignal, - edm::ESHandle& gainHandle, + const SiStripGain* gain, unsigned int detid) { _temp.clear(); @@ -22,13 +22,13 @@ SiDigitalConverter::DigitalVecType SiTrivialDigitalConverter::convert(const std: if (adc > 0) _temp.push_back(SiStripDigi(i, adc)); } - } else if (gainHandle.isValid()) { - SiStripApvGain::Range detGainRange = gainHandle->getRange(detid); + } else if (gain) { + SiStripApvGain::Range detGainRange = gain->getRange(detid); for (size_t i = 0; i < analogSignal.size(); i++) { if (analogSignal[i] <= 0) continue; // convert analog amplitude to digital - int adc = convert((gainHandle->getStripGain(i, detGainRange)) * (analogSignal[i])); + int adc = convert((gain->getStripGain(i, detGainRange)) * (analogSignal[i])); if (adc > 0) _temp.push_back(SiStripDigi(i, adc)); } @@ -46,19 +46,19 @@ SiDigitalConverter::DigitalVecType SiTrivialDigitalConverter::convert(const std: } SiDigitalConverter::DigitalRawVecType SiTrivialDigitalConverter::convertRaw(const std::vector& analogSignal, - edm::ESHandle& gainHandle, + const SiStripGain* gain, unsigned int detid) { _tempRaw.clear(); - if (gainHandle.isValid()) { - SiStripApvGain::Range detGainRange = gainHandle->getRange(detid); + if (gain) { + SiStripApvGain::Range detGainRange = gain->getRange(detid); for (size_t i = 0; i < analogSignal.size(); i++) { if (analogSignal[i] <= 0) { _tempRaw.push_back(SiStripRawDigi(0)); continue; } // convert analog amplitude to digital - int adc = convertRaw((gainHandle->getStripGain(i, detGainRange)) * (analogSignal[i])); + int adc = convertRaw((gain->getStripGain(i, detGainRange)) * (analogSignal[i])); _tempRaw.push_back(SiStripRawDigi(adc)); } } else {