Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4BigBanger Class Reference

#include <G4BigBanger.hh>

Inheritance diagram for G4BigBanger:
G4CascadeDeexciteBase G4VCascadeDeexcitation G4VCascadeCollider

Public Member Functions

virtual void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
virtual void deExcite (const G4Fragment &target, G4CollisionOutput &output)
 
 G4BigBanger ()
 
virtual void setVerboseLevel (G4int verbose=0)
 
virtual ~G4BigBanger ()
 

Protected Member Functions

virtual G4bool explosion (const G4Fragment &target) const
 
virtual G4bool explosion (G4int A, G4int Z, G4double excitation) const
 
void getTargetData (const G4Fragment &target)
 
const G4FragmentmakeFragment (G4int A, G4int Z, G4double EX=0.)
 
const G4FragmentmakeFragment (G4LorentzVector mom, G4int A, G4int Z, G4double EX=0.)
 
virtual void setName (const G4String &name)
 
virtual G4bool validateOutput (const G4Fragment &target, const std::vector< G4InuclElementaryParticle > &particles)
 
virtual G4bool validateOutput (const G4Fragment &target, const std::vector< G4InuclNuclei > &fragments)
 
virtual G4bool validateOutput (const G4Fragment &target, G4CollisionOutput &output)
 

Protected Attributes

G4int A
 
G4Fragment aFragment
 
G4CascadeCheckBalancebalance
 
G4double EEXS
 
G4LorentzVector PEX
 
G4String theName
 
G4int verboseLevel
 
G4int Z
 

Private Member Functions

 G4BigBanger (const G4BigBanger &)
 
void generateBangInSCM (G4double etot, G4int a, G4int z)
 
void generateMomentumModules (G4double etot, G4int a, G4int z)
 
G4double generateX (G4int ia, G4double promax) const
 
G4double maxProbability (G4int a) const
 
G4BigBangeroperator= (const G4BigBanger &)
 
G4double xProbability (G4double x, G4int a) const
 

Private Attributes

std::vector< G4doublemomModules
 
std::vector< G4InuclElementaryParticleparticles
 
std::vector< G4LorentzVectorscm_momentums
 

Detailed Description

Definition at line 47 of file G4BigBanger.hh.

Constructor & Destructor Documentation

◆ G4BigBanger() [1/2]

G4BigBanger::G4BigBanger ( )

Definition at line 66 of file G4BigBanger.cc.

66: G4CascadeDeexciteBase("G4BigBanger") {}
G4CascadeDeexciteBase(const char *name)

◆ ~G4BigBanger()

virtual G4BigBanger::~G4BigBanger ( )
inlinevirtual

Definition at line 50 of file G4BigBanger.hh.

50{};

◆ G4BigBanger() [2/2]

G4BigBanger::G4BigBanger ( const G4BigBanger )
private

Member Function Documentation

◆ collide()

void G4VCascadeDeexcitation::collide ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput globalOutput 
)
virtualinherited

Implements G4VCascadeCollider.

Definition at line 37 of file G4VCascadeDeexcitation.cc.

39 {
40 if (verboseLevel) {
41 G4cout << " >>> G4VCascadeDeexcitation[" << theName << "]::collide "
42 << " *** SHOULD NOT BE CALLED ***" << G4endl;
43 }
44
45 throw G4HadronicException(__FILE__, __LINE__,
46 "G4VCascadeDeexcitation::collide() invalid, must use ::deExcite(G4Fagment*)");
47}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References G4cout, G4endl, G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

Referenced by G4InuclEvaporation::BreakItUp().

◆ deExcite()

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

Implements G4VCascadeDeexcitation.

Definition at line 68 of file G4BigBanger.cc.

