Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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 G4double GetZHalfLength() const;
105 G4double GetYHalfLength1() const;
106 G4double GetXHalfLength1() const;
107 G4double GetXHalfLength2() const;
108 G4double GetYHalfLength2() const;
109 G4double GetXHalfLength3() const;
110 G4double GetXHalfLength4() const;
111 G4double GetThetaCphi() const;
112 G4double GetThetaSphi() const;
113 TrapSidePlane GetSidePlane(G4int n) const;
114 G4ThreeVector GetSymAxis() const;
115
116 void SetAllParameters(G4double pDz, G4double pTheta, G4double pPhi,
117 G4double pDy1, G4double pDx1, G4double pDx2,
118 G4double pAlp1,
119 G4double pDy2, G4double pDx3, G4double pDx4,
120 G4double pAlp2);
121 void SetPlanes(const G4ThreeVector pt[8]);
122
123 inline G4GeometryType GetEntityType() const;
124
125 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const;
126
127 G4bool CalculateExtent(const EAxis pAxis,
128 const G4VoxelLimits& pVoxelLimit,
129 const G4AffineTransform& pTransform,
130 G4double& pMin, G4double& pMax) const;
131
132 G4Polyhedron* CreatePolyhedron() const;
133
134 public: // without description
135
136 G4UTrap(__void__&);
137 // Fake default constructor for usage restricted to direct object
138 // persistency for clients requiring preallocation of memory for
139 // persistifiable objects.
140
141 G4UTrap(const G4UTrap& rhs);
142 G4UTrap& operator=(const G4UTrap& rhs);
143 // Copy constructor and assignment operator.
144};
145
146// --------------------------------------------------------------------
147// Inline methods
148// --------------------------------------------------------------------
149
150inline G4GeometryType G4UTrap::GetEntityType() const
151{
152 return "G4Trap";
153}
154
155#endif // G4GEOM_USE_USOLIDS
156
157#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
EAxis
Definition: geomdefs.hh:54