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 G4LorentzVector & getRecoilMomentum () const
 
G4int getRecoilZ () const
 
G4bool goodFragment () const
 
G4bool goodNucleus () const
 
G4bool goodRecoil () const
 
G4Fragment * makeRecoilFragment ()
 
G4InuclNuclei * makeRecoilNuclei (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 &)
 
G4CascadeRecoilMaker & operator= (const G4CascadeRecoilMaker &)
 

Private Attributes

G4CascadeCheckBalance * balance
 
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: