76#ifndef G4NUCLEI_MODEL_HH
77#define G4NUCLEI_MODEL_HH
106 const std::vector<G4ThreeVector>* hitPoints=0);
111 return nucleon_densities[ip - 1][izone];
115 return fermi_momenta[ip - 1][izone];
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;
125 return izone < number_of_zones ? zone_potentials[ip0][izone] : 0.0;
133 return ( (izone<0) ? 0.
134 : (izone<number_of_zones) ? zone_radii[izone] : nuclei_radius);
137 return ( (izone<0) ? 0.
138 : (izone<number_of_zones) ? zone_volumes[izone] : nuclei_volume);
143 for (
G4int iz=0; iz<number_of_zones; iz++)
if (r<zone_radii[iz])
return iz;
144 return number_of_zones;
151 return neutronNumberCurrent < 1 && protonNumberCurrent < 1;
161 typedef std::pair<std::vector<G4CascadParticle>, std::vector<G4InuclElementaryParticle> >
modelLists;
168 return std::pair<G4int, G4int>(current_nucl1, current_nucl2);
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);
251 std::vector<G4InuclElementaryParticle> qdeutrons;
252 std::vector<G4double> acsecs;
254 std::vector<G4ThreeVector> coordinates;
255 std::vector<G4LorentzVector> momentums;
256 std::vector<G4InuclElementaryParticle> raw_particles;
258 std::vector<G4ThreeVector> collisionPts;
264 std::vector<G4double> rod;
265 std::vector<G4double> pf;
266 std::vector<G4double> vz;
269 std::vector<std::vector<G4double> > nucleon_densities;
270 std::vector<std::vector<G4double> > zone_potentials;
271 std::vector<std::vector<G4double> > fermi_momenta;
272 std::vector<G4double> zone_radii;
273 std::vector<G4double> zone_volumes;
274 std::vector<G4double> binding_energies;
277 G4int number_of_zones;
286 G4int neutronNumberCurrent;
287 G4int protonNumberCurrent;
295 enum PotentialType { WoodsSaxon=0, Gaussian=1 };
313 static const G4double piTimes4thirds;
315 static const G4double alfa3[3], alfa6[6];
317 static const G4double pion_vp_small;
G4int getCurrentZone() const
G4int getZone(G4double r) const
G4bool forceFirst(const G4CascadParticle &cparticle) const
G4double getRatio(G4int ip) const
G4int getNumberOfNeutrons() const
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
void generateParticleFate(G4CascadParticle &cparticle, G4ElementaryParticleCollider *theEPCollider, std::vector< G4CascadParticle > &cascade)
G4double inverseMeanFreePath(const G4CascadParticle &cparticle, const G4InuclElementaryParticle &target, G4int zone=-1)
G4double getRadius(G4int izone) const
void fillBindingEnergies()
G4double getCurrentDensity(G4int ip, G4int izone) const
std::pair< G4InuclElementaryParticle, G4double > partner
G4double fillZoneVolumes(G4double nuclearRadius)
G4InuclElementaryParticle generateNucleon(G4int type, G4int zone) const
void boundaryTransition(G4CascadParticle &cparticle)
G4double getVolume(G4int izone) const
G4double totalCrossSection(G4double ke, G4int rtype) const
G4double getPotential(G4int ip, G4int izone) const
G4double getFermiMomentum(G4int ip, G4int izone) const
G4bool passTrailing(const G4ThreeVector &hit_position)
static G4bool useQuasiDeuteron(G4int ptype, G4int qdtype=0)
void reset(G4int nHitNeutrons=0, G4int nHitProtons=0, const std::vector< G4ThreeVector > *hitPoints=0)
G4double absorptionCrossSection(G4double e, G4int type) const
G4bool stillInside(const G4CascadParticle &cparticle)
void generateModel(G4InuclNuclei *nuclei)
G4InuclElementaryParticle generateQuasiDeuteron(G4int type1, G4int type2, G4int zone) const
G4double zoneIntegralGaussian(G4double ur1, G4double ur2, G4double nuclearRadius) const
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
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
void generateInteractionPartners(G4CascadParticle &cparticle)
G4int getNumberOfZones() const
void choosePointAlongTraj(G4CascadParticle &cparticle)
void setVerboseLevel(G4int verbose)