Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 26 // File name: G4NistMessenger 27 // 28 // Author: Vladimir Ivanchenko 29 // 30 // Creation date: 23.12.2004 31 // 32 // Modifications: 33 // 34 // 35 // ------------------------------------------- 36 37 #include "G4NistMessenger.hh" 38 39 #include "G4ApplicationState.hh" 40 #include "G4DensityEffectData.hh" 41 #include "G4IonisParamMat.hh" 42 #include "G4NistManager.hh" 43 #include "G4UIcmdWithAString.hh" 44 #include "G4UIcmdWithAnInteger.hh" 45 #include "G4UIdirectory.hh" 46 #include "G4UIcommand.hh" 47 #include "G4UIparameter.hh" 48 49 #include <sstream> 50 51 //....oooOO0OOooo........oooOO0OOooo........oo 52 53 G4NistMessenger::G4NistMessenger(G4NistManager 54 { 55 matDir = new G4UIdirectory("/material/"); 56 matDir->SetGuidance("Commands for materials" 57 58 verCmd = new G4UIcmdWithAnInteger("/material 59 verCmd->SetGuidance("Set verbose level."); 60 verCmd->AvailableForStates(G4State_PreInit, 61 verCmd->SetToBeBroadcasted(false); 62 63 nistDir = new G4UIdirectory("/material/nist/ 64 nistDir->SetGuidance("Commands for the nist 65 66 prtElmCmd = new G4UIcmdWithAString("/materia 67 prtElmCmd->SetGuidance("print element(s) in 68 prtElmCmd->SetGuidance("symbol = element."); 69 prtElmCmd->SetGuidance("all = all element 70 prtElmCmd->SetParameterName("symbol", true); 71 prtElmCmd->SetDefaultValue("all"); 72 prtElmCmd->AvailableForStates(G4State_PreIni 73 prtElmCmd->SetToBeBroadcasted(false); 74 75 przElmCmd = new G4UIcmdWithAnInteger("/mater 76 przElmCmd->SetGuidance("print element Z in d 77 przElmCmd->SetGuidance("0 = all elements."); 78 przElmCmd->SetParameterName("Z", true); 79 przElmCmd->SetDefaultValue(0); 80 przElmCmd->SetRange("0<=Z && Z<108"); 81 przElmCmd->AvailableForStates(G4State_PreIni 82 przElmCmd->SetToBeBroadcasted(false); 83 84 lisMatCmd = new G4UIcmdWithAString("/materia 85 lisMatCmd->SetGuidance("Materials in Geant4 86 lisMatCmd->SetGuidance("simple - simple NIST 87 lisMatCmd->SetGuidance("compound - compound 88 lisMatCmd->SetGuidance("hep - HEP materials. 89 lisMatCmd->SetGuidance("bio - biomedical mat 90 lisMatCmd->SetGuidance("all - list of all Ge 91 lisMatCmd->SetParameterName("matlist", true) 92 // lisMatCmd->SetCandidates("simple compound 93 lisMatCmd->SetDefaultValue("all"); 94 lisMatCmd->AvailableForStates(G4State_PreIni 95 lisMatCmd->SetToBeBroadcasted(false); 96 97 g4Dir = new G4UIdirectory("/material/g4/"); 98 g4Dir->SetGuidance("Commands for G4MaterialT 99 100 g4ElmCmd = new G4UIcmdWithAString("/material 101 g4ElmCmd->SetGuidance("print Element from G4 102 g4ElmCmd->SetGuidance("all - all elements.") 103 g4ElmCmd->SetParameterName("elm", true); 104 g4ElmCmd->SetDefaultValue("all"); 105 106 g4MatCmd = new G4UIcmdWithAString("/material 107 g4MatCmd->SetGuidance("print Material from G 108 g4MatCmd->SetGuidance("all - all materials") 109 g4MatCmd->SetParameterName("pmat", true); 110 g4MatCmd->SetDefaultValue("all"); 111 g4MatCmd->AvailableForStates(G4State_PreInit 112 g4MatCmd->SetToBeBroadcasted(false); 113 114 g4DensCmd = new G4UIcmdWithAString("/materia 115 g4DensCmd->SetGuidance("print Material from 116 g4DensCmd->SetGuidance("all - all materials" 117 g4DensCmd->SetParameterName("dmat", true); 118 g4DensCmd->SetDefaultValue("all"); 119 g4DensCmd->AvailableForStates(G4State_PreIni 120 g4DensCmd->SetToBeBroadcasted(false); 121 122 densCmd = new G4UIcmdWithAString("/material/ 123 densCmd->SetGuidance("enable accurate comput 124 densCmd->SetGuidance("all - all materials.") 125 densCmd->SetParameterName("dens", true); 126 densCmd->SetDefaultValue("all"); 127 densCmd->AvailableForStates(G4State_PreInit) 128 lisMatCmd->SetToBeBroadcasted(false); 129 130 adensCmd = new G4UIcmdWithAString("/material 131 adensCmd->SetGuidance("disable accurate comp 132 adensCmd->SetGuidance("all - all materials." 133 adensCmd->SetParameterName("dens", true); 134 adensCmd->SetDefaultValue("all"); 135 adensCmd->AvailableForStates(G4State_PreInit 136 adensCmd->SetToBeBroadcasted(false); 137 138 fPosiCmd = new G4UIcommand("/material/g4/ort 139 fPosiCmd->SetGuidance("defined orto-positron 140 fPosiCmd->SetGuidance("via material name, al 141 fPosiCmd->AvailableForStates(G4State_PreInit 142 fPosiCmd->SetToBeBroadcasted(false); 143 144 auto p1 = new G4UIparameter("matname",'s', f 145 fPosiCmd->SetParameter(p1); 146 147 auto p2 = new G4UIparameter("fraction", 'd', 148 p2->SetParameterRange("fraction>=0. && fract 149 fPosiCmd->SetParameter(p2); 150 } 151 152 //....oooOO0OOooo........oooOO0OOooo........oo 153 154 G4NistMessenger::~G4NistMessenger() 155 { 156 delete verCmd; 157 delete prtElmCmd; 158 delete przElmCmd; 159 delete lisMatCmd; 160 delete nistDir; 161 162 delete g4ElmCmd; 163 delete g4MatCmd; 164 delete g4DensCmd; 165 delete densCmd; 166 delete adensCmd; 167 delete fPosiCmd; 168 169 delete g4Dir; 170 delete matDir; 171 } 172 173 //....oooOO0OOooo........oooOO0OOooo........oo 174 175 void G4NistMessenger::SetNewValue(G4UIcommand* 176 { 177 // G4cout << "G4NistMessenger::SetNewValue < 178 if (command == verCmd) { 179 manager->SetVerbose(verCmd->GetNewIntValue 180 } 181 else if (command == prtElmCmd) { 182 manager->PrintElement(newValue); 183 } 184 else if (command == przElmCmd) { 185 G4int Z = przElmCmd->GetNewIntValue(newVal 186 if (Z >= 0 && Z < 108) { 187 manager->PrintElement(Z); 188 } 189 } 190 else if (command == lisMatCmd) { 191 manager->ListMaterials(newValue); 192 } 193 else if (command == g4ElmCmd) { 194 manager->PrintG4Element(newValue); 195 } 196 else if (command == g4MatCmd) { 197 manager->PrintG4Material(newValue); 198 } 199 else if (command == g4DensCmd) { 200 G4IonisParamMat::GetDensityEffectData()->P 201 } 202 else if (command == densCmd) { 203 manager->SetDensityEffectCalculatorFlag(ne 204 } 205 else if (command == adensCmd) { 206 manager->SetDensityEffectCalculatorFlag(ne 207 } 208 else if (command == fPosiCmd) { 209 G4String mnam{""}; 210 G4double f{0.0}; 211 std::istringstream ss(newValue); 212 ss >> mnam >> f; 213 // set fraction for all materials 214 if (mnam == "all" || mnam == "none") { 215 if (mnam == "none" || f < 0.0) { f = 0.0 216 auto mtable = G4Material::GetMaterialTab 217 for ( auto const & mat : *mtable ) { 218 mat->GetIonisation()->SetOrtoPositroniumFrac 219 } 220 } else { 221 // set fraction for one material 222 auto mat = manager->FindOrBuildMaterial( 223 if (nullptr != mat) { 224 mat->GetIonisation()->SetOrtoPositroniumFrac 225 } 226 } 227 } 228 } 229