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

#include <G4Fissioner.hh>

+ Inheritance diagram for G4Fissioner:

Public Member Functions

 G4Fissioner ()
 
virtual ~G4Fissioner ()
 
virtual void deExcite (const G4Fragment &target, G4CollisionOutput &output)
 
- Public Member Functions inherited from G4CascadeDeexciteBase
 G4CascadeDeexciteBase (const char *name)
 
virtual ~G4CascadeDeexciteBase ()
 
virtual void setVerboseLevel (G4int verbose=0)
 
- Public Member Functions inherited from G4VCascadeDeexcitation
 G4VCascadeDeexcitation (const G4String &name)
 
virtual ~G4VCascadeDeexcitation ()
 
virtual void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
- Public Member Functions inherited from G4VCascadeCollider
 G4VCascadeCollider (const G4String &name, G4int verbose=0)
 
virtual ~G4VCascadeCollider ()
 

Additional Inherited Members

- Protected Member Functions inherited from G4CascadeDeexciteBase
virtual G4bool explosion (const G4Fragment &target) const
 
virtual G4bool explosion (G4int A, G4int Z, G4double excitation) const
 
virtual G4bool validateOutput (const G4Fragment &target, G4CollisionOutput &output)
 
virtual G4bool validateOutput (const G4Fragment &target, const std::vector< G4InuclElementaryParticle > &particles)
 
virtual G4bool validateOutput (const G4Fragment &target, const std::vector< G4InuclNuclei > &fragments)
 
void getTargetData (const G4Fragment &target)
 
const G4FragmentmakeFragment (G4LorentzVector mom, G4int A, G4int Z, G4double EX=0.)
 
const G4FragmentmakeFragment (G4int A, G4int Z, G4double EX=0.)
 
- Protected Member Functions inherited from G4VCascadeCollider
virtual void setName (const G4String &name)
 
- Protected Attributes inherited from G4CascadeDeexciteBase
G4CascadeCheckBalancebalance
 
G4int A
 
G4int Z
 
G4LorentzVector PEX
 
G4double EEXS
 
G4Fragment aFragment
 
- Protected Attributes inherited from G4VCascadeCollider
G4String theName
 
G4int verboseLevel
 

Detailed Description

Definition at line 49 of file G4Fissioner.hh.

Constructor & Destructor Documentation

◆ G4Fissioner()

G4Fissioner::G4Fissioner ( )
inline

Definition at line 51 of file G4Fissioner.hh.

51: G4CascadeDeexciteBase("G4Fissioner") {;}
G4CascadeDeexciteBase(const char *name)

◆ ~G4Fissioner()

virtual G4Fissioner::~G4Fissioner ( )
inlinevirtual

Definition at line 52 of file G4Fissioner.hh.

52{;}

Member Function Documentation

◆ deExcite()

void G4Fissioner::deExcite ( const G4Fragment & target,
G4CollisionOutput & output )
virtual

Implements G4VCascadeDeexcitation.

Definition at line 65 of file G4Fissioner.cc.

