Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4TwistTrapFlatSide Class Reference

#include <G4TwistTrapFlatSide.hh>

+ Inheritance diagram for G4TwistTrapFlatSide:

Public Member Functions

 G4TwistTrapFlatSide (const G4String &name, G4double PhiTwist, G4double pDx1, G4double pDx2, G4double pDy, G4double pDz, G4double pAlpha, G4double pPhi, G4double pTheta, G4int handedness)
 
virtual ~G4TwistTrapFlatSide ()
 
virtual G4ThreeVector GetNormal (const G4ThreeVector &, G4bool isGlobal=false)
 
virtual G4int DistanceToSurface (const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol)
 
virtual G4int DistanceToSurface (const G4ThreeVector &gp, G4ThreeVector gxx[], G4double distance[], G4int areacode[])
 
virtual G4ThreeVector SurfacePoint (G4double x, G4double y, G4bool isGlobal=false)
 
virtual G4double GetBoundaryMin (G4double u)
 
virtual G4double GetBoundaryMax (G4double u)
 
virtual G4double GetSurfaceArea ()
 
virtual void GetFacets (G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)
 
 G4TwistTrapFlatSide (__void__ &)
 
- Public Member Functions inherited from G4VTwistSurface
 G4VTwistSurface (const G4String &name)
 
 G4VTwistSurface (const G4String &name, const G4RotationMatrix &rot, const G4ThreeVector &tlate, G4int handedness, const EAxis axis1, const EAxis axis2, G4double axis0min=-kInfinity, G4double axis1min=-kInfinity, G4double axis0max=kInfinity, G4double axis1max=kInfinity)
 
virtual ~G4VTwistSurface ()
 
virtual G4int AmIOnLeftSide (const G4ThreeVector &me, const G4ThreeVector &vec, G4bool withTol=true)
 
virtual G4double DistanceToBoundary (G4int areacode, G4ThreeVector &xx, const G4ThreeVector &p)
 