69 {
70 if (verboseLevel) G4cout << " >>> G4BigBanger::deExcite" << G4endl;
71
72 getTargetData(target);
73 G4ThreeVector toTheLabFrame = PEX.boostVector(); // From rest to lab
74
75 // This "should" be difference between E-target and sum of m(nucleons)
76 G4double etot = (EEXS - bindingEnergy(A,Z)) * MeV/GeV; // To Bertini units
77 if (etot < 0.0) etot = 0.0;
78
79 if (verboseLevel > 2) {
80 G4cout << " BigBanger: target\n" << target
81 << "\n etot " << etot << G4endl;
82 }
83
84 if (verboseLevel > 3) {
85 G4LorentzVector PEXrest = PEX;
86 PEXrest.boost(-toTheLabFrame);
87 G4cout << " target rest frame: px " << PEXrest.px() << " py "
88 << PEXrest.py() << " pz " << PEXrest.pz() << " E " << PEXrest.e()
89 << G4endl;
90 }
91
92 generateBangInSCM(etot, A, Z);
93
94 if (verboseLevel > 2) {
95 G4cout << " particles " << particles.size() << G4endl;
96 for(G4int i = 0; i < G4int(particles.size()); i++)
97 G4cout << particles[i] << G4endl;
98 }
99
100 if (particles.empty()) { // No bang! Don't know why...
101 G4cerr << " >>> G4BigBanger unable to process fragment "
102 << target << G4endl;
103
104 // FIXME: This will violate baryon number, momentum, energy, etc.
105 return;
106 }
107
108 // convert back to Lab
109 G4LorentzVector totscm;
110 G4LorentzVector totlab;
111
112 if (verboseLevel > 2) G4cout << " BigBanger: boosting to lab" << G4endl;
113
114 particleIterator ipart;
115 for(ipart = particles.begin(); ipart != particles.end(); ipart++) {
116 G4LorentzVector mom = ipart->getMomentum();
117 if (verboseLevel > 2) totscm += mom;
118
119 mom.boost(toTheLabFrame);
120 if (verboseLevel > 2) totlab += mom;
121
122 ipart->setMomentum(mom);
123 if (verboseLevel > 2) G4cout << *ipart << G4endl;
124 }
125
126 std::sort(particles.begin(), particles.end(), G4ParticleLargerEkin());
127
128 validateOutput(target, particles); // Checks <vector> directly
129
130 if (verboseLevel > 2) {
131 G4cout << " In SCM: total outgoing momentum " << G4endl
132 << " E " << totscm.e() << " px " << totscm.x()
133 << " py " << totscm.y() << " pz " << totscm.z() << G4endl;
134 G4cout << " In Lab: mom cons " << G4endl
135 << " E " << PEX.e() - totlab.e() // PEX now includes EEXS
136 << " px " << PEX.x() - totlab.x()
137 << " py " << PEX.y() - totlab.y()
138 << " pz " << PEX.z() - totlab.z() << G4endl;
139 }
140
141 globalOutput.addOutgoingParticles(particles);
142}
std::vector< G4InuclElementaryParticle >::iterator particleIterator
Definition: G4BigBanger.cc:64
static constexpr double GeV
Definition: G4SIunits.hh:203
static constexpr double MeV
Definition: G4SIunits.hh:200
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
std::vector< G4InuclElementaryParticle > particles
Definition: G4BigBanger.hh:62
void generateBangInSCM(G4double etot, G4int a, G4int z)
Definition: G4BigBanger.cc:144
void getTargetData(const G4Fragment &target)
virtual G4bool validateOutput(const G4Fragment &target, G4CollisionOutput &output)
G4double bindingEnergy(G4int A, G4int Z)

References G4CascadeDeexciteBase::A, G4CollisionOutput::addOutgoingParticles(), G4InuclSpecialFunctions::bindingEnergy(), CLHEP::HepLorentzVector::boost(), CLHEP::HepLorentzVector::boostVector(), CLHEP::HepLorentzVector::e(), G4CascadeDeexciteBase::EEXS, G4cerr, G4cout, G4endl, generateBangInSCM(), G4CascadeDeexciteBase::getTargetData(), GeV, MeV, particles, G4CascadeDeexciteBase::PEX, CLHEP::HepLorentzVector::px(), CLHEP::HepLorentzVector::py(), CLHEP::HepLorentzVector::pz(), G4CascadeDeexciteBase::validateOutput(), G4VCascadeCollider::verboseLevel, CLHEP::HepLorentzVector::x(), CLHEP::HepLorentzVector::y(), CLHEP::HepLorentzVector::z(), and G4CascadeDeexciteBase::Z.

