76#ifndef G4NUCLEI_MODEL_HH
77#define G4NUCLEI_MODEL_HH
106 const std::vector<G4ThreeVector>* hitPoints=0);
121 if (ip == 9 || ip < 0)
return 0.0;
122 G4int ip0 = ip < 3 ? ip - 1 : 2;
123 if (ip > 10 && ip < 18) ip0 = 3;
124 if (ip > 20) ip0 = 4;
133 return ( (izone<0) ? 0.
137 return ( (izone<0) ? 0.
161 typedef std::pair<std::vector<G4CascadParticle>, std::vector<G4InuclElementaryParticle> >
modelLists;
173 std::vector<G4CascadParticle>& cascade);
190 G4bool passFermi(
const std::vector<G4InuclElementaryParticle>& particles,
203 typedef std::pair<G4InuclElementaryParticle, G4double>
partner;
210 return (p2.second > p1.second);
264 std::vector<G4double>
rod;
265 std::vector<G4double>
pf;
266 std::vector<G4double>
vz;
G4int getCurrentZone() const
const G4InuclElementaryParticle protonEP
G4int getZone(G4double r) const
static const G4double large
G4bool forceFirst(const G4CascadParticle &cparticle) const
G4double getRatio(G4int ip) const
G4int getNumberOfNeutrons() const
std::vector< std::vector< G4double > > zone_potentials
std::vector< G4double > binding_energies
const G4double crossSectionUnits
G4double getDensity(G4int ip, G4int izone) const
G4CascadParticle initializeCascad(G4InuclElementaryParticle *particle)
G4bool worthToPropagate(const G4CascadParticle &cparticle) const
G4double generateInteractionLength(const G4CascadParticle &cparticle, G4double path, G4double invmfp) const
G4int getNumberOfProtons() const
const G4double radiusScale2
static const G4double small
void generateParticleFate(G4CascadParticle &cparticle, G4ElementaryParticleCollider *theEPCollider, std::vector< G4CascadParticle > &cascade)
const G4double radiusUnits
G4double inverseMeanFreePath(const G4CascadParticle &cparticle, const G4InuclElementaryParticle &target, G4int zone=-1)
G4double getRadius(G4int izone) const
std::vector< G4ThreeVector > collisionPts
void fillBindingEnergies()
std::vector< G4double > acsecs
const G4double radScaleAlpha
G4CascadeInterpolator< 30 > gammaQDinterp
G4double getCurrentDensity(G4int ip, G4int izone) const
std::vector< G4InuclElementaryParticle > qdeutrons
std::pair< G4InuclElementaryParticle, G4double > partner
G4double fillZoneVolumes(G4double nuclearRadius)
static const G4double alfa3[3]
std::vector< G4LorentzVector > momentums
G4InuclElementaryParticle generateNucleon(G4int type, G4int zone) const
std::vector< G4double > pf
void boundaryTransition(G4CascadParticle &cparticle)
G4double getVolume(G4int izone) const
G4double totalCrossSection(G4double ke, G4int rtype) const
G4double getPotential(G4int ip, G4int izone) const
G4CollisionOutput EPCoutput
G4int protonNumberCurrent
static const G4double piTimes4thirds
G4double getFermiMomentum(G4int ip, G4int izone) const
const G4double radiusForSmall
G4bool passTrailing(const G4ThreeVector &hit_position)
static G4bool useQuasiDeuteron(G4int ptype, G4int qdtype=0)
std::vector< std::vector< G4double > > fermi_momenta
static const G4double alfa6[6]
G4InuclNuclei * theNucleus
void reset(G4int nHitNeutrons=0, G4int nHitProtons=0, const std::vector< G4ThreeVector > *hitPoints=0)
G4LorentzConvertor dummy_convertor
G4double absorptionCrossSection(G4double e, G4int type) const
G4bool stillInside(const G4CascadParticle &cparticle)
const G4double fermiMomentum
void generateModel(G4InuclNuclei *nuclei)
G4InuclElementaryParticle generateQuasiDeuteron(G4int type1, G4int type2, G4int zone) const
std::vector< G4double > vz
G4double zoneIntegralGaussian(G4double ur1, G4double ur2, G4double nuclearRadius) const
std::vector< G4double > zone_volumes
static const G4double pion_vp
static const G4double hyperon_vp
std::vector< G4InuclElementaryParticle > raw_particles
std::vector< G4ThreeVector > coordinates
G4bool passFermi(const std::vector< G4InuclElementaryParticle > &particles, G4int zone)
std::pair< std::vector< G4CascadParticle >, std::vector< G4InuclElementaryParticle > > modelLists
G4double getFermiKinetic(G4int ip, G4int izone) const
std::vector< partner > thePartners
static const G4double pion_vp_small
std::vector< G4double > zone_radii
G4double zoneIntegralWoodsSaxon(G4double ur1, G4double ur2, G4double nuclearRadius) const
void fillZoneRadii(G4double nuclearRadius)
std::pair< G4int, G4int > getTypesOfNucleonsInvolved() const
G4LorentzVector generateNucleonMomentum(G4int type, G4int zone) const
G4double getRadiusUnits() const
G4bool isProjectile(const G4CascadParticle &cparticle) const
static G4bool sortPartners(const partner &p1, const partner &p2)
void fillPotentials(G4int type, G4double tot_vol)
G4double getRadius() const
std::vector< G4double > rod
const G4double gammaQDscale
void generateInteractionPartners(G4CascadParticle &cparticle)
const G4double radiusScale
std::vector< std::vector< G4double > > nucleon_densities
const G4InuclElementaryParticle neutronEP
G4int getNumberOfZones() const
G4int neutronNumberCurrent
const G4double potentialThickness
void choosePointAlongTraj(G4CascadParticle &cparticle)
void setVerboseLevel(G4int verbose)
static const G4double kaon_vp
static constexpr double fermi