virtual G4double DistanceToIn (const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
 
virtual G4double DistanceToOut (const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
 
virtual G4double DistanceTo (const G4ThreeVector &gp, G4ThreeVector &gxx)
 
virtual G4int DistanceToSurface (const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol)=0
 
virtual G4int DistanceToSurface (const G4ThreeVector &gp, G4ThreeVector gxx[], G4double distance[], G4int areacode[])=0
 
void DebugPrint () const
 
virtual G4ThreeVector GetNormal (const G4ThreeVector &xx, G4bool isGlobal)=0
 
virtual G4String GetName () const
 
virtual void GetBoundaryParameters (const G4int &areacode, G4ThreeVector &d, G4ThreeVector &x0, G4int &boundarytype) const
 
virtual G4ThreeVector GetBoundaryAtPZ (G4int areacode, const G4ThreeVector &p) const
 
G4double DistanceToPlaneWithV (const G4ThreeVector &p, const G4ThreeVector &v, const G4ThreeVector &x0, const G4ThreeVector &n0, G4ThreeVector &xx)
 
G4double DistanceToPlane (const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &n0, G4ThreeVector &xx)
 
G4double DistanceToPlane (const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &t1, const G4ThreeVector &t2, G4ThreeVector &xx, G4ThreeVector &n)
 
G4double DistanceToLine (const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &d, G4ThreeVector &xx)
 
G4bool IsAxis0 (G4int areacode) const
 
G4bool IsAxis1 (G4int areacode) const
 
G4bool IsOutside (G4int areacode) const
 
G4bool IsInside (G4int areacode, G4bool testbitmode=false) const
 
G4bool IsBoundary (G4int areacode, G4bool testbitmode=false) const
 
G4bool IsCorner (G4int areacode, G4bool testbitmode=false) const
 
G4bool IsValidNorm () const
 
G4bool IsSameBoundary (G4VTwistSurface *surface1, G4int areacode1, G4VTwistSurface *surface2, G4int areacode2) const
 
G4int GetAxisType (G4int areacode, G4int whichaxis) const
 
G4ThreeVector ComputeGlobalPoint (const G4ThreeVector &lp) const
 
G4ThreeVector ComputeLocalPoint (const G4ThreeVector &gp) const
 
G4ThreeVector ComputeGlobalDirection (const G4ThreeVector &lp) const
 
G4ThreeVector ComputeLocalDirection (const G4ThreeVector &gp) const
 
void SetAxis (G4int i, const EAxis axis)
 
void SetNeighbours (G4VTwistSurface *ax0min, G4VTwistSurface *ax1min, G4VTwistSurface *ax0max, G4VTwistSurface *ax1max)
 
virtual G4ThreeVector SurfacePoint (G4double, G4double, G4bool isGlobal=false)=0
 
virtual G4double GetBoundaryMin (G4double)=0
 
virtual G4double GetBoundaryMax (G4double)=0
 
virtual G4double GetSurfaceArea ()=0
 
virtual void GetFacets (G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)=0
 
G4int GetNode (G4int i, G4int j, G4int m, G4int n, G4int iside)
 
G4int GetFace (G4int i, G4int j, G4int m, G4int n, G4int iside)
 
G4int GetEdgeVisibility (G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)
 
 G4VTwistSurface (__void__ &)
 

Protected Member Functions

virtual G4int GetAreaCode (const G4ThreeVector &xx, G4bool withTol=true)
 
- Protected Member Functions inherited from G4VTwistSurface
G4VTwistSurface ** GetNeighbours ()
 
G4int GetNeighbours (G4int areacode, G4VTwistSurface *surfaces[])
 
G4ThreeVector GetCorner (G4int areacode) const
 
void GetBoundaryAxis (G4int areacode, EAxis axis[]) const
 
void GetBoundaryLimit (G4int areacode, G4double limit[]) const
 
virtual G4int GetAreaCode (const G4ThreeVector &xx, G4bool withtol=true)=0
 
virtual void SetBoundary (const G4int &axiscode, const G4ThreeVector &direction, const G4ThreeVector &x0, const G4int &boundarytype)
 
void SetCorner (G4int areacode, G4double x, G4double y, G4double z)
 

Additional Inherited Members

- Public Types inherited from G4VTwistSurface
enum  EValidate { kDontValidate = 0 , kValidateWithTol = 1 , kValidateWithoutTol = 2 , kUninitialized = 3 }
 
- Static Public Attributes inherited from G4VTwistSurface
static const G4int sOutside = 0x00000000
 
static const G4int sInside = 0x10000000
 
static const G4int sBoundary = 0x20000000
 
static const G4int sCorner = 0x40000000
 
static const G4int sC0Min1Min = 0x40000101
 
static const G4int sC0Max1Min = 0x40000201
 
static const G4int sC0Max1Max = 0x40000202
 
static const G4int sC0Min1Max = 0x40000102
 
static const G4int sAxisMin = 0x00000101
 
static const G4int sAxisMax = 0x00000202
 
static const G4int sAxisX = 0x00000404
 
static const G4int sAxisY = 0x00000808
 
static const G4int sAxisZ = 0x00000C0C
 
static const G4int sAxisRho = 0x00001010
 
static const G4int sAxisPhi = 0x00001414
 
static const G4int sAxis0 = 0x0000FF00
 
static const G4int sAxis1 = 0x000000FF
 
static const G4int sSizeMask = 0x00000303
 
static const G4int sAxisMask = 0x0000FCFC
 
static const G4int sAreaMask = 0XF0000000
 
- Protected Attributes inherited from G4VTwistSurface
EAxis fAxis [2]
 
G4double fAxisMin [2]
 
G4double fAxisMax [2]
 
CurrentStatus fCurStatWithV
 
CurrentStatus fCurStat
 
G4RotationMatrix fRot
 
G4ThreeVector fTrans
 
G4int fHandedness
 
G4SurfCurNormal fCurrentNormal
 
G4bool fIsValidNorm
 
G4double kCarTolerance
 

Detailed Description

Definition at line 39 of file G4TwistTrapFlatSide.hh.

Constructor & Destructor Documentation

◆ G4TwistTrapFlatSide() [1/2]

G4TwistTrapFlatSide::G4TwistTrapFlatSide ( const G4String name,
G4double  PhiTwist,
G4double  pDx1,
G4double  pDx2,
G4double  pDy,
G4double  pDz,
G4double  pAlpha,
G4double  pPhi,
G4double  pTheta,
G4int  handedness 
)

Definition at line 36 of file G4TwistTrapFlatSide.cc.

46 : G4VTwistSurface(name)
47{
48 fHandedness = handedness; // +z = +ve, -z = -ve
49
50 fDx1 = pDx1 ;
51 fDx2 = pDx2 ;
52 fDy = pDy ;
53 fDz = pDz ;
54 fAlpha = pAlpha ;
55 fTAlph = std::tan(fAlpha) ;
56 fPhi = pPhi ;
57 fTheta = pTheta ;
58
59 fdeltaX = 2 * fDz * std::tan(fTheta) * std::cos(fPhi) ;
60 // dx in surface equation
61 fdeltaY = 2 * fDz * std::tan(fTheta) * std::sin(fPhi) ;
62 // dy in surface equation
63
64 fPhiTwist = PhiTwist ;
65
66 fCurrentNormal.normal.set( 0, 0, (fHandedness < 0 ? -1 : 1));
67 // Unit vector, in local coordinate system
69 ? 0.5 * fPhiTwist
70 : -0.5 * fPhiTwist );
71
72 fTrans.set(
73 fHandedness > 0 ? 0.5*fdeltaX : -0.5*fdeltaX ,
74 fHandedness > 0 ? 0.5*fdeltaY : -0.5*fdeltaY ,
75 fHandedness > 0 ? fDz : -fDz ) ;
76
77 fIsValidNorm = true;
78
79
80 fAxis[0] = kXAxis ;
81 fAxis[1] = kYAxis ;
82 fAxisMin[0] = kInfinity ; // x-Axis cannot be fixed, because it
83 fAxisMax[0] = kInfinity ; // depends on y
84 fAxisMin[1] = -fDy ; // y - axis
85 fAxisMax[1] = fDy ;
86
87 SetCorners();
88 SetBoundaries();
89}
void set(double x, double y, double z)
HepRotation & rotateZ(double delta)
Definition: Rotation.cc:87
G4double fAxisMax[2]
G4RotationMatrix fRot
G4ThreeVector fTrans
G4double fAxisMin[2]
G4SurfCurNormal fCurrentNormal
@ kYAxis
Definition: geomdefs.hh:56
@ kXAxis
Definition: geomdefs.hh:55

◆ ~G4TwistTrapFlatSide()

G4TwistTrapFlatSide::~G4TwistTrapFlatSide ( )
virtual

Definition at line 105 of file G4TwistTrapFlatSide.cc.

106{
107}

◆ G4TwistTrapFlatSide() [2/2]

G4TwistTrapFlatSide::G4TwistTrapFlatSide ( __void__ &  a)

Definition at line 95 of file G4TwistTrapFlatSide.cc.

96 : G4VTwistSurface(a), fDx1(0.), fDx2(0.), fDy(0.), fDz(0.), fPhiTwist(0.),
97 fAlpha(0.), fTAlph(0.), fPhi(0.), fTheta(0.), fdeltaX(0.), fdeltaY(0.)
98{
99}

Member Function Documentation

◆ DistanceToSurface() [1/2]

G4int G4TwistTrapFlatSide::DistanceToSurface ( const G4ThreeVector gp,
const G4ThreeVector gv,
G4ThreeVector  gxx[],
G4double  distance[],
G4int  areacode[],
G4bool  isvalid[],
EValidate  validate = kValidateWithTol 
)
virtual

Implements G4VTwistSurface.

Definition at line 128 of file G4TwistTrapFlatSide.cc.

135{
136 fCurStatWithV.ResetfDone(validate, &gp, &gv);
137
138 if (fCurStatWithV.IsDone())
139 {
140 for (G4int i=0; i<fCurStatWithV.GetNXX(); ++i)
141 {
142 gxx[i] = fCurStatWithV.GetXX(i);
143 distance[i] = fCurStatWithV.GetDistance(i);
144 areacode[i] = fCurStatWithV.GetAreacode(i);
145 isvalid[i] = fCurStatWithV.IsValid(i);
146 }
147 return fCurStatWithV.GetNXX();
148 }
149 else // initialize
150 {
151 for (auto i=0; i<2; ++i)
152 {
153 distance[i] = kInfinity;
154 areacode[i] = sOutside;
155 isvalid[i] = false;
156 gxx[i].set(kInfinity, kInfinity, kInfinity);
157 }
158 }
159
162
163 //
164 // special case!
165 // if p is on surface, distance = 0.
166 //
167
168 if (std::fabs(p.z()) == 0.) // if p is on the plane
169 {
170 distance[0] = 0;
171 G4ThreeVector xx = p;
172 gxx[0] = ComputeGlobalPoint(xx);
173
174 if (validate == kValidateWithTol)
175 {
176 areacode[0] = GetAreaCode(xx);
177 if (!IsOutside(areacode[0]))
178 {
179 isvalid[0] = true;
180 }
181 }
182 else if (validate == kValidateWithoutTol)
183 {
184 areacode[0] = GetAreaCode(xx, false);
185 if (IsInside(areacode[0]))
186 {
187 isvalid[0] = true;
188 }
189 }
190 else // kDontValidate
191 {
192 areacode[0] = sInside;
193 isvalid[0] = true;
194 }
195 return 1;
196 }
197 //
198 // special case end
199 //
200
201 if (v.z() == 0) {
202
203 fCurStatWithV.SetCurrentStatus(0, gxx[0], distance[0], areacode[0],
204 isvalid[0], 0, validate, &gp, &gv);
205 return 0;
206 }
207
208 distance[0] = - (p.z() / v.z());
209
210 G4ThreeVector xx = p + distance[0]*v;
211 gxx[0] = ComputeGlobalPoint(xx);
212
213 if (validate == kValidateWithTol)
214 {
215 areacode[0] = GetAreaCode(xx);
216 if (!IsOutside(areacode[0]))
217 {
218 if (distance[0] >= 0) isvalid[0] = true;
219 }
220 }
221 else if (validate == kValidateWithoutTol)
222 {
223 areacode[0] = GetAreaCode(xx, false);
224 if (IsInside(areacode[0]))
225 {
226 if (distance[0] >= 0) isvalid[0] = true;
227 }
228 }
229 else // kDontValidate
230 {
231 areacode[0] = sInside;
232 if (distance[0] >= 0) isvalid[0] = true;
233 }
234
235 fCurStatWithV.SetCurrentStatus(0, gxx[0], distance[0], areacode[0],
236 isvalid[0], 1, validate, &gp, &gv);
237
238#ifdef G4TWISTDEBUG
239 G4cerr << "ERROR - G4TwistTrapFlatSide::DistanceToSurface(p,v)" << G4endl;
240 G4cerr << " Name : " << GetName() << G4endl;
241 G4cerr << " xx : " << xx << G4endl;
242 G4cerr << " gxx[0] : " << gxx[0] << G4endl;
243 G4cerr << " dist[0] : " << distance[0] << G4endl;
244 G4cerr << " areacode[0] : " << areacode[0] << G4endl;
245 G4cerr << " isvalid[0] : " << isvalid[0] << G4endl;
246#endif
247 return 1;
248}
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
double z() const
virtual G4int GetAreaCode(const G4ThreeVector &xx, G4bool withTol=true)
G4int GetAreacode(G4int i) const
G4double GetDistance(G4int i) const
G4bool IsValid(G4int i) const
void SetCurrentStatus(G4int i, G4ThreeVector &xx, G4double &dist, G4int &areacode, G4bool &isvalid, G4int nxx, EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=nullptr)
G4ThreeVector GetXX(G4int i) const
void ResetfDone(EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=nullptr)
static const G4int sOutside
G4ThreeVector ComputeLocalDirection(const G4ThreeVector &gp) const
G4bool IsInside(G4int areacode, G4bool testbitmode=false) const
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &gp) const
G4bool IsOutside(G4int areacode) const
static const G4int sInside
virtual G4String GetName() const
CurrentStatus fCurStatWithV
G4ThreeVector ComputeGlobalPoint(const G4ThreeVector &lp) const

