Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /// \file hadronic/Hadr01/Hadr01.cc 26 /// \file hadronic/Hadr01/Hadr01.cc 27 /// \brief Main program of the hadronic/Hadr01 27 /// \brief Main program of the hadronic/Hadr01 example 28 // 28 // 29 // 29 // >> 30 // $Id: Hadr01.cc 68006 2013-03-13 11:26:13Z gcosmo $ 30 // 31 // 31 // ------------------------------------------- 32 // ------------------------------------------------------------- 32 // GEANT4 Hadr01 33 // GEANT4 Hadr01 33 // 34 // 34 // Application demonstrating Geant4 hadronic 35 // Application demonstrating Geant4 hadronic physics: 35 // beam interaction with a target 36 // beam interaction with a target 36 // 37 // 37 // Authors: A.Bagulya, I.Gudowska, V.Ivanchen 38 // Authors: A.Bagulya, I.Gudowska, V.Ivanchenko, N.Starkov 38 // 39 // 39 // Modified: << 40 // Modified: 40 // 29.12.2009 V.Ivanchenko introduced access 41 // 29.12.2009 V.Ivanchenko introduced access to reference PhysLists 41 // 42 // 42 // ------------------------------------------- 43 // ------------------------------------------------------------- 43 // 44 // 44 // 45 // 45 //....oooOO0OOooo........oooOO0OOooo........oo 46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 46 //....oooOO0OOooo........oooOO0OOooo........oo 47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 47 48 >> 49 #include "G4RunManager.hh" >> 50 #include "G4UImanager.hh" >> 51 #include "Randomize.hh" >> 52 48 #include "DetectorConstruction.hh" 53 #include "DetectorConstruction.hh" 49 #include "EventAction.hh" << 50 #include "PhysicsList.hh" 54 #include "PhysicsList.hh" >> 55 #include "G4PhysListFactory.hh" >> 56 #include "G4VModularPhysicsList.hh" 51 #include "PrimaryGeneratorAction.hh" 57 #include "PrimaryGeneratorAction.hh" >> 58 #include "PhysicsListMessenger.hh" >> 59 #include "G4EmUserPhysics.hh" >> 60 52 #include "RunAction.hh" 61 #include "RunAction.hh" >> 62 #include "EventAction.hh" 53 #include "StackingAction.hh" 63 #include "StackingAction.hh" 54 64 55 #include "G4HadronicParameters.hh" << 65 #ifdef G4VIS_USE 56 #include "G4PhysListFactory.hh" << 57 #include "G4RunManagerFactory.hh" << 58 #include "G4UIExecutive.hh" << 59 #include "G4UImanager.hh" << 60 #include "G4VModularPhysicsList.hh" << 61 #include "G4VisExecutive.hh" 66 #include "G4VisExecutive.hh" >> 67 #endif >> 68 >> 69 #ifdef G4UI_USE >> 70 #include "G4UIExecutive.hh" >> 71 #endif 62 72 63 //....oooOO0OOooo........oooOO0OOooo........oo 73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 64 74 65 int main(int argc, char** argv) << 75 int main(int argc,char** argv) { 66 { << 67 // detect interactive mode (if no arguments) << 68 G4UIExecutive* ui = nullptr; << 69 if (argc == 1) { << 70 ui = new G4UIExecutive(argc, argv); << 71 } << 72 76 73 // Construct a serial run manager << 77 //choose the Random engine 74 auto* runManager = G4RunManagerFactory::Crea << 78 CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine()); 75 79 76 // set mandatory initialization classes << 80 //Construct the default run manager >> 81 G4RunManager * runManager = new G4RunManager(); >> 82 >> 83 //set mandatory initialization classes 77 runManager->SetUserInitialization(new Detect 84 runManager->SetUserInitialization(new DetectorConstruction()); 78 85 79 G4PhysListFactory factory; 86 G4PhysListFactory factory; 80 G4VModularPhysicsList* phys = nullptr; << 87 G4VModularPhysicsList* phys = 0; >> 88 PhysicsListMessenger* mess = 0; 81 G4String physName = ""; 89 G4String physName = ""; 82 90 83 // Physics List name defined via 3nd argumen 91 // Physics List name defined via 3nd argument 84 if (argc >= 3) { << 92 if (argc==3) { physName = argv[2]; } 85 physName = argv[2]; << 86 } << 87 93 88 // Physics List name defined via environment 94 // Physics List name defined via environment variable 89 if ("" == physName) { << 95 if("" == physName) { 90 char* path = std::getenv("PHYSLIST"); << 96 char* path = getenv("PHYSLIST"); 91 if (nullptr != path) { << 97 if (path) { physName = G4String(path); } 92 physName = G4String(path); << 93 } << 94 } 98 } 95 99 96 G4cout << "PhysicsList: " << physName << G4e << 97 << 98 // reference PhysicsList via its name 100 // reference PhysicsList via its name 99 if ("" != physName && factory.IsReferencePhy << 101 if("" != physName && factory.IsReferencePhysList(physName)) { 100 phys = factory.GetReferencePhysList(physNa 102 phys = factory.GetReferencePhysList(physName); 101 } << 102 103 103 // local Physics List << 104 // added extra EM options 104 if (nullptr == phys) { << 105 phys->RegisterPhysics(new G4EmUserPhysics(1)); 105 phys = new PhysicsList(); << 106 } << 107 106 108 // optional change of overlap cascade/string << 107 // instantiated messenger 109 if (argc >= 5) { << 108 mess = new PhysicsListMessenger(); 110 auto param = G4HadronicParameters::Instanc << 109 } 111 G4double e1 = CLHEP::GeV * std::strtod(arg << 112 G4double e2 = CLHEP::GeV * std::strtod(arg << 113 G4cout << "### Bertini/FTFP limits: e1(GeV << 114 << " e2(GeV)=" << e2 / CLHEP::GeV << 115 param->SetMinEnergyTransitionFTF_Cascade(e << 116 param->SetMaxEnergyTransitionFTF_Cascade(e << 117 } << 118 110 119 if (argc >= 6) { << 111 // local Physics List 120 auto param = G4HadronicParameters::Instanc << 112 if(!phys) { phys = new PhysicsList(); } 121 param->SetEnableNUDEX(true); << 122 } << 123 113 124 // define physics 114 // define physics 125 runManager->SetUserInitialization(phys); 115 runManager->SetUserInitialization(phys); 126 runManager->SetUserAction(new PrimaryGenerat 116 runManager->SetUserAction(new PrimaryGeneratorAction()); 127 117 128 // set user action classes << 118 //set user action classes 129 runManager->SetUserAction(new RunAction()); 119 runManager->SetUserAction(new RunAction()); 130 runManager->SetUserAction(new EventAction()) 120 runManager->SetUserAction(new EventAction()); 131 runManager->SetUserAction(new StackingAction 121 runManager->SetUserAction(new StackingAction()); 132 122 133 // initialize visualization << 123 //get the pointer to the User Interface manager 134 G4VisManager* visManager = nullptr; << 135 << 136 // get the pointer to the User Interface man << 137 G4UImanager* UImanager = G4UImanager::GetUIp 124 G4UImanager* UImanager = G4UImanager::GetUIpointer(); >> 125 #ifdef G4VIS_USE >> 126 G4VisManager* visManager = 0; >> 127 #endif >> 128 >> 129 if (argc==1) // Define UI terminal for interactive mode >> 130 { >> 131 #ifdef G4VIS_USE >> 132 //visualization manager >> 133 visManager = new G4VisExecutive; >> 134 visManager->Initialize(); >> 135 #endif >> 136 #ifdef G4UI_USE >> 137 G4UIExecutive* ui = new G4UIExecutive(argc, argv); >> 138 ui->SessionStart(); >> 139 delete ui; >> 140 #endif >> 141 } >> 142 else // Batch mode >> 143 { >> 144 G4String command = "/control/execute "; >> 145 G4String fileName = argv[1]; >> 146 UImanager->ApplyCommand(command+fileName); >> 147 } 138 148 139 if (ui) { << 149 //job termination 140 // interactive mode << 150 #ifdef G4VIS_USE 141 visManager = new G4VisExecutive; << 142 visManager->Initialize(); << 143 ui->SessionStart(); << 144 delete ui; << 145 } << 146 else { << 147 // batch mode << 148 G4String command = "/control/execute "; << 149 G4String fileName = argv[1]; << 150 UImanager->ApplyCommand(command + fileName << 151 } << 152 << 153 // job termination << 154 delete visManager; 151 delete visManager; >> 152 #endif 155 delete runManager; 153 delete runManager; >> 154 delete mess; >> 155 >> 156 return 0; 156 } 157 } 157 158 158 //....oooOO0OOooo........oooOO0OOooo........oo 159 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 159 160