File indexing completed on 2026-09-20 08:30:29
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
0031
0032
0033
0034
0035
0036
0037
0038 #include "ActionInitialization.hh"
0039 #include "CommandLineParser.hh"
0040 #include "DetectorConstruction.hh"
0041 #include "PhysicsList.hh"
0042
0043 #include "G4DNAChemistryManager.hh"
0044 #include "G4RunManagerFactory.hh"
0045 #include "G4UIExecutive.hh"
0046 #include "G4UImanager.hh"
0047 #include "G4VisExecutive.hh"
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060 using namespace G4DNAPARSER;
0061 CommandLineParser* parser(0);
0062
0063 void Parse(int& argc, char** argv);
0064
0065 int main(int argc, char** argv)
0066 {
0067
0068
0069
0070 Parse(argc, argv);
0071
0072
0073
0074
0075 Command* commandLine(nullptr);
0076
0077 auto* runManager = G4RunManagerFactory::CreateRunManager();
0078 if ((commandLine = parser->GetCommandIfActive("-mt"))) {
0079 int nThreads = 2;
0080 if (commandLine->GetOption() == "NMAX") {
0081 nThreads = G4Threading::G4GetNumberOfCores();
0082 }
0083 else {
0084 nThreads = G4UIcommand::ConvertToInt(commandLine->GetOption());
0085 }
0086 runManager->SetNumberOfThreads(nThreads);
0087 G4cout << "===== Chem1 is started with " << runManager->GetNumberOfThreads()
0088 << " threads =====" << G4endl;
0089 }
0090
0091
0092
0093
0094 DetectorConstruction* detector = new DetectorConstruction();
0095 runManager->SetUserInitialization(new PhysicsList);
0096 runManager->SetUserInitialization(detector);
0097 runManager->SetUserInitialization(new ActionInitialization());
0098
0099
0100 G4VisManager* visManager = nullptr;
0101
0102
0103 G4UImanager* UImanager = G4UImanager::GetUIpointer();
0104 G4UIExecutive* ui(nullptr);
0105
0106
0107 if ((commandLine = parser->GetCommandIfActive("-gui"))) {
0108 visManager = new G4VisExecutive;
0109 visManager->Initialize();
0110
0111 ui = new G4UIExecutive(argc, argv, commandLine->GetOption());
0112
0113 if (parser->GetCommandIfActive("-novis") == 0) {
0114
0115 if ((commandLine = parser->GetCommandIfActive("-vis"))) {
0116
0117 UImanager->ApplyCommand(G4String("/vis/open ") + commandLine->GetOption());
0118 }
0119 else {
0120
0121 UImanager->ApplyCommand("/vis/open OGL 800x600-0+0");
0122 }
0123 UImanager->ApplyCommand("/control/execute vis.mac");
0124 }
0125
0126 if (ui->IsGUI()) {
0127 UImanager->ApplyCommand("/control/execute gui.mac");
0128 }
0129 }
0130 else if ((commandLine = parser->GetCommandIfActive("-vis"))) {
0131
0132
0133
0134 visManager = new G4VisExecutive;
0135 visManager->Initialize();
0136
0137 ui = new G4UIExecutive(argc, argv, commandLine->GetOption());
0138 UImanager->ApplyCommand(G4String("/vis/open ") + commandLine->GetOption());
0139 UImanager->ApplyCommand("/control/execute vis.mac");
0140 }
0141
0142 if ((commandLine = parser->GetCommandIfActive("-mac"))) {
0143 G4String command = "/control/execute ";
0144 UImanager->ApplyCommand(command + commandLine->GetOption());
0145 }
0146 else {
0147 UImanager->ApplyCommand("/control/execute beam.in");
0148 }
0149
0150 if (ui) {
0151 ui->SessionStart();
0152 delete ui;
0153 }
0154
0155
0156
0157
0158
0159
0160 delete visManager;
0161 delete runManager;
0162
0163 CommandLineParser::DeleteInstance();
0164
0165 return 0;
0166 }
0167
0168 void Parse(int& argc, char** argv)
0169 {
0170
0171
0172
0173 parser = CommandLineParser::GetParser();
0174
0175 parser->AddCommand("-gui", Command::OptionNotCompulsory,
0176 "Select geant4 UI or just launch a geant4 terminal session", "qt");
0177
0178 parser->AddCommand("-mac", Command::WithOption, "Give a mac file to execute", "macFile.mac");
0179
0180
0181
0182
0183
0184
0185
0186 parser->AddCommand("-mt", Command::WithOption,
0187 "Launch in MT mode (events computed in parallel,"
0188 " NOT RECOMMANDED WITH CHEMISTRY)",
0189 "2");
0190
0191 parser->AddCommand("-chemOFF", Command::WithoutOption, "Deactivate chemistry");
0192
0193 parser->AddCommand("-vis", Command::WithOption, "Select a visualization driver",
0194 "OGL 600x600-0+0");
0195
0196 parser->AddCommand("-novis", Command::WithoutOption, "Deactivate visualization when using GUI");
0197
0198
0199
0200
0201 if (parser->Parse(argc, argv) != 0)
0202 {
0203
0204
0205 CommandLineParser::DeleteInstance();
0206 std::exit(0);
0207 }
0208
0209
0210
0211
0212 if (parser->CheckIfNotHandledOptionsExists(argc, argv)) {
0213
0214
0215 abort();
0216 }
0217 }