Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4Trd.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4Trd
27//
28// Class description:
29//
30// A G4Trd is a trapezoid with the x and y dimensions varying along z
31// functions:
32//
33// Member Data:
34//
35// fDx1 Half-length along x at the surface positioned at -dz
36// fDx2 Half-length along x at the surface positioned at +dz
37// fDy1 Half-length along y at the surface positioned at -dz
38// fDy2 Half-length along y at the surface positioned at +dz
39// fDz Half-length along z axis
40
41// 12.01.95 P.Kent: Old prototype code converted to thick geometry
42// 21.04.97 J.Apostolakis: Added Set Methods
43// 19.11.99 V.Grichine: kUndefined was added to Eside enum
44// --------------------------------------------------------------------
45#ifndef G4TRD_HH
46#define G4TRD_HH
47
48#include "G4GeomTypes.hh"
49
50#if defined(G4GEOM_USE_USOLIDS)
51#define G4GEOM_USE_UTRD 1
52#endif
53
54#if defined(G4GEOM_USE_UTRD)
55 #define G4UTrd G4Trd
56 #include "G4UTrd.hh"
57#else
58
59#include "G4CSGSolid.hh"
60#include "G4Polyhedron.hh"
61
62class G4Trd : public G4CSGSolid
63{
64 public:
65
66 G4Trd( const G4String& pName,
67 G4double pdx1, G4double pdx2,
68 G4double pdy1, G4double pdy2,
69 G4double pdz );
70 //
71 // Constructs a trapezoid with name, and half lengths
72
73 ~G4Trd() override;
74 //
75 // Destructor
76
77 // Accessors
78
79 inline G4double GetXHalfLength1() const;
80 inline G4double GetXHalfLength2() const;
81 inline G4double GetYHalfLength1() const;
82 inline G4double GetYHalfLength2() const;
83 inline G4double GetZHalfLength() const;
84
85 // Modifiers
86
87 inline void SetXHalfLength1(G4double val);
88 inline void SetXHalfLength2(G4double val);
89 inline void SetYHalfLength1(G4double val);
90 inline void SetYHalfLength2(G4double val);
91 inline void SetZHalfLength(G4double val);
92
93 void SetAllParameters ( G4double pdx1, G4double pdx2,
94 G4double pdy1, G4double pdy2,
95 G4double pdz );
96
97 // Methods of solid
98
99 G4double GetCubicVolume() override;
100 G4double GetSurfaceArea() override;
101
103 const G4int n,
104 const G4VPhysicalVolume* pRep ) override;
105
106 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override;
107
108 G4bool CalculateExtent(const EAxis pAxis,
109 const G4VoxelLimits& pVoxelLimit,
110 const G4AffineTransform& pTransform,
111 G4double& pMin, G4double& pMax) const override;
112
113 EInside Inside( const G4ThreeVector& p ) const override;
114
115 G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override;
116
118 const G4ThreeVector& v ) const override;
119
120 G4double DistanceToIn( const G4ThreeVector& p ) const override;
121
123 const G4ThreeVector& v,
124 const G4bool calcNorm = false,
125 G4bool* validNorm = nullptr,
126 G4ThreeVector* n = nullptr ) const override;
127
128 G4double DistanceToOut( const G4ThreeVector& p ) const override;
129
130 G4GeometryType GetEntityType() const override;
131
132 G4ThreeVector GetPointOnSurface() const override;
133
134 G4VSolid* Clone() const override;
135
136 std::ostream& StreamInfo( std::ostream& os ) const override;
137
138 // Visualisation functions
139
140 void DescribeYourselfTo (G4VGraphicsScene& scene) const override;
141 G4Polyhedron* CreatePolyhedron () const override;
142
143 G4Trd(__void__&);
144 // Fake default constructor for usage restricted to direct object
145 // persistency for clients requiring preallocation of memory for
146 // persistifiable objects.
147
148 G4Trd(const G4Trd& rhs);
149 G4Trd& operator=(const G4Trd& rhs);
150 // Copy constructor and assignment operator
151
152 private:
153
154 void CheckParameters();
155 // Check parameters
156
157 void MakePlanes();
158 // Set side planes
159
160 G4ThreeVector ApproxSurfaceNormal( const G4ThreeVector& p ) const;
161 // Algorithm for SurfaceNormal() following the original
162 // specification for points not on the surface
163
164 private:
165
166 G4double halfCarTolerance;
167 G4double fDx1,fDx2,fDy1,fDy2,fDz,fHx,fHy;
168 struct { G4double a,b,c,d; } fPlanes[4];
169};
170
171#include "G4Trd.icc"
172
173#endif
174
175#endif
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
Definition G4Trd.hh:63
void SetYHalfLength2(G4double val)
void SetAllParameters(G4double pdx1, G4double pdx2, G4double pdy1, G4double pdy2, G4double pdz)
Definition G4Trd.cc:126
G4double GetXHalfLength2() const
std::ostream & StreamInfo(std::ostream &os) const override
Definition G4Trd.cc:693
G4Trd(const G4String &pName, G4double pdx1, G4double pdx2, G4double pdy1, G4double pdy2, G4double pdz)
Definition G4Trd.cc:54
G4double GetSurfaceArea() override
Definition G4Trd.cc:220
G4double b
Definition G4Trd.hh:168
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const override
Definition G4Trd.cc:277
void DescribeYourselfTo(G4VGraphicsScene &scene) const override
Definition G4Trd.cc:797
EInside Inside(const G4ThreeVector &p) const override
Definition G4Trd.cc:328
void SetXHalfLength1(G4double val)
void SetYHalfLength1(G4double val)
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const override
Definition G4Trd.cc:246
G4Trd & operator=(const G4Trd &rhs)
Definition G4Trd.cc:100
G4double GetYHalfLength2() const
void SetXHalfLength2(G4double val)
~G4Trd() override
G4double a
Definition G4Trd.hh:168
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const override
Definition G4Trd.cc:450
G4Polyhedron * CreatePolyhedron() const override
Definition G4Trd.cc:802
G4double GetXHalfLength1() const
G4double c
Definition G4Trd.hh:168
G4double d
Definition G4Trd.hh:168
G4ThreeVector GetPointOnSurface() const override
Definition G4Trd.cc:716
G4double GetYHalfLength1() const
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const override
Definition G4Trd.cc:561
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const override
Definition G4Trd.cc:345
G4double GetCubicVolume() override
Definition G4Trd.cc:206
G4GeometryType GetEntityType() const override
Definition G4Trd.cc:675
void SetZHalfLength(G4double val)
void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep) override
Definition G4Trd.cc:235
G4double GetZHalfLength() const
G4VSolid * Clone() const override
Definition G4Trd.cc:684
EAxis
Definition geomdefs.hh:54
EInside
Definition geomdefs.hh:67