61 axis0min, axis1min, axis0max, axis1max)
63 if (axis0 ==
kPhi && axis1 ==
kRho) {
64 G4Exception(
"G4TwistTubsFlatSide::G4TwistTubsFlatSide()",
66 "Should swap axis0 and axis1!");
94 G4int i = (handedness < 0 ? 0 : 1);
108 fSurfaceArea = 0.5*DPhi * (EndOuterRadius[i]*EndOuterRadius[i]
109 - EndInnerRadius[i]*EndInnerRadius[i] ) ;
168 for (i=0; i<2; i++) {
184 if (std::fabs(p.
z()) == 0.) {
213 isvalid[0], 0, validate, &gp, &gv);
217 distance[0] = - (p.
z() / v.
z());
225 if (distance[0] >= 0) isvalid[0] =
true;
230 if (distance[0] >= 0) isvalid[0] =
true;
234 if (distance[0] >= 0) isvalid[0] =
true;
238 isvalid[0], 1, validate, &gp, &gv);
241 G4cerr <<
"ERROR - G4TwistTubsFlatSide::DistanceToSurface(p,v)" <<
G4endl;
277 for (i=0; i<2; i++) {
293 distance[0] = std::fabs(p.
z());
294 xx.
set(p.
x(), p.
y(), 0);
369 areacode = tmpareacode;
407 message <<
"Feature NOT implemented !" <<
G4endl
409 <<
" fAxis[1] = " <<
fAxis[1];
410 G4Exception(
"G4TwistTubsFlatSide::GetAreaCode()",
"GeomSolids0001",
453 message <<
"Feature NOT implemented !" <<
G4endl
455 <<
" fAxis[1] = " <<
fAxis[1];
456 G4Exception(
"G4TwistTubsFlatSide::SetCorners()",
"GeomSolids0001",
474 direction = direction.
unit();
480 direction = direction.
unit();
486 direction = direction.
unit();
492 direction = direction.
unit();
497 message <<
"Feature NOT implemented !" <<
G4endl
499 <<
" fAxis[1] = " <<
fAxis[1];
500 G4Exception(
"G4TwistTubsFlatSide::SetBoundaries()",
"GeomSolids0001",
524 for ( i = 0 ; i<
n ; i++ ) {
526 r = rmin + i*(rmax-rmin)/(n-1) ;
531 for ( j = 0 ; j<k ; j++ )
533 phi = phimin + j*(phimax-phimin)/(k-1) ;
535 nnode =
GetNode(i,j,k,n,iside) ;
538 xyz[nnode][0] = p.
x() ;
539 xyz[nnode][1] = p.
y() ;
540 xyz[nnode][2] = p.
z() ;
542 if ( i<n-1 && j<k-1 ) {
544 nface =
GetFace(i,j,k,n,iside) ;
G4int GetAreacode(G4int i) const
static const G4int sC0Min1Max
void set(double x, double y, double z)
CurrentStatus fCurStatWithV
static const G4int sInside
G4bool IsInside(G4int areacode, G4bool testbitmode=false) const
static const G4int sAxisRho
virtual G4ThreeVector SurfacePoint(G4double, G4double, G4bool isGlobal=false)
std::vector< ExP01TrackerHit * > a
static const G4double kInfinity
virtual G4int DistanceToSurface(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol)
virtual void SetBoundary(const G4int &axiscode, const G4ThreeVector &direction, const G4ThreeVector &x0, const G4int &boundarytype)
void message(RunManager *runmanager)
static const G4int sCorner
void SetCurrentStatus(G4int i, G4ThreeVector &xx, G4double &dist, G4int &areacode, G4bool &isvalid, G4int nxx, EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
static double normal(HepRandomEngine *eptr)
G4double GetRadialTolerance() const
G4bool IsOutside(G4int areacode) const
G4int GetEdgeVisibility(G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)
static const G4int sC0Min1Min
virtual G4String GetName() const
G4TwistTubsFlatSide(const G4String &name, const G4RotationMatrix &rot, const G4ThreeVector &tlate, const G4ThreeVector &n, const EAxis axis1=kRho, const EAxis axis2=kPhi, G4double axis0min=-kInfinity, G4double axis1min=-kInfinity, G4double axis0max=kInfinity, G4double axis1max=kInfinity)
void ResetfDone(EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
static const G4int sAxis1
G4int GetFace(G4int i, G4int j, G4int m, G4int n, G4int iside)
static const G4int sC0Max1Max
virtual void GetFacets(G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)
static const G4int sAxisPhi
void SetCorner(G4int areacode, G4double x, G4double y, G4double z)
virtual G4double GetBoundaryMax(G4double phi)
G4ThreeVector GetCorner(G4int areacode) const
G4GLOB_DLL std::ostream G4cerr
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4ThreeVector ComputeGlobalPoint(const G4ThreeVector &lp) const
virtual void SetBoundaries()
virtual G4double GetBoundaryMin(G4double phi)
G4double GetDistance(G4int i) const
static const G4int sAxis0
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &gp) const
virtual ~G4TwistTubsFlatSide()
HepRotation & rotateZ(double delta)
virtual G4int GetAreaCode(const G4ThreeVector &xx, G4bool withTol=true)
static G4GeometryTolerance * GetInstance()
static const G4int sOutside
G4SurfCurNormal fCurrentNormal
static const G4int sAxisMin
static const G4int sBoundary
virtual G4ThreeVector GetNormal(const G4ThreeVector &, G4bool isGlobal=false)
G4int GetNode(G4int i, G4int j, G4int m, G4int n, G4int iside)
static const G4int sC0Max1Min
static const G4int sAxisMax
G4ThreeVector GetXX(G4int i) const
HepRotation inverse() const
virtual G4int AmIOnLeftSide(const G4ThreeVector &me, const G4ThreeVector &vec, G4bool withTol=true)
G4ThreeVector ComputeGlobalDirection(const G4ThreeVector &lp) const
virtual void SetCorners()
G4bool IsValid(G4int i) const
G4ThreeVector ComputeLocalDirection(const G4ThreeVector &gp) const