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

#include <G4CascadeRecoilMaker.hh>

Inheritance diagram for G4CascadeRecoilMaker:
G4VCascadeCollider

Public Member Functions

void addExcitonConfiguration (const G4ExitonConfiguration exciton)
 
void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
 
void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output, const std::vector< G4CascadParticle > &cparticles)
 
 G4CascadeRecoilMaker (G4double tolerance=0.001 *CLHEP::MeV)
 
G4int getRecoilA () const
 
G4double getRecoilExcitation () const
 
const G4LorentzVectorgetRecoilMomentum () const
 
G4int getRecoilZ () const
 
G4bool goodFragment () const
 
G4bool goodNucleus () const
 
G4bool goodRecoil () const
 
G4FragmentmakeRecoilFragment ()
 
G4InuclNucleimakeRecoilNuclei (G4InuclParticle::Model model=G4InuclParticle::DefaultModel)
 
void setRecoilExcitation (G4double Eexc)
 
void setTolerance (G4double tolerance)
 
virtual void setVerboseLevel (G4int verbose=0)
 
G4bool unphysicalRecoil () const
 
G4bool wholeEvent () const
 
virtual ~G4CascadeRecoilMaker ()
 

Protected Member Functions

G4double deltaM () const
 
void fillRecoil ()
 
virtual void setName (const G4String &name)
 

Protected Attributes

G4String theName
 
G4int verboseLevel
 

Private Member Functions

 G4CascadeRecoilMaker (const G4CascadeRecoilMaker &)
 
G4CascadeRecoilMakeroperator= (const G4CascadeRecoilMaker &)
 

Private Attributes

G4CascadeCheckBalancebalance
 
G4double excitationEnergy
 
G4double excTolerance
 
G4double inputEkin
 
G4int recoilA
 
G4LorentzVector recoilMomentum
 
G4int recoilZ
 
G4ExitonConfiguration theExcitons
 
G4Fragment theRecoilFragment
 
G4InuclNuclei theRecoilNuclei
 

Detailed Description

Definition at line 64 of file G4CascadeRecoilMaker.hh.

Constructor & Destructor Documentation

◆ G4CascadeRecoilMaker() [1/2]

G4CascadeRecoilMaker::G4CascadeRecoilMaker ( G4double  tolerance = 0.001*CLHEP::MeV)
explicit

Definition at line 66 of file G4CascadeRecoilMaker.cc.

67 : G4VCascadeCollider("G4CascadeRecoilMaker"),
68 excTolerance(tolerance), inputEkin(0.),
69 recoilA(0), recoilZ(0), excitationEnergy(0.) {
70 balance = new G4CascadeCheckBalance(tolerance, tolerance, theName);
71}
G4CascadeCheckBalance * balance
G4VCascadeCollider(const G4String &name, G4int verbose=0)

References balance, and G4VCascadeCollider::theName.

◆ ~G4CascadeRecoilMaker()

G4CascadeRecoilMaker::~G4CascadeRecoilMaker ( )
virtual

Definition at line 73 of file G4CascadeRecoilMaker.cc.

73 {
74 delete balance;
75}

References balance.

◆ G4CascadeRecoilMaker() [2/2]

G4CascadeRecoilMaker::G4CascadeRecoilMaker ( const G4CascadeRecoilMaker )
private

Member Function Documentation

◆ addExcitonConfiguration()

void G4CascadeRecoilMaker::addExcitonConfiguration ( const G4ExitonConfiguration  exciton)
inline

Definition at line 88 of file G4CascadeRecoilMaker.hh.

88 {
89 theExcitons = exciton;
90 }
G4ExitonConfiguration theExcitons

References theExcitons.

Referenced by G4IntraNucleiCascader::finishCascade().

◆ collide() [1/2]

void G4CascadeRecoilMaker::collide ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput output 
)
virtual

Implements G4VCascadeCollider.

Definition at line 80 of file G4CascadeRecoilMaker.cc.

82 {
83 if (verboseLevel > 1)
84 G4cout << " >>> G4CascadeRecoilMaker::collide" << G4endl;
85
86 // Available energy needed for "goodNucleus()" test at end
87 inputEkin = bullet ? bullet->getKineticEnergy() : 0.;
88
90 balance->collide(bullet, target, output);
91 fillRecoil();
92}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4double getKineticEnergy() const
virtual void setVerboseLevel(G4int verbose=0)

