Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DeexPrecoParameters.cc
Go to the documentation of this file.
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// 15.03.2016 V.Ivanchenko
27//
28// List of parameters of the pre-compound model
29// and the deexcitation module
30//
31
33#include "G4ApplicationState.hh"
34#include "G4StateManager.hh"
35#include "G4SystemOfUnits.hh"
36#include "G4UnitsTable.hh"
40#include "G4Threading.hh"
41
43{
44 fStateManager = G4StateManager::GetStateManager();
45 theMessenger = new G4DeexParametersMessenger(this);
46 Initialise();
47}
48
50{
51 delete theMessenger;
52}
53
55{
56 if(!IsLocked()) { Initialise(); }
57}
58
59void 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 = 15*CLHEP::MeV;
70 fPhenoFactor = 1.0;
71
72 fPrecoType = 1;
73 fMinZForPreco = 9;
74 fMinAForPreco = 17;
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 fPreCompoundType = eDefault;
94 fFermiBreakUpType = bModelVI;
95 fDeexType = 3;
96 fTwoJMAX = 10;
97
98 fCorrelatedGamma = false;
99 fStoreAllLevels = true;
100 fInternalConversion = true;
101 fLD = true; // use simple level density model
102 fFD = false; // use transition to discrete level
103 fIsomerFlag = true; // enable isomere production
104}
105
107{
108 if(IsLocked() || val <= 0.0) { return; }
109 fLevelDensity = val/CLHEP::MeV;
110}
111
113{
114 if(IsLocked() || val <= 0.0) { return; }
115 fR0 = val;
116}
117
119{
120 if(IsLocked() || val <= 0.0) { return; }
121 fTransitionsR0 = val;
122}
123
125{
126 if(IsLocked() || val <= 0.0) { return; }
127 fFBUEnergyLimit = val;
128}
129
131{
132 if(IsLocked() || val <= 0.0) { return; }
133 fFermiEnergy = val;
134}
135
137{
138 if(IsLocked() || val < 0.0) { return; }
139 fPrecoLowEnergy = val;
140}
141
143{
144 if(IsLocked() || val < 0.0) { return; }
145 fPrecoHighEnergy = val;
146}
147
149{
150 if(IsLocked() || val <= 0.0) { return; }
151 fPhenoFactor = val;
152}
153
155{
156 if(IsLocked() || val < 0.0) { return; }
157 fMinExcitation = val;
158}
159
161{
162 if(IsLocked() || val < 0.0) { return; }
163 fNuclearLevelWidth = val;
164}
165
167{
168 if(IsLocked() || val < 0.0) { return; }
169 fMaxLifeTime = val;
170}
171
173{
174 if(IsLocked() || val < 0.0) { return; }
175 fMinExPerNucleounForMF = val;
176}
177
179{
180 if(IsLocked() || n < 2) { return; }
181 fMinZForPreco = n;
182}
183
185{
186 if(IsLocked() || n < 0) { return; }
187 fMinAForPreco = n;
188}
189
191{
192 if(IsLocked() || n < 0 || n > 3) { return; }
193 fPrecoType = n;
194}
195
197{
198 if(IsLocked() || n < 0 || n > 3) { return; }
199 fDeexType = n;
200}
201
203{
204 if(IsLocked() || n < 0) { return; }
205 fTwoJMAX = n;
206}
207
209{
210 if(IsLocked()) { return; }
211 fVerbose = n;
212}
213
215{
216 if(IsLocked()) { return; }
217 fNeverGoBack = val;
218}
219
221{
222 if(IsLocked()) { return; }
223 fUseSoftCutoff = val;
224}
225
227{
228 if(IsLocked()) { return; }
229 fUseCEM = val;
230}
231
233{
234 if(IsLocked()) { return; }
235 fUseGNASH = val;
236}
237
239{
240 if(IsLocked()) { return; }
241 fUseHETC = val;
242}
243
245{
246 if(IsLocked()) { return; }
247 fUseAngularGen = val;
248}
249
251{
252 if(IsLocked()) { return; }
253 fPrecoDummy = val;
254 fDeexChannelType = fDummy;
255}
256
258{
259 if(IsLocked()) { return; }
260 fCorrelatedGamma = val;
261}
262
264{
265 if(IsLocked()) { return; }
266 fStoreAllLevels = val;
267}
268
273
275{
276 if(IsLocked()) { return; }
277 fInternalConversion = val;
278}
279
281{
282 if(IsLocked()) { return; }
283 fLD = val;
284}
285
287{
288 if(IsLocked()) { return; }
289 fFD = val;
290}
291
293{
294 if(IsLocked()) { return; }
295 fIsomerFlag = val;
296}
297
299{
300 if(IsLocked()) { return; }
301 fDeexChannelType = val;
302}
303
305{
306 if(IsLocked()) { return; }
307 fPreCompoundType = val;
308}
309
311{
312 if(IsLocked()) { return; }
313 fFermiBreakUpType = val;
314}
315
316std::ostream& G4DeexPrecoParameters::StreamInfo(std::ostream& os) const
317{
318 static const G4String namm[5] = {"Evaporation","GEM","Evaporation+GEM","GEMVI","Dummy"};
319 static const G4int nmm[5] = {8, 68, 68, 83, 0};
320 static const G4String nfbu[3] = {"ModelVI", "ModelAN", "Dummy"};
321 G4int idx = fDeexChannelType;
322 G4int jdx = fFermiBreakUpType;
323
324 G4long prec = os.precision(5);
325 os << "=======================================================================" << "\n";
326 os << "====== Geant4 Native Pre-compound Model Parameters ========" << "\n";
327 os << "=======================================================================" << "\n";
328 os << "Type of pre-compound model " << fPreCompoundType << "\n";
329 os << "Type of pre-compound inverse x-section " << fPrecoType << "\n";
330 os << "Pre-compound model active " << (!fPrecoDummy) << "\n";
331 os << "Pre-compound excitation low energy "
332 << fPrecoLowEnergy/CLHEP::MeV << " MeV \n";
333 os << "Pre-compound excitation high energy "
334 << fPrecoHighEnergy/CLHEP::MeV << " MeV \n";
335 os << "Angular generator for pre-compound model " << fUseAngularGen << "\n";
336 os << "Use NeverGoBack option for pre-compound model " << fNeverGoBack << "\n";
337 os << "Use SoftCutOff option for pre-compound model " << fUseSoftCutoff << "\n";
338 os << "Use CEM transitions for pre-compound model " << fUseCEM << "\n";
339 os << "Use GNASH transitions for pre-compound model " << fUseGNASH << "\n";
340 os << "Use HETC submodel for pre-compound model " << fUseHETC << "\n";
341 os << "=======================================================================" << "\n";
342 os << "====== Nuclear De-excitation Module Parameters ========" << "\n";
343 os << "=======================================================================" << "\n";
344 os << "Type of de-excitation inverse x-section " << fDeexType << "\n";
345 os << "Type of de-excitation factory " << namm[idx] << "\n";
346 os << "Number of de-excitation channels " << nmm[idx] << "\n";
347 os << "Type of Fermi BreakUp model " << nfbu[jdx] << "\n";
348 os << "Min excitation energy "
349 << fMinExcitation/CLHEP::keV << " keV \n";
350 os << "Min energy per nucleon for multifragmentation "
351 << fMinExPerNucleounForMF/CLHEP::MeV << " MeV\n";
352 os << "Level density (1/MeV) "
353 << fLevelDensity*CLHEP::MeV << "\n";
354 os << "Use simple level density model " << fLD << "\n";
355 os << "Use discrete excitation energy of the residual " << fFD << "\n";
356 os << "Time limit for long lived isomeres "
357 << fMaxLifeTime/CLHEP::ns << " ns \n";
358 os << "Isomer production flag " << fIsomerFlag << "\n";
359 os << "Internal e- conversion flag "
360 << fInternalConversion << "\n";
361 os << "Store e- internal conversion data " << fStoreAllLevels << "\n";
362 os << "Correlated gamma emission flag " << fCorrelatedGamma << "\n";
363 os << "Max 2J for sampling of angular correlations " << fTwoJMAX << "\n";
364 os << "=======================================================================" << G4endl;
365 os.precision(prec);
366 return os;
367}
368
370{
372 return (verb > 0) ? std::max(fVerbose, verb) : verb;
373}
374
376{
377 if(!fIsPrinted && GetVerbose() > 0 && G4Threading::IsMasterThread()) {
379 fIsPrinted = true;
380 }
381}
382
383std::ostream& operator<< (std::ostream& os, const G4DeexPrecoParameters& par)
384{
385 return par.StreamInfo(os);
386}
387
388G4bool G4DeexPrecoParameters::IsLocked() const
389{
390 return (!G4Threading::IsMasterThread() ||
391 (fStateManager->GetCurrentState() != G4State_PreInit));
392}
@ G4State_PreInit
std::ostream & operator<<(std::ostream &os, const G4DeexPrecoParameters &par)
double G4double
Definition G4Types.hh:83
long G4long
Definition G4Types.hh:87
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
void SetFermiBreakUpType(G4FermiBreakUpType)
void SetMinExPerNucleounForMF(G4double)
std::ostream & StreamInfo(std::ostream &os) const
void SetPreCompoundType(G4PreCompoundType)
void SetDeexChannelsType(G4DeexChannelType)
static G4HadronicParameters * Instance()
const G4ApplicationState & GetCurrentState() const
static G4StateManager * GetStateManager()
G4bool IsMasterThread()