|
![CMS Logo](/cmsdoxygen/common/rightImage.jpg) |
Go to the documentation of this file.
31 #include "G4RunManagerKernel.hh"
32 #include "G4TransportationManager.hh"
39 std::vector<std::shared_ptr<SimWatcher>> &oWatchers,
40 std::vector<std::shared_ptr<SimProducer>> &oProds) {
43 std::vector<ParameterSet> watchers;
45 watchers = iP.
getParameter<vector<ParameterSet>>(
"Watchers");
49 for (std::vector<ParameterSet>::iterator itWatcher = watchers.begin(); itWatcher != watchers.end(); ++itWatcher) {
50 std::unique_ptr<SimWatcherMakerBase> maker(
52 if (maker.get() ==
nullptr) {
53 throw cms::Exception(
"SimG4CoreGeometryProducer",
" createWatchers: Unable to find the requested Watcher");
56 std::shared_ptr<SimWatcher> watcherTemp;
57 std::shared_ptr<SimProducer> producerTemp;
58 maker->make(*itWatcher, iReg, watcherTemp, producerTemp);
59 oWatchers.push_back(watcherTemp);
61 oProds.push_back(producerTemp);
72 m_pUseMagneticField(
p.getParameter<
bool>(
"UseMagneticField")),
73 m_pUseSensitiveDetectors(
p.getParameter<
bool>(
"UseSensitiveDetectors")),
74 m_pGeoFromDD4hep(
false) {
99 G4TransportationManager *tM = G4TransportationManager::GetTransportationManager();
100 tM->SetFieldManager(fieldManager);
101 fieldBuilder.build(fieldManager, tM->GetPropagatorInField());
102 edm::LogInfo(
"GeometryProducer") <<
"Magentic field is built";
114 maker.second->beginRun(es);
127 m_kernel = G4RunManagerKernel::GetRunManagerKernel();
129 m_kernel =
new G4RunManagerKernel();
145 if (
nullptr != world)
146 edm::LogVerbatim(
"GeometryProducer") <<
" World Volume: " << world->GetName();
147 m_kernel->DefineWorldVolume(world,
true);
155 edm::LogInfo(
"GeometryProducer") <<
" instantiating sensitive detectors ";
159 std::pair<std::vector<SensitiveTkDetector *>, std::vector<SensitiveCaloDetector *>> sensDets =
167 <<
" Tk type Producers, and " <<
m_sensCaloDets.size() <<
" Calo type producers ";
171 (*itProd)->produce(
e, es);
T const * product() const
void beginLuminosityBlock(edm::LuminosityBlock &, edm::EventSetup const &)
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
const cms::DDCompactView * m_pDD4hep
bool m_pUseSensitiveDetectors
std::vector< SensitiveCaloDetector * > m_sensCaloDets
T const * product() const
SimActivityRegistry m_registry
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > m_sdMakers
DDDWorldSignal dddWorldSignal_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
void produce(edm::Event &e, const edm::EventSetup &c) override
Log< level::Info, false > LogInfo
def create(alignables, pedeDump, additionalData, outputFile, config)
#define DEFINE_FWK_MODULE(type)
void endRun(const edm::Run &r, const edm::EventSetup &c) override
void updateMagneticField(edm::EventSetup const &es)
G4VPhysicalVolume * GetWorldVolume() const
GeometryProducer(edm::ParameterSet const &p)
G4RunManagerKernel * m_kernel
std::vector< SensitiveTkDetector * > m_sensTkDets
static void createWatchers(const edm::ParameterSet &iP, SimActivityRegistry &iReg, std::vector< std::shared_ptr< SimWatcher >> &oWatchers, std::vector< std::shared_ptr< SimProducer >> &oProds)
const DDCompactView * m_pDD
std::vector< std::shared_ptr< SimProducer > > m_producers
void beginRun(const edm::Run &r, const edm::EventSetup &c) override
std::pair< std::vector< SensitiveTkDetector * >, std::vector< SensitiveCaloDetector * > > attachSD(const std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase >> &, const edm::EventSetup &, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *, SimActivityRegistry ®)
Log< level::Info, true > LogVerbatim
std::unordered_map< std::string, std::unique_ptr< SensitiveDetectorMakerBase > > sensitiveDetectorMakers(edm::ParameterSet const &, edm::ConsumesCollector, std::vector< std::string > const &chosenMakers)
void connect(Observer< const BeginOfJob * > *iObject)
T getParameter(std::string const &) const
std::vector< std::shared_ptr< SimWatcher > > m_watchers
std::unique_ptr< SimTrackManager > m_trackManager
~GeometryProducer() override
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
edm::ParameterSet m_pField