References balance, G4CascadeCheckBalance::collide(), fillRecoil(), G4cout, G4endl, G4InuclParticle::getKineticEnergy(), inputEkin, G4VCascadeCollider::setVerboseLevel(), and G4VCascadeCollider::verboseLevel.

Referenced by G4IntraNucleiCascader::finishCascade(), and G4IntraNucleiCascader::generateCascade().

◆ collide() [2/2]

void G4CascadeRecoilMaker::collide ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput output,
const std::vector< G4CascadParticle > &  cparticles 
)

Definition at line 96 of file G4CascadeRecoilMaker.cc.

99 {
100 if (verboseLevel > 1)
101 G4cout << " >>> G4CascadeRecoilMaker::collide(<EP>,<CP>)" << G4endl;
102
103 // Available energy needed for "goodNucleus()" test at end
104 inputEkin = bullet ? bullet->getKineticEnergy() : 0.;
105
107 balance->collide(bullet, target, output, cparticles);
108 fillRecoil();
109}

References balance, G4CascadeCheckBalance::collide(), fillRecoil(), G4cout, G4endl, G4InuclParticle::getKineticEnergy(), inputEkin, G4VCascadeCollider::setVerboseLevel(), and G4VCascadeCollider::verboseLevel.

◆ deltaM()

G4double G4CascadeRecoilMaker::deltaM ( ) const
protected

Definition at line 200 of file G4CascadeRecoilMaker.cc.

200 {
202 return (recoilMomentum.m() - nucMass);
203}
double G4double
Definition: G4Types.hh:83
G4LorentzVector recoilMomentum
G4double getNucleiMass() const

References G4InuclNuclei::getNucleiMass(), CLHEP::HepLorentzVector::m(), recoilA, recoilMomentum, and recoilZ.

Referenced by fillRecoil().

◆ fillRecoil()

void G4CascadeRecoilMaker::fillRecoil ( )
protected

Definition at line 115 of file G4CascadeRecoilMaker.cc.

115 {
116 recoilZ = -(balance->deltaQ()); // Charge "non-conservation"
117 recoilA = -(balance->deltaB()); // Baryon "non-conservation"
119
120 theExcitons.clear(); // Discard previous exciton configuraiton
121
122 // Bertini uses MeV for excitation energy
123 if (!goodFragment()) excitationEnergy = 0.;
124 else excitationEnergy = deltaM() * GeV;
125
126 // Allow for very small negative mass difference, and round to zero
127 if (std::abs(excitationEnergy) < excTolerance) excitationEnergy = 0.;
128
129 if (verboseLevel > 2) {
130 G4cout << " recoil px " << recoilMomentum.px()
131 << " py " << recoilMomentum.py() << " pz " << recoilMomentum.pz()
132 << " E " << recoilMomentum.e() << " baryon " << recoilA
133 << " charge " << recoilZ
134 << "\n recoil mass " << recoilMomentum.m()
135 << " 'excitation' energy " << excitationEnergy << G4endl;
136 }
137}
static constexpr double GeV
Definition: G4SIunits.hh:203
G4LorentzVector deltaLV() const

References balance, G4ExitonConfiguration::clear(), G4CascadeCheckBalance::deltaB(), G4CascadeCheckBalance::deltaLV(), deltaM(), G4CascadeCheckBalance::deltaQ(), CLHEP::HepLorentzVector::e(), excitationEnergy, excTolerance, G4cout, G4endl, GeV, goodFragment(), CLHEP::HepLorentzVector::m(), CLHEP::HepLorentzVector::px(), CLHEP::HepLorentzVector::py(), CLHEP::HepLorentzVector::pz(), recoilA, recoilMomentum, recoilZ, theExcitons, and G4VCascadeCollider::verboseLevel.

Referenced by collide().

◆ getRecoilA()

G4int G4CascadeRecoilMaker::getRecoilA ( ) const
inline

Definition at line 93 of file G4CascadeRecoilMaker.hh.

93{ return recoilA; }

References recoilA.

Referenced by G4IntraNucleiCascader::finishCascade(), and G4IntraNucleiCascader::generateCascade().

◆ getRecoilExcitation()

G4double G4CascadeRecoilMaker::getRecoilExcitation ( ) const
inline

Definition at line 95 of file G4CascadeRecoilMaker.hh.

