708 G4double chose, totArea=0., Achose1, Achose2,
709 rad1, rad2, sinphi1, sinphi2, cosphi1, cosphi2;
711 area, aTop=0., aBottom=0., zVal=0.;
714 std::vector<G4double> aVector1;
715 std::vector<G4double> aVector2;
716 std::vector<G4double> aVector3;
724 for(j=0; j<numPlanes-1; j++)
730 area = std::sqrt(l2-
sqr((a-b)*cosksi))*(a+
b)*cosksi;
731 aVector1.push_back(area);
734 for(j=0; j<numPlanes-1; j++)
740 area = std::sqrt(l2-
sqr((a-b)*cosksi))*(a+
b)*cosksi;
741 aVector2.push_back(area);
744 for(j=0; j<numPlanes-1; j++)
755 else { aVector3.push_back(0.); }
758 for(j=0; j<numPlanes-1; j++)
760 totArea +=
numSide*(aVector1[j]+aVector2[j])+2.*aVector3[j];
770 aTop = std::sqrt(l2-
sqr((a-b)*cosksi))*(a+
b)*cosksi;
778 aBottom = std::sqrt(l2-
sqr((a-b)*cosksi))*(a+
b)*cosksi;
782 Achose2 =
numSide*(aVector1[0]+aVector2[0])+2.*aVector3[0];
785 if( (chose >= 0.) && (chose < aTop + aBottom) )
788 rang = std::floor((chose-
startPhi)/ksi-0.01);
789 if(rang<0) { rang=0; }
790 rang = std::fabs(rang);
791 sinphi1 = std::sin(
startPhi+rang*ksi);
792 sinphi2 = std::sin(
startPhi+(rang+1)*ksi);
793 cosphi1 = std::cos(
startPhi+rang*ksi);
794 cosphi2 = std::cos(
startPhi+(rang+1)*ksi);
796 if(chose>=0. && chose<aTop)
816 for (j=0; j<numPlanes-1; j++)
818 if( ((chose >= Achose1) && (chose < Achose2)) || (j == numPlanes-2) )
822 Achose1 +=
numSide*(aVector1[j]+aVector2[j])+2.*aVector3[j];
823 Achose2 = Achose1 +
numSide*(aVector1[j+1]+aVector2[j+1])
833 totArea =
numSide*(aVector1[j]+aVector2[j])+2.*aVector3[j];
836 if( (chose>=0.) && (chose<
numSide*aVector1[j]) )
839 rang = std::floor((chose-
startPhi)/ksi-0.01);
840 if(rang<0) { rang=0; }
841 rang = std::fabs(rang);
844 sinphi1 = std::sin(
startPhi+rang*ksi);
845 sinphi2 = std::sin(
startPhi+(rang+1)*ksi);
846 cosphi1 = std::cos(
startPhi+rang*ksi);
847 cosphi2 = std::cos(
startPhi+(rang+1)*ksi);
859 else if ( (chose >=
numSide*aVector1[j])
860 && (chose <=
numSide*(aVector1[j]+aVector2[j])) )
863 rang = std::floor((chose-
startPhi)/ksi-0.01);
864 if(rang<0) { rang=0; }
865 rang = std::fabs(rang);
868 sinphi1 = std::sin(
startPhi+rang*ksi);
869 sinphi2 = std::sin(
startPhi+(rang+1)*ksi);
870 cosphi1 = std::cos(
startPhi+rang*ksi);
871 cosphi2 = std::cos(
startPhi+(rang+1)*ksi);
885 if( (chose>=0.) && (chose < 1.) )
ThreeVector shoot(const G4int Ap, const G4int Af)
CLHEP::Hep3Vector G4ThreeVector
G4PolyhedraHistorical * original_parameters
G4ThreeVector GetPointOnPlane(G4ThreeVector p0, G4ThreeVector p1, G4ThreeVector p2, G4ThreeVector p3) const
static const double twopi
G4ThreeVector GetPointOnSurfaceGeneric() const