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 // Gorad (Geant4 Open-source Radiation Analysis and Design) 27 // 28 // Author : Makoto Asai (SLAC National Accelerator Laboratory) 29 // 30 // Development of Gorad is funded by NASA Johnson Space Center (JSC) 31 // under the contract NNJ15HK11B. 32 // 33 // ******************************************************************** 34 // 35 // GRInitialization.hh 36 // Defines the initialization procedure of Gorad and Geant4 37 // 38 // History 39 // September 8th, 2020 : first implementation 40 // 41 // ******************************************************************** 42 43 #include "GRInitialization.hh" 44 45 #include "GRDetectorConstruction.hh" 46 #include "GRPhysicsList.hh" 47 #include "GRActionInitialization.hh" 48 #include "GRPrimGenActionMessenger.hh" 49 #include "G4GenericMessenger.hh" 50 #include "GRGeomBiasMessenger.hh" 51 #include "GRScoreWriter.hh" 52 53 #include "G4RunManager.hh" 54 #include "G4ScoringManager.hh" 55 #include "G4UIdirectory.hh" 56 #include "G4UnitsTable.hh" 57 58 #include <CLHEP/Units/SystemOfUnits.h> 59 60 GRInitialization::GRInitialization(G4int verboseLvl) 61 : verboseLevel(verboseLvl) 62 { 63 // adding unites 64 new G4UnitDefinition("milligray","mGy","Dose",1.e-3*CLHEP::gray); 65 new G4UnitDefinition("microgray","muGy","Dose",1.e-6*CLHEP::gray); 66 new G4UnitDefinition("nanogray","nGy","Dose",1.e-9*CLHEP::gray); 67 68 G4ScoringManager::GetScoringManager()->SetScoreWriter(new GRScoreWriter()); 69 70 messenger = new G4GenericMessenger(this,"/gorad/","GORAD commands"); 71 auto& initCmd = messenger->DeclareMethod("initialize", 72 &GRInitialization::Initialize,"Initialize Gorad and G4RunManager"); 73 initCmd.SetToBeBroadcasted(false); 74 initCmd.SetStates(G4State_PreInit); 75 76 detector = new GRDetectorConstruction(); 77 physics = new GRPhysicsList(); 78 actionInitialization = new GRActionInitialization(); 79 sourceMessenger = new GRPrimGenActionMessenger(); 80 geomBiasMessenger = new GRGeomBiasMessenger(detector,physics,verboseLvl); 81 } 82 83 GRInitialization::~GRInitialization() 84 { 85 delete geomBiasMessenger; 86 delete sourceMessenger; 87 delete messenger; 88 } 89 90 void GRInitialization::Initialize() 91 { 92 auto runManager = G4RunManager::GetRunManager(); 93 runManager->SetUserInitialization(detector); 94 runManager->SetUserInitialization(physics); 95 runManager->SetUserInitialization(actionInitialization); 96 if(verboseLevel>0) G4cout << "GORAD is initialized.........." << G4endl; 97 runManager->Initialize(); 98 sourceMessenger->UpdateParticleList(); 99 } 100 101 #include "G4UIExecutive.hh" 102 #ifdef G4UI_USE_QT 103 #include "G4UIQt.hh" 104 #endif 105 106 void GRInitialization::SetWindowText(G4UIExecutive* ui) 107 { 108 // If the current GUI is not G4UIQt, do nothing and return. 109 if(!(ui->IsGUI())) return; 110 111 #ifdef G4UI_USE_QT 112 G4UIQt* qt = dynamic_cast<G4UIQt*>(ui->GetSession()); 113 if(!qt) return; 114 115 qt->SetStartPage(std::string("<table width='100%'><tr><td width='50%'></td><td><div ")+ 116 "style='color: rgb(140, 31, 31); font-size: xx-large; font-family: Garamond, serif; "+ 117 "padding-bottom: 0px; font-weight: normal'>GORAD "+ 118 "</div></td></td></tr></table>"+ 119 "<p> </p>"+ 120 "<div><dl>"+ 121 "<dd><b>Gorad (Geant4 Open-source Radiation Analysis and Design) is meant to be "+ 122 "a turn-key application for radiation analysis and spacecraft design "+ 123 "built on top of Geant4. Simulation geometry should be provided in the form of GDML. "+ 124 "Gorad is developed under the NASA JSC contract NNJ15HK11B."+ 125 "</dd></dl></div>"+ 126 "<p> </p>"+ 127 "<div style='background:#EEEEEE;'><b>Tooltips :</b><ul>"+ 128 "<li><b>Start an interactive run :</b><br />"+ 129 "/control/execute <i>run.mac</i><br />"+ 130 "/run/beamOn <i>number_of_events</i></li></ul></div>"+ 131 "<div style='background:#EEEEEE;'><b>Documentation :</b><ul>"+ 132 "<li><i>"+ 133 "<b>GORAD manual</b> and a sample Orion spacecraft shield geometry can be found at<br />"+ 134 "<a href='https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesGorad'>"+ 135 "https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesGorad"+ 136 "</a></i></li>"+ 137 "</ul></div>" 138 ); 139 #endif 140 } 141 142