File indexing completed on 2025-02-23 09:22:47
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 "FTFP_BERT.hh"
0031 #include "MoviesActionInitialization.hh"
0032 #include "MoviesDetectorConstruction.hh"
0033
0034 #include "G4RunManagerFactory.hh"
0035 #include "G4UIExecutive.hh"
0036 #include "G4UIcommand.hh"
0037 #include "G4UImanager.hh"
0038 #include "G4VisExecutive.hh"
0039 #include "Randomize.hh"
0040
0041
0042
0043 namespace
0044 {
0045 void PrintUsage()
0046 {
0047 G4cerr << " Usage: " << G4endl;
0048 G4cerr << " exampleMovies [-m macro ] [-u UIsession] [-t nThreads]" << 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 #ifdef G4MULTITHREADED
0067 G4int nThreads = 0;
0068 #endif
0069 for (G4int i = 1; i < argc; i = i + 2) {
0070 if (G4String(argv[i]) == "-m")
0071 macro = argv[i + 1];
0072 else if (G4String(argv[i]) == "-u")
0073 session = argv[i + 1];
0074 #ifdef G4MULTITHREADED
0075 else if (G4String(argv[i]) == "-t") {
0076 nThreads = G4UIcommand::ConvertToInt(argv[i + 1]);
0077 }
0078 #endif
0079 else {
0080 PrintUsage();
0081 return 1;
0082 }
0083 }
0084
0085
0086
0087 G4UIExecutive* ui = nullptr;
0088 if (!macro.size()) {
0089 ui = new G4UIExecutive(argc, argv, session);
0090 }
0091
0092
0093
0094
0095
0096
0097
0098 auto* runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
0099 #ifdef G4MULTITHREADED
0100 if (nThreads > 0) {
0101 runManager->SetNumberOfThreads(nThreads);
0102 }
0103 #endif
0104
0105
0106
0107 auto detConstruction = new MoviesDetectorConstruction();
0108 runManager->SetUserInitialization(detConstruction);
0109
0110 auto physicsList = new FTFP_BERT;
0111 runManager->SetUserInitialization(physicsList);
0112
0113 auto actionInitialization = new MoviesActionInitialization;
0114 runManager->SetUserInitialization(actionInitialization);
0115
0116
0117
0118 auto visManager = new G4VisExecutive;
0119
0120
0121 visManager->Initialize();
0122
0123
0124 auto UImanager = G4UImanager::GetUIpointer();
0125
0126
0127
0128 if (macro.size()) {
0129
0130 G4String command = "/control/execute ";
0131 UImanager->ApplyCommand(command + macro);
0132 }
0133 else {
0134
0135 UImanager->ApplyCommand("/control/execute init_vis.mac");
0136 if (ui->IsGUI()) {
0137 UImanager->ApplyCommand("/control/execute gui.mac");
0138 }
0139 ui->SessionStart();
0140 delete ui;
0141 }
0142
0143
0144
0145
0146
0147
0148 delete visManager;
0149 delete runManager;
0150 }
0151
0152