Geant4-11
G4UTrap.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// G4UTrap
27//
28// Class description:
29//
30// Wrapper class for G4Trap to make use of VecGeom Trapezoid.
31
32// 13.09.13 G.Cosmo, CERN/PH
33// --------------------------------------------------------------------
34#ifndef G4UTRAP_HH
35#define G4UTRAP_HH
36
37#include "G4UAdapter.hh"
38
39#if ( defined(G4GEOM_USE_USOLIDS) || defined(G4GEOM_USE_PARTIAL_USOLIDS) )
40
41#include <VecGeom/volumes/UnplacedTrapezoid.h>
42
43#include "G4Polyhedron.hh"
44
45class G4UTrap : public G4UAdapter<vecgeom::UnplacedTrapezoid>
46{
47 using Shape_t = vecgeom::UnplacedTrapezoid;
48 using Base_t = G4UAdapter<vecgeom::UnplacedTrapezoid>;
49
50 public: // with description
51
52 G4UTrap( const G4String& pName,
53 G4double pDz,
54 G4double pTheta, G4double pPhi,
55 G4double pDy1, G4double pDx1, G4double pDx2,
56 G4double pAlp1,
57 G4double pDy2, G4double pDx3, G4double pDx4,
58 G4double pAlp2 );
59 //
60 // The most general constructor for G4Trap which prepares plane
61 // equations and corner coordinates from parameters
62
63 G4UTrap( const G4String& pName,
64 const G4ThreeVector pt[8] ) ;
65 //
66 // Prepares plane equations and parameters from corner coordinates
67
68 G4UTrap( const G4String& pName,
69 G4double pZ,
70 G4double pY,
71 G4double pX, G4double pLTX );
72 //
73 // Constructor for Right Angular Wedge from STEP (assumes pLTX<=pX)
74
75 G4UTrap( const G4String& pName,
76 G4double pDx1, G4double pDx2,
77 G4double pDy1, G4double pDy2,
78 G4double pDz );
79 //
80 // Constructor for G4Trd
81
82 G4UTrap(const G4String& pName,
83 G4double pDx, G4double pDy, G4double pDz,
84 G4double pAlpha, G4double pTheta, G4double pPhi );
85 //
86 // Constructor for G4Para
87
88 G4UTrap( const G4String& pName );
89 //
90 // Constructor for "nominal" G4Trap whose parameters are to be set
91 // by a G4VPVParamaterisation later
92
93 ~G4UTrap();
94
95 void ComputeDimensions( G4VPVParameterisation* p,
96 const G4int n,
97 const G4VPhysicalVolume* pRep);
98
99 G4VSolid* Clone() const;
100
101 using Base_t::GetTanAlpha1;
102 using Base_t::GetTanAlpha2;
103
104 // Accessors
105
106 G4double GetZHalfLength() const;
107 G4double GetYHalfLength1() const;
108 G4double GetXHalfLength1() const;
109 G4double GetXHalfLength2() const;
110 G4double GetTanAlpha1() const;
111 G4double GetYHalfLength2() const;
112 G4double GetXHalfLength3() const;
113 G4double GetXHalfLength4() const;
114 G4double GetTanAlpha2() const;
115
116 TrapSidePlane GetSidePlane(G4int n) const;
117 G4ThreeVector GetSymAxis() const;
118
119 G4double GetPhi() const;
120 G4double GetTheta() const;
121 G4double GetAlpha1() const;
122 G4double GetAlpha2() const;
123 // Obtain (re)computed values of original parameters
124
125 // Modifiers
126
127 void SetAllParameters(G4double pDz, G4double pTheta, G4double pPhi,
128 G4double pDy1, G4double pDx1, G4double pDx2,
129 G4double pAlp1,
130 G4double pDy2, G4double pDx3, G4double pDx4,
131 G4double pAlp2);
132
133 inline G4GeometryType GetEntityType() const;
134
135 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const;
136
137 G4bool CalculateExtent(const EAxis pAxis,
138 const G4VoxelLimits& pVoxelLimit,
139 const G4AffineTransform& pTransform,
140 G4double& pMin, G4double& pMax) const;
141
142 G4Polyhedron* CreatePolyhedron() const;
143
144 public: // without description
145
146 G4UTrap(__void__&);
147 // Fake default constructor for usage restricted to direct object
148 // persistency for clients requiring preallocation of memory for
149 // persistifiable objects.
150
151 G4UTrap(const G4UTrap& rhs);
152 G4UTrap& operator=(const G4UTrap& rhs);
153 // Copy constructor and assignment operator.
154
155 private:
156
157 void SetPlanes(const G4ThreeVector pt[8]);
158 // Set parameters using eight vertices
159
160 void CheckParameters() const;
161 // Check dimensions
162
163 void GetVertices(G4ThreeVector pt[8]) const;
164 // Compute coordinates of vertices
165
166 void CheckPlanarity(const G4ThreeVector pt[8]) const;
167 // Check planarity of lateral planes
168};
169
170// --------------------------------------------------------------------
171// Inline methods
172// --------------------------------------------------------------------
173
174inline G4GeometryType G4UTrap::GetEntityType() const
175{
176 return "G4Trap";
177}
178
179#endif // G4GEOM_USE_USOLIDS
180
181#endif
static const G4double pMax
static const G4double pMin
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
EAxis
Definition: geomdefs.hh:54