83 G4cout <<
" >>> G4LightTargetCollider::collide" <<
G4endl;
105 G4Exception(
"G4LightTargetCollider::collide()",
"HAD_BERT_201",
106 JustWarning,
"Projectile energy below reaction threshold");
120 G4double totalDXS = gammaPXS + gammaNXS + gammaDXS;
121 probP = gammaPXS/totalDXS;
122 probN = (gammaPXS+gammaNXS)/totalDXS;
137 protonMomentum.
boost(toProtonRest);
138 bulletMomentum.
boost(toProtonRest);
148 globalOutput.
reset();
150 for (
G4int i = 0; i <
G4int(products.size()); i++) {
151 temp = products[i].getMomentum();
153 products[i].setMomentum(temp);
160 }
else if (rndm < probN) {
170 neutronMomentum.
boost(toNeutronRest);
171 bulletMomentum.
boost(toNeutronRest);
182 globalOutput.
reset();
184 for (
G4int i = 0; i <
G4int(products.size()); i++) {
185 temp = products[i].getMomentum();
187 products[i].setMomentum(temp);
196 globalOutput.
reset();
215 G4Exception(
"G4LightTargetCollider::collide()",
"HAD_BERT_203",
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;
261 Mom1.
setE(std::sqrt(
mP*
mP + qcm*qcm) );
263 Mom2.
setE(std::sqrt(
mN*
mN + qcm*qcm) );
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) );
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) );
281 G4Exception(
"G4LightTargetCollider::collide()",
"HAD_BERT_204",
318 std::vector<G4double> masses;
323 std::vector<G4LorentzVector> cmMomenta;
324 std::vector<G4int> particle_kinds;
326 G4int itry_max = 200;
332 while (
generate && itry < itry_max) {
333 particle_kinds.clear();
336 for (
G4int i = 0; i < mult; i++) {
338 masses.push_back(mass);
350 if (itry == itry_max) mult--;
357 G4Exception(
"G4LightTargetCollider::SingleNucleonScattering()",
"HAD_BERT_202",
360 finalState.push_back(projectile);
364 for (
G4int i = 0; i < mult; i++) {
366 finalState.push_back(fsPart);
G4double S(G4double temp)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::vector< G4InuclElementaryParticle > ScatteringProducts
std::pair< G4InuclElementaryParticle, G4InuclElementaryParticle > NucleonPair
G4ThreeVector G4RandomDirection()
G4GLOB_DLL std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
void setVect(const Hep3Vector &)
Hep3Vector findBoostToCM() const
static const G4CascadeChannel * GetTable(G4int initialState)
virtual G4int getMultiplicity(G4double ke) const =0
virtual G4double getCrossSection(double ke) const =0
virtual void getOutgoingParticleTypes(std::vector< G4int > &kinds, G4int mult, G4double ke) const =0
virtual void setVerboseLevel(G4int verbose=0)
void Configure(G4InuclElementaryParticle *bullet, G4InuclElementaryParticle *target, const std::vector< G4int > &particle_kinds)
G4int numberOfOutgoingParticles() const
void addOutgoingParticle(const G4InuclElementaryParticle &particle)
void setVerboseLevel(G4int verbose)
void trivialise(G4InuclParticle *bullet, G4InuclParticle *target)
static G4Deuteron * Deuteron()
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4bool Generate(G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)
static G4double getParticleMass(G4int type)
const G4ParticleDefinition * getDefinition() const
G4double getKineticEnergy() const
G4LorentzVector getMomentum() const
G4double getMomModule() const
G4double getEnergy() const
G4double GammaDCrossSection(G4double)
NucleonPair AbsorptionOnDeuteron(G4InuclParticle *bullet)
virtual ~G4LightTargetCollider()
void setVerboseLevel(G4int verbose=0)
ScatteringProducts SingleNucleonScattering(const G4InuclElementaryParticle &projectile, const G4InuclElementaryParticle &targetNucleon)
G4CascadeFinalStateGenerator fsGen
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
G4ElementaryParticleCollider * theElementaryParticleCollider
static G4Neutron * Neutron()
G4double GetPDGMass() const
const G4String & GetParticleName() const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4PionZero * PionZero()
static G4Proton * Proton()
static constexpr double GeV
void generate(const G4double sqrtS, ParticleList &particles)
Generate an event in the CM system.
G4bool nucleon(G4int ityp)