File indexing completed on 2026-03-31 07:49:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "ActionInitialization.hh"
0030 #include "DetectorConstruction.hh"
0031 #include "FTFP_BERT.hh"
0032
0033 #include "G4RunManagerFactory.hh"
0034 #include "G4SteppingVerbose.hh"
0035 #include "G4UIExecutive.hh"
0036 #include "G4UIcommand.hh"
0037 #include "G4UImanager.hh"
0038 #include "G4VisExecutive.hh"
0039
0040
0041
0042
0043 namespace
0044 {
0045 void PrintUsage()
0046 {
0047 G4cerr << " Usage: " << G4endl;
0048 G4cerr << " exampleB4b [-m macro ] [-u UIsession] [-t nThreads] [-vDefault]" << G4endl;
0049 G4cerr << " note: -t option is available only for multi-threaded mode." << G4endl;
0050 }
0051 }
0052
0053
0054
0055 int main(int argc, char** argv)
0056 {
0057
0058
0059 if (argc > 7) {
0060 PrintUsage();
0061 return 1;
0062 }
0063
0064 G4String macro;
0065 G4String session;
0066 G4bool verboseBestUnits = true;
0067 #ifdef G4MULTITHREADED
0068 G4int nThreads = 0;
0069 #endif
0070 for (G4int i = 1; i < argc; i = i + 2) {
0071 if (G4String(argv[i]) == "-m")
0072 macro = argv[i + 1];
0073 else if (G4String(argv[i]) == "-u")
0074 session = argv[i + 1];
0075 #ifdef G4MULTITHREADED
0076 else if (G4String(argv[i]) == "-t") {
0077 nThreads = G4UIcommand::ConvertToInt(argv[i + 1]);
0078 }
0079 #endif
0080 else if (G4String(argv[i]) == "-vDefault") {
0081 verboseBestUnits = false;
0082 --i;
0083 }
0084 else {
0085 PrintUsage();
0086 return 1;
0087 }
0088 }
0089
0090
0091
0092 G4UIExecutive* ui = nullptr;
0093 if (!macro.size()) {
0094 ui = new G4UIExecutive(argc, argv, session);
0095 }
0096
0097
0098
0099
0100
0101 if (verboseBestUnits) {
0102 G4int precision = 8;
0103 G4SteppingVerbose::UseBestUnit(precision);
0104 }
0105
0106
0107
0108 auto runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
0109 #ifdef G4MULTITHREADED
0110 if (nThreads > 0) {
0111 runManager->SetNumberOfThreads(nThreads);
0112 }
0113 #endif
0114
0115
0116
0117 auto detConstruction = new B4::DetectorConstruction();
0118 runManager->SetUserInitialization(detConstruction);
0119
0120 auto physicsList = new FTFP_BERT;
0121 runManager->SetUserInitialization(physicsList);
0122
0123 auto actionInitialization = new B4b::ActionInitialization(detConstruction);
0124 runManager->SetUserInitialization(actionInitialization);
0125
0126
0127 auto visManager = new G4VisExecutive;
0128
0129
0130 visManager->Initialize();
0131
0132
0133 auto UImanager = G4UImanager::GetUIpointer();
0134
0135
0136
0137 if (macro.size()) {
0138
0139 G4String command = "/control/execute ";
0140 UImanager->ApplyCommand(command + macro);
0141 }
0142 else {
0143
0144 UImanager->ApplyCommand("/control/execute init_vis.mac");
0145 if (ui->IsGUI()) {
0146 UImanager->ApplyCommand("/control/execute gui.mac");
0147 }
0148 ui->SessionStart();
0149 delete ui;
0150 }
0151
0152
0153
0154
0155
0156
0157 delete visManager;
0158 delete runManager;
0159 }
0160
0161