Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // Author: Haegin Han 27 // Contributor: Min Cheol Han, Bangho Shin, Chansoo Choi, Yeon Soo Yeom, 28 // Jonghwi Jeong, Chan Hyeong Kim 29 // Reference: ICRP Publication 145. Ann. ICRP 49(3), 2020. 30 // Geant4 Contributors: J. Allison and S. Guatelli 31 // 32 #include "TETDetectorConstruction.hh" 33 #include "TETModelImport.hh" 34 #include "TETActionInitialization.hh" 35 #include "G4RunManagerFactory.hh" 36 #include "G4UImanager.hh" 37 #include "G4UIterminal.hh" 38 #include "G4VisExecutive.hh" 39 #include "G4UIExecutive.hh" 40 #include "Randomize.hh" 41 #include "QGSP_BIC_HP.hh" 42 43 void PrintUsage(){ 44 G4cerr<< "Usage: ./External -m [MACRO] -o [OUTPUT] -f (option for MRCP-AF phantom)" <<G4endl; 45 G4cerr<< "Example: ./External -m run.mac -o run.out (-f)" <<G4endl; 46 } 47 48 int main(int argc,char** argv) 49 { 50 // Read the arguments for batch mode 51 // 52 G4String macro; 53 G4String output; 54 G4bool isAF(false); 55 G4UIExecutive* ui = nullptr; 56 57 for ( G4int i=1; i<argc; i++ ) { 58 // macro file name 59 if ( G4String(argv[i]) == "-m" ) { 60 macro = argv[i+1]; 61 i++; 62 } 63 // output file name 64 else if ( G4String(argv[i]) == "-o" ) { 65 output = argv[i+1]; 66 i++; 67 } 68 // switch for MRCP-AF phantom 69 else if ( G4String(argv[i]) == "-f" ) { 70 isAF = true; 71 } 72 else { 73 PrintUsage(); 74 return 1; 75 } 76 } 77 78 // print usage when there are more than six arguments 79 if ( argc>6 ){ 80 PrintUsage(); 81 return 1; 82 } 83 84 // Detect interactive mode (if no macro file name) and define UI session 85 // 86 if ( !macro.size() ) { 87 ui = new G4UIExecutive(argc, argv); 88 } 89 // default output file name 90 else if ( !output.size() ) output = macro + ".out"; 91 92 // Choose the Random engine 93 // 94 //G4Random::setTheSeed(time(0)); 95 96 // Construct the default run manager 97 // 98 auto* runManager = G4RunManagerFactory::CreateRunManager(); 99 G4int nThreads = 4; 100 runManager->SetNumberOfThreads(nThreads); 101 102 // Set a class to import phantom data 103 // 104 auto* tetData = new TETModelImport(isAF, ui); 105 106 // Set mandatory initialisation classes 107 // 108 // detector construction 109 runManager->SetUserInitialization(new TETDetectorConstruction(tetData)); 110 // physics list 111 //runManager->SetUserInitialization(new TETPhysicsList()); 112 runManager->SetUserInitialization(new QGSP_BIC_HP()); 113 // user action initialisation 114 runManager->SetUserInitialization(new TETActionInitialization(tetData, output)); 115 116 // Visualization manager 117 // 118 G4VisManager* visManager = new G4VisExecutive; 119 visManager->Initialise(); 120 121 // Process macro or start UI session 122 // 123 G4UImanager* UImanager = G4UImanager::GetUIpointer(); 124 125 if ( ! ui ){ 126 // batch mode 127 G4String command = "/control/execute "; 128 UImanager->ApplyCommand(command+macro); 129 } 130 else { 131 // interactive mode 132 UImanager->ApplyCommand("/control/execute init_vis.mac"); 133 ui->SessionStart(); 134 135 delete ui; 136 } 137 138 delete visManager; 139 delete runManager; 140 } 141 142 143