◆ DistanceToSurface() [2/2]

G4int G4TwistTrapFlatSide::DistanceToSurface ( const G4ThreeVector gp,
G4ThreeVector  gxx[],
G4double  distance[],
G4int  areacode[] 
)
virtual

Implements G4VTwistSurface.

Definition at line 253 of file G4TwistTrapFlatSide.cc.

257{
258 // Calculate distance to plane in local coordinate,
259 // then return distance and global intersection points.
260 //
261
263
264 if (fCurStat.IsDone())
265 {
266 for (G4int i=0; i<fCurStat.GetNXX(); ++i)
267 {
268 gxx[i] = fCurStat.GetXX(i);
269 distance[i] = fCurStat.GetDistance(i);
270 areacode[i] = fCurStat.GetAreacode(i);
271 }
272 return fCurStat.GetNXX();
273 }
274 else // initialize
275 {
276 for (auto i=0; i<2; ++i)
277 {
278 distance[i] = kInfinity;
279 areacode[i] = sOutside;
280 gxx[i].set(kInfinity, kInfinity, kInfinity);
281 }
282 }
283
285 G4ThreeVector xx;
286
287 // The plane is placed on origin with making its normal
288 // parallel to z-axis.
289 if (std::fabs(p.z()) <= 0.5 * kCarTolerance)
290 { // if p is on the plane, return 1
291 distance[0] = 0;
292 xx = p;
293 }
294 else
295 {
296 distance[0] = std::fabs(p.z());
297 xx.set(p.x(), p.y(), 0);
298 }
299
300 gxx[0] = ComputeGlobalPoint(xx);
301 areacode[0] = sInside;
302 G4bool isvalid = true;
303 fCurStat.SetCurrentStatus(0, gxx[0], distance[0], areacode[0],
304 isvalid, 1, kDontValidate, &gp);
305 return 1;
306
307}
bool G4bool
Definition: G4Types.hh:86
double x() const
double y() const
CurrentStatus fCurStat

