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

G4TwistedTrd is a twisted trapezoid with the X and Y dimensions varying along Z. More...

#include <G4TwistedTrd.hh>

Inheritance diagram for G4TwistedTrd:

Public Member Functions

 G4TwistedTrd (const G4String &pName, G4double pDx1, G4double pDx2, G4double pDy1, G4double pDy2, G4double pDz, G4double pPhiTwist)
 ~G4TwistedTrd () override=default
G4double GetX1HalfLength () const
G4double GetX2HalfLength () const
G4double GetY1HalfLength () const
G4double GetY2HalfLength () const
G4double GetZHalfLength () const
G4double GetPhiTwist () const
G4GeometryType GetEntityType () const override
G4double GetCubicVolume () override
G4double GetSurfaceArea () override
G4VSolidClone () const override
std::ostream & StreamInfo (std::ostream &os) const override
 G4TwistedTrd (__void__ &)
 G4TwistedTrd (const G4TwistedTrd &rhs)
G4TwistedTrdoperator= (const G4TwistedTrd &rhs)
Public Member Functions inherited from G4VTwistedFaceted
 G4VTwistedFaceted (const G4String &pname, G4double PhiTwist, G4double pDz, G4double pTheta, G4double pPhi, G4double pDy1, G4double pDx1, G4double pDx2, G4double pDy2, G4double pDx3, G4double pDx4, G4double pAlph)
 ~G4VTwistedFaceted () override
