83 G4double pZ1, G4double pZ2,
84 G4double pRmin1, G4double pRmax1,
85 G4double pRmin2, G4double pRmax2)
89 kRadTolerance (G4GeometryTolerance::GetInstance()->GetRadialTolerance()),
90 kAngTolerance (G4GeometryTolerance::GetInstance()->GetAngularTolerance()),
103 std::ostringstream message;
104 message <<
"Invalid Z half-length for Solid: " << GetName() << G4endl
106 G4Exception(
"G4ShiftedCone::G4ShiftedCone()",
"GeomSolids0002",
107 FatalException, message);
112 if (((pRmin1>=pRmax1) || (pRmin2>=pRmax2) || (pRmin1<0)) && (pRmin2<0))
114 std::ostringstream message;
115 message <<
"Invalid values of radii for Solid: " << GetName() << G4endl
116 <<
" pRmin1 = " << pRmin1 <<
", pRmin2 = " << pRmin2
117 <<
", pRmax1 = " << pRmax1 <<
", pRmax2 = " << pRmax2;
118 G4Exception(
"G4ShiftedCone::G4ShiftedCone()",
"GeomSolids0002",
119 FatalException, message) ;
327 const G4VoxelLimits& pVoxelLimit,
328 const G4AffineTransform& pTransform,
330 G4double& pMax )
const
332 G4ThreeVector bmin, bmax;
339 G4BoundingEnvelope bbox(bmin,bmax);
341 if (
true)
return bbox.CalculateExtent(pAxis,pVoxelLimit,pTransform,pMin,pMax);
343 if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax))
345 return exist = (pMin < pMax) ?
true :
false;
353 G4double z1 =
GetZ1();
354 G4double z2 =
GetZ2();
359 const G4int NSTEPS = 24;
360 G4double astep =
twopi/NSTEPS;
361 G4int ksteps = (dphi <= astep) ? 1 : (G4int)((dphi-
deg)/astep) + 1;
362 G4double ang = dphi/ksteps;
364 G4double sinHalf = std::sin(0.5*ang);
365 G4double cosHalf = std::cos(0.5*ang);
366 G4double sinStep = 2.*sinHalf*cosHalf;
367 G4double cosStep = 1. - 2.*sinHalf*sinHalf;
368 G4double rext1 = rmax1/cosHalf;
369 G4double rext2 = rmax2/cosHalf;
373 if (rmin1 == 0 && rmin2 == 0 && dphi ==
twopi)
375 G4double sinCur = sinHalf;
376 G4double cosCur = cosHalf;
378 G4ThreeVectorList baseA(NSTEPS),baseB(NSTEPS);
379 for (G4int k=0; k<NSTEPS; ++k)
381 baseA[k].set(rext1*cosCur,rext1*sinCur, z1);
382 baseB[k].set(rext2*cosCur,rext2*sinCur, z2);
384 G4double sinTmp = sinCur;
385 sinCur = sinCur*cosStep + cosCur*sinStep;
386 cosCur = cosCur*cosStep - sinTmp*sinStep;
388 std::vector<const G4ThreeVectorList *> polygons(2);
389 polygons[0] = &baseA;
390 polygons[1] = &baseB;
391 G4BoundingEnvelope benv(bmin,bmax,polygons);
392 exist = benv.CalculateExtent(pAxis,pVoxelLimit,pTransform,pMin,pMax);
401 G4double sinCur = sinStart*cosHalf + cosStart*sinHalf;
402 G4double cosCur = cosStart*cosHalf - sinStart*sinHalf;
405 G4ThreeVectorList pols[NSTEPS+2];
406 for (G4int k=0; k<ksteps+2; ++k) pols[k].resize(4);
407 pols[0][0].set(rmin2*cosStart,rmin2*sinStart, z2);
408 pols[0][1].set(rmin1*cosStart,rmin1*sinStart, z1);
409 pols[0][2].set(rmax1*cosStart,rmax1*sinStart, z1);
410 pols[0][3].set(rmax2*cosStart,rmax2*sinStart, z2);
411 for (G4int k=1; k<ksteps+1; ++k)
413 pols[k][0].set(rmin2*cosCur,rmin2*sinCur, z2);
414 pols[k][1].set(rmin1*cosCur,rmin1*sinCur, z1);
415 pols[k][2].set(rext1*cosCur,rext1*sinCur, z1);
416 pols[k][3].set(rext2*cosCur,rext2*sinCur, z2);
418 G4double sinTmp = sinCur;
419 sinCur = sinCur*cosStep + cosCur*sinStep;
420 cosCur = cosCur*cosStep - sinTmp*sinStep;
422 pols[ksteps+1][0].set(rmin2*cosEnd,rmin2*sinEnd, z2);
423 pols[ksteps+1][1].set(rmin1*cosEnd,rmin1*sinEnd, z1);
424 pols[ksteps+1][2].set(rmax1*cosEnd,rmax1*sinEnd, z1);
425 pols[ksteps+1][3].set(rmax2*cosEnd,rmax2*sinEnd, z2);
428 std::vector<const G4ThreeVectorList *> polygons;
429 polygons.resize(ksteps+2);
430 for (G4int k=0; k<ksteps+2; ++k) polygons[k] = &pols[k];
431 G4BoundingEnvelope benv(bmin,bmax,polygons);
432 exist = benv.CalculateExtent(pAxis,pVoxelLimit,pTransform,pMin,pMax);
445 G4int noSurfaces = 0;
447 G4double distZ, distRMin, distRMax;
449 G4double tanRMin, secRMin, pRMin, widRMin;
450 G4double tanRMax, secRMax, pRMax, widRMax;
452 G4ThreeVector norm, sumnorm(0.,0.,0.), nZ = G4ThreeVector(0.,0.,1.);
453 G4ThreeVector nR, nr(0.,0.,0.), nPs, nPe;
457 distZ = std::fabs(std::fabs(
z) -
fDz);
458 rho = std::sqrt(p.x()*p.x() + p.y()*p.y());
461 secRMin = std::sqrt(1 + tanRMin*tanRMin);
462 pRMin = rho -
z*tanRMin;
464 distRMin = std::fabs(pRMin - widRMin)/secRMin;
467 secRMax = std::sqrt(1+tanRMax*tanRMax);
468 pRMax = rho -
z*tanRMax;
470 distRMax = std::fabs(pRMax - widRMax)/secRMax;
494 nR = G4ThreeVector(p.x()/rho/secRMax, p.y()/rho/secRMax, -tanRMax/secRMax);
497 nr = G4ThreeVector(-p.x()/rho/secRMin,-p.y()/rho/secRMin,tanRMin/secRMin);
527 if (
z >= 0.) { sumnorm += nZ; }
528 else { sumnorm -= nZ; }
530 if ( noSurfaces == 0 )
533 G4Exception(
"G4ShiftedCone::SurfaceNormal(p)",
"GeomSolids1002",
534 JustWarning,
"Point p is not on surface !?" );
538 else if ( noSurfaces == 1 ) { norm = sumnorm; }
539 else { norm = sumnorm.unit(); }
554 G4double distZ, distRMin, distRMax;
555 G4double tanRMin, secRMin, pRMin, widRMin ;
556 G4double tanRMax, secRMax, pRMax, widRMax ;
560 distZ = std::fabs(std::fabs(
z) -
fDz) ;
561 rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ;
564 secRMin = std::sqrt(1 + tanRMin*tanRMin) ;
565 pRMin = rho -
z*tanRMin ;
567 distRMin = std::fabs(pRMin - widRMin)/secRMin ;
570 secRMax = std::sqrt(1+tanRMax*tanRMax) ;
571 pRMax = rho -
z*tanRMax ;
573 distRMax = std::fabs(pRMax - widRMax)/secRMax ;
575 if (distRMin < distRMax)
577 if (distZ < distRMin)
590 if (distZ < distRMax)
628 norm = G4ThreeVector(-p.x()/rho, -p.y()/rho, tanRMin/secRMin) ;
632 norm = G4ThreeVector(p.x()/rho, p.y()/rho, -tanRMax/secRMax) ;
635 if (
z > 0) { norm = G4ThreeVector(0,0,1); }
636 else { norm = G4ThreeVector(0,0,-1); }
646 G4Exception(
"G4ShiftedCone::ApproxSurfaceNormal()",
647 "GeomSolids1002", JustWarning,
648 "Undefined side for valid surface normal to solid.");
679 const G4ThreeVector& v )
const
681 G4double snxt = kInfinity ;
684 G4double tanRMax,secRMax,rMaxAv;
685 G4double tanRMin,secRMin,rMinAv;
688 G4double tolORMin,tolIRMin,tolIRMin2 ;
689 G4double tolIRMax,tolIRMax2 ;
690 G4double tolODz,tolIDz ;
692 G4double sd,xi,yi,zi,ri=0.,risec,rhoi2;
694 G4double t1,t2,t3,b,c,d ;
695 G4double nt1,nt2,nt3 ;
705 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
717 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
726 if (std::fabs(
z) >= tolIDz)
730 sd = (std::fabs(
z) -
fDz)/std::fabs(v.z()) ;
732 if( sd < 0.0 ) { sd = 0.0; }
734 xi = p.x() + sd*v.x() ;
735 yi = p.y() + sd*v.y() ;
736 rhoi2 = xi*xi + yi*yi ;
760 tolIRMin2 = tolIRMin*tolIRMin ;
767 if ( tolIRMax > 0 ) { tolIRMax2 = tolIRMax*tolIRMax; }
768 else { tolIRMax2 = 0.0; }
770 if ( (tolIRMin2 <= rhoi2) && (rhoi2 <= tolIRMax2) )
811 t1 = 1.0 - v.z()*v.z() ;
812 t2 = p.x()*v.x() + p.y()*v.y() ;
813 t3 = p.x()*p.x() + p.y()*p.y() ;
814 rin = tanRMin*
z + rMinAv ;
815 rout = tanRMax*
z + rMaxAv ;
820 nt1 = t1 - (tanRMax*v.z())*(tanRMax*v.z()) ;
821 nt2 = t2 - tanRMax*v.z()*rout ;
822 nt3 = t3 - rout*rout ;
838 if ((rout < 0) && (nt3 <= 0))
843 if (b>0) { sd = c/(-b-std::sqrt(d)); }
844 else { sd = -b + std::sqrt(d); }
848 if ((b <= 0) && (c >= 0))
850 sd=c/(-b+std::sqrt(d));
856 sd = -b + std::sqrt(d) ;
869 G4double fTerm = sd-std::fmod(sd,dRmax);
874 if (std::fabs(zi) <= tolODz)
900 && (nt2 < 0) && (d >= 0) && (std::fabs(
z) <= tolIDz) )
907 risec = std::sqrt(xi*xi + yi*yi)*secRMax ;
908 Normal = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax) ;
919 if (
Normal.dot(v) <= 0 ) {
return 0.0; }
930 if ( sd < 0 ) {
return kInfinity; }
935 if ((std::fabs(zi) <= tolODz) && (nt2 < 0))
969 nt1 = t1 - (tanRMin*v.z())*(tanRMin*v.z()) ;
970 nt2 = t2 - tanRMin*v.z()*rin ;
985 if(b>0){sd = c/( -b-std::sqrt(d));}
986 else {sd = -b + std::sqrt(d) ;}
992 G4double fTerm = sd-std::fmod(sd,dRmax);
997 if ( std::fabs(zi) <= tolODz )
1026 xi = p.x() + sd*v.x() ;
1027 yi = p.y() + sd*v.y() ;
1028 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1029 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1030 if (
Normal.dot(v) <= 0 ) {
return sd; }
1050 if (b>0) { sd = c/(-b-std::sqrt(d)); }
1051 else { sd = -b + std::sqrt(d); }
1053 ri = rMinAv + zi*tanRMin ;
1057 if ( (sd >= 0) && (std::fabs(zi) <= tolODz) )
1061 G4double fTerm = sd-std::fmod(sd,dRmax);
1090 xi = p.x() + sd*v.x() ;
1091 yi = p.y() + sd*v.y() ;
1092 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1093 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1094 if (
Normal.dot(v) <= 0 ) {
return sd; }
1101 if (b>0) { sd = -b - std::sqrt(d); }
1102 else { sd = c/(-b+std::sqrt(d)); }
1104 ri = rMinAv + zi*tanRMin ;
1106 if ( (sd >= 0) && (ri > 0) && (std::fabs(zi) <= tolODz) )
1110 G4double fTerm = sd-std::fmod(sd,dRmax);
1139 xi = p.x() + sd*v.x() ;
1140 yi = p.y() + sd*v.y() ;
1141 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1142 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1143 if (
Normal.dot(v) <= 0 ) {
return sd; }
1157 if ( std::fabs(
z) <= tolODz )
1182 if (b>0) { sd = -b - std::sqrt(d); }
1183 else { sd = c/(-b+std::sqrt(d)); }
1185 ri = rMinAv + zi*tanRMin ;
1189 if (b>0) { sd = c/(-b-std::sqrt(d)); }
1190 else { sd = -b + std::sqrt(d); }
1194 if ( (sd >= 0) && (std::fabs(zi) <= tolODz) )
1198 G4double fTerm = sd-std::fmod(sd,dRmax);
1213 else {
return kInfinity; }
1225 if (b>0) { sd = c/(-b-std::sqrt(d)); }
1226 else { sd = -b + std::sqrt(d) ; }
1229 if ( (sd >= 0) && (std::fabs(zi) <= tolODz) )
1233 G4double fTerm = sd-std::fmod(sd,dRmax);
1353 G4double safe=0.0, rho, safeR1, safeR2, safeZ;
1354 G4double tanRMin, secRMin, pRMin ;
1355 G4double tanRMax, secRMax, pRMax ;
1359 rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ;
1360 safeZ = std::fabs(
z) -
fDz ;
1365 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
1367 safeR1 = (pRMin - rho)/secRMin ;
1370 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
1372 safeR2 = (rho - pRMax)/secRMax ;
1374 if ( safeR1 > safeR2) { safe = safeR1; }
1375 else { safe = safeR2; }
1380 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
1382 safe = (rho - pRMax)/secRMax ;
1384 if ( safeZ > safe ) { safe = safeZ; }
1405 if ( safe < 0.0 ) { safe = 0.0; }
1416 const G4ThreeVector& v,
1417 const G4bool calcNorm,
1419 G4ThreeVector *n)
const
1423 G4double snxt,srd,pdist ;
1425 G4double tanRMax, secRMax, rMaxAv ;
1426 G4double tanRMin, secRMin, rMinAv ;
1428 G4double t1, t2, t3, rout, rin, nt1, nt2, nt3 ;
1429 G4double b, c, d, sr2, sr3 ;
1434 G4double slentol = kInfinity ;
1439 G4double zi, ri, deltaRoi2, xi, yi, risec ;
1451 snxt = pdist/v.z() ;
1458 *n = G4ThreeVector(0,0,1) ;
1464 else if ( v.z() < 0.0 )
1470 snxt = -pdist/v.z() ;
1477 *n = G4ThreeVector(0,0,-1) ;
1507 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
1511 t1 = 1.0 - v.z()*v.z() ;
1512 t2 = p.x()*v.x() + p.y()*v.y() ;
1513 t3 = p.x()*p.x() + p.y()*p.y() ;
1514 rout = tanRMax*
z + rMaxAv ;
1516 nt1 = t1 - (tanRMax*v.z())*(tanRMax*v.z()) ;
1517 nt2 = t2 - tanRMax*v.z()*rout ;
1518 nt3 = t3 - rout*rout ;
1522 deltaRoi2 = snxt*snxt*t1 + 2*snxt*t2 + t3
1525 else if ( v.z() < 0.0 )
1527 deltaRoi2 = snxt*snxt*t1 + 2*snxt*t2 + t3
1535 if ( nt1 && (deltaRoi2 > 0.0) )
1552 risec = std::sqrt(t3)*secRMax ;
1554 *n = G4ThreeVector(p.x()/risec,p.y()/risec,-tanRMax/secRMax);
1561 if (b>0) { srd = -b - std::sqrt(d); }
1562 else { srd = c/(-b+std::sqrt(d)) ; }
1564 zi =
z + srd*v.z() ;
1565 ri = tanRMax*zi + rMaxAv ;
1580 if (b>0) { sr2 = c/(-b-std::sqrt(d)); }
1581 else { sr2 = -b + std::sqrt(d); }
1582 zi =
z + sr2*v.z() ;
1583 ri = tanRMax*zi + rMaxAv ;
1612 risec = std::sqrt(t3)*secRMax;
1614 *n = G4ThreeVector(p.x()/risec,p.y()/risec,-tanRMax/secRMax);
1619 else if ( nt2 && (deltaRoi2 > 0.0) )
1625 risec = std::sqrt(t3)*secRMax;
1627 *n = G4ThreeVector(p.x()/risec,p.y()/risec,-tanRMax/secRMax);
1652 xi = p.x() + slentol*v.x();
1653 yi = p.y() + slentol*v.y();
1654 risec = std::sqrt(xi*xi + yi*yi)*secRMax;
1655 G4ThreeVector
Normal = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax);
1668 slentol = kInfinity ;
1677 nt1 = t1 - (tanRMin*v.z())*(tanRMin*v.z()) ;
1681 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
1683 rin = tanRMin*
z + rMinAv ;
1684 nt2 = t2 - tanRMin*v.z()*rin ;
1685 nt3 = t3 - rin*rin ;
1702 if (calcNorm) { *validNorm =
false; }
1708 if (b>0) { sr2 = -b - std::sqrt(d); }
1709 else { sr2 = c/(-b+std::sqrt(d)); }
1710 zi =
z + sr2*v.z() ;
1711 ri = tanRMin*zi + rMinAv ;
1723 if (b>0) { sr3 = c/(-b-std::sqrt(d)); }
1724 else { sr3 = -b + std::sqrt(d) ; }
1733 zi =
z + sr3*v.z() ;
1734 ri = tanRMin*zi + rMinAv ;
1772 xi = p.x() + slentol*v.x() ;
1773 yi = p.y() + slentol*v.y() ;
1774 if( sidetol==
kRMax )
1776 risec = std::sqrt(xi*xi + yi*yi)*secRMax ;
1777 Normal = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax) ;
1781 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1782 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1800 slentol = kInfinity ;
1963 xi = p.x() + snxt*v.x() ;
1964 yi = p.y() + snxt*v.y() ;
1965 risec = std::sqrt(xi*xi + yi*yi)*secRMax ;
1966 *n = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax) ;
1970 *validNorm = false ;
1995 *n = G4ThreeVector(0,0,1) ;
1999 *n = G4ThreeVector(0,0,-1) ;
2005 std::ostringstream message;
2006 G4int oldprc = message.precision(16) ;
2007 message <<
"Undefined side for valid surface normal to solid."
2009 <<
"Position:" << G4endl << G4endl
2010 <<
"p.x() = " << p.x()/mm <<
" mm" << G4endl
2011 <<
"p.y() = " << p.y()/mm <<
" mm" << G4endl
2012 <<
"p.z() = " << p.z()/mm <<
" mm" << G4endl << G4endl
2013 <<
"pho at z = " << std::sqrt( p.x()*p.x()+p.y()*p.y() )/mm
2014 <<
" mm" << G4endl << G4endl ;
2015 if( p.x() != 0. || p.y() != 0.)
2017 message <<
"point phi = " << std::atan2(p.y(),p.x())/degree
2018 <<
" degree" << G4endl << G4endl ;
2020 message <<
"Direction:" << G4endl << G4endl
2021 <<
"v.x() = " << v.x() << G4endl
2022 <<
"v.y() = " << v.y() << G4endl
2023 <<
"v.z() = " << v.z() << G4endl<< G4endl
2024 <<
"Proposed distance :" << G4endl<< G4endl
2025 <<
"snxt = " << snxt/mm <<
" mm" << G4endl ;
2026 message.precision(oldprc) ;
2027 G4Exception(
"G4ShiftedCone::DistanceToOut(p,v,..)",
"GeomSolids1002",
2028 JustWarning, message) ;
2043 G4double safe=0.0, rho, safeR1, safeR2, safeZ;
2044 G4double tanRMin, secRMin, pRMin;
2045 G4double tanRMax, secRMax, pRMax;
2048 if(
Inside(p) == kOutside )
2050 G4int oldprc=G4cout.precision(16) ;
2053 G4cout <<
"Position:" << G4endl << G4endl ;
2054 G4cout <<
"p.x() = " << p.x()/mm <<
" mm" << G4endl ;
2055 G4cout <<
"p.y() = " << p.y()/mm <<
" mm" << G4endl ;
2056 G4cout <<
"p.z() = " << p.z()/mm <<
" mm" << G4endl << G4endl ;
2057 G4cout <<
"pho at z = " << std::sqrt( p.x()*p.x()+p.y()*p.y() )/mm
2058 <<
" mm" << G4endl << G4endl ;
2059 if( (p.x() != 0.) || (p.x() != 0.) )
2061 G4cout <<
"point phi = " << std::atan2(p.y(),p.x())/degree
2062 <<
" degree" << G4endl << G4endl ;
2064 G4cout.precision(oldprc) ;
2065 G4Exception(
"G4ShiftedCone::DistanceToOut(p)",
"GeomSolids1002",
2066 JustWarning,
"Point p is outside !?" );
2072 rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ;
2073 safeZ =
fDz - std::fabs(
z) ;
2078 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
2080 safeR1 = (rho - pRMin)/secRMin ;
2084 safeR1 = kInfinity ;
2088 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
2090 safeR2 = (pRMax - rho)/secRMax ;
2092 if (safeR1 < safeR2) { safe = safeR1; }
2093 else { safe = safeR2; }
2094 if (safeZ < safe) { safe = safeZ ; }
2112 if ( safe < 0 ) { safe = 0; }
2185 G4double cosu = std::cos(
phi);
2186 G4double sinu = std::sin(
phi);
2190 G4bool fPhiFullCone =
true;
2192 G4double chose = G4RandFlat::shoot(0.,Aone+Atwo+Athree+Afour+2.*Afive);
2194 if( (chose >= 0.) && (chose < Aone) )
2198 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);
2199 return G4ThreeVector (rone*cosu*(qone-zRand),
2200 rone*sinu*(qone-zRand), zRand +
fZshift);
2208 else if( (chose >= Aone) && (chose < Aone + Atwo) )
2212 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);
2213 return G4ThreeVector (rtwo*cosu*(qtwo-zRand),
2214 rtwo*sinu*(qtwo-zRand), zRand +
fZshift);
2222 else if( (chose >= Aone + Atwo) && (chose < Aone + Atwo + Athree) )
2224 return G4ThreeVector (rRand1*cosu, rRand1*sinu, -1*
fDz +
fZshift);
2226 else if( (chose >= Aone + Atwo + Athree)
2227 && (chose < Aone + Atwo + Athree + Afour) )
2229 return G4ThreeVector (rRand2*cosu,rRand2*sinu,
fDz +
fZshift);
2231 else if( (chose >= Aone + Atwo + Athree + Afour)
2232 && (chose < Aone + Atwo + Athree + Afour + Afive) )
2234 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);
2242 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);