◆ GetAreaCode()

G4int G4TwistTrapFlatSide::GetAreaCode ( const G4ThreeVector xx,
G4bool  withTol = true 
)
protectedvirtual

Implements G4VTwistSurface.

Definition at line 312 of file G4TwistTrapFlatSide.cc.

314{
315
316 static const G4double ctol = 0.5 * kCarTolerance;
317 G4int areacode = sInside;
318
319 if (fAxis[0] == kXAxis && fAxis[1] == kYAxis)
320 {
321 G4int yaxis = 1;
322
323 G4double wmax = xAxisMax(xx.y(), fTAlph ) ;
324 G4double wmin = -xAxisMax(xx.y(), -fTAlph ) ;
325
326 if (withTol)
327 {
328 G4bool isoutside = false;
329
330 // test boundary of x-axis
331
332 if (xx.x() < wmin + ctol)
333 {
334 areacode |= (sAxis0 & (sAxisX | sAxisMin)) | sBoundary;
335 if (xx.x() <= wmin - ctol) isoutside = true;
336
337 }
338 else if (xx.x() > wmax - ctol)
339 {
340 areacode |= (sAxis0 & (sAxisX | sAxisMax)) | sBoundary;
341 if (xx.x() >= wmax + ctol) isoutside = true;
342 }
343
344 // test boundary of y-axis
345
346 if (xx.y() < fAxisMin[yaxis] + ctol)
347 {
348 areacode |= (sAxis1 & (sAxisY | sAxisMin));
349
350 if (areacode & sBoundary) areacode |= sCorner; // xx is on corner.
351 else areacode |= sBoundary;
352 if (xx.y() <= fAxisMin[yaxis] - ctol) isoutside = true;
353
354 }
355 else if (xx.y() > fAxisMax[yaxis] - ctol)
356 {
357 areacode |= (sAxis1 & (sAxisY | sAxisMax));
358
359 if (areacode & sBoundary) areacode |= sCorner; // xx is on corner.
360 else areacode |= sBoundary;
361 if (xx.y() >= fAxisMax[yaxis] + ctol) isoutside = true;
362 }
363
364 // if isoutside = true, clear inside bit.
365 // if not on boundary, add axis information.
366
367 if (isoutside)
368 {
369 G4int tmpareacode = areacode & (~sInside);
370 areacode = tmpareacode;
371 }
372 else if ((areacode & sBoundary) != sBoundary)
373 {
374 areacode |= (sAxis0 & sAxisX) | (sAxis1 & sAxisY);
375 }
376 }
377 else
378 {
379 // boundary of x-axis
380
381 if (xx.x() < wmin )
382 {
383 areacode |= (sAxis0 & (sAxisX | sAxisMin)) | sBoundary;
384 }
385 else if (xx.x() > wmax)
386 {
387 areacode |= (sAxis0 & (sAxisX | sAxisMax)) | sBoundary;
388 }
389
390 // boundary of y-axis
391
392 if (xx.y() < fAxisMin[yaxis])
393 {
394 areacode |= (sAxis1 & (sAxisY | sAxisMin));
395 if (areacode & sBoundary) areacode |= sCorner; // xx is on corner.
396 else areacode |= sBoundary;
397
398 }
399 else if (xx.y() > fAxisMax[yaxis])
400 {
401 areacode |= (sAxis1 & (sAxisY | sAxisMax)) ;
402 if (areacode & sBoundary) areacode |= sCorner; // xx is on corner.
403 else areacode |= sBoundary;
404 }
405
406 if ((areacode & sBoundary) != sBoundary)
407 {
408 areacode |= (sAxis0 & sAxisX) | (sAxis1 & sAxisY);
409 }
410 }
411 return areacode;
412 }
413 else
414 {
415 G4Exception("G4TwistTrapFlatSide::GetAreaCode()",
416 "GeomSolids0001", FatalException,
417 "Feature NOT implemented !");
418 }
419
420 return areacode;
421}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
double G4double
Definition: G4Types.hh:83
static const G4int sAxisMax
static const G4int sAxis0
static const G4int sAxisMin
static const G4int sAxis1
static const G4int sBoundary
static const G4int sCorner
static const G4int sAxisY
static const G4int sAxisX

