33 #include "HepPDT/ParticleDataTable.hh"
35 #include "G4GeometryManager.hh"
36 #include "G4StateManager.hh"
37 #include "G4ApplicationState.hh"
38 #include "G4MTRunManagerKernel.hh"
39 #include "G4UImanager.hh"
41 #include "G4EventManager.hh"
44 #include "G4TransportationManager.hh"
45 #include "G4ParticleTable.hh"
47 #include "G4FieldManager.hh"
48 #include "G4CascadeInterface.hh"
50 #include "G4GDMLParser.hh"
51 #include "G4SystemOfUnits.hh"
61 m_managerInitialized(
false),
62 m_runTerminated(
false),
63 m_pUseMagneticField(p.getParameter<bool>(
"UseMagneticField")),
64 m_PhysicsTablesDir(p.getParameter<std::
string>(
"PhysicsTablesDirectory")),
65 m_StorePhysicsTables(p.getParameter<bool>(
"StorePhysicsTables")),
66 m_RestorePhysicsTables(p.getParameter<bool>(
"RestorePhysicsTables")),
67 m_pField(p.getParameter<edm::
ParameterSet>(
"MagneticField")),
68 m_pPhysics(p.getParameter<edm::
ParameterSet>(
"Physics")),
69 m_pRunAction(p.getParameter<edm::
ParameterSet>(
"RunAction")),
70 m_g4overlap(p.getParameter<edm::
ParameterSet>(
"G4CheckOverlap")),
71 m_G4Commands(p.getParameter<std::vector<std::
string> >(
"G4Commands")),
75 G4RunManagerKernel *kernel = G4MTRunManagerKernel::GetRunManagerKernel();
76 if(!kernel)
m_kernel =
new G4MTRunManagerKernel();
78 m_kernel =
dynamic_cast<G4MTRunManagerKernel *
>(kernel);
91 G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
92 G4GeometryManager::GetInstance()->OpenGeometry();
101 <<
"RunManagerMT: start initialisation of geometry";
110 <<
"RunManagerMT: start initialisation of magnetic field";
118 G4TransportationManager * tM =
119 G4TransportationManager::GetTransportationManager();
121 tM->GetPropagatorInField());
129 <<
"RunManagerMT: create PhysicsList";
131 std::unique_ptr<PhysicsListMakerBase>
134 if (physicsMaker.get()==0) {
135 throw SimG4Exception(
"Unable to find the Physics list requested");
154 <<
"RunManagerMT: start initialisation of PhysicsList for master";
166 G4CascadeInterface::Initialize();
170 throw SimG4Exception(
"G4RunManagerKernel initialization failed!");
174 std::ostringstream
dir;
178 G4UImanager::GetUIpointer()->ApplyCommand(cmd);
185 G4cout <<
"RunManagerMT: Requested UI commands: " << G4endl;
188 G4UImanager::GetUIpointer()->ApplyCommand(
m_G4Commands[it]);
211 G4StateManager::GetStateManager()->SetNewState(G4State_GeomClosed);
230 G4StateManager::GetStateManager()->SetNewState(G4State_Quit);
249 <<
" RunManager WARNING : "
250 <<
"error opening file <" <<
m_FieldFile <<
"> for magnetic field";
252 double rmax = 9000*mm;
253 double zmax = 16000*mm;
258 int nr = (int)(rmax/dr);
259 int nz = 2*(int)(zmax/dz);
266 double cosf =
cos(phi);
267 double sinf =
sin(phi);
269 double point[4] = {0.0,0.0,0.0,0.0};
270 double bfield[3] = {0.0,0.0,0.0};
272 fout << std::setprecision(6);
273 for(
int i=0;
i<=nr; ++
i) {
275 for(
int j=0;
j<=nz; ++
j) {
279 field->GetFieldValue(point, bfield);
280 fout <<
"R(mm)= " << r/mm <<
" phi(deg)= " << phi/degree
281 <<
" Z(mm)= " << z/mm <<
" Bz(tesla)= " << bfield[2]/tesla
282 <<
" Br(tesla)= " << (bfield[0]*cosf + bfield[1]*sinf)/tesla
283 <<
" Bphi(tesla)= " << (bfield[0]*sinf - bfield[1]*cosf)/tesla
void Connect(RunAction *)
const std::string m_PhysicsTablesDir
bool m_managerInitialized
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
G4MTRunManagerKernel * m_kernel
SensitiveDetectorCatalog m_catalog
edm::ParameterSet m_pRunAction
HepPDT::ParticleDataTable ParticleDataTable
void initG4(const DDCompactView *pDD, const MagneticField *pMF, const HepPDT::ParticleDataTable *fPDGTable)
Sin< T >::type sin(const T &t)
SimActivityRegistry::EndOfRunSignal m_endOfRunSignal
sim::FieldBuilder * m_fieldBuilder
BeginOfRunSignal beginOfRunSignal_
std::vector< std::string > m_G4Commands
void initializeUserActions()
type of data representation of DDCompactView
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
RunManagerMT(edm::ParameterSet const &p)
void build(G4FieldManager *fM=nullptr, G4PropagatorInField *fP=nullptr, ChordFinderSetter *setter=nullptr)
bool check(const std::string &)
Cos< T >::type cos(const T &t)
void EndOfRunAction(const G4Run *aRun)
EndOfRunSignal endOfRunSignal_
void DumpMagneticField(const G4Field *) const
void connect(Observer< const T * > *iObs)
does not take ownership of memory
bool m_StorePhysicsTables
std::unique_ptr< PhysicsList > m_physicsList
edm::ParameterSet m_pField
std::unique_ptr< DDDWorld > m_world
edm::ParameterSet m_pPhysics
void BeginOfRunAction(const G4Run *aRun)
DDDWorldSignal dddWorldSignal_
bool m_RestorePhysicsTables
std::unique_ptr< sim::ChordFinderSetter > m_chordFinderSetter
void ReportRegions(const std::string &ss)
string cmd
self.logger.debug("Path is now `%s'" % \ path)
SimActivityRegistry::BeginOfRunSignal m_beginOfRunSignal
std::unique_ptr< SimRunInterface > m_runInterface
edm::ParameterSet m_g4overlap
volatile std::atomic< bool > shutdown_flag false
RunAction * m_userRunAction
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
SimActivityRegistry m_registry