59{
60
61
62 if ( argc > 7 ) {
64 return 1;
65 }
66
69 G4bool verboseBestUnits = true;
70#ifdef G4MULTITHREADED
71 G4int nThreads = 0;
72#endif
73 for ( G4int i=1; i<argc; i=i+2 ) {
74 if (
G4String(argv[i]) ==
"-m" ) macro = argv[i+1];
75 else if (
G4String(argv[i]) ==
"-u" ) session = argv[i+1];
76#ifdef G4MULTITHREADED
77 else if (
G4String(argv[i]) ==
"-t" ) {
78 nThreads = G4UIcommand::ConvertToInt(argv[i+1]);
79 }
80#endif
81 else if (
G4String(argv[i]) ==
"-vDefault" ) {
82 verboseBestUnits = false;
83 --i;
84 }
85 else {
87 return 1;
88 }
89 }
90
91
92
94 if ( ! macro.size() ) {
96 }
97
98
99
100
101
102 if ( verboseBestUnits ) {
103 G4int precision = 4;
104 G4SteppingVerbose::UseBestUnit(precision);
105 }
106
107
108
109 auto runManager =
110 G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
111#ifdef G4MULTITHREADED
112 if ( nThreads > 0 ) {
113 runManager->SetNumberOfThreads(nThreads);
114 }
115#endif
116
117
118
120 runManager->SetUserInitialization(detConstruction);
121
123 runManager->SetUserInitialization(physicsList);
124
126 runManager->SetUserInitialization(actionInitialization);
127
128
130
131
132 visManager->Initialize();
133
134
135 auto UImanager = G4UImanager::GetUIpointer();
136
137
138
139
140
141
143 scoreNtupleWriter.SetVerboseLevel(1);
144 scoreNtupleWriter.SetNtupleMerging(true);
145
146
147
148
149
150 if ( macro.size() ) {
151
152 G4String command =
"/control/execute ";
153 UImanager->ApplyCommand(command+macro);
154 }
155 else {
156
157 UImanager->ApplyCommand("/control/execute init_vis.mac");
158 if (ui->IsGUI()) {
159 UImanager->ApplyCommand("/control/execute gui.mac");
160 }
161 ui->SessionStart();
162 delete ui;
163 }
164
165
166
167
168
169
170 delete visManager;
171 delete runManager;
172}
Action initialization class.
Detector construction class to define materials and geometry.