Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4Fissioner Class Reference

#include <G4Fissioner.hh>

Inheritance diagram for G4Fissioner:
Collaboration 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 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 66 of file G4Fissioner.cc.

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

Here is the call graph for this function:

Here is the caller graph for this function:


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