58{
59
60
61 if ( argc > 7 ) {
63 return 1;
64 }
65
68#ifdef G4MULTITHREADED
69 G4int nThreads = 0;
70#endif
71 for ( G4int i=1; i<argc; i=i+2 ) {
72 if (
G4String(argv[i]) ==
"-m" ) macro = argv[i+1];
73 else if (
G4String(argv[i]) ==
"-u" ) session = argv[i+1];
74#ifdef G4MULTITHREADED
75 else if (
G4String(argv[i]) ==
"-t" ) {
76 nThreads = G4UIcommand::ConvertToInt(argv[i+1]);
77 }
78#endif
79 else {
81 return 1;
82 }
83 }
84
85
86
88 if ( ! macro.size() ) {
90 }
91
92
93
94
95
96
97
98 auto* runManager =
99 G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
100#ifdef G4MULTITHREADED
101 if ( nThreads > 0 ) {
102 runManager->SetNumberOfThreads(nThreads);
103 }
104#endif
105
106
107
109 runManager->SetUserInitialization(detConstruction);
110
112 runManager->SetUserInitialization(physicsList);
113
115 runManager->SetUserInitialization(actionInitialization);
116
117
118
120
121
122 visManager->Initialize();
123
124
125 auto UImanager = G4UImanager::GetUIpointer();
126
127
128
129 if ( macro.size() ) {
130
131 G4String command =
"/control/execute ";
132 UImanager->ApplyCommand(command+macro);
133 }
134 else {
135
136 UImanager->ApplyCommand("/control/execute init_vis.mac");
137 if (ui->IsGUI()) {
138 UImanager->ApplyCommand("/control/execute gui.mac");
139 }
140 ui->SessionStart();
141 delete ui;
142 }
143
144
145
146
147
148
149 delete visManager;
150 delete runManager;
151}