Geant4 11.1.1
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 47 of file G4FermiBreakUpVI.cc.

48 : theDecay(nullptr), rndmEngine(nullptr), maxZ(9), maxA(17), secID(-1)
49{
50 frag.reserve(10);
51 lvect.reserve(10);
52 Z = A = spin = 0;
53 secID = G4PhysicsModelCatalog::GetModelID("model_G4FermiBreakUpVI");
54 mass = elim = excitation = 0.0;
55 tolerance = CLHEP::MeV;
56 frag1 = frag2 = nullptr;
57 prob.resize(12,0.0);
58 Initialise();
59}
void Initialise() final
static G4int GetModelID(const G4int modelIndex)

◆ ~G4FermiBreakUpVI()

G4FermiBreakUpVI::~G4FermiBreakUpVI ( )
final

Definition at line 61 of file G4FermiBreakUpVI.cc.

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

Member Function Documentation

◆ BreakFragment()

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

Implements G4VFermiBreakUp.

Definition at line 98 of file G4FermiBreakUpVI.cc.

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

◆ Initialise()

void G4FermiBreakUpVI::Initialise ( )
finalvirtual

Implements G4VFermiBreakUp.

Definition at line 69 of file G4FermiBreakUpVI.cc.

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

Referenced by G4FermiBreakUpVI().

◆ IsApplicable()

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

Implements G4VFermiBreakUp.

Definition at line 92 of file G4FermiBreakUpVI.cc.

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

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