176 #include "G4InuclSpecialFunctions.hh"   187 #include <functional>   214     {  0.0,  0.01, 0.013, 0.018, 0.024, 0.032, 0.042, 0.056, 0.075, 0.1,
   215        0.13, 0.18, 0.24,  0.32,  0.42,  0.56,  0.75,  1.0,   1.3,   1.8,
   216        2.4,  3.2,  4.2,   5.6,   7.5,   10.0,  13.0,  18.0,  24.0, 32.0 };
   219     { 2.8,    1.3,    0.89,   0.56,   0.38,   0.27,   0.19,   0.14,   0.098,
   220       0.071, 0.054,  0.0003, 0.0007, 0.0027, 0.0014, 0.001,  0.0012, 0.0005,
   221       0.0003, 0.0002,0.0002, 0.0002, 0.0002, 0.0002, 0.0001, 0.0001, 0.0001,
   222       0.0001, 0.0001, 0.0001 };
   228   : verboseLevel(0), nuclei_radius(0.), nuclei_volume(0.), number_of_zones(0),
   229     A(0), 
Z(0), theNucleus(0), neutronNumber(0), protonNumber(0),
   230     neutronNumberCurrent(0), protonNumberCurrent(0), current_nucl1(0),
   231     current_nucl2(0), gammaQDinterp(kebins),
   234     skinDepth(0.611207*radiusUnits),
   291               const std::vector<G4ThreeVector>* hitPoints) {
   296   if (!hitPoints || !hitPoints->empty()) 
collisionPts.clear();
   309     G4cout << 
" >>> G4NucleiModel::generateModel A " << a << 
" Z " << z
   314   if (a == 
A && z == 
Z) {
   384     G4cout << 
" >>> G4NucleiModel::fillBindingEnergies" << 
G4endl;
   398     G4cout << 
" >>> G4NucleiModel::fillZoneRadii" << 
G4endl;
   408     G4double rSq = nuclearRadius * nuclearRadius;
   409     G4double gaussRadius = std::sqrt(rSq * (1.0 - 1.0/
A) + 6.4);
   417   } 
else if (
A < 100) {     
   438     G4cout << 
" >>> G4NucleiModel::fillZoneVolumes" << 
G4endl;
   462     if (i > 0) 
v1[i] -= zone_radii[i-1]*zone_radii[i-1]*zone_radii[i-1];
   473     G4cout << 
" >>> G4NucleiModel::fillZoneVolumes(" << type << 
")" << 
G4endl;
   494     vz.push_back(0.5 * pff * pff / mass + dm);
   506     G4cout << 
" >>> G4NucleiModel::zoneIntegralWoodsSaxon" << 
G4endl;
   510   const G4int itry_max = 1000;
   525   while (itry < itry_max) { 
   532     for (
G4int i = 0; i < jc; i++) { 
   534       fi += r * (r + 
d2) / (1.0 + 
G4Exp(r));
   537     fun = 0.5 * fun1 + fi * dr;
   539     if (std::fabs((fun - fun1) / fun) <= epsilon) 
break;
   547     G4cout << 
" zoneIntegralWoodsSaxon-> n iter " << itry_max << 
G4endl;
   551   return skinDepth3 * (fun + skinRatio*skinRatio*
G4Log((1.0 + 
G4Exp(-r1)) / (1.0 + 
G4Exp(-r2))));
   559     G4cout << 
" >>> G4NucleiModel::zoneIntegralGaussian" << 
G4endl;
   562   G4double gaussRadius = std::sqrt(nucRad*nucRad * (1.0 - 1.0/
A) + 6.4);
   565   const G4int itry_max = 1000;
   577   while (itry < itry_max) { 
   583     for (
G4int i = 0; i < jc; i++) { 
   585       fi += r * r * 
G4Exp(-r * r);
   588     fun = 0.5 * fun1 + fi * dr;  
   590     if (std::fabs((fun - fun1) / fun) <= epsilon) 
break;
   598     G4cerr << 
" zoneIntegralGaussian-> n iter " << itry_max << 
G4endl;
   600   return gaussRadius*gaussRadius*gaussRadius * fun;
   618        << 
" protons: density " << 
getDensity(1,i) << 
" PF " << 
   620        << 
" neutrons: density " << 
getDensity(2,i) << 
" PF " << 
   633     ekin = std::sqrt(pfermi*pfermi + mass*mass) - mass;
   644   return generateWithRandomAngles(pmod, mass);
   651     G4cout << 
" >>> G4NucleiModel::generateNucleon" << 
G4endl;
   663     G4cout << 
" >>> G4NucleiModel::generateQuasiDeuteron" << 
G4endl;
   677        if (type1*type2 == 
pro*
pro) dtype = 111;
   678   else if (type1*type2 == pro*
neu) dtype = 112;
   679   else if (type1*type2 == neu*neu) dtype = 122;
   688     G4cout << 
" >>> G4NucleiModel::generateInteractionPartners" << 
G4endl;
   702   } 
else if (zone == 0) {           
   714     G4cout << 
" r_in " << r_in << 
" r_out " << r_out << 
" path " << path
   720       G4cerr << 
" generateInteractionPartners-> negative path length" << 
G4endl;
   724   if (std::fabs(path) < 
small) {    
   727     G4cout << 
" generateInteractionPartners-> zero path" << 
G4endl;
   739   for (
G4int ip = 1; ip < 3; ip++) {
   750     if (path<
small || spath < path) {
   766       G4cout << 
" trying quasi-deuterons with bullet: "   780     G4cout << 
" ptype=" << ptype << 
" using pp target\n" << ppd << 
G4endl;
   783       tot_invmfp += invmfp;
   792     G4cout << 
" ptype=" << ptype << 
" using np target\n" << npd << 
G4endl;
   795       tot_invmfp += invmfp;
   804     G4cout << 
" ptype=" << ptype << 
" using nn target\n" << nnd << 
G4endl;
   807       tot_invmfp += invmfp;
   814       for (
size_t i=0; i<
qdeutrons.size(); i++) {
   815     G4cout << 
" acsecs[" << 
qdeutrons[i].getDefinition()->GetParticleName()
   821     if (tot_invmfp > 
small) {       
   824       if (path<
small || apath < path) {     
   825     G4double sl = inuclRndm() * tot_invmfp;
   828     for (
size_t i = 0; i < 
qdeutrons.size(); i++) {
   859              std::vector<G4CascadParticle>& outgoing_cparticles) {
   861     G4cout << 
" >>> G4NucleiModel::generateParticleFate" << 
G4endl;
   866 #ifdef G4CASCADE_CHECK_ECONS   871   outgoing_cparticles.clear();      
   876       G4cerr << 
" generateParticleFate-> got empty interaction-partners list "   885       G4cout << 
" no interactions; moving to next zone" << 
G4endl;
   890     outgoing_cparticles.push_back(cparticle);
   902     G4cout << 
" processing " << npart-1 << 
" possible interactions" << 
G4endl;
   906   G4bool no_interaction = 
true;
   909   for (
G4int i=0; i<npart-1; i++) { 
   916       G4cout << 
" target " << target.
type() << 
" bullet " << bullet.
type()
   931 #ifdef G4CASCADE_CHECK_ECONS   938     std::vector<G4InuclElementaryParticle>& outgoing_particles = 
   941     if (!
passFermi(outgoing_particles, zone)) 
continue; 
   951     std::sort(outgoing_particles.begin(), outgoing_particles.end(),
   955       G4cout << 
" adding " << outgoing_particles.size()
   956          << 
" output particles" << 
G4endl;
   960     for (
G4int ip = 0; ip < 
G4int(outgoing_particles.size()); ip++) { 
   966     no_interaction = 
false;
   970 #ifdef G4CASCADE_DEBUG_CHARGE   974       for (
G4int ip = 0; ip < 
G4int(outgoing_particles.size()); ip++) 
   975     out_charge += outgoing_particles[ip].getCharge();
   977       G4cout << 
" multiplicity " << outgoing_particles.size()
   978          << 
" bul type " << bullet.
type()
   979          << 
" targ type " << target.
type()
   980          << 
"\n initial charge "   982          << 
" out charge " << out_charge << 
G4endl;  
  1002       neutronNumberCurrent--;
  1010       neutronNumberCurrent--;
  1016   if (no_interaction) {         
  1021     if (!prescatCP_G4MT_TLS_) {
  1033     outgoing_cparticles.push_back(cparticle);
  1036 #ifdef G4CASCADE_CHECK_ECONS  1038       balance.
collide(&prescatCP, 0, outgoing_cparticles);
  1050   if (qdtype==
pn || qdtype==0)      
  1051     return (ptype==
pi0 || ptype==
pip || ptype==
pim || ptype==
gam || ptype==
mum);
  1052   else if (qdtype==
pp)          
  1053     return (ptype==
pi0 || ptype==
pim || ptype==
gam || ptype==
mum);
  1054   else if (qdtype==
nn)          
  1055     return (ptype==
pi0 || ptype==
pip || ptype==
gam);
  1068   for (
G4int i = 0; i < 
G4int(particles.size()); i++) {
  1069     if (!particles[i].
nucleon()) 
continue;
  1071     G4int type   = particles[i].type();
  1072     G4double mom = particles[i].getMomModule();
  1076       G4cout << 
" type " << type << 
" p " << mom << 
" pf " << pfermi << 
G4endl;
  1092     G4cout << 
" >>> G4NucleiModel::passTrailing " << hit_position << 
G4endl;
  1109     G4cout << 
" >>> G4NucleiModel::boundaryTransition" << 
G4endl;
  1132     G4cout << 
"Potentials for type " << type << 
" = "   1137   G4double qv = dv * dv + 2.0 * dv * mom.
e() + pr * 
pr;
  1142     G4cout << 
" type " << type << 
" zone " << zone << 
" next " << next_zone
  1143        << 
" qv " << qv << 
" dv " << dv << 
G4endl;
  1152     p1r = std::sqrt(qv);
  1153     if (pr < 0.0) p1r = -p1r;
  1162     G4cout << 
" prr " << prr << 
" delta px " << prr*pos.
x() << 
" py "  1163        << prr*pos.
y()  << 
" pz " << prr*pos.
z() << 
" mag "  1164        << std::fabs(prr*r) << 
G4endl;
  1177     G4cout << 
" >>> G4NucleiModel::choosePointAlongTraj" << 
G4endl;
  1190     G4cout << 
" pos " << pos << 
" phat " << phat << 
" rhat " << rhat << 
G4endl;
  1195   if (prang < 1
e-6) posout = -
pos;      
  1216     G4cout << 
" posmid " << posmid << 
" lenmid " << lenmid
  1217        << 
" zoneout " << zoneout << 
" zonemid " << zonemid
  1218        << 
" ncross " << ncross << 
G4endl;
  1222   std::vector<G4double> wtlen(ncross,0.);   
  1223   std::vector<G4double> len(ncross,0.);     
  1227   for (i=0; i<ncross/2; i++) {
  1231     len[i] = lenmid - ds;       
  1232     len[ncross-1-i] = lenmid + ds;  
  1235       G4cout << 
" i " << i << 
" iz " << iz << 
" ds " << ds
  1236          << 
" len " << len[i] << 
G4endl;
  1241   for (i=1; i<ncross; i++) {
  1242     G4int iz = (i<ncross/2) ? zoneout-i+1 : zoneout-ncross+i+1;
  1256     wtlen[i] = wtlen[i-1] + wt;
  1259       G4cout << 
" i " << i << 
" iz " << iz << 
" avg.mfp " << 1./invmfp
  1260          << 
" dlen " << dlen  << 
" wt " << wt << 
" wtlen " << wtlen[i]
  1266   std::transform(wtlen.begin(), wtlen.end(), wtlen.begin(),
  1267          std::bind2nd(std::divides<G4double>(), wtlen.back()));
  1271     for (i=0; i<ncross; i++) 
G4cout << 
" " << wtlen[i];
  1277   G4int ir = std::upper_bound(wtlen.begin(),wtlen.end(),rand) - wtlen.begin();
  1279   G4double frac = (rand-wtlen[ir-1]) / (wtlen[ir]-wtlen[ir-1]);
  1280   G4double drand = (1.-frac)*len[ir-1] + frac*len[ir];
  1283     G4cout << 
" rand " << rand << 
" ir " << ir << 
" frac " << frac
  1284        << 
" drand " << drand << 
G4endl;
  1287   pos += drand * phat;      
  1295        << 
" @ " << pos << 
G4endl;
  1314     G4cout << 
" >>> G4NucleiModel::worthToPropagate" << 
G4endl;
  1334          << 
" potential=" << ekin_cut
  1335          << 
" : worth? " << worth << 
G4endl;
  1345     G4cout << 
" >>> G4NucleiModel::getRatio " << ip << 
G4endl;
  1390     G4cout << 
" >>> G4NucleiModel::initializeCascad(particle)" << 
G4endl;
  1396   G4double costh = std::sqrt(1.0 - inuclRndm());
  1417     G4cout << 
" >>> G4NucleiModel::initializeCascad(bullet,target,output)"  1421   const G4double max_a_for_cascad = 5.0;
  1423   const G4double small_ekin = 1.0e-6;
  1424   const G4double r_large2for3 = 62.0;
  1427   const G4double r_large2for4 = 69.14;
  1430   const G4int itry_max = 100;
  1433   std::vector<G4CascadParticle>& casparticles = output.first;
  1434   std::vector<G4InuclElementaryParticle>& particles = output.second;
  1436   casparticles.clear();     
  1447   if (ab < max_a_for_cascad) {
  1451     G4double ben = benb < bent ? bent : benb;
  1457       while (casparticles.size() == 0 && itryg < itry_max) {      
  1475       while (bad && itry < itry_max) {  
  1477         p = 456.0 * inuclRndm();
  1479         if (p * p / (p * p + 2079.36) / (p * p + 2079.36) > 1.2023
e-4 * inuclRndm() &&
  1480            p * r > 312.0) bad = 
false;
  1483       if (itry == itry_max)
  1485           G4cout << 
" deutron bullet generation-> itry = " << itry_max << 
G4endl;   
  1507         while (badco && itry < itry_max) {
  1512           for (i = 0; i < 2; i++) {
  1517         while (itry1 < itry_max) {  
  1519           ss = -
G4Log(inuclRndm());
  1520           u = fmax * inuclRndm();
  1521           rho = std::sqrt(ss) * 
G4Exp(-ss);
  1523           if (rho > u && ss < s3max) {
  1524             ss = r0forAeq3 * std::sqrt(ss);
  1525             coord1 = generateWithRandomAngles(ss).vect();
  1535         if (itry1 == itry_max) { 
  1536           coord1.
set(10000.,10000.,10000.);
  1547           coordinates.push_back(coord1);        
  1549           G4bool large_dist = 
false;
  1551           for (i = 0; i < 2; i++) {
  1552         for (
G4int j = i+1; j < 3; j++) {
  1553           G4double r2 = (coordinates[i]-coordinates[j]).mag2();
  1556             G4cout << 
" i " << i << 
" j " << j << 
" r2 " << r2 << 
G4endl;
  1559           if (r2 > r_large2for3) {
  1566         if (large_dist) 
break;
  1569           if(!large_dist) badco = 
false;
  1576         G4double u = b1 + std::sqrt(b1 * b1 + b);
  1579         while (badco && itry < itry_max) {
  1585           for (i = 0; i < ab-1; i++) {
  1589         while (itry1 < itry_max) {  
  1591           ss = -
G4Log(inuclRndm());
  1592           u = fmax * inuclRndm();
  1594           if (std::sqrt(ss) * 
G4Exp(-ss) * (1.0 + ss/b) > u
  1596             ss = r0forAeq4 * std::sqrt(ss);
  1597             coord1 = generateWithRandomAngles(ss).vect();
  1608         if (itry1 == itry_max) { 
  1609           coord1.
set(10000.,10000.,10000.);
  1624           G4bool large_dist = 
false;
  1626           for (i = 0; i < ab-1; i++) {
  1627         for (
G4int j = i+1; j < 
ab; j++) {
  1632             G4cout << 
" i " << i << 
" j " << j << 
" r2 " << r2 << 
G4endl;
  1635           if (r2 > r_large2for4) {
  1642         if (large_dist) 
break;
  1645           if (!large_dist) badco = 
false;
  1650         G4cout << 
" can not generate the nucleons coordinates for a "  1653         casparticles.clear();   
  1662         for (
G4int i = 0; i < ab - 1; i++) {
  1665           while(itry2 < itry_max) { 
  1667         u = -
G4Log(0.879853 - 0.8798502 * inuclRndm());
  1670         if(x > inuclRndm()) {
  1671           p = std::sqrt(0.01953 * u);
  1672           mom = generateWithRandomAngles(p, massb);
  1679           if(itry2 == itry_max) {
  1680         G4cout << 
" can not generate proper momentum for a "  1683         casparticles.clear();   
  1706       if(rp > rb) rb = rp;
  1710     G4double s1 = std::sqrt(inuclRndm()); 
  1713     G4ThreeVector global_pos(rz*std::cos(phi), rz*std::sin(phi),
  1723     for (
G4int ipa = 0; ipa < 
ab; ipa++) {
  1724       G4int knd = ipa < zb ? 1 : 2;
  1735       ipart->setMomentum(toTheBulletRestFrame.
backToTheLab(ipart->getMomentum())); 
  1752         if(std::fabs(t1) <= std::fabs(t2)) {     
  1757           if(tr < 0.0 && t2 > 0.0) {
  1768           if(tr < 0.0 && t1 > 0.0) {
  1787       if(casparticles.size() == 0) {
  1790     G4cout << 
" can not generate proper distribution for " << itry_max
  1799     G4cout << 
" cascad particles: " << casparticles.size() << 
G4endl;
  1800     for(ip = 0; ip < 
G4int(casparticles.size()); ip++)
  1803     G4cout << 
" outgoing particles: " << particles.size() << 
G4endl;
  1804     for(ip = 0; ip < 
G4int(particles.size()); ip++)
  1839     G4cout << 
" ip " << ip << 
" zone " << zone << 
" ekin " << ekin
  1841        << 
" csec " << csec << 
G4endl;
  1844   if (csec <= 0.) 
return 0.;    
  1856   const G4double young_cut = std::sqrt(10.0) * 0.25;
  1861   if (invmfp < 
small) 
return spath; 
  1864   if (pw < -huge_num) pw = -huge_num;
  1865   pw = 1.0 - 
G4Exp(pw);
  1868     G4cout << 
" mfp " << 1./invmfp << 
" pw " << pw << 
G4endl;
  1871   if (
forceFirst(cparticle) || (inuclRndm() < pw)) {
  1872     spath = -
G4Log(1.0 - pw * inuclRndm()) / invmfp;
  1873     if (cparticle.
young(young_cut, spath)) spath = 
large;
  1876       G4cout << 
" spath " << spath << 
" path " << path << 
G4endl;
  1887     G4cerr << 
" absorptionCrossSection only valid for incident pions" << 
G4endl;
  1897     if (ke < 0.3) csec = (0.1106 / std::sqrt(ke) - 0.8
  1898               + 0.08 / ((ke-0.123)*(ke-0.123) + 0.0056) );
  1899     else if (ke < 1.0) csec = 3.6735 * (1.0-ke)*(1.0-ke);     
  1908   if (csec < 0.0) csec = 0.0;
  1911     G4cout << 
" ekin " << ke << 
" abs. csec " << csec << 
" mb" << 
G4endl;   
  1923     G4cerr << 
" unknown collison type = " << rtype << 
G4endl;
 void reset(G4int nHitNeutrons=0, G4int nHitProtons=0, const std::vector< G4ThreeVector > *hitPoints=0)
 
G4bool isNeutrino() const
 
void set(double x, double y, double z)
 
void updateParticleMomentum(const G4LorentzVector &mom)
 
std::pair< std::vector< G4CascadParticle >, std::vector< G4InuclElementaryParticle > > modelLists
 
G4bool worthToPropagate(const G4CascadParticle &cparticle) const
 
static const G4CascadeChannel * GetTable(G4int initialState)
 
void incrementReflectionCounter()
 
G4double absorptionCrossSection(G4double e, G4int type) const
 
void incrementCurrentPath(G4double npath)
 
G4double getCurrentDensity(G4int ip, G4int izone) const
 
const G4double gammaQDscale
 
G4bool young(G4double young_path_cut, G4double cpath) const
 
std::vector< G4double > vz
 
void generateInteractionPartners(G4CascadParticle &cparticle)
 
G4double zoneIntegralWoodsSaxon(G4double ur1, G4double ur2, G4double nuclearRadius) const
 
std::vector< G4double > zone_radii
 
const G4ThreeVector & getPosition() const
 
G4double generateInteractionLength(const G4CascadParticle &cparticle, G4double path, G4double invmfp) 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 collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
 
G4bool forceFirst(const G4CascadParticle &cparticle) const
 
G4double getFermiKinetic(G4int ip, G4int izone) const
 
G4bool passFermi(const std::vector< G4InuclElementaryParticle > &particles, G4int zone)
 
void propagateAlongThePath(G4double path)
 
G4double zoneIntegralGaussian(G4double ur1, G4double ur2, G4double nuclearRadius) const
 
G4double getPathToTheNextZone(G4double rz_in, G4double rz_out)
 
std::vector< partner > thePartners
 
G4bool reflectedNow() const
 
void updatePosition(const G4ThreeVector &pos)
 
void boundaryTransition(G4CascadParticle &cparticle)
 
const G4InuclElementaryParticle protonEP
 
static G4bool useQuasiDeuteron(G4int ptype, G4int qdtype=0)
 
G4double getVolume(G4int izone) const
 
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
 
static G4double getParticleMass(G4int type)
 
void setBullet(const G4InuclParticle *bullet)
 
G4CascadParticle initializeCascad(G4InuclElementaryParticle *particle)
 
G4InuclNuclei * theNucleus
 
std::vector< G4double > pf
 
const G4double radiusScale
 
G4double totalCrossSection(G4double ke, G4int rtype) const
 
static const G4double large
 
virtual void setVerboseLevel(G4int verbose=0)
 
virtual G4double getCrossSection(double ke) const =0
 
const G4double radiusScale2
 
static const G4double piTimes4thirds
 
double angle(const Hep3Vector &) const
 
void fillBindingEnergies()
 
G4int getGeneration() const
 
G4CollisionOutput EPCoutput
 
const G4double radScaleAlpha
 
G4InuclElementaryParticle generateQuasiDeuteron(G4int type1, G4int type2, G4int zone) const
 
void updateZone(G4int izone)
 
G4double getRatio(G4int ip) const
 
void fillZoneRadii(G4double nuclearRadius)
 
G4double interpolate(const G4double x, const G4double(&yb)[nBins]) const
 
G4LorentzConvertor dummy_convertor
 
G4GLOB_DLL std::ostream G4cout
 
G4int getZone(G4double r) const
 
double A(double temperature)
 
Hep3Vector cross(const Hep3Vector &) const
 
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
 
std::vector< G4ThreeVector > coordinates
 
G4LorentzVector backToTheLab(const G4LorentzVector &mom) const
 
G4double getFermiMomentum(G4int ip, G4int izone) const
 
std::vector< G4InuclElementaryParticle >::iterator particleIterator
 
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
 
const G4double crossSectionUnits
 
G4LorentzVector generateNucleonMomentum(G4int type, G4int zone) const
 
std::vector< G4double > binding_energies
 
G4int getCurrentZone() const
 
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
 
double dot(const Hep3Vector &) const
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
G4bool quasi_deutron() const
 
G4bool movingInsideNuclei() const
 
G4double getKineticEnergy() const
 
static const G4double small
 
G4int numberOfOutgoingParticles() const
 
std::vector< G4InuclElementaryParticle > raw_particles
 
G4double getCharge() const
 
G4double getDensity(G4int ip, G4int izone) const
 
const G4InuclElementaryParticle & getParticle() const
 
static G4bool sortPartners(const partner &p1, const partner &p2)
 
static const G4double hyperon_vp
 
void choosePointAlongTraj(G4CascadParticle &cparticle)
 
cout<< "-> Edep in the target
 
const G4InuclElementaryParticle neutronEP
 
std::vector< G4InuclElementaryParticle >::iterator particleIterator
 
std::vector< G4ThreeVector > collisionPts
 
std::vector< G4double > acsecs
 
G4double getKinEnergyInTheTRS() const
 
void setVect(const Hep3Vector &)
 
G4InuclElementaryParticle generateNucleon(G4int type, G4int zone) const
 
const G4double fermiMomentum
 
std::vector< std::vector< G4double > > fermi_momenta
 
void toTheTargetRestFrame()
 
G4bool isProjectile(const G4CascadParticle &cparticle) const
 
std::vector< std::vector< G4double > > zone_potentials
 
G4int neutronNumberCurrent
 
G4bool passTrailing(const G4ThreeVector &hit_position)
 
Hep3Vector & rotate(double, const Hep3Vector &)
 
static const G4double pion_vp
 
void printCollisionOutput(std::ostream &os=G4cout) const
 
const G4double radiusForSmall
 
double epsilon(double density, double temperature)
 
G4LorentzVector getMomentum() const
 
static const G4double pos
 
G4double getEnergy() const
 
G4GLOB_DLL std::ostream G4cerr
 
G4double getPotential(G4int ip, G4int izone) const
 
void setTarget(const G4InuclParticle *target)