ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4UTrap.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4UTrap.hh
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 <volumes/UnplacedTrapezoid.h>
42 
43 #include "G4Polyhedron.hh"
44 
45 class 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 
150 inline G4GeometryType G4UTrap::GetEntityType() const
151 {
152  return "G4Trap";
153 }
154 
155 #endif // G4GEOM_USE_USOLIDS
156 
157 #endif