Referenced by G4CascadeDeexcitation::deExcite(), and G4EquilibriumEvaporator::deExcite().

◆ explosion() [1/2]

G4bool G4CascadeDeexciteBase::explosion ( const G4Fragment target) const
protectedvirtualinherited

Reimplemented in G4EquilibriumEvaporator.

Definition at line 109 of file G4CascadeDeexciteBase.cc.

109 {
110 return explosion(fragment.GetA_asInt(), fragment.GetZ_asInt(),
111 fragment.GetExcitationEnergy()); // in MeV
112}
virtual G4bool explosion(const G4Fragment &target) const

References G4CascadeDeexciteBase::explosion(), G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), and G4Fragment::GetZ_asInt().

Referenced by G4CascadeDeexcitation::deExcite(), G4PreCompoundDeexcitation::deExcite(), G4CascadeDeexciteBase::explosion(), and G4EquilibriumEvaporator::explosion().

◆ explosion() [2/2]

G4bool G4CascadeDeexciteBase::explosion ( G4int  A,
G4int  Z,
G4double  excitation 
) const
protectedvirtualinherited

Reimplemented in G4EquilibriumEvaporator.

Definition at line 114 of file G4CascadeDeexciteBase.cc.

115 {
116 if (verboseLevel) G4cout << " >>> " << theName << "::explosion ?" << G4endl;
117
118 const G4int a_cut = 20;
119 const G4double be_cut = 3.0;
120
121 // Neutron balls, or small fragments with high excitations can explode
122 return ((fragA <= a_cut || fragZ==0) &&
123 (excitation >= be_cut * bindingEnergy(fragA,fragZ))
124 );
125}

References G4InuclSpecialFunctions::bindingEnergy(), G4cout, G4endl, G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

◆ generateBangInSCM()

void G4BigBanger::generateBangInSCM ( G4double  etot,
G4int  a,
G4int  z 
)
private

Definition at line 144 of file G4BigBanger.cc.

