Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4Fissioner Class Reference

#include <G4Fissioner.hh>

Inheritance diagram for G4Fissioner:
G4CascadeDeexciteBase G4VCascadeDeexcitation G4VCascadeCollider

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 char *name)
 
virtual ~G4VCascadeDeexcitation ()
 
virtual void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
- Public Member Functions inherited from G4VCascadeCollider
 G4VCascadeCollider (const char *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 char *name)
 
- Protected Attributes inherited from G4CascadeDeexciteBase
G4CascadeCheckBalancebalance
 
G4int A
 
G4int Z
 
G4LorentzVector PEX
 
G4double EEXS
 
G4Fragment aFragment
 
- Protected Attributes inherited from G4VCascadeCollider
const char * theName
 
G4int verboseLevel
 

Detailed Description

Definition at line 50 of file G4Fissioner.hh.

Constructor & Destructor Documentation

G4Fissioner::G4Fissioner ( )
inline

Definition at line 52 of file G4Fissioner.hh.

52 : G4CascadeDeexciteBase("G4Fissioner") {;}
G4CascadeDeexciteBase(const char *name)
virtual G4Fissioner::~G4Fissioner ( )
inlinevirtual

Definition at line 53 of file G4Fissioner.hh.

53 {;}

Member Function Documentation

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

Implements G4VCascadeDeexcitation.

Definition at line 62 of file G4Fissioner.cc.

References G4CollisionOutput::addRecoilFragment(), G4FissionConfiguration::afirst, G4InuclSpecialFunctions::bindingEnergy(), G4InuclSpecialFunctions::bindingEnergyAsymptotic(), C1, CLHEP::HepLorentzVector::e(), G4FissionConfiguration::ekin, G4InuclSpecialFunctions::G4cbrt(), G4cout, G4endl, G4lrint(), G4InuclSpecialFunctions::generateWithRandomAngles(), G4InuclNuclei::getNucleiMass(), G4InuclSpecialFunctions::inuclRndm(), G4InuclSpecialFunctions::nucleiLevelDensity(), G4InuclSpecialFunctions::randomGauss(), CLHEP::HepLorentzVector::setVectM(), CLHEP::HepLorentzVector::vect(), and G4FissionConfiguration::zfirst.

Referenced by G4EquilibriumEvaporator::deExcite().

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

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