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); }
647 G4Exception(
"G4ShiftedCone::ApproxSurfaceNormal()",
648 "GeomSolids1002", JustWarning,
649 "Undefined side for valid surface normal to solid.");
680 const G4ThreeVector& v )
const
682 G4double snxt = kInfinity ;
685 G4double tanRMax,secRMax,rMaxAv;
686 G4double tanRMin,secRMin,rMinAv;
689 G4double tolORMin,tolIRMin,tolIRMin2 ;
690 G4double tolIRMax,tolIRMax2 ;
691 G4double tolODz,tolIDz ;
693 G4double sd,xi,yi,zi,ri=0.,risec,rhoi2;
695 G4double t1,t2,t3,b,c,d ;
696 G4double nt1,nt2,nt3 ;
706 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
718 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
727 if (std::fabs(
z) >= tolIDz)
731 sd = (std::fabs(
z) -
fDz)/std::fabs(v.z()) ;
733 if( sd < 0.0 ) { sd = 0.0; }
735 xi = p.x() + sd*v.x() ;
736 yi = p.y() + sd*v.y() ;
737 rhoi2 = xi*xi + yi*yi ;
761 tolIRMin2 = tolIRMin*tolIRMin ;
768 if ( tolIRMax > 0 ) { tolIRMax2 = tolIRMax*tolIRMax; }
769 else { tolIRMax2 = 0.0; }
771 if ( (tolIRMin2 <= rhoi2) && (rhoi2 <= tolIRMax2) )
812 t1 = 1.0 - v.z()*v.z() ;
813 t2 = p.x()*v.x() + p.y()*v.y() ;
814 t3 = p.x()*p.x() + p.y()*p.y() ;
815 rin = tanRMin*
z + rMinAv ;
816 rout = tanRMax*
z + rMaxAv ;
821 nt1 = t1 - (tanRMax*v.z())*(tanRMax*v.z()) ;
822 nt2 = t2 - tanRMax*v.z()*rout ;
823 nt3 = t3 - rout*rout ;
839 if ((rout < 0) && (nt3 <= 0))
844 if (b>0) { sd = c/(-b-std::sqrt(d)); }
845 else { sd = -b + std::sqrt(d); }
849 if ((b <= 0) && (c >= 0))
851 sd=c/(-b+std::sqrt(d));
857 sd = -b + std::sqrt(d) ;
870 G4double fTerm = sd-std::fmod(sd,dRmax);
875 if (std::fabs(zi) <= tolODz)
901 && (nt2 < 0) && (d >= 0) && (std::fabs(
z) <= tolIDz) )
908 risec = std::sqrt(xi*xi + yi*yi)*secRMax ;
909 Normal = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax) ;
920 if (
Normal.dot(v) <= 0 ) {
return 0.0; }
931 if ( sd < 0 ) {
return kInfinity; }
936 if ((std::fabs(zi) <= tolODz) && (nt2 < 0))
966 nt1 = t1 - (tanRMin*v.z())*(tanRMin*v.z()) ;
967 nt2 = t2 - tanRMin*v.z()*rin ;
982 if(b>0){sd = c/( -b-std::sqrt(d));}
983 else {sd = -b + std::sqrt(d) ;}
989 G4double fTerm = sd-std::fmod(sd,dRmax);
994 if ( std::fabs(zi) <= tolODz )
1023 xi = p.x() + sd*v.x() ;
1024 yi = p.y() + sd*v.y() ;
1025 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1026 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1027 if (
Normal.dot(v) <= 0 ) {
return sd; }
1047 if (b>0) { sd = c/(-b-std::sqrt(d)); }
1048 else { sd = -b + std::sqrt(d); }
1050 ri = rMinAv + zi*tanRMin ;
1054 if ( (sd >= 0) && (std::fabs(zi) <= tolODz) )
1058 G4double fTerm = sd-std::fmod(sd,dRmax);
1087 xi = p.x() + sd*v.x() ;
1088 yi = p.y() + sd*v.y() ;
1089 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1090 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1091 if (
Normal.dot(v) <= 0 ) {
return sd; }
1098 if (b>0) { sd = -b - std::sqrt(d); }
1099 else { sd = c/(-b+std::sqrt(d)); }
1101 ri = rMinAv + zi*tanRMin ;
1103 if ( (sd >= 0) && (ri > 0) && (std::fabs(zi) <= tolODz) )
1107 G4double fTerm = sd-std::fmod(sd,dRmax);
1136 xi = p.x() + sd*v.x() ;
1137 yi = p.y() + sd*v.y() ;
1138 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1139 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1140 if (
Normal.dot(v) <= 0 ) {
return sd; }
1154 if ( std::fabs(
z) <= tolODz )
1179 if (b>0) { sd = -b - std::sqrt(d); }
1180 else { sd = c/(-b+std::sqrt(d)); }
1182 ri = rMinAv + zi*tanRMin ;
1186 if (b>0) { sd = c/(-b-std::sqrt(d)); }
1187 else { sd = -b + std::sqrt(d); }
1191 if ( (sd >= 0) && (std::fabs(zi) <= tolODz) )
1195 G4double fTerm = sd-std::fmod(sd,dRmax);
1210 else {
return kInfinity; }
1222 if (b>0) { sd = c/(-b-std::sqrt(d)); }
1223 else { sd = -b + std::sqrt(d) ; }
1226 if ( (sd >= 0) && (std::fabs(zi) <= tolODz) )
1230 G4double fTerm = sd-std::fmod(sd,dRmax);
1350 G4double safe=0.0, rho, safeR1, safeR2, safeZ;
1351 G4double tanRMin, secRMin, pRMin ;
1352 G4double tanRMax, secRMax, pRMax ;
1356 rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ;
1357 safeZ = std::fabs(
z) -
fDz ;
1362 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
1364 safeR1 = (pRMin - rho)/secRMin ;
1367 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
1369 safeR2 = (rho - pRMax)/secRMax ;
1371 if ( safeR1 > safeR2) { safe = safeR1; }
1372 else { safe = safeR2; }
1377 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
1379 safe = (rho - pRMax)/secRMax ;
1381 if ( safeZ > safe ) { safe = safeZ; }
1402 if ( safe < 0.0 ) { safe = 0.0; }
1413 const G4ThreeVector& v,
1414 const G4bool calcNorm,
1416 G4ThreeVector *n)
const
1420 G4double snxt,srd,pdist ;
1422 G4double tanRMax, secRMax, rMaxAv ;
1423 G4double tanRMin, secRMin, rMinAv ;
1425 G4double t1, t2, t3, rout, rin, nt1, nt2, nt3 ;
1426 G4double b, c, d, sr2, sr3 ;
1431 G4double slentol = kInfinity ;
1436 G4double zi, ri, deltaRoi2, xi, yi, risec ;
1448 snxt = pdist/v.z() ;
1455 *n = G4ThreeVector(0,0,1) ;
1461 else if ( v.z() < 0.0 )
1467 snxt = -pdist/v.z() ;
1474 *n = G4ThreeVector(0,0,-1) ;
1504 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
1508 t1 = 1.0 - v.z()*v.z() ;
1509 t2 = p.x()*v.x() + p.y()*v.y() ;
1510 t3 = p.x()*p.x() + p.y()*p.y() ;
1511 rout = tanRMax*
z + rMaxAv ;
1513 nt1 = t1 - (tanRMax*v.z())*(tanRMax*v.z()) ;
1514 nt2 = t2 - tanRMax*v.z()*rout ;
1515 nt3 = t3 - rout*rout ;
1519 deltaRoi2 = snxt*snxt*t1 + 2*snxt*t2 + t3
1522 else if ( v.z() < 0.0 )
1524 deltaRoi2 = snxt*snxt*t1 + 2*snxt*t2 + t3
1532 if ( nt1 && (deltaRoi2 > 0.0) )
1549 risec = std::sqrt(t3)*secRMax ;
1551 *n = G4ThreeVector(p.x()/risec,p.y()/risec,-tanRMax/secRMax);
1558 if (b>0) { srd = -b - std::sqrt(d); }
1559 else { srd = c/(-b+std::sqrt(d)) ; }
1561 zi =
z + srd*v.z() ;
1562 ri = tanRMax*zi + rMaxAv ;
1577 if (b>0) { sr2 = c/(-b-std::sqrt(d)); }
1578 else { sr2 = -b + std::sqrt(d); }
1579 zi =
z + sr2*v.z() ;
1580 ri = tanRMax*zi + rMaxAv ;
1609 risec = std::sqrt(t3)*secRMax;
1611 *n = G4ThreeVector(p.x()/risec,p.y()/risec,-tanRMax/secRMax);
1616 else if ( nt2 && (deltaRoi2 > 0.0) )
1622 risec = std::sqrt(t3)*secRMax;
1624 *n = G4ThreeVector(p.x()/risec,p.y()/risec,-tanRMax/secRMax);
1649 xi = p.x() + slentol*v.x();
1650 yi = p.y() + slentol*v.y();
1651 risec = std::sqrt(xi*xi + yi*yi)*secRMax;
1652 G4ThreeVector
Normal = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax);
1665 slentol = kInfinity ;
1674 nt1 = t1 - (tanRMin*v.z())*(tanRMin*v.z()) ;
1678 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
1680 rin = tanRMin*
z + rMinAv ;
1681 nt2 = t2 - tanRMin*v.z()*rin ;
1682 nt3 = t3 - rin*rin ;
1699 if (calcNorm) { *validNorm =
false; }
1705 if (b>0) { sr2 = -b - std::sqrt(d); }
1706 else { sr2 = c/(-b+std::sqrt(d)); }
1707 zi =
z + sr2*v.z() ;
1708 ri = tanRMin*zi + rMinAv ;
1720 if (b>0) { sr3 = c/(-b-std::sqrt(d)); }
1721 else { sr3 = -b + std::sqrt(d) ; }
1730 zi =
z + sr3*v.z() ;
1731 ri = tanRMin*zi + rMinAv ;
1769 xi = p.x() + slentol*v.x() ;
1770 yi = p.y() + slentol*v.y() ;
1771 if( sidetol==
kRMax )
1773 risec = std::sqrt(xi*xi + yi*yi)*secRMax ;
1774 Normal = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax) ;
1778 risec = std::sqrt(xi*xi + yi*yi)*secRMin ;
1779 Normal = G4ThreeVector(-xi/risec,-yi/risec,tanRMin/secRMin) ;
1797 slentol = kInfinity ;
1960 xi = p.x() + snxt*v.x() ;
1961 yi = p.y() + snxt*v.y() ;
1962 risec = std::sqrt(xi*xi + yi*yi)*secRMax ;
1963 *n = G4ThreeVector(xi/risec,yi/risec,-tanRMax/secRMax) ;
1967 *validNorm = false ;
1992 *n = G4ThreeVector(0,0,1) ;
1996 *n = G4ThreeVector(0,0,-1) ;
2002 std::ostringstream message;
2003 G4int oldprc = message.precision(16) ;
2004 message <<
"Undefined side for valid surface normal to solid."
2006 <<
"Position:" << G4endl << G4endl
2007 <<
"p.x() = " << p.x()/mm <<
" mm" << G4endl
2008 <<
"p.y() = " << p.y()/mm <<
" mm" << G4endl
2009 <<
"p.z() = " << p.z()/mm <<
" mm" << G4endl << G4endl
2010 <<
"pho at z = " << std::sqrt( p.x()*p.x()+p.y()*p.y() )/mm
2011 <<
" mm" << G4endl << G4endl ;
2012 if( p.x() != 0. || p.y() != 0.)
2014 message <<
"point phi = " << std::atan2(p.y(),p.x())/degree
2015 <<
" degree" << G4endl << G4endl ;
2017 message <<
"Direction:" << G4endl << G4endl
2018 <<
"v.x() = " << v.x() << G4endl
2019 <<
"v.y() = " << v.y() << G4endl
2020 <<
"v.z() = " << v.z() << G4endl<< G4endl
2021 <<
"Proposed distance :" << G4endl<< G4endl
2022 <<
"snxt = " << snxt/mm <<
" mm" << G4endl ;
2023 message.precision(oldprc) ;
2024 G4Exception(
"G4ShiftedCone::DistanceToOut(p,v,..)",
"GeomSolids1002",
2025 JustWarning, message) ;
2040 G4double safe=0.0, rho, safeR1, safeR2, safeZ;
2041 G4double tanRMin, secRMin, pRMin;
2042 G4double tanRMax, secRMax, pRMax;
2045 if(
Inside(p) == kOutside )
2047 G4int oldprc=G4cout.precision(16) ;
2050 G4cout <<
"Position:" << G4endl << G4endl ;
2051 G4cout <<
"p.x() = " << p.x()/mm <<
" mm" << G4endl ;
2052 G4cout <<
"p.y() = " << p.y()/mm <<
" mm" << G4endl ;
2053 G4cout <<
"p.z() = " << p.z()/mm <<
" mm" << G4endl << G4endl ;
2054 G4cout <<
"pho at z = " << std::sqrt( p.x()*p.x()+p.y()*p.y() )/mm
2055 <<
" mm" << G4endl << G4endl ;
2056 if( (p.x() != 0.) || (p.x() != 0.) )
2058 G4cout <<
"point phi = " << std::atan2(p.y(),p.x())/degree
2059 <<
" degree" << G4endl << G4endl ;
2061 G4cout.precision(oldprc) ;
2062 G4Exception(
"G4ShiftedCone::DistanceToOut(p)",
"GeomSolids1002",
2063 JustWarning,
"Point p is outside !?" );
2069 rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ;
2070 safeZ =
fDz - std::fabs(
z) ;
2075 secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ;
2077 safeR1 = (rho - pRMin)/secRMin ;
2081 safeR1 = kInfinity ;
2085 secRMax = std::sqrt(1.0 + tanRMax*tanRMax) ;
2087 safeR2 = (pRMax - rho)/secRMax ;
2089 if (safeR1 < safeR2) { safe = safeR1; }
2090 else { safe = safeR2; }
2091 if (safeZ < safe) { safe = safeZ ; }
2109 if ( safe < 0 ) { safe = 0; }
2182 G4double cosu = std::cos(
phi);
2183 G4double sinu = std::sin(
phi);
2187 G4bool fPhiFullCone =
true;
2189 G4double chose = G4RandFlat::shoot(0.,Aone+Atwo+Athree+Afour+2.*Afive);
2191 if( (chose >= 0.) && (chose < Aone) )
2195 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);
2196 return G4ThreeVector (rone*cosu*(qone-zRand),
2197 rone*sinu*(qone-zRand), zRand +
fZshift);
2205 else if( (chose >= Aone) && (chose < Aone + Atwo) )
2209 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);
2210 return G4ThreeVector (rtwo*cosu*(qtwo-zRand),
2211 rtwo*sinu*(qtwo-zRand), zRand +
fZshift);
2219 else if( (chose >= Aone + Atwo) && (chose < Aone + Atwo + Athree) )
2221 return G4ThreeVector (rRand1*cosu, rRand1*sinu, -1*
fDz +
fZshift);
2223 else if( (chose >= Aone + Atwo + Athree)
2224 && (chose < Aone + Atwo + Athree + Afour) )
2226 return G4ThreeVector (rRand2*cosu,rRand2*sinu,
fDz +
fZshift);
2228 else if( (chose >= Aone + Atwo + Athree + Afour)
2229 && (chose < Aone + Atwo + Athree + Afour + Afive) )
2231 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);
2239 G4double zRand = G4RandFlat::shoot(-1.*
fDz,
fDz);