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 // 15.03.2016 V.Ivanchenko 27 // 28 // List of parameters of the pre-compound mode 29 // and the deexcitation module 30 // 31 32 #include "G4DeexPrecoParameters.hh" 33 #include "G4ApplicationState.hh" 34 #include "G4StateManager.hh" 35 #include "G4SystemOfUnits.hh" 36 #include "G4UnitsTable.hh" 37 #include "G4PhysicsModelCatalog.hh" 38 #include "G4DeexParametersMessenger.hh" 39 #include "G4HadronicParameters.hh" 40 #include "G4Threading.hh" 41 42 G4DeexPrecoParameters::G4DeexPrecoParameters() 43 { 44 fStateManager = G4StateManager::GetStateMana 45 theMessenger = new G4DeexParametersMessenger 46 Initialise(); 47 } 48 49 G4DeexPrecoParameters::~G4DeexPrecoParameters( 50 { 51 delete theMessenger; 52 } 53 54 void G4DeexPrecoParameters::SetDefaults() 55 { 56 if(!IsLocked()) { Initialise(); } 57 } 58 59 void G4DeexPrecoParameters::Initialise() 60 { 61 // common parameters 62 fVerbose = 1; 63 fLevelDensity = 0.075/CLHEP::MeV; 64 fR0 = 1.5*CLHEP::fermi; 65 fTransitionsR0 = 0.6*CLHEP::fermi; 66 67 // preco parameters 68 fPrecoLowEnergy = 0.1*CLHEP::MeV; 69 fPrecoHighEnergy = 30*CLHEP::MeV; 70 fPhenoFactor = 1.0; 71 72 fPrecoType = 1; 73 fMinZForPreco = 3; 74 fMinAForPreco = 5; 75 76 fNeverGoBack = false; 77 fUseSoftCutoff = false; 78 fUseCEM = true; 79 fUseGNASH = false; 80 fUseHETC = false; 81 fUseAngularGen = true; 82 fPrecoDummy = false; 83 84 // de-exitation parameters 85 fMinExcitation = 10*CLHEP::eV; 86 fNuclearLevelWidth = 0.2*CLHEP::MeV; 87 fFBUEnergyLimit = 20.0*CLHEP::MeV; 88 fFermiEnergy = 35.0*CLHEP::MeV; 89 fMaxLifeTime = 1*CLHEP::nanosecond; 90 fMinExPerNucleounForMF = 200*CLHEP::GeV; 91 92 fDeexChannelType = fCombined; 93 fDeexType = 3; 94 fTwoJMAX = 10; 95 96 fCorrelatedGamma = false; 97 fStoreAllLevels = true; 98 fInternalConversion = true; 99 fLD = true; // use simple level density mod 100 fFD = false; // use transition to discrete l 101 fIsomerFlag = true; // enable isomere produc 102 } 103 104 void G4DeexPrecoParameters::SetLevelDensity(G4 105 { 106 if(IsLocked() || val <= 0.0) { return; } 107 fLevelDensity = val/CLHEP::MeV; 108 } 109 110 void G4DeexPrecoParameters::SetR0(G4double val 111 { 112 if(IsLocked() || val <= 0.0) { return; } 113 fR0 = val; 114 } 115 116 void G4DeexPrecoParameters::SetTransitionsR0(G 117 { 118 if(IsLocked() || val <= 0.0) { return; } 119 fTransitionsR0 = val; 120 } 121 122 void G4DeexPrecoParameters::SetFBUEnergyLimit( 123 { 124 if(IsLocked() || val <= 0.0) { return; } 125 fFBUEnergyLimit = val; 126 } 127 128 void G4DeexPrecoParameters::SetFermiEnergy(G4d 129 { 130 if(IsLocked() || val <= 0.0) { return; } 131 fFermiEnergy = val; 132 } 133 134 void G4DeexPrecoParameters::SetPrecoLowEnergy( 135 { 136 if(IsLocked() || val < 0.0) { return; } 137 fPrecoLowEnergy = val; 138 } 139 140 void G4DeexPrecoParameters::SetPrecoHighEnergy 141 { 142 if(IsLocked() || val < 0.0) { return; } 143 fPrecoHighEnergy = val; 144 } 145 146 void G4DeexPrecoParameters::SetPhenoFactor(G4d 147 { 148 if(IsLocked() || val <= 0.0) { return; } 149 fPhenoFactor = val; 150 } 151 152 void G4DeexPrecoParameters::SetMinExcitation(G 153 { 154 if(IsLocked() || val < 0.0) { return; } 155 fMinExcitation = val; 156 } 157 158 void G4DeexPrecoParameters::SetNuclearLevelWid 159 { 160 if(IsLocked() || val < 0.0) { return; } 161 fNuclearLevelWidth = val; 162 } 163 164 void G4DeexPrecoParameters::SetMaxLifeTime(G4d 165 { 166 if(IsLocked() || val < 0.0) { return; } 167 fMaxLifeTime = val; 168 } 169 170 void G4DeexPrecoParameters::SetMinExPerNucleou 171 { 172 if(IsLocked() || val < 0.0) { return; } 173 fMinExPerNucleounForMF = val; 174 } 175 176 void G4DeexPrecoParameters::SetMinZForPreco(G4 177 { 178 if(IsLocked() || n < 2) { return; } 179 fMinZForPreco = n; 180 } 181 182 void G4DeexPrecoParameters::SetMinAForPreco(G4 183 { 184 if(IsLocked() || n < 0) { return; } 185 fMinAForPreco = n; 186 } 187 188 void G4DeexPrecoParameters::SetPrecoModelType( 189 { 190 if(IsLocked() || n < 0 || n > 3) { return; } 191 fPrecoType = n; 192 } 193 194 void G4DeexPrecoParameters::SetDeexModelType(G 195 { 196 if(IsLocked() || n < 0 || n > 3) { return; } 197 fDeexType = n; 198 } 199 200 void G4DeexPrecoParameters::SetTwoJMAX(G4int n 201 { 202 if(IsLocked() || n < 0) { return; } 203 fTwoJMAX = n; 204 } 205 206 void G4DeexPrecoParameters::SetVerbose(G4int n 207 { 208 if(IsLocked()) { return; } 209 fVerbose = n; 210 } 211 212 void G4DeexPrecoParameters::SetNeverGoBack(G4b 213 { 214 if(IsLocked()) { return; } 215 fNeverGoBack = val; 216 } 217 218 void G4DeexPrecoParameters::SetUseSoftCutoff(G 219 { 220 if(IsLocked()) { return; } 221 fUseSoftCutoff = val; 222 } 223 224 void G4DeexPrecoParameters::SetUseCEM(G4bool v 225 { 226 if(IsLocked()) { return; } 227 fUseCEM = val; 228 } 229 230 void G4DeexPrecoParameters::SetUseGNASH(G4bool 231 { 232 if(IsLocked()) { return; } 233 fUseGNASH = val; 234 } 235 236 void G4DeexPrecoParameters::SetUseHETC(G4bool 237 { 238 if(IsLocked()) { return; } 239 fUseHETC = val; 240 } 241 242 void G4DeexPrecoParameters::SetUseAngularGen(G 243 { 244 if(IsLocked()) { return; } 245 fUseAngularGen = val; 246 } 247 248 void G4DeexPrecoParameters::SetPrecoDummy(G4bo 249 { 250 if(IsLocked()) { return; } 251 fPrecoDummy = val; 252 fDeexChannelType = fDummy; 253 } 254 255 void G4DeexPrecoParameters::SetCorrelatedGamma 256 { 257 if(IsLocked()) { return; } 258 fCorrelatedGamma = val; 259 } 260 261 void G4DeexPrecoParameters::SetStoreICLevelDat 262 { 263 if(IsLocked()) { return; } 264 fStoreAllLevels = val; 265 } 266 267 void G4DeexPrecoParameters::SetStoreAllLevels( 268 { 269 SetStoreICLevelData(val); 270 } 271 272 void G4DeexPrecoParameters::SetInternalConvers 273 { 274 if(IsLocked()) { return; } 275 fInternalConversion = val; 276 } 277 278 void G4DeexPrecoParameters::SetLevelDensityFla 279 { 280 if(IsLocked()) { return; } 281 fLD = val; 282 } 283 284 void G4DeexPrecoParameters::SetDiscreteExcitat 285 { 286 if(IsLocked()) { return; } 287 fFD = val; 288 } 289 290 void G4DeexPrecoParameters::SetIsomerProductio 291 { 292 if(IsLocked()) { return; } 293 fIsomerFlag = val; 294 } 295 296 void G4DeexPrecoParameters::SetDeexChannelsTyp 297 { 298 if(IsLocked()) { return; } 299 fDeexChannelType = val; 300 } 301 302 std::ostream& G4DeexPrecoParameters::StreamInf 303 { 304 static const G4String namm[5] = {"Evaporatio 305 static const G4int nmm[5] = {8, 68, 68, 31, 306 G4int idx = fDeexChannelType; 307 308 G4long prec = os.precision(5); 309 os << "===================================== 310 os << "====== Geant4 Native Pre-compou 311 os << "===================================== 312 os << "Type of pre-compound inverse x-sectio 313 os << "Pre-compound model active 314 os << "Pre-compound excitation low energy 315 << G4BestUnit(fPrecoLowEnergy, "Energy") 316 os << "Pre-compound excitation high energy 317 << G4BestUnit(fPrecoHighEnergy, "Energy") 318 os << "Angular generator for pre-compound mo 319 os << "Use NeverGoBack option for pre-compou 320 os << "Use SoftCutOff option for pre-compoun 321 os << "Use CEM transitions for pre-compound 322 os << "Use GNASH transitions for pre-compoun 323 os << "Use HETC submodel for pre-compound mo 324 os << "===================================== 325 os << "====== Nuclear De-excitation Mo 326 os << "===================================== 327 os << "Type of de-excitation inverse x-secti 328 os << "Type of de-excitation factory 329 os << "Number of de-excitation channels 330 os << "Min excitation energy 331 << G4BestUnit(fMinExcitation, "Energy") < 332 os << "Min energy per nucleon for multifragm 333 << G4BestUnit(fMinExPerNucleounForMF, "En 334 os << "Limit excitation energy for Fermi Bre 335 << G4BestUnit(fFBUEnergyLimit, "Energy") 336 os << "Level density (1/MeV) 337 << fLevelDensity*CLHEP::MeV << "\n"; 338 os << "Use simple level density model 339 os << "Use discrete excitation energy of the 340 os << "Time limit for long lived isomeres 341 << G4BestUnit(fMaxLifeTime, "Time") << "\ 342 os << "Isomer production flag 343 os << "Internal e- conversion flag 344 << fInternalConversion << "\n"; 345 os << "Store e- internal conversion data 346 os << "Correlated gamma emission flag 347 os << "Max 2J for sampling of angular correl 348 os << "===================================== 349 os.precision(prec); 350 return os; 351 } 352 353 G4int G4DeexPrecoParameters::GetVerbose() cons 354 { 355 G4int verb = G4HadronicParameters::Instance( 356 return (verb > 0) ? std::max(fVerbose, verb) 357 } 358 359 void G4DeexPrecoParameters::Dump() 360 { 361 if(!fIsPrinted && GetVerbose() > 0 && G4Thre 362 StreamInfo(G4cout); 363 fIsPrinted = true; 364 } 365 } 366 367 std::ostream& operator<< (std::ostream& os, co 368 { 369 return par.StreamInfo(os); 370 } 371 372 G4bool G4DeexPrecoParameters::IsLocked() const 373 { 374 return (!G4Threading::IsMasterThread() || 375 (fStateManager->GetCurrentState() != G4Sta 376 } 377