Referenced by DistanceToSurface().

◆ GetBoundaryMax()

G4double G4TwistTrapFlatSide::GetBoundaryMax ( G4double  u)
inlinevirtual

Implements G4VTwistSurface.

Definition at line 139 of file G4TwistTrapFlatSide.hh.

140{
141 return xAxisMax(y, fTAlph) ;
142}

Referenced by GetFacets().

◆ GetBoundaryMin()

G4double G4TwistTrapFlatSide::GetBoundaryMin ( G4double  u)
inlinevirtual

Implements G4VTwistSurface.

Definition at line 133 of file G4TwistTrapFlatSide.hh.

134{
135 return -xAxisMax(y, -fTAlph) ;
136}

Referenced by GetFacets().

◆ GetFacets()

void G4TwistTrapFlatSide::GetFacets ( G4int  m,
G4int  n,
G4double  xyz[][3],
G4int  faces[][4],
G4int  iside 
)
virtual

Implements G4VTwistSurface.

Definition at line 521 of file G4TwistTrapFlatSide.cc.

523{
524 G4double x,y ; // the two parameters for the surface equation
525 G4ThreeVector p ; // a point on the surface, given by (z,u)
526
527 G4int nnode ;
528 G4int nface ;
529
530 G4double xmin,xmax ;
531
532 // calculate the (n-1)*(k-1) vertices
533
534 for ( G4int i = 0 ; i<n ; ++i )
535 {
536 y = -fDy + i*(2*fDy)/(n-1) ;
537
538 for ( G4int j = 0 ; j<k ; ++j )
539 {
540 xmin = GetBoundaryMin(y) ;
541 xmax = GetBoundaryMax(y) ;
542 x = xmin + j*(xmax-xmin)/(k-1) ;
543
544 nnode = GetNode(i,j,k,n,iside) ;
545 p = SurfacePoint(x,y,true) ; // surface point in global coordinate system
546
547 xyz[nnode][0] = p.x() ;
548 xyz[nnode][1] = p.y() ;
549 xyz[nnode][2] = p.z() ;
550
551 if ( i<n-1 && j<k-1 )
552 {
553 nface = GetFace(i,j,k,n,iside) ;
554
555 if (fHandedness < 0) // lower side
556 {
557 faces[nface][0] = GetEdgeVisibility(i,j,k,n,0,1)
558 * ( GetNode(i ,j ,k,n,iside)+1) ;
559 faces[nface][1] = GetEdgeVisibility(i,j,k,n,1,1)
560 * ( GetNode(i+1,j ,k,n,iside)+1) ;
561 faces[nface][2] = GetEdgeVisibility(i,j,k,n,2,1)
562 * ( GetNode(i+1,j+1,k,n,iside)+1) ;
563 faces[nface][3] = GetEdgeVisibility(i,j,k,n,3,1)
564 * ( GetNode(i ,j+1,k,n,iside)+1) ;
565 }
566 else // upper side
567 {
568 faces[nface][0] = GetEdgeVisibility(i,j,k,n,0,-1)
569 * ( GetNode(i ,j ,k,n,iside)+1) ;
570 faces[nface][1] = GetEdgeVisibility(i,j,k,n,1,-1)
571 * ( GetNode(i ,j+1,k,n,iside)+1) ;
572 faces[nface][2] = GetEdgeVisibility(i,j,k,n,2,-1)
573 * ( GetNode(i+1,j+1,k,n,iside)+1) ;
574 faces[nface][3] = GetEdgeVisibility(i,j,k,n,3,-1)
575 * ( GetNode(i+1,j ,k,n,iside)+1) ;
576 }
577 }
578 }
579 }
580}
virtual G4double GetBoundaryMin(G4double u)
virtual G4double GetBoundaryMax(G4double u)
virtual G4ThreeVector SurfacePoint(G4double x, G4double y, G4bool isGlobal=false)
G4int GetNode(G4int i, G4int j, G4int m, G4int n, G4int iside)
G4int GetFace(G4int i, G4int j, G4int m, G4int n, G4int iside)
G4int GetEdgeVisibility(G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)

◆ GetNormal()

G4ThreeVector G4TwistTrapFlatSide::GetNormal ( const G4ThreeVector ,
G4bool  isGlobal = false 
)
virtual

Implements G4VTwistSurface.

Definition at line 112 of file G4TwistTrapFlatSide.cc.

114{
115 if (isGlobal)
116 {
118 }
119 else
120 {
121 return fCurrentNormal.normal;
122 }
123}
G4ThreeVector ComputeGlobalDirection(const G4ThreeVector &lp) const

◆ GetSurfaceArea()

G4double G4TwistTrapFlatSide::GetSurfaceArea ( )
inlinevirtual

Implements G4VTwistSurface.

Definition at line 145 of file G4TwistTrapFlatSide.hh.

146{
147 return 2*(fDx1 + fDx2)*fDy ;
148}

◆ SurfacePoint()

G4ThreeVector G4TwistTrapFlatSide::SurfacePoint ( G4double  x,
G4double  y,
G4bool  isGlobal = false 
)
inlinevirtual

Implements G4VTwistSurface.

Definition at line 124 of file G4TwistTrapFlatSide.hh.

125{
126 G4ThreeVector SurfPoint ( x,y,0);
127
128 if (isGlobal) { return (fRot*SurfPoint + fTrans); }
129 return SurfPoint;
130}

Referenced by GetFacets().


The documentation for this class was generated from the following files: