43 #include "HepPDT/defs.h"
44 #include "HepPDT/TableBuilder.hh"
45 #include "HepPDT/ParticleDataTable.hh"
48 #include "G4GeometryManager.hh"
49 #include "G4StateManager.hh"
50 #include "G4ApplicationState.hh"
51 #include "G4RunManagerKernel.hh"
52 #include "G4UImanager.hh"
54 #include "G4EventManager.hh"
57 #include "G4TransportationManager.hh"
58 #include "G4ParticleTable.hh"
60 #include "G4FieldManager.hh"
62 #include "G4GDMLParser.hh"
63 #include "G4SystemOfUnits.hh"
77 std::vector<boost::shared_ptr<SimWatcher> >& oWatchers,
78 std::vector<boost::shared_ptr<SimProducer> >& oProds
83 vector<ParameterSet> watchers;
85 watchers = iP.
getParameter<vector<ParameterSet> >(
"Watchers");
89 for(vector<ParameterSet>::iterator itWatcher = watchers.begin();
90 itWatcher != watchers.end();
92 std::auto_ptr<SimWatcherMakerBase> maker(
99 boost::shared_ptr<SimWatcher> watcherTemp;
100 boost::shared_ptr<SimProducer> producerTemp;
101 maker->make(*itWatcher,iReg,watcherTemp,producerTemp);
102 oWatchers.push_back(watcherTemp);
104 oProds.push_back(producerTemp);
111 : m_generator(0), m_nonBeam(p.getParameter<bool>(
"NonBeamEvent")),
112 m_primaryTransformer(0),
113 m_managerInitialized(
false),
116 m_pUseMagneticField(p.getParameter<bool>(
"UseMagneticField")),
117 m_currentRun(0), m_currentEvent(0), m_simEvent(0),
118 m_PhysicsTablesDir(p.getParameter<std::
string>(
"PhysicsTablesDirectory")),
119 m_StorePhysicsTables(p.getParameter<bool>(
"StorePhysicsTables")),
120 m_RestorePhysicsTables(p.getParameter<bool>(
"RestorePhysicsTables")),
121 m_EvtMgrVerbosity(p.getUntrackedParameter<int>(
"G4EventManagerVerbosity",0)),
122 m_pField(p.getParameter<edm::
ParameterSet>(
"MagneticField")),
123 m_pGenerator(p.getParameter<edm::
ParameterSet>(
"Generator")),
124 m_pPhysics(p.getParameter<edm::
ParameterSet>(
"Physics")),
125 m_pRunAction(p.getParameter<edm::
ParameterSet>(
"RunAction")),
126 m_pEventAction(p.getParameter<edm::
ParameterSet>(
"EventAction")),
127 m_pStackingAction(p.getParameter<edm::
ParameterSet>(
"StackingAction")),
128 m_pTrackingAction(p.getParameter<edm::
ParameterSet>(
"TrackingAction")),
129 m_pSteppingAction(p.getParameter<edm::
ParameterSet>(
"SteppingAction")),
130 m_G4Commands(p.getParameter<std::vector<std::
string> >(
"G4Commands")),
131 m_p(p), m_fieldBuilder(0),
132 m_theLHCTlinkTag(p.getParameter<edm::
InputTag>(
"theLHCTlinkTag"))
136 m_kernel = G4RunManagerKernel::GetRunManagerKernel();
144 if(
"" != m_FieldFile) { m_FieldFile +=
".txt"; }
166 G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
167 G4GeometryManager::GetInstance()->OpenGeometry();
177 <<
"[SimG4Core RunManager]\n"
178 <<
"The Geometry configuration is changed during the job execution\n"
179 <<
"this is not allowed, the geometry must stay unchanged\n";
185 <<
"[SimG4Core RunManager]\n"
186 <<
"The MagneticField configuration is changed during the job execution\n"
187 <<
"this is not allowed, the MagneticField must stay unchanged\n";
215 G4TransportationManager * tM =
216 G4TransportationManager::GetTransportationManager();
218 tM->GetPropagatorInField());
230 std::pair< std::vector<SensitiveTkDetector*>,
231 std::vector<SensitiveCaloDetector*> > sensDets =
239 <<
" RunManager: Sensitive Detector "
240 <<
"building finished; found "
242 <<
" Tk type Producers, and "
244 <<
" Calo type producers ";
252 std::auto_ptr<PhysicsListMakerBase>
255 if (physicsMaker.get()==0) {
256 throw SimG4Exception(
"Unable to find the Physics list requested");
280 throw SimG4Exception(
"G4RunManagerKernel initialization failed!");
285 std::ostringstream
dir;
286 dir << tableDir <<
'\0';
289 G4UImanager::GetUIpointer()->ApplyCommand(cmd);
300 edm::LogInfo(
"SimG4CoreApplication") <<
"RunManager:: Requests UI: "
302 G4UImanager::GetUIpointer()->ApplyCommand(
m_G4Commands[it]);
316 G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
335 <<
" RunManager::produce event " << inpevt.
id().
event()
336 <<
" with no G4PrimaryVertices \n Aborting Run" ;
344 <<
" RunManager: saved : Event " << inpevt.
id().
event()
357 G4Event * evt =
new G4Event(inpevt.
id().
event());
386 m_kernel->GetEventManager()->GetTrackingManager()->GetTrack();
387 t->SetTrackStatus(fStopAndKill) ;
408 m_kernel->GetEventManager()->GetStackManager()->clear() ;
409 m_kernel->GetEventManager()->GetTrackingManager()->EventAborted() ;
411 G4StateManager* stateManager = G4StateManager::GetStateManager();
412 stateManager->SetNewState(G4State_GeomClosed);
422 G4EventManager * eventManager =
m_kernel->GetEventManager();
429 eventManager->SetUserAction(userEventAction);
434 eventManager->SetUserAction(userTrackingAction);
439 eventManager->SetUserAction(userSteppingAction);
445 <<
"No generator; initialized "
446 <<
"only RunAction!";
454 G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
536 <<
" RunManager WARNING : "
537 <<
"error opening file <" <<
m_FieldFile <<
"> for magnetic field";
539 double rmax = 9000*mm;
540 double zmax = 16000*mm;
545 int nr = (int)(rmax/dr);
546 int nz = 2*(int)(zmax/dz);
553 double cosf =
cos(phi);
554 double sinf =
sin(phi);
556 double point[4] = {0.0,0.0,0.0,0.0};
557 double bfield[3] = {0.0,0.0,0.0};
559 fout << std::setprecision(6);
560 for(
int i=0;
i<=nr; ++
i) {
562 for(
int j=0;
j<=nz; ++
j) {
566 field->GetFieldValue(point, bfield);
567 fout <<
"R(mm)= " << r/mm <<
" phi(deg)= " << phi/degree
568 <<
" Z(mm)= " << z/mm <<
" Bz(tesla)= " << bfield[2]/tesla
569 <<
" Br(tesla)= " << (bfield[0]*cosf + bfield[1]*sinf)/tesla
570 <<
" Bphi(tesla)= " << (bfield[0]*sinf - bfield[1]*cosf)/tesla
T getParameter(std::string const &) const
EventNumber_t event() const
edm::ParameterSet m_pGenerator
T getUntrackedParameter(std::string const &, T const &) const
std::auto_ptr< SimTrackManager > m_trackManager
std::pair< std::vector< SensitiveTkDetector * >, std::vector< SensitiveCaloDetector * > > create(const DDDWorld &w, const DDCompactView &cpv, SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *m, SimActivityRegistry ®) const
virtual const math::XYZTLorentzVector * genVertex() const
SimTrackManager * GetSimTrackManager()
edm::ESWatcher< IdealMagneticFieldRecord > idealMagRcdWatcher_
const G4VPhysicalVolume * GetWorldVolume() const
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_
SimActivityRegistry m_registry
virtual const HepMC::GenEvent * genEvent() const
SimActivityRegistry::G4StepSignal m_g4StepSignal
HepPDT::ParticleDataTable ParticleDataTable
void HepMC2G4(const HepMC::GenEvent *g, G4Event *e)
EndOfEventSignal endOfEventSignal_
Sin< T >::type sin(const T &t)
void initializeUserActions()
SimActivityRegistry::EndOfRunSignal m_endOfRunSignal
void build(G4FieldManager *fM=0, G4PropagatorInField *fP=0)
BeginOfRunSignal beginOfRunSignal_
SimActivityRegistry::EndOfEventSignal m_endOfEventSignal
edm::ESWatcher< IdealGeometryRecord > idealGeomRcdWatcher_
ExceptionHandler * m_CustomExceptionHandler
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)
std::auto_ptr< PhysicsList > m_physicsList
SimRunInterface * m_runInterface
Cos< T >::type cos(const T &t)
bool m_RestorePhysicsTables
void hepEvent(const HepMC::GenEvent *r)
void setGenEvent(const HepMC::GenEvent *inpevt)
BeginOfEventSignal beginOfEventSignal_
SimActivityRegistry::EndOfTrackSignal m_endOfTrackSignal
void EndOfRunAction(const G4Run *aRun)
void resetGenParticleId(edm::Event &inpevt)
EndOfRunSignal endOfRunSignal_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
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
virtual void PostUserTrackingAction(const G4Track *aTrack)
unsigned int nGenParts() const
RunAction * m_userRunAction
void BeginOfRunAction(const G4Run *aRun)
DDDWorldSignal dddWorldSignal_
T const * product() const
void nonBeamEvent2G4(const HepMC::GenEvent *g, G4Event *e)
bool check(const edm::EventSetup &iSetup)
G4Event * generateEvent(edm::Event &inpevt)
void DumpMagneticField(const G4Field *) const
SimActivityRegistry::BeginOfRunSignal m_beginOfRunSignal
void Connect(RunAction *)
static void createWatchers(const edm::ParameterSet &iP, SimActivityRegistry &iReg, std::vector< boost::shared_ptr< SimWatcher > > &oWatchers, std::vector< boost::shared_ptr< SimProducer > > &oProds)
PrimaryTransformer * m_primaryTransformer
sim::FieldBuilder * m_fieldBuilder
std::string m_PhysicsTablesDir
bool m_StorePhysicsTables
void connect(SimActivityRegistry &iOther)
forwards our signals to slots connected to iOther
volatile std::atomic< bool > shutdown_flag false
EndOfTrackSignal endOfTrackSignal_
std::vector< boost::shared_ptr< SimProducer > > m_producers
std::vector< boost::shared_ptr< SimWatcher > > m_watchers
edm::ParameterSet m_pRunAction
RunManager(edm::ParameterSet const &p)
edm::ParameterSet m_pTrackingAction
void collisionPoint(const math::XYZTLorentzVectorD &v)
std::vector< std::string > m_G4Commands
SimActivityRegistry::BeginOfEventSignal m_beginOfEventSignal
bool m_managerInitialized
void initG4(const edm::EventSetup &es)
T get(const Candidate &c)
edm::InputTag m_theLHCTlinkTag
*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