144 {
145 if (verboseLevel > 3) {
146 G4cout << " >>> G4BigBanger::generateBangInSCM" << G4endl;
147 }
148
149 const G4double ang_cut = 0.9999;
150 const G4int itry_max = 1000;
151
152 if (verboseLevel > 2) {
153 G4cout << " a " << a << " z " << z << G4endl;
154 }
155
156 particles.clear(); // Reset output vector before filling
157
158 if (a == 1) { // Special -- bare nucleon doesn't really "explode"
159 G4int knd = (z>0) ? 1 : 2;
160 particles.push_back(G4InuclElementaryParticle(knd)); // zero momentum
161 return;
162 }
163
164 // NOTE: If distribution fails, need to regenerate magnitudes and angles!
165 //*** generateMomentumModules(etot, a, z);
166
167 scm_momentums.reserve(a);
168 G4LorentzVector tot_mom;
169
170 G4bool bad = true;
171 G4int itry = 0;
172 while(bad && itry < itry_max) { /* Loop checking 08.06.2015 MHK */
173 itry++;
174 scm_momentums.clear();
175
176 generateMomentumModules(etot, a, z);
177 if (a == 2) {
178 // This is only a three-vector, not a four-vector
180 scm_momentums.push_back(mom);
181 scm_momentums.push_back(-mom); // Only safe since three-vector!
182 bad = false;
183 } else {
184 tot_mom *= 0.; // Easy way to reset accumulator
185
186 for(G4int i = 0; i < a-2; i++) { // All but last two are thrown
187 // This is only a three-vector, not a four-vector
189 scm_momentums.push_back(mom);
190 tot_mom += mom;
191 };
192
193 // handle last two
194 G4double tot_mod = tot_mom.rho();
195 G4double ct = -0.5*(tot_mod*tot_mod + momModules[a-2]*momModules[a-2]
196 - momModules[a-1]*momModules[a-1]) / tot_mod
197 / momModules[a-2];
198
199 if (verboseLevel > 2) G4cout << " ct last " << ct << G4endl;
200
201 if(std::fabs(ct) < ang_cut) {
202 // This is only a three-vector, not a four-vector
204
205 // rotate to the normal system
206 G4LorentzVector apr = tot_mom/tot_mod;
207 G4double a_tr = std::sqrt(apr.x()*apr.x() + apr.y()*apr.y());
208 G4LorentzVector mom;
209 mom.setX(mom2.z()*apr.x() + ( mom2.x()*apr.y() + mom2.y()*apr.z()*apr.x())/a_tr);
210 mom.setY(mom2.z()*apr.y() + (-mom2.x()*apr.x() + mom2.y()*apr.z()*apr.y())/a_tr);
211 mom.setZ(mom2.z()*apr.z() - mom2.y()*a_tr);
212
213 scm_momentums.push_back(mom);
214
215 // and the last one (again, not actually a four-vector!)
216 G4LorentzVector mom1 = -mom - tot_mom;
217
218 scm_momentums.push_back(mom1);
219 bad = false;
220 } // if (abs(ct) < ang_cut)
221 } // (a > 2)
222 } // while (bad && itry<itry_max)
223
224 if (!bad) {
225 particles.resize(a); // Use assignment to avoid temporaries
226 for(G4int i = 0; i < a; i++) {
227 G4int knd = i < z ? 1 : 2;
229 };
230 };
231
232 if (verboseLevel > 2) {
233 if (itry == itry_max) G4cout << " BigBanger -> can not generate bang " << G4endl;
234 }
235
236 return;
237}
bool G4bool
Definition: G4Types.hh:86
void generateMomentumModules(G4double etot, G4int a, G4int z)
Definition: G4BigBanger.cc:239
std::vector< G4double > momModules
Definition: G4BigBanger.hh:63
std::vector< G4LorentzVector > scm_momentums
Definition: G4BigBanger.hh:64
G4LorentzVector generateWithFixedTheta(G4double ct, G4double p, G4double mass=0.)
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)

References G4InuclParticle::BigBanger, G4cout, G4endl, generateMomentumModules(), G4InuclSpecialFunctions::generateWithFixedTheta(), G4InuclSpecialFunctions::generateWithRandomAngles(), momModules, particles, CLHEP::HepLorentzVector::rho(), scm_momentums, CLHEP::HepLorentzVector::setX(), CLHEP::HepLorentzVector::setY(), CLHEP::HepLorentzVector::setZ(), G4VCascadeCollider::verboseLevel, CLHEP::HepLorentzVector::x(), CLHEP::HepLorentzVector::y(), and CLHEP::HepLorentzVector::z().

Referenced by deExcite().

◆ generateMomentumModules()

void G4BigBanger::generateMomentumModules ( G4double  etot,
G4int  a,
G4int  z 
)
private

Definition at line 239 of file G4BigBanger.cc.

