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

#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
 
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)
 
virtual ~G4VTwistedFaceted ()
 
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
 
G4ThreeVector GetPointInSolid (G4double z) const
 
G4double GetCubicVolume () override
 
G4double GetSurfaceArea () override
 
void DescribeYourselfTo (G4VGraphicsScene &scene) const override
 
G4PolyhedronCreatePolyhedron () const override
 
G4PolyhedronGetPolyhedron () 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
 
G4VisExtent GetExtent () const override
 
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 ()
 
G4bool operator== (const G4VSolid &s) const
 
G4String GetName () const
 
void SetName (const G4String &name)
 
G4double GetTolerance () const
 
void DumpInfo () const
 
virtual const G4VSolidGetConstituentSolid (G4int no) const
 
virtual G4VSolidGetConstituentSolid (G4int no)
 
virtual const G4DisplacedSolidGetDisplacedSolidPtr () const
 
virtual G4DisplacedSolidGetDisplacedSolidPtr ()
 
 G4VSolid (__void__ &)
 
 G4VSolid (const G4VSolid &rhs)
 
G4VSolidoperator= (const G4VSolid &rhs)
 
G4double EstimateCubicVolume (G4int nStat, G4double epsilon) const
 
G4double EstimateSurfaceArea (G4int nStat, G4double ell) 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

Definition at line 50 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 )

Definition at line 38 of file G4TwistedTrd.cc.

45 : G4VTwistedFaceted( pName, pPhiTwist,pDz,0.,0.,
46 pDy1, pDx1, pDx1, pDy2, pDx2, pDx2,0.)
47{
48}
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()

G4TwistedTrd::~G4TwistedTrd ( )
overridedefault

◆ G4TwistedTrd() [2/3]

G4TwistedTrd::G4TwistedTrd ( __void__ & a)

Definition at line 54 of file G4TwistedTrd.cc.

56{
57}

◆ G4TwistedTrd() [3/3]

G4TwistedTrd::G4TwistedTrd ( const G4TwistedTrd & rhs)

Definition at line 67 of file G4TwistedTrd.cc.

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

Member Function Documentation

◆ Clone()

G4VSolid * G4TwistedTrd::Clone ( ) const
overridevirtual

Reimplemented from G4VSolid.

Definition at line 125 of file G4TwistedTrd.cc.

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

◆ GetCubicVolume()

double G4TwistedTrd::GetCubicVolume ( )
overridevirtual

Reimplemented from G4VSolid.

Definition at line 133 of file G4TwistedTrd.cc.

134{
135 if (fCubicVolume == 0.)
136 {
141 G4double h = 2.*GetZHalfLength();
142 fCubicVolume = h*((x1 + x2)*(y1 + y2) + (x2 - x1)*(y2 - y1)/3.);
143 }
144 return fCubicVolume;
145}
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

Implements G4VSolid.

Definition at line 117 of file G4TwistedTrd.cc.

118{
119 return {"G4TwistedTrd"};
120}

◆ GetPhiTwist()

G4double G4TwistedTrd::GetPhiTwist ( ) const
inline

◆ GetSurfaceArea()

double G4TwistedTrd::GetSurfaceArea ( )
overridevirtual

Reimplemented from G4VSolid.

Definition at line 150 of file G4TwistedTrd.cc.

151{
152 if (fSurfaceArea == 0.)
153 {
154 G4double ang = GetPhiTwist();
159 G4double h = 2.*GetZHalfLength();
160 G4double hh = h*h;
161 G4double delX = x2 - x1;
162 G4double delY = y2 - y1;
163 if (ang == 0.)
164 {
165 G4double hx = std::sqrt(delY*delY + hh);
166 G4double hy = std::sqrt(delX*delX + hh);
167 return fSurfaceArea =
168 2.*(x1 + x2)*hx + 2.*(y1 + y2)*hy + 4.*(x1*y1 + x2*y2);
169 }
170
171 // compute area of x-faces
172 G4double U1, U2, V1, V2;
173 G4double areaX = 0.;
174 U1 = delY + x1*ang;
175 U2 = delY + x2*ang;
176 V1 = delY - x1*ang;
177 V2 = delY - x2*ang;
178 if (std::abs(delX) < kCarTolerance) // case x1 == x2
179 {
180 areaX = (U1*std::sqrt(hh + U1*U1) + hh*std::asinh(U1/h) -
181 V1*std::sqrt(hh + V1*V1) - hh*std::asinh(V1/h))/ang;
182 }
183 else
184 {
185 // U contribution
186 areaX += ((hh + U2*U2)*std::sqrt(hh + U2*U2) -
187 (hh + U1*U1)*std::sqrt(hh + U1*U1))/3.
188 + hh*(U2*std::asinh(U2/h) - U1*std::asinh(U1/h))
189 - hh*(std::sqrt(hh + U2*U2) - std::sqrt(hh + U1*U1));
190 // V contribution
191 areaX += ((hh + V2*V2)*std::sqrt(hh + V2*V2) -
192 (hh + V1*V1)*std::sqrt(hh + V1*V1))/3.
193 + hh*(V2*std::asinh(V2/h) - V1*std::asinh(V1/h))
194 - hh*(std::sqrt(hh + V2*V2) - std::sqrt(hh + V1*V1));
195 areaX /= delX*ang*ang;
196 }
197
198 // compute area of y-faces
199 G4double areaY = 0.;
200 U1 = delX + y1*ang;
201 U2 = delX + y2*ang;
202 V1 = delX - y1*ang;
203 V2 = delX - y2*ang;
204 if (std::abs(delY) < kCarTolerance) // case y1 == y2
205 {
206 areaY = (U1*std::sqrt(hh + U1*U1) + hh*std::asinh(U1/h) -
207 V1*std::sqrt(hh + V1*V1) - hh*std::asinh(V1/h))/ang;
208 }
209 else
210 {
211 // U contribution
212 areaY += ((hh + U2*U2)*std::sqrt(hh + U2*U2) -
213 (hh + U1*U1)*std::sqrt(hh + U1*U1))/3.
214 + hh*(U2*std::asinh(U2/h) - U1*std::asinh(U1/h))
215 - hh*(std::sqrt(hh + U2*U2) - std::sqrt(hh + U1*U1));
216 // V contribution
217 areaY += ((hh + V2*V2)*std::sqrt(hh + V2*V2) -
218 (hh + V1*V1)*std::sqrt(hh + V1*V1))/3.
219 + hh*(V2*std::asinh(V2/h) - V1*std::asinh(V1/h))
220 - hh*(std::sqrt(hh + V2*V2) - std::sqrt(hh + V1*V1));
221 areaY /= delY*ang*ang;
222 }
223 fSurfaceArea = areaX + areaY + 4.*(x1*y1 + x2*y2);
224 }
225 return fSurfaceArea;
226}
G4double GetPhiTwist() const
G4double kCarTolerance
Definition G4VSolid.hh:299
#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 76 of file G4TwistedTrd.cc.

77{
78 // Check assignment to self
79 //
80 if (this == &rhs) { return *this; }
81
82 // Copy base class data
83 //
86
87 return *this;
88}
G4VTwistedFaceted & operator=(const G4VTwistedFaceted &rhs)

◆ StreamInfo()

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

Implements G4VSolid.

Definition at line 93 of file G4TwistedTrd.cc.

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

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