void ComputeDimensions (G4VPVParameterisation *, const G4int, const G4VPhysicalVolume *) override
void BoundingLimits (G4ThreeVector &pMin, G4ThreeVector &pMax) const override
G4bool CalculateExtent (const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const override
G4double DistanceToIn (const G4ThreeVector &p, const G4ThreeVector &v) const override
G4double DistanceToIn (const G4ThreeVector &p) const override
G4double DistanceToOut (const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcnorm=false, G4bool *validnorm=nullptr, G4ThreeVector *n=nullptr) const override
G4double DistanceToOut (const G4ThreeVector &p) const override
EInside Inside (const G4ThreeVector &p) const override
G4ThreeVector SurfaceNormal (const G4ThreeVector &p) const override
G4ThreeVector GetPointOnSurface () const override
G4double GetCubicVolume () override
G4double GetSurfaceArea () override
void DescribeYourselfTo (G4VGraphicsScene &scene) const override
G4PolyhedronCreatePolyhedron () const override
G4PolyhedronGetPolyhedron () const override
G4VisExtent GetExtent () const override
std::ostream & StreamInfo (std::ostream &os) const override
G4double GetTwistAngle () const
G4double GetDx1 () const
G4double GetDx2 () const
G4double GetDx3 () const
G4double GetDx4 () const
G4double GetDy1 () const
G4double GetDy2 () const
G4double GetDz () const
G4double GetPhi () const
G4double GetTheta () const
G4double GetAlpha () const
G4double Xcoef (G4double u, G4double phi, G4double ftg) const
G4double GetValueA (G4double phi) const
G4double GetValueB (G4double phi) const
G4double GetValueD (G4double phi) const
G4GeometryType GetEntityType () const override
 G4VTwistedFaceted (__void__ &)
 G4VTwistedFaceted (const G4VTwistedFaceted &rhs)
G4VTwistedFacetedoperator= (const G4VTwistedFaceted &rhs)
Public Member Functions inherited from G4VSolid
 G4VSolid (const G4String &name)
virtual ~G4VSolid ()
 G4VSolid (const G4VSolid &rhs)
G4VSolidoperator= (const G4VSolid &rhs)
G4bool operator== (const G4VSolid &s) const
G4String GetName () const
void SetName (const G4String &name)
G4double GetTolerance () const
virtual G4int GetNumOfConstituents () const
virtual G4bool IsFaceted () const
void DumpInfo () const
virtual const G4VSolidGetConstituentSolid (G4int no) const
virtual G4VSolidGetConstituentSolid (G4int no)
virtual const G4DisplacedSolidGetDisplacedSolidPtr () const
virtual G4DisplacedSolidGetDisplacedSolidPtr ()
 G4VSolid (__void__ &)
G4double EstimateCubicVolume (G4int nStat, G4double epsilon) const
G4double EstimateSurfaceArea (G4int nStat, G4double epsilon) const

Additional Inherited Members

Protected Member Functions inherited from G4VSolid
void CalculateClippedPolygonExtent (G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
void ClipCrossSection (G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
void ClipBetweenSections (G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
void ClipPolygon (G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis) const
Protected Attributes inherited from G4VTwistedFaceted
G4bool fRebuildPolyhedron = false
G4PolyhedronfpPolyhedron = nullptr
G4double fCubicVolume = 0.0
G4double fSurfaceArea = 0.0
Protected Attributes inherited from G4VSolid
G4double kCarTolerance

Detailed Description

G4TwistedTrd is a twisted trapezoid with the X and Y dimensions varying along Z.

Definition at line 55 of file G4TwistedTrd.hh.

Constructor & Destructor Documentation

◆ G4TwistedTrd() [1/3]

G4TwistedTrd::G4TwistedTrd ( const G4String & pName,
G4double pDx1,
G4double pDx2,
G4double pDy1,
G4double pDy2,
G4double pDz,
G4double pPhiTwist )

Constructs a twisted Trd, given its parameters.

Parameters
[in]pNameThe solid name.
[in]pDx1Half-length along X at the surface positioned at -dz.
[in]pDx2Half-length along X at the surface positioned at +dz.
[in]pDy1Half-length along Y at the surface positioned at -dz.
[in]pDy2Half-length along Y at the surface positioned at +dz.
[in]pDzHalf-length along Z axis.
[in]pPhiTwistThe twist angle.

Definition at line 45 of file G4TwistedTrd.cc.

52 : G4VTwistedFaceted( pName, pPhiTwist,pDz,0.,0.,
53 pDy1, pDx1, pDx1, pDy2, pDx2, pDx2,0.)
54{
55}
G4VTwistedFaceted(const G4String &pname, G4double PhiTwist, G4double pDz, G4double pTheta, G4double pPhi, G4double pDy1, G4double pDx1, G4double pDx2, G4double pDy2, G4double pDx3, G4double pDx4, G4double pAlph)

Referenced by Clone(), G4TwistedTrd(), and operator=().

◆ ~G4TwistedTrd()

G4TwistedTrd::~G4TwistedTrd ( )
overridedefault

Default destructor.

◆ G4TwistedTrd() [2/3]

G4TwistedTrd::G4TwistedTrd ( __void__ & a)

Fake default constructor for usage restricted to direct object persistency for clients requiring preallocation of memory for persistifiable objects.

Definition at line 61 of file G4TwistedTrd.cc.

63{
64}

◆ G4TwistedTrd() [3/3]

G4TwistedTrd::G4TwistedTrd ( const G4TwistedTrd & rhs)

Copy constructor and assignment operator.

Definition at line 69 of file G4TwistedTrd.cc.

71{
73}
G4Polyhedron * GetPolyhedron() const override
G4Polyhedron * fpPolyhedron

Member Function Documentation

◆ Clone()

G4VSolid * G4TwistedTrd::Clone ( ) const
overridevirtual

Makes a clone of the object for use in multi-treading.

Returns
A pointer to the new cloned allocated solid.

Reimplemented from G4VSolid.

Definition at line 127 of file G4TwistedTrd.cc.

128{
129 return new G4TwistedTrd(*this);
130}
G4TwistedTrd(const G4String &pName, G4double pDx1, G4double pDx2, G4double pDy1, G4double pDy2, G4double pDz, G4double pPhiTwist)

◆ GetCubicVolume()

double G4TwistedTrd::GetCubicVolume ( )
overridevirtual

Returning an estimation of the solid volume (capacity) and surface area, in internal units.

Reimplemented from G4VSolid.

Definition at line 135 of file G4TwistedTrd.cc.

136{
137 if (fCubicVolume == 0)
138 {
139 G4AutoLock l(&twtrdMutex);
144 G4double h = 2.*GetZHalfLength();
145 fCubicVolume = h*((x1 + x2)*(y1 + y2) + (x2 - x1)*(y2 - y1)/3.);
146 l.unlock();
147 }
148 return fCubicVolume;
149}
G4TemplateAutoLock< G4Mutex > G4AutoLock
double G4double
Definition G4Types.hh:83
G4double GetX2HalfLength() const
G4double GetY2HalfLength() const
G4double GetY1HalfLength() const
G4double GetZHalfLength() const
G4double GetX1HalfLength() const

◆ GetEntityType()

G4GeometryType G4TwistedTrd::GetEntityType ( ) const
overridevirtual

Returns the type ID, "G4TwistedTrd" of the solid.

Implements G4VSolid.

Definition at line 119 of file G4TwistedTrd.cc.

120{
121 return {"G4TwistedTrd"};
122}

◆ GetPhiTwist()

G4double G4TwistedTrd::GetPhiTwist ( ) const
inline

◆ GetSurfaceArea()

double G4TwistedTrd::GetSurfaceArea ( )
overridevirtual

Returns an estimation of the solid surface area in internal units. This method may be overloaded by derived classes to compute the exact geometrical quantity for solids where this is possible, or anyway to cache the computed value. Note: the computed value is NOT cached.

Reimplemented from G4VSolid.

Definition at line 154 of file G4TwistedTrd.cc.

155{
156 if (fSurfaceArea == 0)
157 {
158 G4AutoLock l(&twtrdMutex);
159 G4double ang = GetPhiTwist();
164 G4double h = 2.*GetZHalfLength();
165 G4double hh = h*h;
166 G4double delX = x2 - x1;
167 G4double delY = y2 - y1;
168 if (ang == 0.)
169 {
170 G4double hx = std::sqrt(delY*delY + hh);
171 G4double hy = std::sqrt(delX*delX + hh);
172 return fSurfaceArea =
173 2.*(x1 + x2)*hx + 2.*(y1 + y2)*hy + 4.*(x1*y1 + x2*y2);
174 }
175
176 // compute area of x-faces
177 G4double U1, U2, V1, V2;
178 G4double areaX = 0.;
179 U1 = delY + x1*ang;
180 U2 = delY + x2*ang;
181 V1 = delY - x1*ang;
182 V2 = delY - x2*ang;
183 if (std::abs(delX) < kCarTolerance) // case x1 == x2
184 {
185 areaX = (U1*std::sqrt(hh + U1*U1) + hh*std::asinh(U1/h) -
186 V1*std::sqrt(hh + V1*V1) - hh*std::asinh(V1/h))/ang;
187 }
188 else
189 {
190 // U contribution
191 areaX += ((hh + U2*U2)*std::sqrt(hh + U2*U2) -
192 (hh + U1*U1)*std::sqrt(hh + U1*U1))/3.
193 + hh*(U2*std::asinh(U2/h) - U1*std::asinh(U1/h))
194 - hh*(std::sqrt(hh + U2*U2) - std::sqrt(hh + U1*U1));
195 // V contribution
196 areaX += ((hh + V2*V2)*std::sqrt(hh + V2*V2) -
197 (hh + V1*V1)*std::sqrt(hh + V1*V1))/3.
198 + hh*(V2*std::asinh(V2/h) - V1*std::asinh(V1/h))
199 - hh*(std::sqrt(hh + V2*V2) - std::sqrt(hh + V1*V1));
200 areaX /= delX*ang*ang;
201 }
202
203 // compute area of y-faces
204 G4double areaY = 0.;
205 U1 = delX + y1*ang;
206 U2 = delX + y2*ang;
207 V1 = delX - y1*ang;
208 V2 = delX - y2*ang;
209 if (std::abs(delY) < kCarTolerance) // case y1 == y2
210 {
211 areaY = (U1*std::sqrt(hh + U1*U1) + hh*std::asinh(U1/h) -
212 V1*std::sqrt(hh + V1*V1) - hh*std::asinh(V1/h))/ang;
213 }
214 else
215 {
216 // U contribution
217 areaY += ((hh + U2*U2)*std::sqrt(hh + U2*U2) -
218 (hh + U1*U1)*std::sqrt(hh + U1*U1))/3.
219 + hh*(U2*std::asinh(U2/h) - U1*std::asinh(U1/h))
220 - hh*(std::sqrt(hh + U2*U2) - std::sqrt(hh + U1*U1));
221 // V contribution
222 areaY += ((hh + V2*V2)*std::sqrt(hh + V2*V2) -
223 (hh + V1*V1)*std::sqrt(hh + V1*V1))/3.
224 + hh*(V2*std::asinh(V2/h) - V1*std::asinh(V1/h))
225 - hh*(std::sqrt(hh + V2*V2) - std::sqrt(hh + V1*V1));
226 areaY /= delY*ang*ang;
227 }
228 fSurfaceArea = areaX + areaY + 4.*(x1*y1 + x2*y2);
229 l.unlock();
230 }
231 return fSurfaceArea;
232}
G4double GetPhiTwist() const
G4double kCarTolerance
Definition G4VSolid.hh:418
#define V1(a, b, c)
#define V2(a, b, c)

◆ GetX1HalfLength()

G4double G4TwistedTrd::GetX1HalfLength ( ) const
inline

◆ GetX2HalfLength()

G4double G4TwistedTrd::GetX2HalfLength ( ) const
inline

◆ GetY1HalfLength()

G4double G4TwistedTrd::GetY1HalfLength ( ) const
inline

◆ GetY2HalfLength()

G4double G4TwistedTrd::GetY2HalfLength ( ) const
inline

◆ GetZHalfLength()

G4double G4TwistedTrd::GetZHalfLength ( ) const
inline

◆ operator=()

G4TwistedTrd & G4TwistedTrd::operator= ( const G4TwistedTrd & rhs)

Definition at line 78 of file G4TwistedTrd.cc.

79{
80 // Check assignment to self
81 //
82 if (this == &rhs) { return *this; }
83
84 // Copy base class data
85 //
88
89 return *this;
90}
G4VTwistedFaceted & operator=(const G4VTwistedFaceted &rhs)

◆ StreamInfo()

std::ostream & G4TwistedTrd::StreamInfo ( std::ostream & os) const
overridevirtual

Streams the object contents to an output stream.

Implements G4VSolid.

Definition at line 95 of file G4TwistedTrd.cc.

96{
97 //
98 // Stream object contents to an output stream
99 //
100 os << "-----------------------------------------------------------\n"
101 << " *** Dump for solid - " << GetName() << " ***\n"
102 << " ===================================================\n"
103 << " Solid type: G4TwistedTrd\n"
104 << " Parameters: \n"
105 << " pDx1 = " << GetX1HalfLength()/cm << " cm" << G4endl
106 << " pDx2 = " << GetX2HalfLength()/cm << " cm" << G4endl
107 << " pDy1 = " << GetY1HalfLength()/cm << " cm" << G4endl
108 << " pDy2 = " << GetY2HalfLength()/cm << " cm" << G4endl
109 << " pDz = " << GetZHalfLength()/cm << " cm" << G4endl
110 << " pPhiTwist = " << GetPhiTwist()/degree << " deg" << G4endl
111 << "-----------------------------------------------------------\n";
112
113 return os;
114}
#define G4endl
Definition G4ios.hh:67
G4String GetName() const

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