239 {
240 if (verboseLevel > 3) {
241 G4cout << " >>> G4BigBanger::generateMomentumModules" << G4endl;
242 }
243
244 // Proton and neutron masses
247
248 momModules.clear(); // Reset buffer for filling
249
250 G4double xtot = 0.0;
251
252 if (a > 2) { // For "large" nuclei, energy is distributed
253 G4double promax = maxProbability(a);
254
255 momModules.resize(a, 0.); // Pre-allocate to avoid memory churn
256 for(G4int i = 0; i < a; i++) {
257 momModules[i] = generateX(a, promax);
258 xtot += momModules[i];
259
260 if (verboseLevel > 2) {
261 G4cout << " i " << i << " x " << momModules[i] << G4endl;
262 }
263 }
264 } else { // Two-body case is special, must be 50%
265 xtot = 1.;
266 momModules.push_back(0.5);
267 momModules.push_back(0.5);
268 }
269
270 for(G4int i = 0; i < a; i++) {
271 G4double mass = i < z ? mp : mn;
272
273 momModules[i] *= etot/xtot;
274 momModules[i] = std::sqrt(momModules[i] * (momModules[i] + 2.0 * mass));
275
276 if (verboseLevel > 2) {
277 G4cout << " i " << i << " pmod " << momModules[i] << G4endl;
278 }
279 };
280
281 return;
282}
G4double maxProbability(G4int a) const
Definition: G4BigBanger.cc:304
G4double generateX(G4int ia, G4double promax) const
Definition: G4BigBanger.cc:312
static G4double getParticleMass(G4int type)

References G4cout, G4endl, generateX(), G4InuclElementaryParticle::getParticleMass(), maxProbability(), momModules, and G4VCascadeCollider::verboseLevel.

Referenced by generateBangInSCM().

◆ generateX()

G4double G4BigBanger::generateX ( G4int  ia,
G4double  promax 
) const
private

Definition at line 312 of file G4BigBanger.cc.

312 {
313 if (verboseLevel > 3) G4cout << " >>> G4BigBanger::generateX" << G4endl;
314
315 const G4int itry_max = 1000;
316 G4int itry = 0;
317 G4double x;
318
319 while(itry < itry_max) { /* Loop checking 08.06.2015 MHK */
320 itry++;
321 x = inuclRndm();
322
323 if(xProbability(x, a) >= promax * inuclRndm()) return x;
324 };
325 if (verboseLevel > 2) {
326 G4cout << " BigBanger -> can not generate x " << G4endl;
327 }
328
329 return maxProbability(a);
330}
G4double xProbability(G4double x, G4int a) const
Definition: G4BigBanger.cc:284

References G4cout, G4endl, G4InuclSpecialFunctions::inuclRndm(), maxProbability(), G4VCascadeCollider::verboseLevel, and xProbability().

Referenced by generateMomentumModules().

◆ getTargetData()

void G4CascadeDeexciteBase::getTargetData ( const G4Fragment target)
protectedinherited

Definition at line 66 of file G4CascadeDeexciteBase.cc.

66 {
67 A = target.GetA_asInt();
68 Z = target.GetZ_asInt();
69 PEX = target.GetMomentum()/GeV; // Convert from G4 to Bertini units
70 EEXS = target.GetExcitationEnergy();
71}
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:299
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:323
G4int GetZ_asInt() const
Definition: G4Fragment.hh:276
G4int GetA_asInt() const
Definition: G4Fragment.hh:271

References G4CascadeDeexciteBase::A, G4CascadeDeexciteBase::EEXS, G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4Fragment::GetMomentum(), G4Fragment::GetZ_asInt(), GeV, G4CascadeDeexciteBase::PEX, and G4CascadeDeexciteBase::Z.

Referenced by deExcite(), G4EquilibriumEvaporator::deExcite(), G4Fissioner::deExcite(), and G4NonEquilibriumEvaporator::deExcite().

◆ makeFragment() [1/2]

const G4Fragment & G4CascadeDeexciteBase::makeFragment ( G4int  A,
G4int  Z,
G4double  EX = 0. 
)
protectedinherited

Definition at line 81 of file G4CascadeDeexciteBase.cc.

81 {
82 return makeFragment(zero, fragA, fragZ, EX);
83}
const G4Fragment & makeFragment(G4LorentzVector mom, G4int A, G4int Z, G4double EX=0.)
static const G4LorentzVector zero(0., 0., 0., 0.)

References G4CascadeDeexciteBase::makeFragment(), and anonymous_namespace{G4CascadeDeexciteBase.cc}::zero.

◆ makeFragment() [2/2]

const G4Fragment & G4CascadeDeexciteBase::makeFragment ( G4LorentzVector  mom,
G4int  A,
G4int  Z,
G4double  EX = 0. 
)
protectedinherited

Definition at line 86 of file G4CascadeDeexciteBase.cc.

87 {
88 if (verboseLevel>2) {
89 G4cout << " >>> " << theName << "::makeFragment " << mom << " " << fragA
90 << " " << fragZ << " " << EX << G4endl;
91 }
92
93 // Adjust four-momentum so that mass is nucleus + excitation
94 G4double mass =
95 G4InuclNuclei::getNucleiMass(fragA,fragZ) + EX/GeV;
96 mom.setVectM(mom.vect(), mass);
97
98 // Overwrite previous fragment contents, zeroing out excitons
99 aFragment.SetZandA_asInt(fragZ, fragA);
100 aFragment.SetMomentum(mom*GeV); // Bertini uses GeV!
103
104 return aFragment;
105}
void setVectM(const Hep3Vector &spatial, double mass)
Hep3Vector vect() const
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
Definition: G4Fragment.hh:391
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:328
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
Definition: G4Fragment.hh:372
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:281
G4double getNucleiMass() const

References G4CascadeDeexciteBase::aFragment, G4cout, G4endl, G4InuclNuclei::getNucleiMass(), GeV, G4Fragment::SetMomentum(), G4Fragment::SetNumberOfExcitedParticle(), G4Fragment::SetNumberOfHoles(), CLHEP::HepLorentzVector::setVectM(), G4Fragment::SetZandA_asInt(), G4VCascadeCollider::theName, CLHEP::HepLorentzVector::vect(), and G4VCascadeCollider::verboseLevel.

Referenced by G4EquilibriumEvaporator::deExcite(), G4Fissioner::deExcite(), G4NonEquilibriumEvaporator::deExcite(), and G4CascadeDeexciteBase::makeFragment().

◆ maxProbability()

G4double G4BigBanger::maxProbability ( G4int  a) const
private

Definition at line 304 of file G4BigBanger.cc.

304 {
305 if (verboseLevel > 3) {
306 G4cout << " >>> G4BigBanger::maxProbability" << G4endl;
307 }
308
309 return xProbability(2./3./(a-1.0), a);
310}

References G4cout, G4endl, G4VCascadeCollider::verboseLevel, and xProbability().

Referenced by generateMomentumModules(), and generateX().

◆ operator=()

G4BigBanger & G4BigBanger::operator= ( const G4BigBanger )
private

◆ setName()

virtual void G4VCascadeCollider::setName ( const G4String name)
inlineprotectedvirtualinherited

Definition at line 55 of file G4VCascadeCollider.hh.

55{ theName = name; }
const char * name(G4int ptype)

References G4InuclParticleNames::name(), and G4VCascadeCollider::theName.

Referenced by G4CascadeCheckBalance::setOwner().

◆ setVerboseLevel()

void G4CascadeDeexciteBase::setVerboseLevel ( G4int  verbose = 0)
virtualinherited

◆ validateOutput() [1/3]

G4bool G4CascadeDeexciteBase::validateOutput ( const G4Fragment target,
const std::vector< G4InuclElementaryParticle > &  particles 
)
protectedvirtualinherited

Definition at line 142 of file G4CascadeDeexciteBase.cc.

143 {
144 if (!balance) return true; // Skip checks unless requested
145
146 if (verboseLevel > 1)
147 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
148
150 balance->collide(target, particles);
151 return balance->okay(); // Returns false if violations
152}
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)

References G4CascadeDeexciteBase::balance, G4CascadeCheckBalance::collide(), G4cout, G4endl, G4CascadeCheckBalance::okay(), G4VCascadeCollider::setVerboseLevel(), G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

◆ validateOutput() [2/3]

G4bool G4CascadeDeexciteBase::validateOutput ( const G4Fragment target,
const std::vector< G4InuclNuclei > &  fragments 
)
protectedvirtualinherited

