50 axis0min, axis1min, axis0max, axis1max)
54 G4Exception(
"G4TwistTubsFlatSide::G4TwistTubsFlatSide()",
56 "Should swap axis0 and axis1!");
81 G4int i = (handedness < 0 ? 0 : 1);
88 fRot.rotateZ(EndPhi[i]);
95 fSurfaceArea = 0.5*DPhi * (EndOuterRadius[i]*EndOuterRadius[i]
96 - EndInnerRadius[i]*EndInnerRadius[i] ) ;
146 for (
G4int i=0; i<2; ++i)
148 distance[i] = kInfinity;
151 gxx[i].
set(kInfinity, kInfinity, kInfinity);
162 if (std::fabs(p.
z()) == 0.)
170 areacode[0] = GetAreaCode(xx);
178 areacode[0] = GetAreaCode(xx,
false);
197 fCurStatWithV.SetCurrentStatus(0, gxx[0], distance[0], areacode[0],
198 isvalid[0], 0, validate, &gp, &gv);
202 distance[0] = - (p.
z() / v.
z());
209 areacode[0] = GetAreaCode(xx);
212 if (distance[0] >= 0) { isvalid[0] =
true; }
217 areacode[0] = GetAreaCode(xx,
false);
220 if (distance[0] >= 0) { isvalid[0] =
true; }
226 if (distance[0] >= 0) { isvalid[0] =
true; }
229 fCurStatWithV.SetCurrentStatus(0, gxx[0], distance[0], areacode[0],
230 isvalid[0], 1, validate, &gp, &gv);
233 G4cerr <<
"ERROR - G4TwistTubsFlatSide::DistanceToSurface(p,v)" <<
G4endl;
263 distance[i] =
fCurStat.GetDistance(i);
264 areacode[i] =
fCurStat.GetAreacode(i);
270 for (
auto i=0; i<2; ++i)
272 distance[i] = kInfinity;
274 gxx[i].
set(kInfinity, kInfinity, kInfinity);
289 distance[0] = std::fabs(p.
z());
290 xx.
set(p.
x(), p.
y(), 0);
296 fCurStat.SetCurrentStatus(0, gxx[0], distance[0], areacode[0],
373 areacode = tmpareacode;
430 std::ostringstream message;
431 message <<
"Feature NOT implemented !" <<
G4endl
433 <<
" fAxis[1] = " <<
fAxis[1];
434 G4Exception(
"G4TwistTubsFlatSide::GetAreaCode()",
"GeomSolids0001",
443void G4TwistTubsFlatSide::SetCorners()
477 std::ostringstream message;
478 message <<
"Feature NOT implemented !" <<
G4endl
480 <<
" fAxis[1] = " <<
fAxis[1];
481 G4Exception(
"G4TwistTubsFlatSide::SetCorners()",
"GeomSolids0001",
489void G4TwistTubsFlatSide::SetBoundaries()
499 direction = direction.
unit();
505 direction = direction.
unit();
511 direction = direction.
unit();
517 direction = direction.
unit();
523 std::ostringstream message;
524 message <<
"Feature NOT implemented !" <<
G4endl
526 <<
" fAxis[1] = " <<
fAxis[1];
527 G4Exception(
"G4TwistTubsFlatSide::SetBoundaries()",
"GeomSolids0001",
547 for (
G4int i = 0 ; i<
n ; ++i )
549 r = rmin + i*(rmax-rmin)/(n-1) ;
551 phimin = GetBoundaryMin(r) ;
552 phimax = GetBoundaryMax(r) ;
554 for (
G4int j = 0 ; j<k ; ++j )
556 phi = phimin + j*(phimax-phimin)/(k-1) ;
558 nnode =
GetNode(i,j,k,n,iside) ;
559 p = SurfacePoint(phi,r,
true) ;
561 xyz[nnode][0] = p.
x() ;
562 xyz[nnode][1] = p.
y() ;
563 xyz[nnode][2] = p.
z() ;
565 if ( i<n-1 && j<k-1 )
567 nface =
GetFace(i,j,k,n,iside) ;
572 * (
GetNode(i ,j ,k,n,iside)+1) ;
574 * (
GetNode(i ,j+1,k,n,iside)+1) ;
576 * (
GetNode(i+1,j+1,k,n,iside)+1) ;
578 * (
GetNode(i+1,j ,k,n,iside)+1) ;
583 * (
GetNode(i ,j ,k,n,iside)+1) ;
585 * (
GetNode(i+1,j ,k,n,iside)+1) ;
587 * (
GetNode(i+1,j+1,k,n,iside)+1) ;
589 * (
GetNode(i ,j+1,k,n,iside)+1) ;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
CLHEP::HepRotation G4RotationMatrix
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cerr
void set(double x, double y, double z)
HepRotation inverse() const
G4double GetRadialTolerance() const
static G4GeometryTolerance * GetInstance()
G4int DistanceToSurface(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol) override
G4ThreeVector GetNormal(const G4ThreeVector &, G4bool isGlobal=false) override
G4TwistTubsFlatSide(const G4String &name, const G4RotationMatrix &rot, const G4ThreeVector &tlate, const G4ThreeVector &n, const EAxis axis0=kRho, const EAxis axis1=kPhi, G4double axis0min=-kInfinity, G4double axis1min=-kInfinity, G4double axis0max=kInfinity, G4double axis1max=kInfinity)
virtual G4int AmIOnLeftSide(const G4ThreeVector &me, const G4ThreeVector &vec, G4bool withTol=true)
static const G4int sC0Min1Min
static const G4int sC0Min1Max
G4VTwistSurface(const G4String &name)
G4int GetNode(G4int i, G4int j, G4int m, G4int n, G4int iside)
static const G4int sOutside
G4ThreeVector ComputeGlobalDirection(const G4ThreeVector &lp) const
static const G4int sAxisMax
static const G4int sAxis0
G4int GetFace(G4int i, G4int j, G4int m, G4int n, G4int iside)
const G4String & GetName() const
G4int GetEdgeVisibility(G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)
G4ThreeVector ComputeLocalDirection(const G4ThreeVector &gp) const
static const G4int sAxisPhi
static const G4int sAxisMin
static const G4int sC0Max1Max
static const G4int sAxis1
G4bool IsInside(G4int areacode, G4bool testbitmode=false) const
virtual void SetBoundary(const G4int &axiscode, const G4ThreeVector &direction, const G4ThreeVector &x0, const G4int &boundarytype)
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &gp) const
static const G4int sAxisRho
void SetCorner(G4int areacode, G4double x, G4double y, G4double z)
G4ThreeVector GetCorner(G4int areacode) const
static const G4int sBoundary
G4bool IsOutside(G4int areacode) const
static const G4int sCorner
static const G4int sC0Max1Min
static const G4int sInside
CurrentStatus fCurStatWithV
G4ThreeVector ComputeGlobalPoint(const G4ThreeVector &lp) const
G4SurfCurNormal fCurrentNormal