Geant4 10.7.0
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 () final
 
void Initialise () final
 
G4bool IsApplicable (G4int ZZ, G4int AA, G4double etot) const final
 
void BreakFragment (G4FragmentVector *, G4Fragment *theNucleus) final
 
- Public Member Functions inherited from G4VFermiBreakUp
 G4VFermiBreakUp ()
 
virtual ~G4VFermiBreakUp ()
 
virtual void Initialise ()=0
 
virtual G4bool IsApplicable (G4int Z, G4int A, G4double mass) const =0
 
virtual void BreakFragment (G4FragmentVector *results, G4Fragment *theNucleus)=0
 
void SetVerbose (G4int val)
 

Additional Inherited Members

- Protected Attributes inherited from G4VFermiBreakUp
G4int verbose
 

Detailed Description

Definition at line 46 of file G4FermiBreakUpVI.hh.

Constructor & Destructor Documentation

◆ G4FermiBreakUpVI()

G4FermiBreakUpVI::G4FermiBreakUpVI ( )
explicit

Definition at line 46 of file G4FermiBreakUpVI.cc.

47 : theDecay(nullptr), rndmEngine(nullptr), maxZ(9), maxA(17)
48{
49 frag.reserve(10);
50 lvect.reserve(10);
51 Z = A = spin = 0;
52 mass = elim = excitation = 0.0;
53 tolerance = CLHEP::MeV;
54 frag1 = frag2 = nullptr;
55 prob.resize(12,0.0);
56 Initialise();
57}
void Initialise() final

◆ ~G4FermiBreakUpVI()

G4FermiBreakUpVI::~G4FermiBreakUpVI ( )
final

Definition at line 59 of file G4FermiBreakUpVI.cc.

60{
62 delete thePool;
63 thePool = nullptr;
64 }
65}
G4bool IsMasterThread()
Definition: G4Threading.cc:124

Member Function Documentation

◆ BreakFragment()

void G4FermiBreakUpVI::BreakFragment ( G4FragmentVector theResult,
G4Fragment theNucleus 
)
finalvirtual

Implements G4VFermiBreakUp.

Definition at line 96 of file G4FermiBreakUpVI.cc.

98{
99 if(verbose > 1) {
100 G4cout << "### G4FermiBreakUpVI::BreakFragment start new fragment "
101 << G4endl;
102 G4cout << *theNucleus << G4endl;
103 }
104
105 // initial fragment
106 Z = theNucleus->GetZ_asInt();
107 A = theNucleus->GetA_asInt();
108 excitation = theNucleus->GetExcitationEnergy();
109 mass = theNucleus->GetGroundStateMass() + excitation;
110 spin = -1;
111
112 lv0 = theNucleus->GetMomentum();
113 rndmEngine = G4Random::getTheEngine();
114
115 // sample first decay of an initial state
116 // if not possible to decay - exit
117 if(!SampleDecay()) {
118 return;
119 }
120
121 G4double time = theNucleus->GetCreationTime();
122 delete theNucleus;
123
124 static const G4int imax = 100;
125
126 // loop over vector of Fermi fragments
127 // vector may grow at each iteraction
128 for(size_t i=0; i<frag.size(); ++i) {
129 Z = frag[i]->GetZ();
130 A = frag[i]->GetA();
131 spin = frag[i]->GetSpin();
132 mass = frag[i]->GetTotalEnergy();
133 lv0 = lvect[i];
134 if(verbose > 1) {
135 G4cout << "# FermiFrag " << i << ". Z= " << Z << " A= " << A
136 << " mass= " << mass << " exc= "
137 << frag[i]->GetExcitationEnergy() << G4endl;
138 }
139 // stable fragment
140 if(!SampleDecay()) {
141 if(verbose > 1) { G4cout << " New G4Fragment" << G4endl; }
142 G4Fragment* f = new G4Fragment(A, Z, lv0);
143 f->SetSpin(0.5*spin);
144 f->SetCreationTime(time);
145 theResult->push_back(f);
146 }
147 // limit the loop
148 if(i == imax) {
149 break;
150 }
151 }
152 frag.clear();
153 lvect.clear();
154}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:280
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:275
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:299
G4double GetCreationTime() const
Definition: G4Fragment.hh:440
G4int GetZ_asInt() const
Definition: G4Fragment.hh:263
void SetCreationTime(G4double time)
Definition: G4Fragment.hh:445
void SetSpin(G4double value)
Definition: G4Fragment.hh:414
G4int GetA_asInt() const
Definition: G4Fragment.hh:258

◆ Initialise()

void G4FermiBreakUpVI::Initialise ( )
finalvirtual

Implements G4VFermiBreakUp.

Definition at line 67 of file G4FermiBreakUpVI.cc.

68{
69 if(verbose > 1) {
70 G4cout << "### G4FermiBreakUpVI::Initialise(): " << thePool << G4endl;
71 }
72 if(thePool == nullptr) { InitialisePool(); }
73 theDecay = thePool->FermiDecayProbability();
74 elim = thePool->GetEnergyLimit();
75}
const G4FermiDecayProbability * FermiDecayProbability() const

Referenced by G4FermiBreakUpVI().

◆ IsApplicable()

G4bool G4FermiBreakUpVI::IsApplicable ( G4int  ZZ,
G4int  AA,
G4double  etot 
) const
finalvirtual

Implements G4VFermiBreakUp.

Definition at line 90 of file G4FermiBreakUpVI.cc.

91{
92 return (ZZ < maxZ && AA < maxA && AA > 0 && eexc <= elim
93 && thePool->HasChannels(ZZ, AA, eexc));
94}
G4bool HasChannels(G4int Z, G4int A, G4double exc) const

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