Definition at line 154 of file G4CascadeDeexciteBase.cc.

155 {
156 if (!balance) return true; // Skip checks unless requested
157
158 if (verboseLevel > 1)
159 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
160
162 balance->collide(target, fragments);
163 return balance->okay(); // Returns false if violations
164}

References G4CascadeDeexciteBase::balance, G4CascadeCheckBalance::collide(), G4cout, G4endl, G4CascadeCheckBalance::okay(), G4VCascadeCollider::setVerboseLevel(), G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

◆ validateOutput() [3/3]

G4bool G4CascadeDeexciteBase::validateOutput ( const G4Fragment target,
G4CollisionOutput output 
)
protectedvirtualinherited

Definition at line 130 of file G4CascadeDeexciteBase.cc.

131 {
132 if (!balance) return true; // Skip checks unless requested
133
134 if (verboseLevel > 1)
135 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
136
138 balance->collide(target, output);
139 return balance->okay(); // Returns false if violations
140}

References G4CascadeDeexciteBase::balance, G4CascadeCheckBalance::collide(), G4cout, G4endl, G4CascadeCheckBalance::okay(), G4VCascadeCollider::setVerboseLevel(), G4VCascadeCollider::theName, and G4VCascadeCollider::verboseLevel.

Referenced by deExcite(), G4EquilibriumEvaporator::deExcite(), and G4NonEquilibriumEvaporator::deExcite().

◆ xProbability()

G4double G4BigBanger::xProbability ( G4double  x,
G4int  a 
) const
private

Definition at line 284 of file G4BigBanger.cc.

284 {
285 if (verboseLevel > 3) G4cout << " >>> G4BigBanger::xProbability" << G4endl;
286
287 G4Pow* theG4Pow = G4Pow::GetInstance(); // For convenience
288
289 G4double ekpr = 0.0;
290 if(x < 1.0 || x > 0.0) {
291 ekpr = x * x;
292
293 if (a%2 == 0) { // even A
294 ekpr *= std::sqrt(1.0 - x) * theG4Pow->powN((1.0 - x), (3*a-6)/2);
295 }
296 else {
297 ekpr *= theG4Pow->powN((1.0 - x), (3*a-5)/2);
298 };
299 };
300
301 return ekpr;
302}
Definition: G4Pow.hh:49
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:166

References G4cout, G4endl, G4Pow::GetInstance(), G4Pow::powN(), and G4VCascadeCollider::verboseLevel.

Referenced by generateX(), and maxProbability().

Field Documentation

◆ A

G4int G4CascadeDeexciteBase::A
protectedinherited

◆ aFragment

G4Fragment G4CascadeDeexciteBase::aFragment
protectedinherited

Definition at line 82 of file G4CascadeDeexciteBase.hh.

Referenced by G4CascadeDeexciteBase::makeFragment().

◆ balance

G4CascadeCheckBalance* G4CascadeDeexciteBase::balance
protectedinherited

◆ EEXS

G4double G4CascadeDeexciteBase::EEXS
protectedinherited

◆ momModules

std::vector<G4double> G4BigBanger::momModules
private

Definition at line 63 of file G4BigBanger.hh.

Referenced by generateBangInSCM(), and generateMomentumModules().

◆ particles

std::vector<G4InuclElementaryParticle> G4BigBanger::particles
private

Definition at line 62 of file G4BigBanger.hh.

Referenced by deExcite(), and generateBangInSCM().

◆ PEX

G4LorentzVector G4CascadeDeexciteBase::PEX
protectedinherited

◆ scm_momentums

std::vector<G4LorentzVector> G4BigBanger::scm_momentums
private

Definition at line 64 of file G4BigBanger.hh.

Referenced by generateBangInSCM().

◆ theName

G4String G4VCascadeCollider::theName
protectedinherited

◆ verboseLevel

G4int G4VCascadeCollider::verboseLevel
protectedinherited