95{ return excitationEnergy; }

References excitationEnergy.

Referenced by G4IntraNucleiCascader::finishCascade().

◆ getRecoilMomentum()

const G4LorentzVector & G4CascadeRecoilMaker::getRecoilMomentum ( ) const
inline

Definition at line 96 of file G4CascadeRecoilMaker.hh.

96{ return recoilMomentum; }

References recoilMomentum.

Referenced by G4IntraNucleiCascader::finishCascade().

◆ getRecoilZ()

G4int G4CascadeRecoilMaker::getRecoilZ ( ) const
inline

Definition at line 94 of file G4CascadeRecoilMaker.hh.

94{ return recoilZ; }

References recoilZ.

Referenced by G4IntraNucleiCascader::finishCascade().

◆ goodFragment()

G4bool G4CascadeRecoilMaker::goodFragment ( ) const

Definition at line 208 of file G4CascadeRecoilMaker.cc.

208 {
209 return (recoilA>0 && recoilZ>=0 && recoilA >= recoilZ);
210}

References recoilA, and recoilZ.

Referenced by fillRecoil(), G4IntraNucleiCascader::finishCascade(), goodNucleus(), and goodRecoil().

◆ goodNucleus()

G4bool G4CascadeRecoilMaker::goodNucleus ( ) const

Definition at line 234 of file G4CascadeRecoilMaker.cc.

234 {
235 if (verboseLevel > 2) {
236 G4cout << " >>> G4CascadeRecoilMaker::goodNucleus" << G4endl;
237 }
238
239 const G4double minExcitation = 0.1*keV;
240 const G4double reasonableExcitation = 7.0; // Multiple of binding energy
241 const G4double fractionalExcitation = 0.2; // Fraction of input to excite
242
243 if (!goodRecoil()) {
244 if (verboseLevel>2) {
245 if (!goodFragment()) G4cerr << " goodNucleus: invalid A/Z" << G4endl;
246 else if (excitationEnergy < -excTolerance)
247 G4cerr << " goodNucleus: negative excitation" << G4endl;
248 }
249 return false; // Not a sensible nucleus
250 }
251
252 if (excitationEnergy <= minExcitation) return true; // Effectively zero
253
254 // Maximum possible excitation energy determined by initial energy
256 G4double exc_max0z = fractionalExcitation * inputEkin*GeV;
257 G4double exc_dm = reasonableExcitation * dm;
258 G4double exc_max = (exc_max0z > exc_dm) ? exc_max0z : exc_dm;
259
260 if (verboseLevel > 3) {
261 G4cout << " eexs " << excitationEnergy << " max " << exc_max
262 << " dm " << dm << G4endl;
263 }
264
265 if (verboseLevel > 2 && excitationEnergy >= exc_max)
266 G4cerr << " goodNucleus: too much excitation" << G4endl;
267
268 return (excitationEnergy < exc_max); // Below maximum possible
269}
static constexpr double keV
Definition: G4SIunits.hh:202
G4GLOB_DLL std::ostream G4cerr
G4double bindingEnergy(G4int A, G4int Z)

References G4InuclSpecialFunctions::bindingEnergy(), excitationEnergy, excTolerance, G4cerr, G4cout, G4endl, GeV, goodFragment(), goodRecoil(), inputEkin, keV, recoilA, recoilZ, and G4VCascadeCollider::verboseLevel.

Referenced by G4IntraNucleiCascader::finishCascade().

◆ goodRecoil()

G4bool G4CascadeRecoilMaker::goodRecoil ( ) const

◆ makeRecoilFragment()

G4Fragment * G4CascadeRecoilMaker::makeRecoilFragment ( )

Definition at line 164 of file G4CascadeRecoilMaker.cc.

164 {
165 if (verboseLevel > 1)
166 G4cout << " >>> G4CascadeRecoilMaker::makeRecoilFragment" << G4endl;
167
168 if (!goodRecoil()) {
169 if (verboseLevel > 2 && !wholeEvent())
170 G4cout << theName << ": event recoil is not a physical nucleus" << G4endl;
171
172 return 0; // Null pointer means no fragment
173 }
174
175 theRecoilFragment.SetZandA_asInt(recoilZ, recoilA); // Note convention!
176
177 // User may have overridden excitation energy; force four-momentum to match
178 G4double fragMass =
180
181 G4LorentzVector fragMom; fragMom.setVectM(recoilMomentum.vect(), fragMass);
182 theRecoilFragment.SetMomentum(fragMom*GeV); // Bertini uses GeV!
183
184 // Note: exciton configuration has to be set piece by piece
185 // (arguments are Ntotal,Nproton in both cases)
188
193
194 return &theRecoilFragment;
195}
int G4int
Definition: G4Types.hh:85
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

