File indexing completed on 2025-01-18 09:17:16
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
0030 #include "ActionInitialization.hh"
0031 #include "DetectorConstruction.hh"
0032 #include "FTFP_BERT.hh"
0033
0034 #include "G4AnalysisManager.hh"
0035 #include "G4RunManagerFactory.hh"
0036 #include "G4SteppingVerbose.hh"
0037 #include "G4TScoreNtupleWriter.hh"
0038 #include "G4UIExecutive.hh"
0039 #include "G4UIcommand.hh"
0040 #include "G4UImanager.hh"
0041 #include "G4VisExecutive.hh"
0042
0043
0044
0045
0046 namespace
0047 {
0048 void PrintUsage()
0049 {
0050 G4cerr << " Usage: " << G4endl;
0051 G4cerr << " exampleB4d [-m macro ] [-u UIsession] [-t nThreads] [-vDefault]" << G4endl;
0052 G4cerr << " note: -t option is available only for multi-threaded mode." << G4endl;
0053 }
0054 }
0055
0056
0057
0058 int main(int argc, char** argv)
0059 {
0060
0061
0062 if (argc > 7) {
0063 PrintUsage();
0064 return 1;
0065 }
0066
0067 G4String macro;
0068 G4String session;
0069 G4bool verboseBestUnits = true;
0070 #ifdef G4MULTITHREADED
0071 G4int nThreads = 0;
0072 #endif
0073 for (G4int i = 1; i < argc; i = i + 2) {
0074 if (G4String(argv[i]) == "-m")
0075 macro = argv[i + 1];
0076 else if (G4String(argv[i]) == "-u")
0077 session = argv[i + 1];
0078 #ifdef G4MULTITHREADED
0079 else if (G4String(argv[i]) == "-t") {
0080 nThreads = G4UIcommand::ConvertToInt(argv[i + 1]);
0081 }
0082 #endif
0083 else if (G4String(argv[i]) == "-vDefault") {
0084 verboseBestUnits = false;
0085 --i;
0086 }
0087 else {
0088 PrintUsage();
0089 return 1;
0090 }
0091 }
0092
0093
0094
0095 G4UIExecutive* ui = nullptr;
0096 if (!macro.size()) {
0097 ui = new G4UIExecutive(argc, argv, session);
0098 }
0099
0100
0101
0102
0103
0104 if (verboseBestUnits) {
0105 G4int precision = 4;
0106 G4SteppingVerbose::UseBestUnit(precision);
0107 }
0108
0109
0110
0111 auto runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
0112 #ifdef G4MULTITHREADED
0113 if (nThreads > 0) {
0114 runManager->SetNumberOfThreads(nThreads);
0115 }
0116 #endif
0117
0118
0119
0120 auto detConstruction = new B4d::DetectorConstruction();
0121 runManager->SetUserInitialization(detConstruction);
0122
0123 auto physicsList = new FTFP_BERT;
0124 runManager->SetUserInitialization(physicsList);
0125
0126 auto actionInitialization = new B4d::ActionInitialization();
0127 runManager->SetUserInitialization(actionInitialization);
0128
0129
0130 auto visManager = new G4VisExecutive;
0131
0132
0133 visManager->Initialize();
0134
0135
0136 auto UImanager = G4UImanager::GetUIpointer();
0137
0138
0139
0140
0141
0142
0143 G4TScoreNtupleWriter<G4AnalysisManager> scoreNtupleWriter;
0144 scoreNtupleWriter.SetVerboseLevel(1);
0145 scoreNtupleWriter.SetNtupleMerging(true);
0146
0147
0148
0149
0150
0151 if (macro.size()) {
0152
0153 G4String command = "/control/execute ";
0154 UImanager->ApplyCommand(command + macro);
0155 }
0156 else {
0157
0158 UImanager->ApplyCommand("/control/execute init_vis.mac");
0159 if (ui->IsGUI()) {
0160 UImanager->ApplyCommand("/control/execute gui.mac");
0161 }
0162 ui->SessionStart();
0163 delete ui;
0164 }
0165
0166
0167
0168
0169
0170
0171 delete visManager;
0172 delete runManager;
0173 }
0174
0175