File indexing completed on 2024-04-06 12:30:13
0001
0002
0003
0004 #include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorMakerBase.h"
0005 #include "SimG4Core/Notification/interface/SimActivityRegistryEnroller.h"
0006 #include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorPluginFactory.h"
0007
0008 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0009 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0010
0011 #include "SimG4CMS/Tracker/interface/TkAccumulatingSensitiveDetector.h"
0012
0013 #include "FWCore/Framework/interface/EventSetup.h"
0014 #include "FWCore/Framework/interface/ConsumesCollector.h"
0015 #include "FWCore/Utilities/interface/ESGetToken.h"
0016 #include "FWCore/PluginManager/interface/ModuleDef.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018
0019 class TkAccumulatingSensitiveDetectorBuilder : public SensitiveDetectorMakerBase {
0020 public:
0021 explicit TkAccumulatingSensitiveDetectorBuilder(edm::ParameterSet const& p, edm::ConsumesCollector cc)
0022 : geomdet_{nullptr}, geomdetToken_{cc.esConsumes<edm::Transition::BeginRun>()} {}
0023
0024 void beginRun(const edm::EventSetup& es) final { geomdet_ = &es.getData(geomdetToken_); }
0025
0026 std::unique_ptr<SensitiveDetector> make(const std::string& iname,
0027 const SensitiveDetectorCatalog& clg,
0028 const edm::ParameterSet& p,
0029 const SimTrackManager* man,
0030 SimActivityRegistry& reg) const final {
0031 auto sd = std::make_unique<TkAccumulatingSensitiveDetector>(iname, geomdet_, clg, p, man);
0032 SimActivityRegistryEnroller::enroll(reg, sd.get());
0033 return sd;
0034 }
0035
0036 private:
0037 const GeometricDet* geomdet_;
0038 const edm::ESGetToken<GeometricDet, IdealGeometryRecord> geomdetToken_;
0039 };
0040
0041 DEFINE_SENSITIVEDETECTORBUILDER(TkAccumulatingSensitiveDetectorBuilder, TkAccumulatingSensitiveDetector);