References excitationEnergy, G4cout, G4endl, G4InuclNuclei::getNucleiMass(), GeV, goodRecoil(), G4ExitonConfiguration::neutronHoles, G4ExitonConfiguration::neutronQuasiParticles, G4ExitonConfiguration::protonHoles, G4ExitonConfiguration::protonQuasiParticles, recoilA, recoilMomentum, recoilZ, G4Fragment::SetMomentum(), G4Fragment::SetNumberOfExcitedParticle(), G4Fragment::SetNumberOfHoles(), CLHEP::HepLorentzVector::setVectM(), G4Fragment::SetZandA_asInt(), theExcitons, G4VCascadeCollider::theName, theRecoilFragment, CLHEP::HepLorentzVector::vect(), G4VCascadeCollider::verboseLevel, and wholeEvent().

Referenced by G4IntraNucleiCascader::finishCascade().

◆ makeRecoilNuclei()

G4InuclNuclei * G4CascadeRecoilMaker::makeRecoilNuclei ( G4InuclParticle::Model  model = G4InuclParticle::DefaultModel)

Definition at line 143 of file G4CascadeRecoilMaker.cc.

143 {
144 if (verboseLevel > 1)
145 G4cout << " >>> G4CascadeRecoilMaker::makeRecoilNuclei" << G4endl;
146
147 if (!goodRecoil()) {
148 if (verboseLevel > 2 && !wholeEvent())
149 G4cout << theName << ": event recoil is not a physical nucleus" << G4endl;
150
151 return 0; // Null pointer means no fragment
152 }
153
155 excitationEnergy, model);
157
158 return &theRecoilNuclei;
159}
void setExitonConfiguration(const G4ExitonConfiguration &config)
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)

References excitationEnergy, G4InuclNuclei::fill(), G4cout, G4endl, goodRecoil(), recoilA, recoilMomentum, recoilZ, G4InuclNuclei::setExitonConfiguration(), theExcitons, G4VCascadeCollider::theName, theRecoilNuclei, G4VCascadeCollider::verboseLevel, and wholeEvent().

◆ operator=()

G4CascadeRecoilMaker & G4CascadeRecoilMaker::operator= ( const G4CascadeRecoilMaker )
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().

◆ setRecoilExcitation()

void G4CascadeRecoilMaker::setRecoilExcitation ( G4double  Eexc)
inline

Definition at line 81 of file G4CascadeRecoilMaker.hh.

81{ excitationEnergy = Eexc; }

References excitationEnergy.

Referenced by G4IntraNucleiCascader::finishCascade().

◆ setTolerance()

void G4CascadeRecoilMaker::setTolerance ( G4double  tolerance)
inline

Definition at line 79 of file G4CascadeRecoilMaker.hh.

79{ excTolerance = tolerance; }

References excTolerance.

Referenced by G4IntraNucleiCascader::initialize().

◆ setVerboseLevel()

virtual void G4VCascadeCollider::setVerboseLevel ( G4int  verbose = 0)
inlinevirtualinherited

◆ unphysicalRecoil()

G4bool G4CascadeRecoilMaker::unphysicalRecoil ( ) const
inline

Definition at line 102 of file G4CascadeRecoilMaker.hh.

102{ return !wholeEvent() && !goodRecoil(); }

References goodRecoil(), and wholeEvent().

◆ wholeEvent()

G4bool G4CascadeRecoilMaker::wholeEvent ( ) const

Definition at line 216 of file G4CascadeRecoilMaker.cc.

216 {
217 if (verboseLevel > 2) {
218 G4cout << " >>> G4CascadeRecoilMaker::wholeEvent:"
219 << " A " << recoilA << " Z " << recoilZ
220 << " P " << recoilMomentum.rho() << " E " << recoilMomentum.e()
221 << "\n wholeEvent returns "
222 << (recoilA==0 && recoilZ==0 &&
224 std::abs(recoilMomentum.e()) < excTolerance/GeV) << G4endl;
225 }
226
227 return (recoilA==0 && recoilZ==0 &&
229 std::abs(recoilMomentum.e()) < excTolerance/GeV);
230}