Definition at line 53 of file G4VCascadeCollider.hh.

Referenced by G4CascadeCheckBalance::baryonOkay(), G4CascadeCheckBalance::chargeOkay(), G4IntraNucleiCascader::collide(), G4InuclCollider::collide(), G4LightTargetCollider::collide(), G4VCascadeDeexcitation::collide(), G4CascadeCheckBalance::collide(), G4CascadeRecoilMaker::collide(), G4ElementaryParticleCollider::collide(), G4IntraNucleiCascader::copySecondaries(), G4IntraNucleiCascader::copyWoundedNucleus(), G4IntraNucleiCascader::decayTrappedParticle(), G4CascadeDeexcitation::deExcite(), G4InuclCollider::deexcite(), G4PreCompoundDeexcitation::deExcite(), deExcite(), G4EquilibriumEvaporator::deExcite(), G4EvaporationInuclCollider::deExcite(), G4Fissioner::deExcite(), G4NonEquilibriumEvaporator::deExcite(), G4CascadeCheckBalance::ekinOkay(), G4CascadeCheckBalance::energyOkay(), G4EquilibriumEvaporator::explosion(), G4CascadeDeexciteBase::explosion(), G4CascadeRecoilMaker::fillRecoil(), G4IntraNucleiCascader::finalize(), G4IntraNucleiCascader::finishCascade(), G4VCascadeCollider::G4VCascadeCollider(), generateBangInSCM(), G4IntraNucleiCascader::generateCascade(), generateMomentumModules(), G4ElementaryParticleCollider::generateMultiplicity(), G4ElementaryParticleCollider::generateSCMfinalState(), G4ElementaryParticleCollider::generateSCMmuonAbsorption(), G4ElementaryParticleCollider::generateSCMpionAbsorption(), G4ElementaryParticleCollider::generateSCMpionNAbsorption(), generateX(), G4EquilibriumEvaporator::getAF(), G4Fissioner::getC2(), G4EquilibriumEvaporator::getE0(), G4NonEquilibriumEvaporator::getE0(), G4NonEquilibriumEvaporator::getMatrixElement(), G4NonEquilibriumEvaporator::getParLev(), G4EquilibriumEvaporator::getPARLEVDEN(), G4EquilibriumEvaporator::getQF(), G4Fissioner::getZopt(), G4CascadeRecoilMaker::goodNucleus(), G4EquilibriumEvaporator::goodRemnant(), G4CascadeColliderBase::inelasticInteractionPossible(), G4IntraNucleiCascader::initialize(), G4CascadeDeexciteBase::makeFragment(), G4CascadeRecoilMaker::makeRecoilFragment(), G4CascadeRecoilMaker::makeRecoilNuclei(), maxProbability(), G4CascadeCheckBalance::momentumOkay(), G4IntraNucleiCascader::newCascade(), G4InuclCollider::photonuclearOkay(), G4ElementaryParticleCollider::pionNucleonAbsorption(), G4Fissioner::potentialMinimization(), G4IntraNucleiCascader::preloadCascade(), G4IntraNucleiCascader::processSecondary(), G4IntraNucleiCascader::processTrappedParticle(), G4IntraNucleiCascader::releaseSecondary(), G4IntraNucleiCascader::rescatter(), G4InuclCollider::rescatter(), G4IntraNucleiCascader::setupCascade(), G4InuclCollider::setVerboseLevel(), G4LightTargetCollider::setVerboseLevel(), G4VCascadeCollider::setVerboseLevel(), G4CascadeCheckBalance::strangeOkay(), G4InuclCollider::useCascadeDeexcitation(), G4InuclCollider::usePreCompoundDeexcitation(), G4CascadeDeexciteBase::validateOutput(), G4CascadeColliderBase::validateOutput(), G4CascadeRecoilMaker::wholeEvent(), and xProbability().

◆ Z

G4int G4CascadeDeexciteBase::Z
protectedinherited

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