Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4FermiFragmentsPoolVI Class Reference

#include <G4FermiFragmentsPoolVI.hh>

Public Member Functions

 G4FermiFragmentsPoolVI ()
 
 ~G4FermiFragmentsPoolVI ()
 
const G4FermiChannelsClosestChannels (G4int Z, G4int A, G4double mass) const
 
void DumpFragment (const G4FermiFragment *) const
 
void Dump () const
 
G4bool IsPhysical (G4int Z, G4int A) const
 
G4bool HasChannels (G4int Z, G4int A, G4double exc) const
 
const G4FermiDecayProbabilityFermiDecayProbability () const
 
G4int GetMaxZ () const
 
G4int GetMaxA () const
 
G4double GetEnergyLimit () const
 
G4double GetTolerance () const
 

Detailed Description

Definition at line 45 of file G4FermiFragmentsPoolVI.hh.

Constructor & Destructor Documentation

◆ G4FermiFragmentsPoolVI()

G4FermiFragmentsPoolVI::G4FermiFragmentsPoolVI ( )
explicit

Definition at line 39 of file G4FermiFragmentsPoolVI.cc.

40{
41 // G4cout << "### G4FermiFragmentsPoolVI is constructed" << G4endl;
42 G4DeexPrecoParameters* param =
44 tolerance = param->GetMinExcitation();
45 timelim = (G4float)param->GetMaxLifeTime();
46
47 elim = param->GetFBUEnergyLimit();
48 elimf= (G4float)elim;
49 /*
50 G4cout << "G4FermiFragmentsPoolVI: tolerance= " << tolerance
51 << " timelim= " << timelim << " elim= " << elim << G4endl;
52 */
53 fragment_pool.reserve(991);
54 Initialise();
55}
float G4float
Definition: G4Types.hh:84
G4double GetFBUEnergyLimit() const
G4double GetMinExcitation() const
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()

◆ ~G4FermiFragmentsPoolVI()

G4FermiFragmentsPoolVI::~G4FermiFragmentsPoolVI ( )

Definition at line 57 of file G4FermiFragmentsPoolVI.cc.

58{
59 for(G4int i=0; i<maxA; ++i) {
60 for(auto & ptr : list_p[i]) { delete ptr; ptr = nullptr; }
61 for(auto & ptr : list_c[i]) { delete ptr; ptr = nullptr; }
62 }
63 for(auto & ptr : fragment_pool) { delete ptr; ptr = nullptr; }
64}
int G4int
Definition: G4Types.hh:85

Member Function Documentation

◆ ClosestChannels()

const G4FermiChannels * G4FermiFragmentsPoolVI::ClosestChannels ( G4int  Z,
G4int  A,
G4double  mass 
) const

Definition at line 67 of file G4FermiFragmentsPoolVI.cc.

68{
69 const G4FermiChannels* res = nullptr;
70 G4double demax = 1.e+9;
71
72 // stable channels
73 for(std::size_t j=0; j<(list_c[A]).size(); ++j) {
74 const G4FermiFragment* frag = (list_f[A])[j];
75 if(frag->GetZ() != Z) { continue; }
76 G4double de = e - frag->GetTotalEnergy();
77 //G4cout << " Stab check " << j << " channel de= " << de
78 // << " tol= " << tolerance << G4endl;
79 // an excitation coincide with a level
80 if(std::abs(de) <= tolerance) {
81 res = (list_c[A])[j];
82 break;
83 } else {
84 // closest level selected
85 de += tolerance;
86 if(de >= 0.0 && de <= demax) {
87 res = (list_c[A])[j];
88 demax = de;
89 }
90 //G4cout << " Stab chan: " << j << " N= "
91 //<< res->GetNumberOfChannels() << G4endl;
92 }
93 }
94 return res;
95}
double G4double
Definition: G4Types.hh:83
const G4int Z[17]
const G4double A[17]
G4int GetZ() const
G4double GetTotalEnergy(void) const

◆ Dump()

void G4FermiFragmentsPoolVI::Dump ( ) const

Definition at line 302 of file G4FermiFragmentsPoolVI.cc.