References CLHEP::HepLorentzVector::e(), excTolerance, G4cout, G4endl, GeV, recoilA, recoilMomentum, recoilZ, CLHEP::HepLorentzVector::rho(), and G4VCascadeCollider::verboseLevel.

Referenced by G4IntraNucleiCascader::finishCascade(), makeRecoilFragment(), makeRecoilNuclei(), and unphysicalRecoil().

Field Documentation

◆ balance

G4CascadeCheckBalance* G4CascadeRecoilMaker::balance
private

◆ excitationEnergy

G4double G4CascadeRecoilMaker::excitationEnergy
private

◆ excTolerance

G4double G4CascadeRecoilMaker::excTolerance
private

◆ inputEkin

G4double G4CascadeRecoilMaker::inputEkin
private

Definition at line 115 of file G4CascadeRecoilMaker.hh.

Referenced by collide(), and goodNucleus().

◆ recoilA

G4int G4CascadeRecoilMaker::recoilA
private

◆ recoilMomentum

G4LorentzVector G4CascadeRecoilMaker::recoilMomentum
private

◆ recoilZ

G4int G4CascadeRecoilMaker::recoilZ
private

◆ theExcitons

G4ExitonConfiguration G4CascadeRecoilMaker::theExcitons
private

◆ theName

G4String G4VCascadeCollider::theName
protectedinherited

◆ theRecoilFragment

G4Fragment G4CascadeRecoilMaker::theRecoilFragment
private

Definition at line 125 of file G4CascadeRecoilMaker.hh.

Referenced by makeRecoilFragment().

◆ theRecoilNuclei

G4InuclNuclei G4CascadeRecoilMaker::theRecoilNuclei
private

Definition at line 124 of file G4CascadeRecoilMaker.hh.

Referenced by makeRecoilNuclei().

◆ 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(), collide(), G4ElementaryParticleCollider::collide(), G4IntraNucleiCascader::copySecondaries(), G4IntraNucleiCascader::copyWoundedNucleus(), G4IntraNucleiCascader::decayTrappedParticle(), G4CascadeDeexcitation::deExcite(), G4InuclCollider::deexcite(), G4PreCompoundDeexcitation::deExcite(), G4BigBanger::deExcite(), G4EquilibriumEvaporator::deExcite(), G4EvaporationInuclCollider::deExcite(), G4Fissioner::deExcite(), G4NonEquilibriumEvaporator::deExcite(), G4CascadeCheckBalance::ekinOkay(), G4CascadeCheckBalance::energyOkay(), G4EquilibriumEvaporator::explosion(), G4CascadeDeexciteBase::explosion(), fillRecoil(), G4IntraNucleiCascader::finalize(), G4IntraNucleiCascader::finishCascade(), G4VCascadeCollider::G4VCascadeCollider(), G4BigBanger::generateBangInSCM(), G4IntraNucleiCascader::generateCascade(), G4BigBanger::generateMomentumModules(), G4ElementaryParticleCollider::generateMultiplicity(), G4ElementaryParticleCollider::generateSCMfinalState(), G4ElementaryParticleCollider::generateSCMmuonAbsorption(), G4ElementaryParticleCollider::generateSCMpionAbsorption(), G4ElementaryParticleCollider::generateSCMpionNAbsorption(), G4BigBanger::generateX(), G4EquilibriumEvaporator::getAF(), G4Fissioner::getC2(), G4EquilibriumEvaporator::getE0(), G4NonEquilibriumEvaporator::getE0(), G4NonEquilibriumEvaporator::getMatrixElement(), G4NonEquilibriumEvaporator::getParLev(), G4EquilibriumEvaporator::getPARLEVDEN(), G4EquilibriumEvaporator::getQF(), G4Fissioner::getZopt(), goodNucleus(), G4EquilibriumEvaporator::goodRemnant(), G4CascadeColliderBase::inelasticInteractionPossible(), G4IntraNucleiCascader::initialize(), G4CascadeDeexciteBase::makeFragment(), makeRecoilFragment(), makeRecoilNuclei(), G4BigBanger::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(), wholeEvent(), and G4BigBanger::xProbability().


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