183 #include <functional>
210 { 0.0, 0.01, 0.013, 0.018, 0.024, 0.032, 0.042, 0.056, 0.075, 0.1,
211 0.13, 0.18, 0.24, 0.32, 0.42, 0.56, 0.75, 1.0, 1.3, 1.8,
212 2.4, 3.2, 4.2, 5.6, 7.5, 10.0, 13.0, 18.0, 24.0, 32.0 };
215 { 2.8, 1.3, 0.89, 0.56, 0.38, 0.27, 0.19, 0.14, 0.098,
216 0.071, 0.054, 0.0003, 0.0007, 0.0027, 0.0014, 0.001, 0.0012, 0.0005,
217 0.0003, 0.0002,0.0002, 0.0002, 0.0002, 0.0002, 0.0001, 0.0001, 0.0001,
218 0.0001, 0.0001, 0.0001 };
224 : verboseLevel(0), nuclei_radius(0.), nuclei_volume(0.), number_of_zones(0),
225 A(0), Z(0), theNucleus(0), neutronNumber(0), protonNumber(0),
226 neutronNumberCurrent(0), protonNumberCurrent(0), current_nucl1(0),
227 current_nucl2(0), gammaQDinterp(kebins),
230 skinDepth(0.611207*radiusUnits),
241 : verboseLevel(0), nuclei_radius(0.), nuclei_volume(0.), number_of_zones(0),
242 A(0), Z(0), theNucleus(0), neutronNumber(0), protonNumber(0),
243 neutronNumberCurrent(0), protonNumberCurrent(0), current_nucl1(0),
244 current_nucl2(0), gammaQDinterp(kebins),
247 skinDepth(0.611207*radiusUnits),
260 : verboseLevel(0), nuclei_radius(0.), nuclei_volume(0.), number_of_zones(0),
261 A(0), Z(0), theNucleus(0), neutronNumber(0), protonNumber(0),
262 neutronNumberCurrent(0), protonNumberCurrent(0), current_nucl1(0),
263 current_nucl2(0), gammaQDinterp(kebins),
266 skinDepth(0.611207*radiusUnits),
287 const std::vector<G4ThreeVector>* hitPoints) {
292 if (!hitPoints || !hitPoints->empty())
collisionPts.clear();
305 G4cout <<
" >>> G4NucleiModel::generateModel A " << a <<
" Z " << z
310 if (a ==
A && z ==
Z) {
380 G4cout <<
" >>> G4NucleiModel::fillBindingEnergies" <<
G4endl;
394 G4cout <<
" >>> G4NucleiModel::fillZoneRadii" <<
G4endl;
404 G4double rSq = nuclearRadius * nuclearRadius;
405 G4double gaussRadius = std::sqrt(rSq * (1.0 - 1.0/
A) + 6.4);
413 }
else if (
A < 100) {
434 G4cout <<
" >>> G4NucleiModel::fillZoneVolumes" <<
G4endl;
458 if (i > 0)
v1[i] -= zone_radii[i-1]*zone_radii[i-1]*zone_radii[i-1];
469 G4cout <<
" >>> G4NucleiModel::fillZoneVolumes(" << type <<
")" <<
G4endl;
490 vz.push_back(0.5 * pff * pff / mass + dm);
502 G4cout <<
" >>> G4NucleiModel::zoneIntegralWoodsSaxon" <<
G4endl;
506 const G4int itry_max = 1000;
521 while (itry < itry_max) {
528 for (
G4int i = 0; i < jc; i++) {
530 fi += r * (r +
d2) / (1.0 +
G4Exp(r));
533 fun = 0.5 * fun1 + fi * dr;
535 if (std::fabs((fun - fun1) / fun) <= epsilon)
break;
543 G4cout <<
" zoneIntegralWoodsSaxon-> n iter " << itry_max <<
G4endl;
547 return skinDepth3 * (fun + skinRatio*skinRatio*
G4Log((1.0 +
G4Exp(-r1)) / (1.0 +
G4Exp(-r2))));
555 G4cout <<
" >>> G4NucleiModel::zoneIntegralGaussian" <<
G4endl;
558 G4double gaussRadius = std::sqrt(nucRad*nucRad * (1.0 - 1.0/
A) + 6.4);
561 const G4int itry_max = 1000;
573 while (itry < itry_max) {
579 for (
G4int i = 0; i < jc; i++) {
581 fi += r * r *
G4Exp(-r * r);
584 fun = 0.5 * fun1 + fi * dr;
586 if (std::fabs((fun - fun1) / fun) <= epsilon)
break;
594 G4cerr <<
" zoneIntegralGaussian-> n iter " << itry_max <<
G4endl;
596 return gaussRadius*gaussRadius*gaussRadius * fun;
614 <<
" protons: density " <<
getDensity(1,i) <<
" PF " <<
616 <<
" neutrons: density " <<
getDensity(2,i) <<
" PF " <<
629 ekin = std::sqrt(pfermi*pfermi + mass*mass) - mass;
647 G4cout <<
" >>> G4NucleiModel::generateNucleon" <<
G4endl;
659 G4cout <<
" >>> G4NucleiModel::generateQuasiDeuteron" <<
G4endl;
673 if (type1*type2 ==
pro*
pro) dtype = 111;
674 else if (type1*type2 == pro*
neu) dtype = 112;
675 else if (type1*type2 == neu*neu) dtype = 122;
684 G4cout <<
" >>> G4NucleiModel::generateInteractionPartners" <<
G4endl;
698 }
else if (zone == 0) {
710 G4cout <<
" r_in " << r_in <<
" r_out " << r_out <<
" path " << path
716 G4cerr <<
" generateInteractionPartners-> negative path length" <<
G4endl;
720 if (std::fabs(path) <
small) {
723 G4cout <<
" generateInteractionPartners-> zero path" <<
G4endl;
735 for (
G4int ip = 1; ip < 3; ip++) {
746 if (path<
small || spath < path) {
762 G4cout <<
" trying quasi-deuterons with bullet: "
776 G4cout <<
" ptype=" << ptype <<
" using pp target\n" << ppd <<
G4endl;
779 tot_invmfp += invmfp;
788 G4cout <<
" ptype=" << ptype <<
" using np target\n" << npd <<
G4endl;
791 tot_invmfp += invmfp;
800 G4cout <<
" ptype=" << ptype <<
" using nn target\n" << nnd <<
G4endl;
803 tot_invmfp += invmfp;
810 for (
size_t i=0; i<
qdeutrons.size(); i++) {
811 G4cout <<
" acsecs[" <<
qdeutrons[i].getDefinition()->GetParticleName()
817 if (tot_invmfp >
small) {
820 if (path<
small || apath < path) {
824 for (
size_t i = 0; i <
qdeutrons.size(); i++) {
855 std::vector<G4CascadParticle>& outgoing_cparticles) {
857 G4cout <<
" >>> G4NucleiModel::generateParticleFate" <<
G4endl;
862 #ifdef G4CASCADE_CHECK_ECONS
867 outgoing_cparticles.clear();
872 G4cerr <<
" generateParticleFate-> got empty interaction-partners list "
881 G4cout <<
" no interactions; moving to next zone" <<
G4endl;
886 outgoing_cparticles.push_back(cparticle);
898 G4cout <<
" processing " << npart-1 <<
" possible interactions" <<
G4endl;
902 G4bool no_interaction =
true;
905 for (
G4int i=0; i<npart-1; i++) {
912 G4cout <<
" target " << target.
type() <<
" bullet " << bullet.
type()
927 #ifdef G4CASCADE_CHECK_ECONS
934 std::vector<G4InuclElementaryParticle>& outgoing_particles =
937 if (!
passFermi(outgoing_particles, zone))
continue;
947 std::sort(outgoing_particles.begin(), outgoing_particles.end(),
951 G4cout <<
" adding " << outgoing_particles.size()
952 <<
" output particles" <<
G4endl;
956 for (
G4int ip = 0; ip <
G4int(outgoing_particles.size()); ip++) {
962 no_interaction =
false;
966 #ifdef G4CASCADE_DEBUG_CHARGE
970 for (
G4int ip = 0; ip <
G4int(outgoing_particles.size()); ip++)
971 out_charge += outgoing_particles[ip].getCharge();
973 G4cout <<
" multiplicity " << outgoing_particles.size()
974 <<
" bul type " << bullet.
type()
975 <<
" targ type " << target.
type()
976 <<
"\n initial charge "
978 <<
" out charge " << out_charge <<
G4endl;
998 neutronNumberCurrent--;
1006 neutronNumberCurrent--;
1012 if (no_interaction) {
1017 if (!prescatCP_G4MT_TLS_)
1027 outgoing_cparticles.push_back(cparticle);
1030 #ifdef G4CASCADE_CHECK_ECONS
1032 balance.
collide(&prescatCP, 0, outgoing_cparticles);
1044 if (qdtype==
pn || qdtype==0)
1045 return (ptype==
pi0 || ptype==
pip || ptype==
pim || ptype==
gam || ptype==
mum);
1046 else if (qdtype==
pp)
1047 return (ptype==
pi0 || ptype==
pim || ptype==
gam || ptype==
mum);
1048 else if (qdtype==
nn)
1049 return (ptype==
pi0 || ptype==
pip || ptype==
gam);
1062 for (
G4int i = 0; i <
G4int(particles.size()); i++) {
1063 if (!particles[i].
nucleon())
continue;
1065 G4int type = particles[i].type();
1066 G4double mom = particles[i].getMomModule();
1070 G4cout <<
" type " << type <<
" p " << mom <<
" pf " << pfermi <<
G4endl;
1086 G4cout <<
" >>> G4NucleiModel::passTrailing " << hit_position <<
G4endl;
1103 G4cout <<
" >>> G4NucleiModel::boundaryTransition" <<
G4endl;
1119 G4double pr = pos.dot(mom.vect()) / r;
1126 G4cout <<
"Potentials for type " << type <<
" = "
1131 G4double qv = dv * dv + 2.0 * dv * mom.e() + pr * pr;
1136 G4cout <<
" type " << type <<
" zone " << zone <<
" next " << next_zone
1137 <<
" qv " << qv <<
" dv " << dv <<
G4endl;
1146 p1r = std::sqrt(qv);
1147 if (pr < 0.0) p1r = -p1r;
1156 G4cout <<
" prr " << prr <<
" delta px " << prr*pos.x() <<
" py "
1157 << prr*pos.y() <<
" pz " << prr*pos.z() <<
" mag "
1158 << std::fabs(prr*r) <<
G4endl;
1161 mom.setVect(mom.vect() + pos*prr);
1171 G4cout <<
" >>> G4NucleiModel::choosePointAlongTraj" <<
G4endl;
1184 G4cout <<
" pos " << pos <<
" phat " << phat <<
" rhat " << rhat <<
G4endl;
1187 G4double prang = rhat.angle(-phat);
1189 if (prang < 1e-6) posout = -
pos;
1192 posout.rotate(posrot, phat.cross(rhat));
1210 G4cout <<
" posmid " << posmid <<
" lenmid " << lenmid
1211 <<
" zoneout " << zoneout <<
" zonemid " << zonemid
1212 <<
" ncross " << ncross <<
G4endl;
1216 std::vector<G4double> wtlen(ncross,0.);
1217 std::vector<G4double> len(ncross,0.);
1221 for (i=0; i<ncross/2; i++) {
1225 len[i] = lenmid - ds;
1226 len[ncross-1-i] = lenmid + ds;
1229 G4cout <<
" i " << i <<
" iz " << iz <<
" ds " << ds
1230 <<
" len " << len[i] <<
G4endl;
1235 for (i=1; i<ncross; i++) {
1236 G4int iz = (i<ncross/2) ? zoneout-i+1 : zoneout-ncross+i+1;
1250 wtlen[i] = wtlen[i-1] + wt;
1253 G4cout <<
" i " << i <<
" iz " << iz <<
" avg.mfp " << 1./invmfp
1254 <<
" dlen " << dlen <<
" wt " << wt <<
" wtlen " << wtlen[i]
1260 std::transform(wtlen.begin(), wtlen.end(), wtlen.begin(),
1261 std::bind2nd(std::divides<G4double>(), wtlen.back()));
1265 for (i=0; i<ncross; i++)
G4cout <<
" " << wtlen[i];
1271 G4int ir = std::upper_bound(wtlen.begin(),wtlen.end(),rand) - wtlen.begin();
1273 G4double frac = (rand-wtlen[ir-1]) / (wtlen[ir]-wtlen[ir-1]);
1274 G4double drand = (1.-frac)*len[ir-1] + frac*len[ir];
1277 G4cout <<
" rand " << rand <<
" ir " << ir <<
" frac " << frac
1278 <<
" drand " << drand <<
G4endl;
1281 pos += drand * phat;
1289 <<
" @ " << pos <<
G4endl;
1308 G4cout <<
" >>> G4NucleiModel::worthToPropagate" <<
G4endl;
1328 <<
" potential=" << ekin_cut
1329 <<
" : worth? " << worth <<
G4endl;
1339 G4cout <<
" >>> G4NucleiModel::getRatio " << ip <<
G4endl;
1384 G4cout <<
" >>> G4NucleiModel::initializeCascad(particle)" <<
G4endl;
1411 G4cout <<
" >>> G4NucleiModel::initializeCascad(bullet,target,output)"
1415 const G4double max_a_for_cascad = 5.0;
1417 const G4double small_ekin = 1.0e-6;
1418 const G4double r_large2for3 = 62.0;
1421 const G4double r_large2for4 = 69.14;
1424 const G4int itry_max = 100;
1427 std::vector<G4CascadParticle>& casparticles = output.first;
1428 std::vector<G4InuclElementaryParticle>& particles = output.second;
1430 casparticles.clear();
1441 if (ab < max_a_for_cascad) {
1445 G4double ben = benb < bent ? bent : benb;
1450 while (casparticles.size() == 0 && itryg < itry_max) {
1468 while (bad && itry < itry_max) {
1472 if (p * p / (p * p + 2079.36) / (p * p + 2079.36) > 1.2023e-4 *
inuclRndm() &&
1473 p * r > 312.0) bad =
false;
1476 if (itry == itry_max)
1478 G4cout <<
" deutron bullet generation-> itry = " << itry_max <<
G4endl;
1490 mom.setVect(-mom.vect());
1500 while (badco && itry < itry_max) {
1505 for (i = 0; i < 2; i++) {
1510 while (itry1 < itry_max) {
1514 rho = std::sqrt(ss) *
G4Exp(-ss);
1516 if (rho > u && ss < s3max) {
1517 ss = r0forAeq3 * std::sqrt(ss);
1522 G4cout <<
" i " << i <<
" r " << coord1.mag() <<
G4endl;
1528 if (itry1 == itry_max) {
1529 coord1.set(10000.,10000.,10000.);
1540 coordinates.push_back(coord1);
1542 G4bool large_dist =
false;
1544 for (i = 0; i < 2; i++) {
1545 for (
G4int j = i+1; j < 3; j++) {
1546 G4double r2 = (coordinates[i]-coordinates[j]).mag2();
1549 G4cout <<
" i " << i <<
" j " << j <<
" r2 " << r2 <<
G4endl;
1552 if (r2 > r_large2for3) {
1559 if (large_dist)
break;
1562 if(!large_dist) badco =
false;
1569 G4double u = b1 + std::sqrt(b1 * b1 + b);
1572 while (badco && itry < itry_max) {
1578 for (i = 0; i < ab-1; i++) {
1582 while (itry1 < itry_max) {
1587 if (std::sqrt(ss) *
G4Exp(-ss) * (1.0 + ss/b) > u
1589 ss = r0forAeq4 * std::sqrt(ss);
1594 G4cout <<
" i " << i <<
" r " << coord1.mag() <<
G4endl;
1601 if (itry1 == itry_max) {
1602 coord1.set(10000.,10000.,10000.);
1617 G4bool large_dist =
false;
1619 for (i = 0; i < ab-1; i++) {
1620 for (
G4int j = i+1; j <
ab; j++) {
1625 G4cout <<
" i " << i <<
" j " << j <<
" r2 " << r2 <<
G4endl;
1628 if (r2 > r_large2for4) {
1635 if (large_dist)
break;
1638 if (!large_dist) badco =
false;
1643 G4cout <<
" can not generate the nucleons coordinates for a "
1646 casparticles.clear();
1655 for (
G4int i = 0; i < ab - 1; i++) {
1658 while(itry2 < itry_max) {
1664 p = std::sqrt(0.01953 * u);
1672 if(itry2 == itry_max) {
1673 G4cout <<
" can not generate proper momentum for a "
1676 casparticles.clear();
1699 if(rp > rb) rb = rp;
1706 G4ThreeVector global_pos(rz*std::cos(phi), rz*std::sin(phi),
1716 for (
G4int ipa = 0; ipa <
ab; ipa++) {
1717 G4int knd = ipa < zb ? 1 : 2;
1728 ipart->setMomentum(toTheBulletRestFrame.
backToTheLab(ipart->getMomentum()));
1745 if(std::fabs(t1) <= std::fabs(t2)) {
1747 if(
coordinates[ip].
z() + mom.z() * t1 / pmod <= 0.0) tr = t1;
1750 if(tr < 0.0 && t2 > 0.0) {
1752 if(
coordinates[ip].
z() + mom.z() * t2 / pmod <= 0.0) tr = t2;
1758 if(
coordinates[ip].
z() + mom.z() * t2 / pmod <= 0.0) tr = t2;
1761 if(tr < 0.0 && t1 > 0.0) {
1762 if(
coordinates[ip].
z() + mom.z() * t1 / pmod <= 0.0) tr = t1;
1780 if(casparticles.size() == 0) {
1783 G4cout <<
" can not generate proper distribution for " << itry_max
1792 G4cout <<
" cascad particles: " << casparticles.size() <<
G4endl;
1793 for(ip = 0; ip <
G4int(casparticles.size()); ip++)
1796 G4cout <<
" outgoing particles: " << particles.size() <<
G4endl;
1797 for(ip = 0; ip <
G4int(particles.size()); ip++)
1832 G4cout <<
" ip " << ip <<
" zone " << zone <<
" ekin " << ekin
1834 <<
" csec " << csec <<
G4endl;
1837 if (csec <= 0.)
return 0.;
1849 const G4double young_cut = std::sqrt(10.0) * 0.25;
1854 if (invmfp <
small)
return spath;
1857 if (pw < -huge_num) pw = -huge_num;
1858 pw = 1.0 -
G4Exp(pw);
1861 G4cout <<
" mfp " << 1./invmfp <<
" pw " << pw <<
G4endl;
1866 if (cparticle.
young(young_cut, spath)) spath =
large;
1869 G4cout <<
" spath " << spath <<
" path " << path <<
G4endl;
1880 G4cerr <<
" absorptionCrossSection only valid for incident pions" <<
G4endl;
1890 if (ke < 0.3) csec = (0.1106 / std::sqrt(ke) - 0.8
1891 + 0.08 / ((ke-0.123)*(ke-0.123) + 0.0056) );
1892 else if (ke < 1.0) csec = 3.6735 * (1.0-ke)*(1.0-ke);
1901 if (csec < 0.0) csec = 0.0;
1904 G4cout <<
" ekin " << ke <<
" abs. csec " << csec <<
" mb" <<
G4endl;
1916 G4cerr <<
" unknown collison type = " << rtype <<
G4endl;
void reset(G4int nHitNeutrons=0, G4int nHitProtons=0, const std::vector< G4ThreeVector > *hitPoints=0)
G4double zoneIntegralWoodsSaxon(G4double ur1, G4double ur2, G4double nuclearRadius) const
void updateParticleMomentum(const G4LorentzVector &mom)
G4InuclElementaryParticle generateQuasiDeuteron(G4int type1, G4int type2, G4int zone) const
std::pair< std::vector< G4CascadParticle >, std::vector< G4InuclElementaryParticle > > modelLists
G4bool reflectedNow() const
static const G4CascadeChannel * GetTable(G4int initialState)
G4LorentzVector getMomentum() const
void incrementReflectionCounter()
void incrementCurrentPath(G4double npath)
const G4double gammaQDscale
G4bool movingInsideNuclei() const
std::vector< G4double > vz
CLHEP::Hep3Vector G4ThreeVector
void generateInteractionPartners(G4CascadParticle &cparticle)
std::vector< G4double > zone_radii
G4int getGeneration() const
std::vector< G4double > zone_volumes
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4CascadeInterpolator< 30 > gammaQDinterp
G4double inverseMeanFreePath(const G4CascadParticle &cparticle, const G4InuclElementaryParticle &target, G4int zone=-1)
void printCollisionOutput(std::ostream &os=G4cout) const
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4double getFermiKinetic(G4int ip, G4int izone) const
G4bool passFermi(const std::vector< G4InuclElementaryParticle > &particles, G4int zone)
G4double zoneIntegralGaussian(G4double ur1, G4double ur2, G4double nuclearRadius) const
void propagateAlongThePath(G4double path)
G4double getPathToTheNextZone(G4double rz_in, G4double rz_out)
std::vector< partner > thePartners
G4double getEnergy() const
G4LorentzVector generateNucleonMomentum(G4int type, G4int zone) const
void updatePosition(const G4ThreeVector &pos)
void boundaryTransition(G4CascadParticle &cparticle)
const G4InuclElementaryParticle protonEP
static G4bool useQuasiDeuteron(G4int ptype, G4int qdtype=0)
static G4double getParticleMass(G4int type)
void setBullet(const G4InuclParticle *bullet)
G4LorentzVector backToTheLab(const G4LorentzVector &mom) const
G4CascadParticle initializeCascad(G4InuclElementaryParticle *particle)
G4InuclNuclei * theNucleus
G4bool young(G4double young_path_cut, G4double cpath) const
G4double getVolume(G4int izone) const
std::vector< G4double > pf
const G4double radiusScale
G4double absorptionCrossSection(G4double e, G4int type) const
const G4InuclElementaryParticle & getParticle() const
static const G4double large
virtual void setVerboseLevel(G4int verbose=0)
virtual G4double getCrossSection(double ke) const =0
const G4double radiusScale2
G4bool isProjectile(const G4CascadParticle &cparticle) const
static const G4double piTimes4thirds
G4double getKineticEnergy() const
void fillBindingEnergies()
G4CollisionOutput EPCoutput
const G4double radScaleAlpha
void updateZone(G4int izone)
G4double getCurrentDensity(G4int ip, G4int izone) const
void fillZoneRadii(G4double nuclearRadius)
G4LorentzConvertor dummy_convertor
G4GLOB_DLL std::ostream G4cout
static const G4double kaon_vp
G4int protonNumberCurrent
void fillPotentials(G4int type, G4double tot_vol)
G4bool nucleon(G4int ityp)
static const G4double alfa6[6]
std::vector< G4LorentzVector > momentums
G4double interpolate(const G4double x, const G4double(&yb)[nBins]) const
std::vector< G4ThreeVector > coordinates
G4int numberOfOutgoingParticles() const
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)
std::vector< G4InuclElementaryParticle >::iterator particleIterator
G4double generateInteractionLength(const G4CascadParticle &cparticle, G4double path, G4double invmfp) const
static const double second
std::vector< std::vector< G4double > > nucleon_densities
G4double fillZoneVolumes(G4double nuclearRadius)
void generateModel(G4InuclNuclei *nuclei)
std::pair< G4InuclElementaryParticle, G4double > partner
static const G4double pion_vp_small
G4double G4cbrt(G4double x)
const G4double crossSectionUnits
G4double getKinEnergyInTheTRS() const
std::vector< G4double > binding_energies
static const G4double A[nN]
const G4double radiusUnits
void setNucleusState(G4int a, G4int z)
std::vector< G4InuclElementaryParticle > qdeutrons
static const G4double alfa3[3]
void generateParticleFate(G4CascadParticle &cparticle, G4ElementaryParticleCollider *theEPCollider, std::vector< G4CascadParticle > &cascade)
G4double G4Log(G4double x)
std::vector< G4double > rod
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double getRatio(G4int ip) const
G4double totalCrossSection(G4double ke, G4int rtype) const
static const G4double small
G4double getFermiMomentum(G4int ip, G4int izone) const
G4LorentzVector generateWithFixedTheta(G4double ct, G4double p, G4double mass=0.)
std::vector< G4InuclElementaryParticle > raw_particles
G4bool worthToPropagate(const G4CascadParticle &cparticle) const
static G4bool sortPartners(const partner &p1, const partner &p2)
static const G4double hyperon_vp
void choosePointAlongTraj(G4CascadParticle &cparticle)
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
G4int getCurrentZone() const
G4double getCharge() const
const G4InuclElementaryParticle neutronEP
std::vector< G4InuclElementaryParticle >::iterator particleIterator
std::vector< G4ThreeVector > collisionPts
std::vector< G4double > acsecs
G4bool quasi_deutron() const
G4InuclElementaryParticle generateNucleon(G4int type, G4int zone) const
const G4ThreeVector & getPosition() const
const G4double fermiMomentum
std::vector< std::vector< G4double > > fermi_momenta
void toTheTargetRestFrame()
std::vector< std::vector< G4double > > zone_potentials
G4int neutronNumberCurrent
G4double getDensity(G4int ip, G4int izone) const
G4double bindingEnergy(G4int A, G4int Z)
G4bool passTrailing(const G4ThreeVector &hit_position)
G4int getZone(G4double r) const
static const G4double pion_vp
const G4double radiusForSmall
static const G4double pos
G4bool forceFirst(const G4CascadParticle &cparticle) const
G4GLOB_DLL std::ostream G4cerr
G4bool isNeutrino() const
void setTarget(const G4InuclParticle *target)
CLHEP::HepLorentzVector G4LorentzVector
G4double getPotential(G4int ip, G4int izone) const