66 {
67 if (verboseLevel) {
68 G4cout << " >>> G4Fissioner::deExcite" << G4endl;
69 }
70
71 if (verboseLevel > 1)
72 G4cout << " Fissioner input\n" << target << G4endl;
73
74 // Initialize buffer for fission possibilities
75 fissionStore.setVerboseLevel(verboseLevel);
76 fissionStore.clear();
77
78 getTargetData(target);
80 G4double mass_in = PEX.m();
81 G4double e_in = mass_in; // Mass includes excitation
82 G4double PARA = 0.055 * A13*A13 * (G4cbrt(A-Z) + G4cbrt(Z));
83 G4double TEM = std::sqrt(EEXS / PARA);
84 G4double TETA = 0.494 * A13 * TEM;
85
86 TETA = TETA / std::sinh(TETA);
87
88 if (A < 246) PARA += (nucleiLevelDensity(A) - PARA) * TETA;
89
90 G4int A1 = A/2 + 1;
91 G4int Z1;
92 G4int A2 = A - A1;
93
94 G4double ALMA = -1000.0;
96 G4double EVV = EEXS - DM1;
98 G4double DTEM = (A < 220 ? 0.5 : 1.15);
99
100 TEM += DTEM;
101
102 G4double AL1[2] = { -0.15, -0.15 };
103 G4double BET1[2] = { 0.05, 0.05 };
104
105 G4double R12 = G4cbrt(A1) + G4cbrt(A2);
106
107 for (G4int i = 0; i < 50 && A1 > 30; i++) {
108 A1--;
109 A2 = A - A1;
110 G4double X3 = 1.0 / G4cbrt(A1);
111 G4double X4 = 1.0 / G4cbrt(A2);
112 Z1 = G4lrint(getZopt(A1, A2, Z, X3, X4, R12) - 1.);
113 G4double EDEF1[2];
114 G4int Z2 = Z - Z1;
115 G4double VPOT, VCOUL;
116
117 potentialMinimization(VPOT, EDEF1, VCOUL, A1, A2, Z1, Z2, AL1, BET1, R12);
118
119 G4double DM3 = bindingEnergy(A1,Z1);
120 G4double DM4 = bindingEnergyAsymptotic(A1, Z1);
121 G4double DM5 = bindingEnergy(A2,Z2);
122 G4double DM6 = bindingEnergyAsymptotic(A2, Z2);
123 G4double DMT1 = DM4 + DM6 - DM2;
124 G4double DMT = DM3 + DM5 - DM1;
125 G4double EZL = EEXS + DMT - VPOT;
126
127 if(EZL > 0.0) { // generate fluctuations
128 // faster, using randomGauss
129 G4double C1 = std::sqrt(getC2(A1, A2, X3, X4, R12) / TEM);
130 G4double DZ = randomGauss(C1);
131
132 DZ = DZ > 0.0 ? DZ + 0.5 : -std::fabs(DZ - 0.5);
133 Z1 += G4int(DZ);
134 Z2 -= G4int(DZ);
135
136 G4double DEfin = randomGauss(TEM);
137 G4double EZ = (DMT1 + (DMT - DMT1) * TETA - VPOT + DEfin) / TEM;
138
139 if (EZ >= ALMA) ALMA = EZ;
140 G4double EK = VCOUL + DEfin + 0.5 * TEM;
141 G4double EV = EVV + bindingEnergy(A1,Z1) + bindingEnergy(A2,Z2) - EK;
142
143 if (EV > 0.0) fissionStore.addConfig(A1, Z1, EZ, EK, EV);
144 };
145 };
146
147 std::size_t store_size = fissionStore.size();
148 if (store_size == 0) return; // No fission products
149
151 fissionStore.generateConfiguration(ALMA, inuclRndm());
152
153 A1 = G4int(config.afirst);
154 A2 = A - A1;
155 Z1 = G4int(config.zfirst);
156
157 G4int Z2 = Z - Z1;
158
161 G4double EK = config.ekin;
162 G4double pmod = std::sqrt(0.001 * EK * mass1 * mass2 / mass_in);
163
164 G4LorentzVector mom1 = generateWithRandomAngles(pmod, mass1);
165 G4LorentzVector mom2; mom2.setVectM(-mom1.vect(), mass2);
166
167 G4double e_out = mom1.e() + mom2.e();
168 G4double EV = 1000.0 * (e_in - e_out) / A;
169 if (EV <= 0.0) return; // No fission energy
170
171 G4double EEXS1 = EV*A1;
172 G4double EEXS2 = EV*A2;
173
174 // Pass only last two nuclear fragments
175 output.addRecoilFragment(makeFragment(mom1, A1, Z1, EEXS1));
176 output.addRecoilFragment(makeFragment(mom2, A2, Z2, EEXS2));
177}
#define A13
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
#define C1
void setVectM(const Hep3Vector &spatial, double mass)
Hep3Vector vect() const
void getTargetData(const G4Fragment &target)
const G4Fragment & makeFragment(G4LorentzVector mom, G4int A, G4int Z, G4double EX=0.)
void addRecoilFragment(const G4Fragment *aFragment)
size_t size() const
void addConfig(G4double a, G4double z, G4double ez, G4double ek, G4double ev)
void setVerboseLevel(G4int verbose=1)
G4FissionConfiguration generateConfiguration(G4double amax, G4double rand) const
G4double getNucleiMass() const
G4double bindingEnergy(G4int A, G4int Z)
G4double nucleiLevelDensity(G4int A)
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)
G4double randomGauss(G4double sigma)
G4double bindingEnergyAsymptotic(G4int A, G4int Z)
int G4lrint(double ad)
Definition templates.hh:134

Referenced by G4EquilibriumEvaporator::deExcite().


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