Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4FermiBreakUpVI Class Referencefinal

#include <G4FermiBreakUpVI.hh>

+ Inheritance diagram for G4FermiBreakUpVI:

Public Member Functions

 G4FermiBreakUpVI ()
 
 ~G4FermiBreakUpVI () override
 
void Initialise () override
 
G4bool IsApplicable (G4int ZZ, G4int AA, G4double eexc) const override
 
void BreakFragment (G4FragmentVector *, G4Fragment *theNucleus) override
 
 G4FermiBreakUpVI (const G4FermiBreakUpVI &right)=delete
 
const G4FermiBreakUpVIoperator= (const G4FermiBreakUpVI &right)=delete
 
G4bool operator== (const G4FermiBreakUpVI &right) const =delete
 
G4bool operator!= (const G4FermiBreakUpVI &right) const =delete
 
- Public Member Functions inherited from G4VFermiBreakUp
 G4VFermiBreakUp ()
 
virtual ~G4VFermiBreakUp ()=default
 
 G4VFermiBreakUp (const G4VFermiBreakUp &right)=delete
 
const G4VFermiBreakUpoperator= (const G4VFermiBreakUp &right)=delete
 
G4bool operator== (const G4VFermiBreakUp &right) const =delete
 
G4bool operator!= (const G4VFermiBreakUp &right) const =delete
 
void SetVerbose (G4int val)
 

Additional Inherited Members

- Protected Attributes inherited from G4VFermiBreakUp
G4int verbose {0}
 

Detailed Description

Definition at line 43 of file G4FermiBreakUpVI.hh.

Constructor & Destructor Documentation

◆ G4FermiBreakUpVI() [1/2]

G4FermiBreakUpVI::G4FermiBreakUpVI ( )

Definition at line 45 of file G4FermiBreakUpVI.cc.

46{
47 frag.reserve(10);
48 lvect.reserve(10);
49 secID = G4PhysicsModelCatalog::GetModelID("model_G4FermiBreakUpVI");
50 prob.resize(12,0.0);
51 if (nullptr == fPool) {
52 fPool = new G4FermiFragmentsPoolVI();
53 fPool->Initialise();
54 isFirst = true;
55 }
56}
static G4int GetModelID(const G4int modelIndex)

◆ ~G4FermiBreakUpVI()

G4FermiBreakUpVI::~G4FermiBreakUpVI ( )
override

Definition at line 58 of file G4FermiBreakUpVI.cc.

59{
60 if (isFirst) {
61 delete fPool;
62 fPool = nullptr;
63 }
64}

◆ G4FermiBreakUpVI() [2/2]

G4FermiBreakUpVI::G4FermiBreakUpVI ( const G4FermiBreakUpVI & right)
delete

Member Function Documentation

◆ BreakFragment()

void G4FermiBreakUpVI::BreakFragment ( G4FragmentVector * theResult,
G4Fragment * theNucleus )
overridevirtual

Implements G4VFermiBreakUp.

Definition at line 85 of file G4FermiBreakUpVI.cc.

87{
88 if (verbose > 1) {
89 G4cout << "### G4FermiBreakUpVI::BreakFragment start new fragment "
90 << G4endl;
91 G4cout << *theNucleus << G4endl;
92 }
93 if (!fPool->IsInitialized()) { fPool->Initialise(); }
94
95 // initial fragment
96 G4int Z = theNucleus->GetZ_asInt();
97 G4int A = theNucleus->GetA_asInt();
98 G4double excitation = theNucleus->GetExcitationEnergy();
99 if (!IsApplicable(Z, A, excitation)) { return; }
100 G4double mass = theNucleus->GetGroundStateMass() + excitation;
101 G4LorentzVector lv0 = theNucleus->GetMomentum();
102
103 // sample first decay of an initial state
104 // if not possible to decay - exit
105 if (!SampleDecay(Z, A, mass, excitation, lv0)) { return; }
106
107 G4double time = theNucleus->GetCreationTime();
108 delete theNucleus;
109
110 static const G4int imax = 100;
111
112 // loop over vector of Fermi fragments
113 // vector may grow at each iteraction
114 for (std::size_t i=0; i<frag.size(); ++i) {
115 Z = frag[i]->GetZ();
116 A = frag[i]->GetA();
117 excitation = frag[i]->GetExcitationEnergy();
118 lv0 = lvect[i];
119 G4bool unstable = (IsApplicable(Z, A, excitation) && frag[i]->GetLifeTime() < fTimeLim);
120 if (unstable) {
121 mass = frag[i]->GetTotalEnergy();
122 if (verbose > 1) {
123 G4cout << "# FermiFrag " << i << ". Z= " << Z << " A= " << A
124 << " mass= " << mass << " exc= "
125 << frag[i]->GetExcitationEnergy() << G4endl;
126 }
127 unstable = SampleDecay(Z, A, mass, excitation, lv0);
128 }
129 // stable fragment
130 if (!unstable) {
131 if(verbose > 1) { G4cout << " New G4Fragment" << G4endl; }
132 G4Fragment* f = new G4Fragment(A, Z, lv0);
133 f->SetCreationTime(time);
134 f->SetCreatorModelID(secID);
135 theResult->push_back(f);
136 }
137 // limit the loop
138 if (i == imax) { break; }
139 }
140 frag.clear();
141 lvect.clear();
142}
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
const G4double A[17]
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
G4bool IsApplicable(G4int ZZ, G4int AA, G4double eexc) const override
G4double GetGroundStateMass() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
G4double GetCreationTime() const
G4int GetZ_asInt() const
void SetCreationTime(G4double time)
G4int GetA_asInt() const

◆ Initialise()

void G4FermiBreakUpVI::Initialise ( )
overridevirtual

Implements G4VFermiBreakUp.

Definition at line 66 of file G4FermiBreakUpVI.cc.

67{
68 G4DeexPrecoParameters* param =
70 fTolerance = param->GetMinExcitation();
71 fElim = param->GetFBUEnergyLimit();
72 fTimeLim = param->GetMaxLifeTime();
73 if (verbose > 1) {
74 G4cout << "### G4FermiBreakUpVI::Initialise(): the pool is initilized="
75 << fPool->IsInitialized() << " fTolerance(eV)=" << fTolerance/CLHEP::eV
76 << " Elim(MeV)=" << fElim/CLHEP::MeV << G4endl;
77 }
78}
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()

◆ IsApplicable()

G4bool G4FermiBreakUpVI::IsApplicable ( G4int ZZ,
G4int AA,
G4double eexc ) const
overridevirtual

Implements G4VFermiBreakUp.

Definition at line 80 of file G4FermiBreakUpVI.cc.

81{
82 return (Z < maxZ && A < maxA && eexc <= fElim && fPool->HasDecay(Z, A, eexc));
83}

Referenced by BreakFragment().

◆ operator!=()

G4bool G4FermiBreakUpVI::operator!= ( const G4FermiBreakUpVI & right) const
delete

◆ operator=()

const G4FermiBreakUpVI & G4FermiBreakUpVI::operator= ( const G4FermiBreakUpVI & right)
delete

◆ operator==()

G4bool G4FermiBreakUpVI::operator== ( const G4FermiBreakUpVI & right) const
delete

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