78 #ifndef G4NUCLEI_MODEL_HH
79 #define G4NUCLEI_MODEL_HH
108 const std::vector<G4ThreeVector>* hitPoints=0);
113 return nucleon_densities[ip - 1][izone];
117 return fermi_momenta[ip - 1][izone];
123 if (ip == 9 || ip < 0)
return 0.0;
124 G4int ip0 = ip < 3 ? ip - 1 : 2;
125 if (ip > 10 && ip < 18) ip0 = 3;
126 if (ip > 20) ip0 = 4;
127 return izone < number_of_zones ? zone_potentials[ip0][izone] : 0.0;
135 return ( (izone<0) ? 0.
136 : (izone<number_of_zones) ? zone_radii[izone] : nuclei_radius);
139 return ( (izone<0) ? 0.
140 : (izone<number_of_zones) ? zone_volumes[izone] : nuclei_volume);
145 for (
G4int iz=0; iz<number_of_zones; iz++)
if (r<zone_radii[iz])
return iz;
146 return number_of_zones;
153 return neutronNumberCurrent < 1 && protonNumberCurrent < 1;
163 typedef std::pair<std::vector<G4CascadParticle>, std::vector<G4InuclElementaryParticle> >
modelLists;
170 return std::pair<G4int, G4int>(current_nucl1, current_nucl2);
175 std::vector<G4CascadParticle>& cascade);
192 G4bool passFermi(
const std::vector<G4InuclElementaryParticle>& particles,
205 typedef std::pair<G4InuclElementaryParticle, G4double>
partner;
212 return (p2.second > p1.second);
253 std::vector<G4InuclElementaryParticle> qdeutrons;
254 std::vector<G4double> acsecs;
256 std::vector<G4ThreeVector> coordinates;
257 std::vector<G4LorentzVector> momentums;
258 std::vector<G4InuclElementaryParticle> raw_particles;
260 std::vector<G4ThreeVector> collisionPts;
266 std::vector<G4double> rod;
267 std::vector<G4double> pf;
268 std::vector<G4double> vz;
271 std::vector<std::vector<G4double> > nucleon_densities;
272 std::vector<std::vector<G4double> > zone_potentials;
273 std::vector<std::vector<G4double> > fermi_momenta;
274 std::vector<G4double> zone_radii;
275 std::vector<G4double> zone_volumes;
276 std::vector<G4double> binding_energies;
279 G4int number_of_zones;
288 G4int neutronNumberCurrent;
289 G4int protonNumberCurrent;
297 enum PotentialType { WoodsSaxon=0, Gaussian=1 };
314 static const G4double piTimes4thirds;
316 static const G4double alfa3[3], alfa6[6];
318 static const G4double pion_vp_small;
327 #endif // G4NUCLEI_MODEL_HH
void reset(G4int nHitNeutrons=0, G4int nHitProtons=0, const std::vector< G4ThreeVector > *hitPoints=0)
G4double zoneIntegralWoodsSaxon(G4double ur1, G4double ur2, G4double nuclearRadius) const
G4double getRadius(G4int izone) const
G4InuclElementaryParticle generateQuasiDeuteron(G4int type1, G4int type2, G4int zone) const
std::pair< std::vector< G4CascadParticle >, std::vector< G4InuclElementaryParticle > > modelLists
std::pair< G4int, G4int > getTypesOfNucleonsInvolved() const
void generateInteractionPartners(G4CascadParticle &cparticle)
G4double inverseMeanFreePath(const G4CascadParticle &cparticle, const G4InuclElementaryParticle &target, G4int zone=-1)
G4double getFermiKinetic(G4int ip, G4int izone) const
G4bool passFermi(const std::vector< G4InuclElementaryParticle > &particles, G4int zone)
G4bool stillInside(const G4CascadParticle &cparticle)
G4double zoneIntegralGaussian(G4double ur1, G4double ur2, G4double nuclearRadius) const
std::vector< partner > thePartners
G4LorentzVector generateNucleonMomentum(G4int type, G4int zone) const
void boundaryTransition(G4CascadParticle &cparticle)
static G4bool useQuasiDeuteron(G4int ptype, G4int qdtype=0)
G4CascadParticle initializeCascad(G4InuclElementaryParticle *particle)
G4double getVolume(G4int izone) const
G4double absorptionCrossSection(G4double e, G4int type) const
G4bool isProjectile(const G4CascadParticle &cparticle) const
void fillBindingEnergies()
G4double getCurrentDensity(G4int ip, G4int izone) const
void fillZoneRadii(G4double nuclearRadius)
void fillPotentials(G4int type, G4double tot_vol)
G4double generateInteractionLength(const G4CascadParticle &cparticle, G4double path, G4double invmfp) const
G4double fillZoneVolumes(G4double nuclearRadius)
void generateModel(G4InuclNuclei *nuclei)
std::pair< G4InuclElementaryParticle, G4double > partner
G4double getRadius() const
G4int getNumberOfZones() const
void generateParticleFate(G4CascadParticle &cparticle, G4ElementaryParticleCollider *theEPCollider, std::vector< G4CascadParticle > &cascade)
G4double getRatio(G4int ip) const
G4int getNumberOfProtons() const
G4double totalCrossSection(G4double ke, G4int rtype) const
G4double getFermiMomentum(G4int ip, G4int izone) const
G4bool worthToPropagate(const G4CascadParticle &cparticle) const
static G4bool sortPartners(const partner &p1, const partner &p2)
void choosePointAlongTraj(G4CascadParticle &cparticle)
G4int getCurrentZone() const
static constexpr double fermi
G4int getNumberOfNeutrons() const
void setVerboseLevel(G4int verbose)
G4InuclElementaryParticle generateNucleon(G4int type, G4int zone) const
G4double getDensity(G4int ip, G4int izone) const
G4double getRadiusUnits() const
G4bool passTrailing(const G4ThreeVector &hit_position)
G4int getZone(G4double r) const
G4bool forceFirst(const G4CascadParticle &cparticle) const
G4double getPotential(G4int ip, G4int izone) const