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