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

#include <G4LightTargetCollider.hh>

Inheritance diagram for G4LightTargetCollider:
G4CascadeColliderBase G4VCascadeCollider

Public Member Functions

void collide (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
 
 G4LightTargetCollider ()
 
virtual void rescatter (G4InuclParticle *, G4KineticTrackVector *, G4V3DNucleus *, G4CollisionOutput &)
 
void setVerboseLevel (G4int verbose=0)
 
virtual ~G4LightTargetCollider ()
 

Protected Member Functions

virtual G4bool inelasticInteractionPossible (G4InuclParticle *bullet, G4InuclParticle *target, G4double ekin) const
 
virtual void setName (const G4String &name)
 
virtual G4bool useEPCollider (G4InuclParticle *bullet, G4InuclParticle *target) const
 
virtual G4bool validateOutput (const G4Fragment &fragment, G4CollisionOutput &output)
 
virtual G4bool validateOutput (G4InuclParticle *bullet, G4InuclParticle *target, const std::vector< G4InuclElementaryParticle > &particles)
 
virtual G4bool validateOutput (G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
 

Protected Attributes

G4CascadeCheckBalancebalance
 
G4InteractionCase interCase
 
G4String theName
 
G4int verboseLevel
 

Private Member Functions

NucleonPair AbsorptionOnDeuteron (G4InuclParticle *bullet)
 
 G4LightTargetCollider (const G4LightTargetCollider &)
 
G4double GammaDCrossSection (G4double)
 
G4LightTargetCollideroperator= (const G4LightTargetCollider &)
 
ScatteringProducts SingleNucleonScattering (const G4InuclElementaryParticle &projectile, const G4InuclElementaryParticle &targetNucleon)
 

Private Attributes

G4CascadeFinalStateGenerator fsGen
 
G4double mD
 
G4double mN
 
G4double mP
 
G4CollisionOutput output
 
G4double pFermiD
 
G4ElementaryParticleCollidertheElementaryParticleCollider
 

Detailed Description

Definition at line 52 of file G4LightTargetCollider.hh.

Constructor & Destructor Documentation

◆ G4LightTargetCollider() [1/2]

G4LightTargetCollider::G4LightTargetCollider ( )

Definition at line 55 of file G4LightTargetCollider.cc.

56 : G4CascadeColliderBase("G4LightTargetCollider"),
58{
62 pFermiD = 0.045; // Fermi momentum of nucleon in deuteron Hulthen potential
63}
G4CascadeColliderBase(const G4String &name, G4int verbose=0)
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:93
G4ElementaryParticleCollider * theElementaryParticleCollider
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
static G4Proton * Proton()
Definition: G4Proton.cc:92
static constexpr double GeV

References G4Deuteron::Deuteron(), G4ParticleDefinition::GetPDGMass(), CLHEP::GeV, mD, mN, mP, G4Neutron::Neutron(), pFermiD, and G4Proton::Proton().

◆ ~G4LightTargetCollider()

G4LightTargetCollider::~G4LightTargetCollider ( )
virtual

Definition at line 65 of file G4LightTargetCollider.cc.

65 {
67}

References theElementaryParticleCollider.

◆ G4LightTargetCollider() [2/2]

G4LightTargetCollider::G4LightTargetCollider ( const G4LightTargetCollider )
private

Member Function Documentation

◆ AbsorptionOnDeuteron()

NucleonPair G4LightTargetCollider::AbsorptionOnDeuteron ( G4InuclParticle bullet)
private

Definition at line 241 of file G4LightTargetCollider.cc.

242{
243 // Do break-up in center of mass, convert to lab frame before returning
244 // particles
245
246 G4double bulletMass = bullet->getMass();
247 G4double bulletE = bullet->getEnergy();
248
249 G4double S = bulletMass*bulletMass + mD*mD + 2.*mD*bulletE;
250
251 G4double qcm = 0.;
252 G4int outType1 = 0;
253 G4int outType2 = 0;
254 G4LorentzVector Mom1;
255 G4LorentzVector Mom2;
256
257 // Set up outgoing particle types
258 if (bullet->getDefinition() == G4Gamma::Gamma() ||
259 bullet->getDefinition() == G4PionZero::PionZero() ) {
260 qcm = std::sqrt( (S - (mP + mN)*(mP + mN)) * (S - (mP - mN)*(mP - mN))/S/4.);
261 Mom1.setE(std::sqrt(mP*mP + qcm*qcm) );
263 Mom2.setE(std::sqrt(mN*mN + qcm*qcm) );
265
266 } else if (bullet->getDefinition() == G4PionPlus::PionPlus() ) {
267 qcm = std::sqrt( (S - 4.*mP*mP)/4.);
268 Mom1.setE(std::sqrt(mP*mP + qcm*qcm) );
270 Mom2.setE(std::sqrt(mP*mP + qcm*qcm) );
272
273 } else if (bullet->getDefinition() == G4PionMinus::PionMinus() ) {
274 qcm = std::sqrt( (S - 4.*mN*mN)/4.);
275 Mom1.setE(std::sqrt(mN*mN + qcm*qcm) );
277 Mom2.setE(std::sqrt(mN*mN + qcm*qcm) );
279
280 } else {
281 G4Exception("G4LightTargetCollider::collide()","HAD_BERT_204",
282 FatalException, "Illegal bullet type");
283 }
284
285 // Sample angular distribution, assuming 100% S wave (no D-wave)
286 G4ThreeVector qVect = qcm*G4RandomDirection();
287 Mom1.setVect(qVect);
288 Mom2.setVect(-qVect);
289
290 // Boost to lab frame
291 G4ThreeVector betacm(0., 0., bullet->getMomModule()/(bulletE + mD) );
292 Mom1.boost(betacm);
293 Mom2.boost(betacm);
294
295 G4InuclElementaryParticle particle1(Mom1, outType1);
296 G4InuclElementaryParticle particle2(Mom2, outType2);
297 NucleonPair nucleon_pair(particle1, particle2);
298
299 // if pion, use parameterization of B.G. Ritchie, PRC 44, 533 (1991)
300 // Total cross section: 1/E + Lorentzian
301
302 return nucleon_pair;
303}
G4double S(G4double temp)
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::pair< G4InuclElementaryParticle, G4InuclElementaryParticle > NucleonPair
G4ThreeVector G4RandomDirection()
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
HepLorentzVector & boost(double, double, double)
void setVect(const Hep3Vector &)
static G4Gamma * Gamma()
Definition: G4Gamma.cc:85
const G4ParticleDefinition * getDefinition() const
G4double getMass() const
G4double getMomModule() const
G4double getEnergy() const
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:97
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:97
static G4PionZero * PionZero()
Definition: G4PionZero.cc:107

References CLHEP::HepLorentzVector::boost(), FatalException, G4Exception(), G4RandomDirection(), G4Gamma::Gamma(), G4InuclParticle::getDefinition(), G4InuclParticle::getEnergy(), G4InuclParticle::getMass(), G4InuclParticle::getMomModule(), mD, mN, mP, G4InuclParticleNames::neutron, G4PionMinus::PionMinus(), G4PionPlus::PionPlus(), G4PionZero::PionZero(), G4InuclParticleNames::proton, S(), CLHEP::HepLorentzVector::setE(), and CLHEP::HepLorentzVector::setVect().

Referenced by collide().

◆ collide()

void G4LightTargetCollider::collide ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput globalOutput 
)
virtual

Implements G4VCascadeCollider.

Definition at line 78 of file G4LightTargetCollider.cc.

81{
82 if (verboseLevel) {
83 G4cout << " >>> G4LightTargetCollider::collide" << G4endl;
84 G4cout << " Projectile: " << bullet->getDefinition()->GetParticleName() << G4endl;
85 G4cout << " Target: " << target->getDefinition()->GetParticleName() << G4endl;
86 }
87
88 G4double ke = bullet->getKineticEnergy();
89
90 if (target->getDefinition() == G4Proton::Proton() ) {
91 if (ke < 0.1447) {
92 // Below threshold lab energy for pi0 creation
93 globalOutput.trivialise(bullet, target);
94 } else {
95 // Need inelastic cross section in this class if we want to replace ElementaryParticleCollider
96 // with SingleNucleonScattering
97 theElementaryParticleCollider->collide(bullet, target, globalOutput);
98 if (globalOutput.numberOfOutgoingParticles() == 0) globalOutput.trivialise(bullet, target);
99 }
100
101 } else if (target->getDefinition() == G4Deuteron::Deuteron() ) {
102
103 if (ke < mP + mN - mD) {
104 // Should not happen as long as inelastic cross section is zero
105 G4Exception("G4LightTargetCollider::collide()","HAD_BERT_201",
106 JustWarning, "Projectile energy below reaction threshold");
107 globalOutput.trivialise(bullet, target);
108
109 } else {
110 // Get p, n and deuteron cross sections; use lab energy to access
113 G4double gammaDXS = GammaDCrossSection(ke);
114
115 G4double probP = 0.0;
116 G4double probN = 0.0;
117 // Highest threshold is 0.152 (for gamma p -> n pi+)
118 // Because of Fermi momentum in deuteron, raise this to 0.159
119 if (ke > 0.159) {
120 G4double totalDXS = gammaPXS + gammaNXS + gammaDXS;
121 probP = gammaPXS/totalDXS;
122 probN = (gammaPXS+gammaNXS)/totalDXS;
123 }
124
125 G4double rndm = G4UniformRand();
126 if (rndm < probP) {
127 // Generate Fermi momenta of bullet and target
128 G4ThreeVector fermiMomentum = pFermiD*G4RandomDirection();
129 G4LorentzVector protonMomentum(fermiMomentum, std::sqrt(mP*mP + pFermiD*pFermiD) );
130 G4LorentzVector neutronMomentum(-fermiMomentum, std::sqrt(mN*mN + pFermiD*pFermiD) );
131
132 G4LorentzVector bulletMomentum = bullet->getMomentum();
133 G4ThreeVector betacm = bulletMomentum.findBoostToCM(protonMomentum);
134
135 // First boost bullet and target so that target is at rest
136 G4ThreeVector toProtonRest = -protonMomentum.boostVector();
137 protonMomentum.boost(toProtonRest);
138 bulletMomentum.boost(toProtonRest);
139
140 G4InuclElementaryParticle projectile(bulletMomentum, bullet->getDefinition() );
141 G4InuclElementaryParticle targetNucleon(protonMomentum, G4Proton::Proton() );
142 G4InuclElementaryParticle spectatorNucleon(neutronMomentum, G4Neutron::Neutron() );
143 ScatteringProducts products = SingleNucleonScattering(projectile, targetNucleon);
144
145 // Particles from SingleNucleonScattering are in CM frame of projectile
146 // and moving proton. Transform back to lab frame with -betacm, then
147 // add them to outgoing list.
148 globalOutput.reset();
149 G4LorentzVector temp;
150 for (G4int i = 0; i < G4int(products.size()); i++) {
151 temp = products[i].getMomentum();
152 temp.boost(-betacm);
153 products[i].setMomentum(temp);
154 globalOutput.addOutgoingParticle(products[i]);
155 }
156
157 // Add the recoil nucleon unmodified
158 globalOutput.addOutgoingParticle(spectatorNucleon);
159
160 } else if (rndm < probN) {
161 G4ThreeVector fermiMomentum = pFermiD*G4RandomDirection();
162 G4LorentzVector protonMomentum(fermiMomentum, std::sqrt(mP*mP + pFermiD*pFermiD) );
163 G4LorentzVector neutronMomentum(-fermiMomentum, std::sqrt(mN*mN + pFermiD*pFermiD) );
164
165 G4LorentzVector bulletMomentum = bullet->getMomentum();
166 G4ThreeVector betacm = bulletMomentum.findBoostToCM(neutronMomentum);
167
168 // First boost bullet and target so that target is at rest
169 G4ThreeVector toNeutronRest = -neutronMomentum.boostVector();
170 neutronMomentum.boost(toNeutronRest);
171 bulletMomentum.boost(toNeutronRest);
172
173 G4InuclElementaryParticle projectile(bulletMomentum, bullet->getDefinition() );
174 G4InuclElementaryParticle targetNucleon(neutronMomentum, G4Neutron::Neutron() );
175 G4InuclElementaryParticle spectatorNucleon(protonMomentum, G4Proton::Proton() );
176
177 ScatteringProducts products = SingleNucleonScattering(projectile, targetNucleon);
178
179 // Particles from SingleNucleonScattering are in CM frame of projectile
180 // and moving neutron. Transform back to lab frame with -betacm, then add
181 // them to outgoing list
182 globalOutput.reset();
183 G4LorentzVector temp;
184 for (G4int i = 0; i < G4int(products.size()); i++) {
185 temp = products[i].getMomentum();
186 temp.boost(-betacm);
187 products[i].setMomentum(temp);
188 globalOutput.addOutgoingParticle(products[i]);
189 }
190
191 // Add the recoil nucleon unmodified
192 globalOutput.addOutgoingParticle(spectatorNucleon);
193
194 } else {
195 NucleonPair products = AbsorptionOnDeuteron(bullet);
196 globalOutput.reset();
197 globalOutput.addOutgoingParticle(products.first);
198 globalOutput.addOutgoingParticle(products.second);
199 }
200 } // Energy above threshold ?
201
202 // Test code
203 // G4int numPart = globalOutput.numberOfOutgoingParticles();
204 // std::vector<G4InuclElementaryParticle> testList = globalOutput.getOutgoingParticles();
205 // G4LorentzVector sumP;
206 // G4cout << " Global output " << G4endl;
207 // for (G4int i = 0; i < numPart; i++) {
208 // sumP += testList[i].getMomentum();
209 // G4cout << testList[i] << G4endl;
210 // }
211 // G4cout << " Global 4-momentum sum = " << sumP << G4endl;
212 // G4cout << " Initial lab energy = " << mD + bullet->getEnergy() << G4endl;
213
214 } else {
215 G4Exception("G4LightTargetCollider::collide()","HAD_BERT_203",
216 FatalException, "Scattering from this target not implemented");
217 }
218
219 return;
220}
@ JustWarning
std::vector< G4InuclElementaryParticle > ScatteringProducts
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
Hep3Vector findBoostToCM() const
static const G4CascadeChannel * GetTable(G4int initialState)
virtual G4double getCrossSection(double ke) const =0
G4int numberOfOutgoingParticles() const
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
void trivialise(G4InuclParticle *bullet, G4InuclParticle *target)
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4double getKineticEnergy() const
G4LorentzVector getMomentum() const
G4double GammaDCrossSection(G4double)
NucleonPair AbsorptionOnDeuteron(G4InuclParticle *bullet)
ScatteringProducts SingleNucleonScattering(const G4InuclElementaryParticle &projectile, const G4InuclElementaryParticle &targetNucleon)
const G4String & GetParticleName() const

References AbsorptionOnDeuteron(), G4CollisionOutput::addOutgoingParticle(), CLHEP::HepLorentzVector::boost(), CLHEP::HepLorentzVector::boostVector(), G4ElementaryParticleCollider::collide(), G4Deuteron::Deuteron(), FatalException, CLHEP::HepLorentzVector::findBoostToCM(), G4cout, G4endl, G4Exception(), G4RandomDirection(), G4UniformRand, GammaDCrossSection(), G4CascadeChannel::getCrossSection(), G4InuclParticle::getDefinition(), G4InuclParticle::getKineticEnergy(), G4InuclParticle::getMomentum(), G4ParticleDefinition::GetParticleName(), G4CascadeChannelTables::GetTable(), JustWarning, mD, mN, mP, G4Neutron::Neutron(), G4CollisionOutput::numberOfOutgoingParticles(), pFermiD, G4Proton::Proton(), G4CollisionOutput::reset(), SingleNucleonScattering(), theElementaryParticleCollider, G4CollisionOutput::trivialise(), and G4VCascadeCollider::verboseLevel.

Referenced by G4CascadeInterface::ApplyYourself().

◆ GammaDCrossSection()

G4double G4LightTargetCollider::GammaDCrossSection ( G4double  gammaEnergy)
private

Definition at line 223 of file G4LightTargetCollider.cc.

224{
225 // Gamma deuteron cross section in mb parameterized from JLab data
226 // No parameterization needed below pi0 threshold where cross section
227 // is 100% disintegration
228 G4double sigma = 1000.0;
229 G4double term = 0.;
230 if (gammaEnergy > 0.144 && gammaEnergy < 0.42) {
231 term = (gammaEnergy - 0.24)/0.155;
232 sigma = 0.065*std::exp(-term*term);
233 } else if (gammaEnergy >= 0.42) {
234 sigma = 0.000526/gammaEnergy/gammaEnergy/gammaEnergy/gammaEnergy;
235 }
236
237 return sigma;
238}

Referenced by collide().

◆ inelasticInteractionPossible()

G4bool G4CascadeColliderBase::inelasticInteractionPossible ( G4InuclParticle bullet,
G4InuclParticle target,
G4double  ekin 
) const
protectedvirtualinherited

Definition at line 85 of file G4CascadeColliderBase.cc.

87 {
88 if (verboseLevel) {
89 G4cout << " >>> " << theName << "::inelasticInteractionPossible" << G4endl;
90 }
91
92 // If hadron-hadron collision, defer to ElementaryParticleCollider
93 if (useEPCollider(bullet, target)) return true;
94
95 // See which one of the two (or both) is a nucleus, get properties
96 // FIXME: Should set a = baryon() for both, but that's not in base
97 G4InuclNuclei* nuclei_bullet = dynamic_cast<G4InuclNuclei*>(bullet);
98 G4double ab = nuclei_bullet ? nuclei_bullet->getA() : 1; // FIXME
99 G4double zb = nuclei_bullet ? nuclei_bullet->getZ() : bullet->getCharge();
100
101 G4InuclNuclei* nuclei_target = dynamic_cast<G4InuclNuclei*>(target);
102 G4double at = nuclei_target ? nuclei_target->getA() : 1; // FIXME
103 G4double zt = nuclei_target ? nuclei_target->getZ() : target->getCharge();
104
105 // VCOL (Coulomb barrier) used for testing if elastic collision necessary
106 const G4double coeff = 0.001 * 1.2;
107
108 G4double VCOL = coeff * zt * zb / (G4cbrt(at) + G4cbrt(ab));
109
110 G4bool possible = true; // Force inelastic; should be (ekin >= VCOL)
111
112 if (verboseLevel > 3) {
113 G4cout << " VCOL: " << VCOL << " ekin: " << ekin << " inelastic possible: "
114 << possible << G4endl;
115 }
116
117 return possible;
118}
static const G4double ab
bool G4bool
Definition: G4Types.hh:86
virtual G4bool useEPCollider(G4InuclParticle *bullet, G4InuclParticle *target) const
G4int getZ() const
G4int getA() const
G4double getCharge() const

References ab, G4InuclSpecialFunctions::G4cbrt(), G4cout, G4endl, G4InuclNuclei::getA(), G4InuclParticle::getCharge(), G4InuclNuclei::getZ(), G4VCascadeCollider::theName, G4CascadeColliderBase::useEPCollider(), and G4VCascadeCollider::verboseLevel.

Referenced by G4InuclCollider::collide().

◆ operator=()

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

◆ rescatter()

virtual void G4CascadeColliderBase::rescatter ( G4InuclParticle ,
G4KineticTrackVector ,
G4V3DNucleus ,
G4CollisionOutput  
)
inlinevirtualinherited

Reimplemented in G4IntraNucleiCascader, and G4InuclCollider.

Definition at line 68 of file G4CascadeColliderBase.hh.

71 { ; }

◆ 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 G4LightTargetCollider::setVerboseLevel ( G4int  verbose = 0)
virtual

◆ SingleNucleonScattering()

ScatteringProducts G4LightTargetCollider::SingleNucleonScattering ( const G4InuclElementaryParticle projectile,
const G4InuclElementaryParticle targetNucleon 
)
private

Definition at line 307 of file G4LightTargetCollider.cc.

309{
310 // At this point projectile and nucleon momenta are in nucleon rest frame
311 G4int reactionIndex = G4InuclElementaryParticle::type(projectile.getDefinition() )
312 * G4InuclElementaryParticle::type(nucleon.getDefinition() );
313
314 const G4CascadeChannel* xsecTable = G4CascadeChannelTables::GetTable(reactionIndex);
315 G4double ke = projectile.getKineticEnergy();
316 G4int mult = xsecTable->getMultiplicity(ke);
317
318 std::vector<G4double> masses;
319 G4double mass = 0.0;
320 G4LorentzVector totalMom = projectile.getMomentum() + nucleon.getMomentum();
321 G4double Ecm = totalMom.mag();
322
323 std::vector<G4LorentzVector> cmMomenta;
324 std::vector<G4int> particle_kinds;
325 G4int itry = 0;
326 G4int itry_max = 200;
327 G4bool generate = true;
328
329 while (mult > 1) {
330 itry = 0;
331 generate = true;
332 while (generate && itry < itry_max) {
333 particle_kinds.clear();
334 xsecTable->getOutgoingParticleTypes(particle_kinds, mult, ke);
335 masses.clear();
336 for (G4int i = 0; i < mult; i++) {
337 mass = G4InuclElementaryParticle::getParticleMass(particle_kinds[i]);
338 masses.push_back(mass);
339 }
340
341 fsGen.Configure(const_cast<G4InuclElementaryParticle*>(&projectile),
342 const_cast<G4InuclElementaryParticle*>(&nucleon),
343 particle_kinds);
344 // Generate final state in CM of projectile and at-rest nucleon
345 cmMomenta.clear();
346 generate = !fsGen.Generate(Ecm, masses, cmMomenta);
347 itry++;
348 } // while
349
350 if (itry == itry_max) mult--;
351 else break;
352
353 } // while mult
354
355 ScatteringProducts finalState;
356 if (mult < 2) {
357 G4Exception("G4LightTargetCollider::SingleNucleonScattering()","HAD_BERT_202",
358 JustWarning, "Failed to generate final state");
359 // Final state particles not in CM - just using them as dummies
360 finalState.push_back(projectile);
361 finalState.push_back(nucleon);
362
363 } else {
364 for (G4int i = 0; i < mult; i++) {
365 G4InuclElementaryParticle fsPart(cmMomenta[i], particle_kinds[i]);
366 finalState.push_back(fsPart);
367 }
368 }
369
370 return finalState;
371}
virtual G4int getMultiplicity(G4double ke) const =0
virtual void getOutgoingParticleTypes(std::vector< G4int > &kinds, G4int mult, G4double ke) const =0
void Configure(G4InuclElementaryParticle *bullet, G4InuclElementaryParticle *target, const std::vector< G4int > &particle_kinds)
G4bool Generate(G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)
static G4double getParticleMass(G4int type)
G4CascadeFinalStateGenerator fsGen
void generate(const G4double sqrtS, ParticleList &particles)
Generate an event in the CM system.
G4bool nucleon(G4int ityp)

References G4CascadeFinalStateGenerator::Configure(), fsGen, G4Exception(), G4INCL::PhaseSpaceGenerator::generate(), G4HadDecayGenerator::Generate(), G4InuclParticle::getDefinition(), G4InuclParticle::getKineticEnergy(), G4InuclParticle::getMomentum(), G4CascadeChannel::getMultiplicity(), G4CascadeChannel::getOutgoingParticleTypes(), G4InuclElementaryParticle::getParticleMass(), G4CascadeChannelTables::GetTable(), JustWarning, CLHEP::HepLorentzVector::mag(), G4InuclParticleNames::nucleon(), and G4InuclElementaryParticle::type().

Referenced by collide().

◆ useEPCollider()

G4bool G4CascadeColliderBase::useEPCollider ( G4InuclParticle bullet,
G4InuclParticle target 
) const
protectedvirtualinherited

Definition at line 75 of file G4CascadeColliderBase.cc.

76 {
77 return (dynamic_cast<G4InuclElementaryParticle*>(bullet) &&
78 dynamic_cast<G4InuclElementaryParticle*>(target));
79}

Referenced by G4InuclCollider::collide(), G4ElementaryParticleCollider::collide(), and G4CascadeColliderBase::inelasticInteractionPossible().

◆ validateOutput() [1/3]

G4bool G4CascadeColliderBase::validateOutput ( const G4Fragment fragment,
G4CollisionOutput output 
)
protectedvirtualinherited

Definition at line 139 of file G4CascadeColliderBase.cc.

140 {
141 if (!balance) return true; // Skip checks unless requested
142
143 if (verboseLevel > 1)
144 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
145
147 balance->collide(fragment, output);
148 return balance->okay(); // Returns false if violations
149}
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4CascadeCheckBalance * balance
virtual void setVerboseLevel(G4int verbose=0)

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

◆ validateOutput() [2/3]

G4bool G4CascadeColliderBase::validateOutput ( G4InuclParticle bullet,
G4InuclParticle target,
const std::vector< G4InuclElementaryParticle > &  particles 
)
protectedvirtualinherited

Definition at line 151 of file G4CascadeColliderBase.cc.

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

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

◆ validateOutput() [3/3]

G4bool G4CascadeColliderBase::validateOutput ( G4InuclParticle bullet,
G4InuclParticle target,
G4CollisionOutput output 
)
protectedvirtualinherited

Definition at line 123 of file G4CascadeColliderBase.cc.

125 {
126 if (!balance) return true; // Skip checks unless requested
127
128 if (verboseLevel > 1)
129 G4cout << " >>> " << theName << "::validateOutput" << G4endl;
130
131 // Show final state particles
132 if (verboseLevel > 2) output.printCollisionOutput();
133
135 balance->collide(bullet, target, output);
136 return balance->okay(); // Returns false if violations
137}
void printCollisionOutput(std::ostream &os=G4cout) const

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

Referenced by G4ElementaryParticleCollider::collide(), and G4InuclCollider::deexcite().

Field Documentation

◆ balance

G4CascadeCheckBalance* G4CascadeColliderBase::balance
protectedinherited

◆ fsGen

G4CascadeFinalStateGenerator G4LightTargetCollider::fsGen
private

Definition at line 74 of file G4LightTargetCollider.hh.

Referenced by SingleNucleonScattering().

◆ interCase

G4InteractionCase G4CascadeColliderBase::interCase
protectedinherited

◆ mD

G4double G4LightTargetCollider::mD
private

Definition at line 83 of file G4LightTargetCollider.hh.

Referenced by AbsorptionOnDeuteron(), collide(), and G4LightTargetCollider().

◆ mN

G4double G4LightTargetCollider::mN
private

Definition at line 82 of file G4LightTargetCollider.hh.

Referenced by AbsorptionOnDeuteron(), collide(), and G4LightTargetCollider().

◆ mP

G4double G4LightTargetCollider::mP
private

Definition at line 81 of file G4LightTargetCollider.hh.

Referenced by AbsorptionOnDeuteron(), collide(), and G4LightTargetCollider().

◆ output

G4CollisionOutput G4LightTargetCollider::output
private

Definition at line 65 of file G4LightTargetCollider.hh.

Referenced by setVerboseLevel().

◆ pFermiD

G4double G4LightTargetCollider::pFermiD
private

Definition at line 84 of file G4LightTargetCollider.hh.

Referenced by collide(), and G4LightTargetCollider().

◆ theElementaryParticleCollider

G4ElementaryParticleCollider* G4LightTargetCollider::theElementaryParticleCollider
private

Definition at line 63 of file G4LightTargetCollider.hh.

Referenced by collide(), setVerboseLevel(), and ~G4LightTargetCollider().

◆ 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(), collide(), G4VCascadeDeexcitation::collide(), G4CascadeCheckBalance::collide(), G4CascadeRecoilMaker::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(), G4CascadeRecoilMaker::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(), G4CascadeRecoilMaker::goodNucleus(), G4EquilibriumEvaporator::goodRemnant(), G4CascadeColliderBase::inelasticInteractionPossible(), G4IntraNucleiCascader::initialize(), G4CascadeDeexciteBase::makeFragment(), G4CascadeRecoilMaker::makeRecoilFragment(), G4CascadeRecoilMaker::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(), setVerboseLevel(), G4VCascadeCollider::setVerboseLevel(), G4CascadeCheckBalance::strangeOkay(), G4InuclCollider::useCascadeDeexcitation(), G4InuclCollider::usePreCompoundDeexcitation(), G4CascadeDeexciteBase::validateOutput(), G4CascadeColliderBase::validateOutput(), G4CascadeRecoilMaker::wholeEvent(), and G4BigBanger::xProbability().


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