303{
304 G4cout <<"----------------------------------------------------------------"
305 <<G4endl;
306 G4cout << "##### List of Fragments in the Fermi Fragment Pool #####"
307 << G4endl;
308 std::size_t nfrag = fragment_pool.size();
309 G4cout << " For stable " << nfrag << " Elim(MeV) = "
310 << elim/CLHEP::MeV << G4endl;
311 for(std::size_t i=0; i<nfrag; ++i) {
312 DumpFragment(fragment_pool[i]);
313 }
314 G4cout << G4endl;
315
316
317 G4cout << "----------------------------------------------------------------"
318 << G4endl;
319 G4cout << "### G4FermiFragmentPoolVI: fragments sorted by A" << G4endl;
320
321 G4long prec = G4cout.precision(6);
322 std::size_t ama[maxA];
323 ama[0] = 0;
324 for(G4int A=1; A<maxA; ++A) {
325 G4cout << " # A= " << A << G4endl;
326 std::size_t am(0);
327 for(std::size_t j=0; j<list_f[A].size(); ++j) {
328 const G4FermiFragment* f = (list_f[A])[j];
329 G4int a1 = f->GetA();
330 G4int z1 = f->GetZ();
331 std::size_t nch = (list_c[A])[j]->GetNumberOfChannels();
332 am = std::max(am, nch);
333 G4cout << " ("<<a1<<","<<z1<<"); Eex(MeV)= "
334 << f->GetExcitationEnergy()
335 << " 2S= " << f->GetSpin()
336 << "; Nchannels= " << nch
337 << " MassExcess= " << f->GetTotalEnergy() -
338 (z1*proton_mass_c2 + (a1 - z1)*neutron_mass_c2)
339 << G4endl;
340 for(std::size_t k=0; k<nch; ++k) {
341 const G4FermiPair* fpair = ((list_c[A])[j]->GetChannels())[k];
342 G4cout << " (" << fpair->GetFragment1()->GetZ()
343 << ", " << fpair->GetFragment1()->GetA()
344 << ", " << fpair->GetFragment1()->GetExcitationEnergy()
345 << ") ("<< fpair->GetFragment2()->GetZ()
346 << ", " << std::setw(3)<< fpair->GetFragment2()->GetA()
347 << ", " << std::setw(8)<< fpair->GetFragment2()->GetExcitationEnergy()
348 << ") prob= " << ((list_c[A])[j]->GetProbabilities())[k]
349 << G4endl;
350 }
351 }
352 ama[A] = am;
353 }
354 G4cout.precision(prec);
355 G4cout << G4endl;
356
357 G4cout << " Number of fragments per A:" << G4endl;
358 for(G4int j=0; j<maxA; ++j) { G4cout << list_f[j].size() << ", "; }
359 G4cout << G4endl;
360
361 G4cout << " Max number of channels per A:" << G4endl;
362 for (std::size_t j=0; j<maxA; ++j) { G4cout << ama[j] << ", "; }
363 G4cout << G4endl;
364
365 G4cout << " Number of fragment pairs per A:" << G4endl;
366 for(G4int j=0; j<maxA; ++j) { G4cout << list_p[j].size() << ", "; }
367 G4cout << G4endl;
368
369 G4cout << "----------------------------------------------------------------"
370 << G4endl;
371 G4cout << "### Pairs of stable fragments: " << G4endl;
372
373 prec = G4cout.precision(6);
374 for(G4int A=2; A<maxA; ++A) {
375 G4cout << " A= " << A<<G4endl;
376 for(std::size_t j=0; j<list_p[A].size(); ++j) {
377 const G4FermiFragment* f1 = (list_p[A])[j]->GetFragment1();
378 const G4FermiFragment* f2 = (list_p[A])[j]->GetFragment2();
379 G4int a1 = f1->GetA();
380 G4int z1 = f1->GetZ();
381 G4int a2 = f2->GetA();
382 G4int z2 = f2->GetZ();
383 G4cout << "("<<a1<<","<<z1<<")("<<a2<<","<<z2<<") % Eex(MeV)= "
384 << std::setw(8)<< (list_p[A])[j]->GetExcitationEnergy()
385 << " Eex1= " << std::setw(8)<< f1->GetExcitationEnergy()
386 << " Eex2= " << std::setw(8)<< f2->GetExcitationEnergy()
387 << G4endl;
388 }
389 G4cout << G4endl;
390 G4cout <<"----------------------------------------------------------------"
391 << G4endl;
392 }
393 G4cout.precision(prec);
394}
long G4long
Definition: G4Types.hh:87
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4double GetExcitationEnergy() const
G4int GetA() const
G4int GetSpin() const
void DumpFragment(const G4FermiFragment *) const
const G4FermiFragment * GetFragment2() const
Definition: G4FermiPair.hh:101
const G4FermiFragment * GetFragment1() const
Definition: G4FermiPair.hh:96

