Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4TwistedTrap.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// G4TwistedTrap
27//
28// Class description:
29//
30// A G4TwistedTrap is a general twisted trapezoid: The faces perpendicular to the
31// z planes are trapezia, and their centres are not necessarily on
32// a line parallel to the z axis.
33//
34// pDz Half-length along the z-axis
35// pTheta Polar angle of the line joining the centres of the faces
36// at -/+pDz
37// pPhi Azimuthal angle of the line joining the centre of the face at
38// -pDz to the centre of the face at +pDz
39// pDy1 Half-length along y of the face at -pDz
40// pDx1 Half-length along x of the side at y=-pDy1 of the face at -pDz
41// pDx2 Half-length along x of the side at y=+pDy1 of the face at -pDz
42//
43// pDy2 Half-length along y of the face at +pDz
44// pDx3 Half-length along x of the side at y=-pDy2 of the face at +pDz
45// pDx4 Half-length along x of the side at y=+pDy2 of the face at +pDz
46// pAlph Angle with respect to the y axis from the centre of the side
47//
48//
49// A special regular case of a trapezoid with equal endcaps is available,
50// with polar,azimuthal and tilt angles set to zero.
51//
52
53// Author: Oliver Link (CERN), 27.10.2004 - Created
54// --------------------------------------------------------------------
55#ifndef G4TWISTEDTRAP_HH
56#define G4TWISTEDTRAP_HH
57
58#include "G4VTwistedFaceted.hh"
59
60/**
61 * @brief G4TwistedTrap is a general twisted trapezoid. The faces perpendicular
62 * to the Z planes are trapezia, and their centres are not necessarily on
63 * a line parallel to the Z axis.
64 */
65
67{
68 public:
69
70 /**
71 * Constructs a twisted trapezoid, given its parameters.
72 * @param[in] pName The solid name.
73 * @param[in] pPhiTwist The twist angle.
74 * @param[in] pDx1 Half X length at -pDz,-pDy.
75 * @param[in] pDx2 Half X length at -pDz,+pDy.
76 * @param[in] pDy Half-length along the Y axis.
77 * @param[in] pDz Half-length along the Z axis.
78 */
79 G4TwistedTrap(const G4String& pName,
80 G4double pPhiTwist,
81 G4double pDx1, // half x length at -pDz,-pDy
82 G4double pDx2, // half x length at -pDz,+pDy
83 G4double pDy,
84 G4double pDz);
85
86 /**
87 * Alternative construct of a twisted trapezoid, given its parameters.
88 * @param[in] pName The solid name.
89 * @param[in] pPhiTwist The twist angle.
90 * @param[in] pDz Half-length along the Z axis.
91 * @param[in] pTheta Polar angle of the line joining the centres of the
92 * faces at -/+pDz.
93 * @param[in] pPhi Azimuthal angle of the line joining the centres of the
94 * faces at -/+pDz.
95 * @param[in] pDy1 Half Y length at -pDz.
96 * @param[in] pDx1 Half X length at -pDz, y=-pDy1.
97 * @param[in] pDx2 Half X length at -pDz, y=+pDy1.
98 * @param[in] pDy2 Half Y length at +pDz.
99 * @param[in] pDx3 Half X length at +pDz, y=-pDy2.
100 * @param[in] pDx4 Half X length at +pDz, y=+pDy2.
101 * @param[in] pAlph Angle with respect to the Y axis from centre of side.
102 */
103 G4TwistedTrap(const G4String& pName, // Name of instance
104 G4double pPhiTwist, // twist angle
105 G4double pDz, // half z length
106 G4double pTheta, // direction between end planes
107 G4double pPhi, // defined by polar and azim. angles
108 G4double pDy1, // half y length at -pDz
109 G4double pDx1, // half x length at -pDz,-pDy
110 G4double pDx2, // half x length at -pDz,+pDy
111 G4double pDy2, // half y length at +pDz
112 G4double pDx3, // half x length at +pDz,-pDy
113 G4double pDx4, // half x length at +pDz,+pDy
114 G4double pAlph // tilt angle
115 );
116
117 /**
118 * Default destructor.
119 */
120 ~G4TwistedTrap() override = default;
121
122 /**
123 * Accessors.
124 */
125 inline G4double GetY1HalfLength() const { return GetDy1() ; }
126 inline G4double GetX1HalfLength() const { return GetDx1() ; }
127 inline G4double GetX2HalfLength() const { return GetDx2() ; }
128 inline G4double GetY2HalfLength() const { return GetDy2() ; }
129 inline G4double GetX3HalfLength() const { return GetDx3() ; }
130 inline G4double GetX4HalfLength() const { return GetDx4() ; }
131 inline G4double GetZHalfLength() const { return GetDz() ; }
132 inline G4double GetPhiTwist() const { return GetTwistAngle() ; }
133 inline G4double GetTiltAngleAlpha() const { return GetAlpha() ; }
134 inline G4double GetPolarAngleTheta() const { return GetTheta() ; }
135 inline G4double GetAzimuthalAnglePhi() const { return GetPhi() ; }
136
137 /**
138 * Returns the type ID, "G4TwistedTrap" of the solid.
139 */
140 G4GeometryType GetEntityType() const override;
141
142 /**
143 * Makes a clone of the object for use in multi-treading.
144 * @returns A pointer to the new cloned allocated solid.
145 */
146 G4VSolid* Clone() const override;
147
148 /**
149 * Streams the object contents to an output stream.
150 */
151 std::ostream &StreamInfo(std::ostream& os) const override;
152
153 /**
154 * Fake default constructor for usage restricted to direct object
155 * persistency for clients requiring preallocation of memory for
156 * persistifiable objects.
157 */
158 G4TwistedTrap(__void__&);
159
160 /**
161 * Copy constructor and assignment operator.
162 */
163 G4TwistedTrap(const G4TwistedTrap& rhs);
165} ;
166
167#endif
double G4double
Definition G4Types.hh:83
G4String G4GeometryType
Definition G4VSolid.hh:70
G4TwistedTrap is a general twisted trapezoid. The faces perpendicular to the Z planes are trapezia,...
~G4TwistedTrap() override=default
G4double GetPolarAngleTheta() const
G4double GetAzimuthalAnglePhi() const
G4GeometryType GetEntityType() const override
G4VSolid * Clone() const override
G4double GetTiltAngleAlpha() const
G4double GetZHalfLength() const
G4double GetX1HalfLength() const
std::ostream & StreamInfo(std::ostream &os) const override
G4double GetX2HalfLength() const
G4double GetX3HalfLength() const
G4double GetX4HalfLength() const
G4TwistedTrap(const G4String &pName, G4double pPhiTwist, G4double pDx1, G4double pDx2, G4double pDy, G4double pDz)
G4TwistedTrap & operator=(const G4TwistedTrap &rhs)
G4double GetY2HalfLength() const
G4double GetPhiTwist() const
G4double GetY1HalfLength() const
G4VSolid is an abstract base class for solids, physical shapes that can be tracked through....
Definition G4VSolid.hh:80
G4double GetDy1() const
G4double GetDy2() const
G4double GetTheta() const
G4double GetPhi() const
G4double GetDx3() const
G4double GetTwistAngle() const
G4double GetDx4() const
G4double GetAlpha() const
G4double GetDz() const
G4VTwistedFaceted(const G4String &pname, G4double PhiTwist, G4double pDz, G4double pTheta, G4double pPhi, G4double pDy1, G4double pDx1, G4double pDx2, G4double pDy2, G4double pDx3, G4double pDx4, G4double pAlph)
G4double GetDx1() const
G4double GetDx2() const