Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:51

0001 
0002 // system include files
0003 #include <string>
0004 #include <vector>
0005 
0006 // user include files
0007 #include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorMakerBase.h"
0008 #include "SimG4Core/Notification/interface/SimActivityRegistryEnroller.h"
0009 #include "SimG4Core/SensitiveDetector/interface/SensitiveDetectorPluginFactory.h"
0010 
0011 #include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h"
0012 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0013 #include "SimG4CMS/Calo/interface/HGCScintSD.h"
0014 
0015 #include "FWCore/Framework/interface/ConsumesCollector.h"
0016 #include "FWCore/Framework/interface/ESHandle.h"
0017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0018 #include "FWCore/Utilities/interface/ESGetToken.h"
0019 #include "FWCore/PluginManager/interface/ModuleDef.h"
0020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0021 
0022 class HGCScintillatorSensitiveDetectorBuilder : public SensitiveDetectorMakerBase {
0023 public:
0024   explicit HGCScintillatorSensitiveDetectorBuilder(edm::ParameterSet const& p, edm::ConsumesCollector cc)
0025       : hgcToken_{cc.esConsumes<edm::Transition::BeginRun>(edm::ESInputTag{"", "HGCalHEScintillatorSensitive"})} {}
0026 
0027   void beginRun(const edm::EventSetup& es) final { hgcons_ = es.getHandle(hgcToken_); }
0028 
0029   std::unique_ptr<SensitiveDetector> make(const std::string& iname,
0030                                           const SensitiveDetectorCatalog& clg,
0031                                           const edm::ParameterSet& p,
0032                                           const SimTrackManager* man,
0033                                           SimActivityRegistry& reg) const final {
0034     auto hgc = ((iname.find("HitsHEback") != std::string::npos) && hgcons_.isValid()) ? hgcons_.product() : nullptr;
0035     auto sd = std::make_unique<HGCScintSD>(iname, hgc, clg, p, man);
0036     SimActivityRegistryEnroller::enroll(reg, sd.get());
0037     return sd;
0038   }
0039 
0040 private:
0041   const edm::ESGetToken<HGCalDDDConstants, IdealGeometryRecord> hgcToken_;
0042   edm::ESHandle<HGCalDDDConstants> hgcons_;
0043 };
0044 
0045 typedef HGCScintSD HGCScintillatorSensitiveDetector;
0046 DEFINE_SENSITIVEDETECTORBUILDER(HGCScintillatorSensitiveDetectorBuilder, HGCScintillatorSensitiveDetector);