Geant4 11.1.1
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: // with description
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();
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
101
103 const G4int n,
104 const G4VPhysicalVolume* pRep );
105
106 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const;
107
108 G4bool CalculateExtent( const EAxis pAxis,
109 const G4VoxelLimits& pVoxelLimit,
110 const G4AffineTransform& pTransform,
111 G4double& pMin, G4double& pMax ) const;
112
113 EInside Inside( const G4ThreeVector& p ) const;
114
115 G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const;
116
118 const G4ThreeVector& v ) const;
119
120 G4double DistanceToIn( const G4ThreeVector& p ) const;
121
123 const G4ThreeVector& v,
124 const G4bool calcNorm = false,
125 G4bool* validNorm = nullptr,
126 G4ThreeVector* n = nullptr ) const;
127
128 G4double DistanceToOut( const G4ThreeVector& p ) const;
129
131
133
134 G4VSolid* Clone() const;
135
136 std::ostream& StreamInfo( std::ostream& os ) const;
137
138 // Visualisation functions
139
140 void DescribeYourselfTo (G4VGraphicsScene& scene) const;
142
143 public: // without description
144
145 G4Trd(__void__&);
146 // Fake default constructor for usage restricted to direct object
147 // persistency for clients requiring preallocation of memory for
148 // persistifiable objects.
149
150 G4Trd(const G4Trd& rhs);
151 G4Trd& operator=(const G4Trd& rhs);
152 // Copy constructor and assignment operator
153
154 private:
155
156 void CheckParameters();
157 // Check parameters
158
159 void MakePlanes();
160 // Set side planes
161
162 G4ThreeVector ApproxSurfaceNormal( const G4ThreeVector& p ) const;
163 // Algorithm for SurfaceNormal() following the original
164 // specification for points not on the surface
165
166 private:
167
168 G4double halfCarTolerance;
169 G4double fDx1,fDx2,fDy1,fDy2,fDz,fHx,fHy;
170 struct { G4double a,b,c,d; } fPlanes[4];
171};
172
173#include "G4Trd.icc"
174
175#endif
176
177#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:128
G4double GetXHalfLength2() const
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const
Definition: G4Trd.cc:279
EInside Inside(const G4ThreeVector &p) const
Definition: G4Trd.cc:330
G4double b
Definition: G4Trd.hh:170
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const
Definition: G4Trd.cc:452
void DescribeYourselfTo(G4VGraphicsScene &scene) const
Definition: G4Trd.cc:799
void SetXHalfLength1(G4double val)
void SetYHalfLength1(G4double val)
G4Trd & operator=(const G4Trd &rhs)
Definition: G4Trd.cc:102
G4double GetYHalfLength2() const
void SetXHalfLength2(G4double val)
void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
Definition: G4Trd.cc:237
std::ostream & StreamInfo(std::ostream &os) const
Definition: G4Trd.cc:695
G4double a
Definition: G4Trd.hh:170
G4ThreeVector GetPointOnSurface() const
Definition: G4Trd.cc:718
G4double GetXHalfLength1() const
G4GeometryType GetEntityType() const
Definition: G4Trd.cc:677
G4double c
Definition: G4Trd.hh:170
G4double d
Definition: G4Trd.hh:170
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const
Definition: G4Trd.cc:347
G4double GetYHalfLength1() const
G4VSolid * Clone() const
Definition: G4Trd.cc:686
~G4Trd()
Definition: G4Trd.cc:81
G4double GetSurfaceArea()
Definition: G4Trd.cc:222
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const
Definition: G4Trd.cc:563
G4Polyhedron * CreatePolyhedron() const
Definition: G4Trd.cc:804
void SetZHalfLength(G4double val)
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const
Definition: G4Trd.cc:248
G4double GetCubicVolume()
Definition: G4Trd.cc:208
G4double GetZHalfLength() const
EAxis
Definition: geomdefs.hh:54
EInside
Definition: geomdefs.hh:67