57{
58
59
60 if ( argc > 7 ) {
62 return 1;
63 }
64
67 G4bool verboseBestUnits = true;
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 if (
G4String(argv[i]) ==
"-vDefault" ) {
80 verboseBestUnits = false;
81 --i;
82 }
83 else {
85 return 1;
86 }
87 }
88
89
90
92 if ( ! macro.size() ) {
94 }
95
96
97
98
99
100 if ( verboseBestUnits ) {
101 G4int precision = 4;
102 G4SteppingVerbose::UseBestUnit(precision);
103 }
104
105
106
107 auto runManager =
108 G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
109#ifdef G4MULTITHREADED
110 if ( nThreads > 0 ) {
111 runManager->SetNumberOfThreads(nThreads);
112 }
113#endif
114
115
116
118 runManager->SetUserInitialization(detConstruction);
119
121 runManager->SetUserInitialization(physicsList);
122
124 runManager->SetUserInitialization(actionInitialization);
125
126
127
129
130
131 visManager->Initialize();
132
133
134 auto UImanager = G4UImanager::GetUIpointer();
135
136
137
138 if ( macro.size() ) {
139
140 G4String command =
"/control/execute ";
141 UImanager->ApplyCommand(command+macro);
142 }
143 else {
144
145 UImanager->ApplyCommand("/control/execute init_vis.mac");
146 if (ui->IsGUI()) {
147 UImanager->ApplyCommand("/control/execute gui.mac");
148 }
149 ui->SessionStart();
150 delete ui;
151 }
152
153
154
155
156
157
158 delete visManager;
159 delete runManager;
160}
Detector construction class to define materials and geometry.
Action initialization class.