◆ DumpFragment()

void G4FermiFragmentsPoolVI::DumpFragment ( const G4FermiFragment f) const

Definition at line 288 of file G4FermiFragmentsPoolVI.cc.

289{
290 if(f) {
291 G4long prec = G4cout.precision(6);
292 G4cout << " Z= " << f->GetZ() << " A= " << std::setw(2) << f->GetA()
293 << " Mass(GeV)= " << std::setw(8) << f->GetFragmentMass()/GeV
294 << " Eexc(MeV)= " << std::setw(7) << f->GetExcitationEnergy()
295 << " 2s= " << f->GetSpin() << " IsStable: "
296 << HasChannels(f->GetZ(), f->GetA(), f->GetExcitationEnergy())
297 << G4endl;
298 G4cout.precision(prec);
299 }
300}
G4double GetFragmentMass() const
G4bool HasChannels(G4int Z, G4int A, G4double exc) const

Referenced by Dump().

◆ FermiDecayProbability()

const G4FermiDecayProbability * G4FermiFragmentsPoolVI::FermiDecayProbability ( ) const
inline

Definition at line 115 of file G4FermiFragmentsPoolVI.hh.

116{
117 return &theDecay;
118}

Referenced by G4FermiBreakUpVI::Initialise().

◆ GetEnergyLimit()

G4double G4FermiFragmentsPoolVI::GetEnergyLimit ( ) const
inline

Definition at line 120 of file G4FermiFragmentsPoolVI.hh.

121{
122 return elim;
123}

Referenced by G4FermiBreakUpVI::Initialise().

◆ GetMaxA()

G4int G4FermiFragmentsPoolVI::GetMaxA ( ) const
inline

Definition at line 109 of file G4FermiFragmentsPoolVI.hh.

110{
111 return maxA;
112}

◆ GetMaxZ()

G4int G4FermiFragmentsPoolVI::GetMaxZ ( ) const
inline

Definition at line 104 of file G4FermiFragmentsPoolVI.hh.

105{
106 return maxZ;
107}

◆ GetTolerance()

G4double G4FermiFragmentsPoolVI::GetTolerance ( ) const
inline

Definition at line 125 of file G4FermiFragmentsPoolVI.hh.

126{
127 return tolerance;
128}

◆ HasChannels()

G4bool G4FermiFragmentsPoolVI::HasChannels ( G4int  Z,
G4int  A,
G4double  exc 
) const

Definition at line 117 of file G4FermiFragmentsPoolVI.cc.

118{
119 // stable fragment
120 for(std::size_t j=0; j<(list_f[A]).size(); ++j) {
121 const G4FermiFragment* frag = (list_f[A])[j];
122 if(frag->GetZ() == Z) {
123 if(exc > frag->GetExcitationEnergy() &&
124 (list_c[A])[j]->GetNumberOfChannels() > 0) { return true; }
125 }
126 }
127 return false;
128}

Referenced by DumpFragment(), and G4FermiBreakUpVI::IsApplicable().

◆ IsPhysical()

G4bool G4FermiFragmentsPoolVI::IsPhysical ( G4int  Z,
G4int  A 
) const

Definition at line 97 of file G4FermiFragmentsPoolVI.cc.

98{
99 for(auto const& ptr : list_f[A]) {
100 if(ptr->GetZ() == Z) { return true; }
101 }
102 return false;
103}

The documentation for this class was generated from the following files: