54 #include "HepPDT/ParticleDataTable.hh"
57 #include "G4GeometryManager.hh"
58 #include "G4StateManager.hh"
59 #include "G4ApplicationState.hh"
60 #include "G4RunManagerKernel.hh"
61 #include "G4UImanager.hh"
63 #include "G4EventManager.hh"
66 #include "G4TransportationManager.hh"
67 #include "G4ParticleTable.hh"
69 #include "G4FieldManager.hh"
71 #include "G4GDMLParser.hh"
72 #include "G4SystemOfUnits.hh"
84 std::vector<std::shared_ptr<SimWatcher> >& oWatchers,
85 std::vector<std::shared_ptr<SimProducer> >& oProds
91 vector<ParameterSet> watchers = iP.
getParameter<vector<ParameterSet> >(
"Watchers");
93 for(vector<ParameterSet>::iterator itWatcher = watchers.begin();
94 itWatcher != watchers.end();
96 std::shared_ptr<SimWatcherMakerBase> maker(
99 if(maker.get()==
nullptr) {
101 <<
"Unable to find the requested Watcher";
104 std::shared_ptr<SimWatcher> watcherTemp;
105 std::shared_ptr<SimProducer> producerTemp;
106 maker->make(*itWatcher,iReg,watcherTemp,producerTemp);
107 oWatchers.push_back(watcherTemp);
109 oProds.push_back(producerTemp);
118 m_nonBeam(p.getParameter<bool>(
"NonBeamEvent")),
120 m_managerInitialized(
false),
123 m_pUseMagneticField(p.getParameter<bool>(
"UseMagneticField")),
124 m_currentRun(0), m_currentEvent(0), m_simEvent(0),
125 m_PhysicsTablesDir(p.getParameter<std::
string>(
"PhysicsTablesDirectory")),
126 m_StorePhysicsTables(p.getParameter<bool>(
"StorePhysicsTables")),
127 m_RestorePhysicsTables(p.getParameter<bool>(
"RestorePhysicsTables")),
128 m_EvtMgrVerbosity(p.getUntrackedParameter<int>(
"G4EventManagerVerbosity",0)),
129 m_pField(p.getParameter<edm::
ParameterSet>(
"MagneticField")),
130 m_pGenerator(p.getParameter<edm::
ParameterSet>(
"Generator")),
131 m_pPhysics(p.getParameter<edm::
ParameterSet>(
"Physics")),
132 m_pRunAction(p.getParameter<edm::
ParameterSet>(
"RunAction")),
133 m_pEventAction(p.getParameter<edm::
ParameterSet>(
"EventAction")),
134 m_pStackingAction(p.getParameter<edm::
ParameterSet>(
"StackingAction")),
135 m_pTrackingAction(p.getParameter<edm::
ParameterSet>(
"TrackingAction")),
136 m_pSteppingAction(p.getParameter<edm::
ParameterSet>(
"SteppingAction")),
137 m_g4overlap(p.getParameter<edm::
ParameterSet>(
"G4CheckOverlap")),
138 m_G4Commands(p.getParameter<std::vector<std::
string> >(
"G4Commands")),
142 m_kernel =
new G4RunManagerKernel();
160 std::vector<edm::ParameterSet> watchers
161 = p.
getParameter<std::vector<edm::ParameterSet> >(
"Watchers");
172 G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
173 G4GeometryManager::GetInstance()->OpenGeometry();
184 <<
"[SimG4Core RunManager]\n"
185 <<
"The Geometry configuration is changed during the job execution\n"
186 <<
"this is not allowed, the geometry must stay unchanged\n";
192 <<
"[SimG4Core RunManager]\n"
193 <<
"The MagneticField configuration is changed during the job execution\n"
194 <<
"this is not allowed, the MagneticField must stay unchanged\n";
218 G4TransportationManager * tM =
219 G4TransportationManager::GetTransportationManager();
221 tM->GetPropagatorInField(),
234 std::pair< std::vector<SensitiveTkDetector*>,
235 std::vector<SensitiveCaloDetector*> > sensDets =
243 <<
" RunManager: Sensitive Detector "
244 <<
"building finished; found "
246 <<
" Tk type Producers, and "
248 <<
" Calo type producers ";
256 std::unique_ptr<PhysicsListMakerBase>
259 if (physicsMaker.get()==
nullptr) {
261 <<
"Unable to find the Physics list requested";
269 <<
"Physics list construction failed!";
282 <<
"RunManager: start initialisation of PhysicsList";
298 <<
"G4RunManagerKernel initialization failed!";
303 std::ostringstream
dir;
304 dir << tableDir <<
'\0';
307 G4UImanager::GetUIpointer()->ApplyCommand(cmd);
317 std::vector<int> ve =
m_p.
getParameter<std::vector<int> >(
"VerboseEvents");
318 std::vector<int> vn =
m_p.
getParameter<std::vector<int> >(
"VertexNumber");
319 std::vector<int> vt =
m_p.
getParameter<std::vector<int> >(
"VerboseTracks");
327 G4cout <<
"RunManager: Requested UI commands: " << G4endl;
330 G4UImanager::GetUIpointer()->ApplyCommand(
m_G4Commands[it]);
357 G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
375 std::stringstream
ss;
376 ss <<
" RunManager::produce(): event " << inpevt.
id().
event()
377 <<
" with no G4PrimaryVertices\n" ;
383 <<
"RunManager::produce: start Event " << inpevt.
id().
event()
392 <<
" RunManager::produce: ended Event " << inpevt.
id().
event();
405 G4Event * evt =
new G4Event(evtid);
434 m_kernel->GetEventManager()->GetTrackingManager()->GetTrack();
435 t->SetTrackStatus(fStopAndKill) ;
444 m_kernel->GetEventManager()->GetStackManager()->clear() ;
445 m_kernel->GetEventManager()->GetTrackingManager()->EventAborted() ;
447 G4StateManager* stateManager = G4StateManager::GetStateManager();
448 stateManager->SetNewState(G4State_GeomClosed);
458 G4EventManager * eventManager =
m_kernel->GetEventManager();
466 eventManager->SetUserAction(userEventAction);
471 eventManager->SetUserAction(userTrackingAction);
476 eventManager->SetUserAction(userSteppingAction);
478 eventManager->SetUserAction(
new StackingAction(userTrackingAction,
483 <<
"No generator; initialized "
484 <<
"only RunAction!";
492 G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
566 <<
" RunManager WARNING : "
567 <<
"error opening file <" <<
m_FieldFile <<
"> for magnetic field";
569 double rmax = 9000*mm;
570 double zmax = 16000*mm;
575 int nr = (int)(rmax/dr);
576 int nz = 2*(int)(zmax/dz);
583 double cosf =
cos(phi);
584 double sinf =
sin(phi);
586 double point[4] = {0.0,0.0,0.0,0.0};
587 double bfield[3] = {0.0,0.0,0.0};
589 fout << std::setprecision(6);
590 for(
int i=0;
i<=nr; ++
i) {
592 for(
int j=0;
j<=nz; ++
j) {
596 field->GetFieldValue(point, bfield);
597 fout <<
"R(mm)= " << r/mm <<
" phi(deg)= " << phi/degree
598 <<
" Z(mm)= " << z/mm <<
" Bz(tesla)= " << bfield[2]/tesla
599 <<
" Br(tesla)= " << (bfield[0]*cosf + bfield[1]*sinf)/tesla
600 <<
" Bphi(tesla)= " << (bfield[0]*sinf - bfield[1]*cosf)/tesla
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::HepMCProduct > m_HepMC
virtual const math::XYZTLorentzVector * genVertex() const
SimTrackManager * GetSimTrackManager()
edm::ESWatcher< IdealMagneticFieldRecord > idealMagRcdWatcher_
const G4VPhysicalVolume * GetWorldVolume() const
RunManager(edm::ParameterSet const &p, edm::ConsumesCollector &&i)
virtual const double eventWeight() const
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
void abortRun(bool softAbort=false)
G4StepSignal g4StepSignal_
edm::EDGetTokenT< edm::LHCTransportLinkContainer > m_LHCtr
SimActivityRegistry m_registry
virtual const HepMC::GenEvent * genEvent() const
SimActivityRegistry::G4StepSignal m_g4StepSignal
HepPDT::ParticleDataTable ParticleDataTable
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< std::shared_ptr< SimProducer > > m_producers
void connect(Observer< const BeginOfJob * > *iObject)
void HepMC2G4(const HepMC::GenEvent *g, G4Event *e)
EndOfEventSignal endOfEventSignal_
Sin< T >::type sin(const T &t)
void initializeUserActions()
SimActivityRegistry::EndOfRunSignal m_endOfRunSignal
BeginOfRunSignal beginOfRunSignal_
SimActivityRegistry::EndOfEventSignal m_endOfEventSignal
static void createWatchers(const edm::ParameterSet &iP, SimActivityRegistry &iReg, std::vector< std::shared_ptr< SimWatcher > > &oWatchers, std::vector< std::shared_ptr< SimProducer > > &oProds)
edm::ESWatcher< IdealGeometryRecord > idealGeomRcdWatcher_
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
std::vector< SensitiveCaloDetector * > m_sensCaloDets
std::vector< SensitiveTkDetector * > m_sensTkDets
BeginOfJobSignal beginOfJobSignal_
U second(std::pair< T, U > const &p)
void build(G4FieldManager *fM=nullptr, G4PropagatorInField *fP=nullptr, ChordFinderSetter *setter=nullptr)
SimRunInterface * m_runInterface
Cos< T >::type cos(const T &t)
bool m_RestorePhysicsTables
void hepEvent(const HepMC::GenEvent *r)
std::vector< std::shared_ptr< SimWatcher > > m_watchers
std::unique_ptr< CMSSteppingVerbose > m_sVerbose
void setGenEvent(const HepMC::GenEvent *inpevt)
BeginOfEventSignal beginOfEventSignal_
SimActivityRegistry::EndOfTrackSignal m_endOfTrackSignal
void EndOfRunAction(const G4Run *aRun)
void resetGenParticleId(edm::Event &inpevt)
EndOfRunSignal endOfRunSignal_
edm::ParameterSet m_pStackingAction
unsigned int nTracks() const
void connect(Observer< const T * > *iObs)
does not take ownership of memory
edm::ParameterSet m_pEventAction
unsigned int nVertices() const
edm::ParameterSet m_pField
edm::ParameterSet m_pPhysics
edm::ParameterSet m_pSteppingAction
edm::ParameterSet m_g4overlap
T const * product() const
virtual void PostUserTrackingAction(const G4Track *aTrack)
unsigned int nGenParts() const
RunAction * m_userRunAction
void BeginOfRunAction(const G4Run *aRun)
DDDWorldSignal dddWorldSignal_
std::pair< std::vector< SensitiveTkDetector * >, std::vector< SensitiveCaloDetector * > > create(const DDDWorld &w, const DDCompactView &cpv, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *m, SimActivityRegistry ®) const
void nonBeamEvent2G4(const HepMC::GenEvent *g, G4Event *e)
bool check(const edm::EventSetup &iSetup)
G4Event * generateEvent(edm::Event &inpevt)
void ReportRegions(const std::string &ss)
void DumpMagneticField(const G4Field *) const
string cmd
self.logger.debug("Path is now `%s'" % \ path)
SimActivityRegistry::BeginOfRunSignal m_beginOfRunSignal
sim::ChordFinderSetter * m_chordFinderSetter
void Connect(RunAction *)
std::vector< LHCTransportLink > LHCTransportLinkContainer
PrimaryTransformer * m_primaryTransformer
sim::FieldBuilder * m_fieldBuilder
std::string m_PhysicsTablesDir
bool m_StorePhysicsTables
std::unique_ptr< CustomUIsession > m_UIsession
volatile std::atomic< bool > shutdown_flag false
EndOfTrackSignal endOfTrackSignal_
std::unique_ptr< DDG4ProductionCuts > m_prodCuts
edm::ParameterSet m_pRunAction
std::unique_ptr< SimTrackManager > m_trackManager
edm::ParameterSet m_pTrackingAction
void collisionPoint(const math::XYZTLorentzVectorD &v)
std::vector< std::string > m_G4Commands
SimActivityRegistry::BeginOfEventSignal m_beginOfEventSignal
std::unique_ptr< PhysicsList > m_physicsList
bool m_managerInitialized
void initG4(const edm::EventSetup &es)
T get(const Candidate &c)
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
BeginOfTrackSignal beginOfTrackSignal_
G4RunManagerKernel * m_kernel
void produce(edm::Event &inpevt, const edm::EventSetup &es)
SimActivityRegistry::BeginOfTrackSignal m_beginOfTrackSignal