diff --git a/SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h b/SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h index 2a573d75cd0e8..b3ee5e6e3ca69 100644 --- a/SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h +++ b/SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h @@ -13,6 +13,7 @@ #include "SimG4Core/Notification/interface/BeginOfJob.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" +#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" #include "G4Step.hh" #include "G4Track.hh" @@ -33,7 +34,7 @@ class TkAccumulatingSensitiveDetector : public SensitiveTkDetector, public Observer { public: TkAccumulatingSensitiveDetector(const std::string &, - const edm::EventSetup &, + const GeometricDet*, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *); @@ -59,6 +60,7 @@ class TkAccumulatingSensitiveDetector : public SensitiveTkDetector, private: // data members initialised before run + const GeometricDet *pDD_; const SimTrackManager *theManager; std::unique_ptr slaveLowTof; std::unique_ptr slaveHighTof; diff --git a/SimG4CMS/Tracker/plugins/TkAccumulatingSensitiveDetectorBuilder.cc b/SimG4CMS/Tracker/plugins/TkAccumulatingSensitiveDetectorBuilder.cc new file mode 100644 index 0000000000000..d1dc123bafd9b --- /dev/null +++ b/SimG4CMS/Tracker/plugins/TkAccumulatingSensitiveDetectorBuilder.cc @@ -0,0 +1,42 @@ +// system include files + +// user include files +#include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorMakerBase.h" +#include "SimG4Core/Notification/interface/SimActivityRegistryEnroller.h" +#include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorPluginFactory.h" + +#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + +#include "SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +class TkAccumulatingSensitiveDetectorBuilder : public SensitiveDetectorMakerBase { +public: + explicit TkAccumulatingSensitiveDetectorBuilder(edm::ParameterSet const& p, edm::ConsumesCollector cc) + : geomdet_{nullptr}, + geomdetToken_{cc.esConsumes()} {} + + void beginRun(const edm::EventSetup& es) final { geomdet_ = &es.getData(geomdetToken_); } + + std::unique_ptr make(const std::string& iname, + const SensitiveDetectorCatalog& clg, + const edm::ParameterSet& p, + const SimTrackManager* man, + SimActivityRegistry& reg) const final { + auto sd = std::make_unique(iname, geomdet_, clg, p, man); + SimActivityRegistryEnroller::enroll(reg, sd.get()); + return sd; + } + +private: + const GeometricDet* geomdet_; + const edm::ESGetToken geomdetToken_; +}; + +DEFINE_SENSITIVEDETECTORBUILDER(TkAccumulatingSensitiveDetectorBuilder, TkAccumulatingSensitiveDetector); diff --git a/SimG4CMS/Tracker/plugins/module.cc b/SimG4CMS/Tracker/plugins/module.cc index c5e9c4b0c9f69..e69de29bb2d1d 100644 --- a/SimG4CMS/Tracker/plugins/module.cc +++ b/SimG4CMS/Tracker/plugins/module.cc @@ -1,5 +0,0 @@ -#include "SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h" -#include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorPluginFactory.h" -#include "FWCore/PluginManager/interface/ModuleDef.h" - -DEFINE_SENSITIVEDETECTOR(TkAccumulatingSensitiveDetector); diff --git a/SimG4CMS/Tracker/src/TkAccumulatingSensitiveDetector.cc b/SimG4CMS/Tracker/src/TkAccumulatingSensitiveDetector.cc index cce344d1196e4..e5f366c134d04 100644 --- a/SimG4CMS/Tracker/src/TkAccumulatingSensitiveDetector.cc +++ b/SimG4CMS/Tracker/src/TkAccumulatingSensitiveDetector.cc @@ -12,13 +12,8 @@ #include "SimG4CMS/Tracker/interface/TkSimHitPrinter.h" #include "SimG4CMS/Tracker/interface/TrackerG4SimHitNumberingScheme.h" -#include "FWCore/Framework/interface/ESTransientHandle.h" -#include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/EventSetup.h" -#include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" - #include "SimG4Core/Notification/interface/TrackInformation.h" #include "SimG4Core/Notification/interface/G4TrackToParticleID.h" #include "SimG4Core/Physics/interface/G4ProcessTypeEnumerator.h" @@ -44,11 +39,12 @@ static TrackerG4SimHitNumberingScheme& numberingScheme(const GeometricDet& det) } TkAccumulatingSensitiveDetector::TkAccumulatingSensitiveDetector(const std::string& name, - const edm::EventSetup& es, + const GeometricDet *pDD, const SensitiveDetectorCatalog& clg, edm::ParameterSet const& p, const SimTrackManager* manager) : SensitiveTkDetector(name, clg), + pDD_(pDD), theManager(manager), rTracker(1200. * CLHEP::mm), zTracker(3000. * CLHEP::mm), @@ -354,11 +350,7 @@ void TkAccumulatingSensitiveDetector::update(const BeginOfEvent* i) { } void TkAccumulatingSensitiveDetector::update(const BeginOfJob* i) { - edm::ESHandle pDD; - const edm::EventSetup* es = (*i)(); - es->get().get(pDD); - - theNumberingScheme = &(numberingScheme(*pDD)); + theNumberingScheme = &(numberingScheme(*pDD_)); } void TkAccumulatingSensitiveDetector::clearHits() {