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
G4Paraboloid.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// G4Paraboloid
27//
28// Class description:
29//
30// A G4Paraboloid represents a solid with parabolic profile with possible
31// cuts along the Z axis.
32//
33// Member Data:
34//
35// dz z half lenght
36// r1 radius at -dz
37// r2 radius at dz
38// r2 > r1
39//
40// Equation for the solid:
41// rho^2 <= k1 * z + k2;
42// -dz <= z <= dz
43// r1^2 = k1 * (-dz) + k2
44// r2^2 = k1 * ( dz) + k2
45
46// 10.07.2007, L.Lindroos (CERN) - First implementation
47// --------------------------------------------------------------------
48#ifndef G4PARABOLOID_HH
49#define G4PARABOLOID_HH
50
51#include "G4GeomTypes.hh"
52
53#if defined(G4GEOM_USE_USOLIDS)
54#define G4GEOM_USE_UPARABOLOID 1
55#endif
56
57#if (defined(G4GEOM_USE_UPARABOLOID) && defined(G4GEOM_USE_SYS_USOLIDS))
58 #define G4UParaboloid G4Paraboloid
59 #include "G4UParaboloid.hh"
60#else
61
63
64#include "G4VSolid.hh"
65#include "G4Polyhedron.hh"
66
67class G4Paraboloid : public G4VSolid
68{
69 public: // with description
70
71 G4Paraboloid(const G4String& pName,
72 G4double pDz,
73 G4double pR1,
74 G4double pR2);
75
76 virtual ~G4Paraboloid();
77
78 // Access functions
79
80 inline G4double GetZHalfLength() const;
81 inline G4double GetRadiusMinusZ() const;
82 inline G4double GetRadiusPlusZ() const;
83
87
88 // Modifiers functions
89
90 inline void SetZHalfLength(G4double dz);
91 inline void SetRadiusMinusZ(G4double R1);
92 inline void SetRadiusPlusZ(G4double R2);
93
94 // Solid standard methods
95
96 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const;
97 G4bool CalculateExtent(const EAxis pAxis,
98 const G4VoxelLimits& pVoxelLimit,
99 const G4AffineTransform& pTransform,
100 G4double& pmin, G4double& pmax) const;
101 EInside Inside(const G4ThreeVector& p) const;
104 const G4ThreeVector& v) const;
105 G4double DistanceToIn(const G4ThreeVector& p) const;
107 const G4ThreeVector& v,
108 const G4bool calcNorm = false,
109 G4bool* validNorm = nullptr,
110 G4ThreeVector* n = nullptr) const;
111 G4double DistanceToOut(const G4ThreeVector& p) const;
112
114
115 G4VSolid* Clone() const;
116
117 std::ostream& StreamInfo(std::ostream& os) const;
118
120
121 // Visualisation functions
122
123 void DescribeYourselfTo(G4VGraphicsScene& scene) const;
125 G4Polyhedron* GetPolyhedron () const;
126
127 public: // without description
128
129 G4Paraboloid(__void__&);
130 // Fake default constructor for usage restricted to direct object
131 // persistency for clients requiring preallocation of memory for
132 // persistifiable objects.
133
134 G4Paraboloid(const G4Paraboloid& rhs);
136 // Copy constructor and assignment operator.
137
138 protected: // without description
139
140 mutable G4bool fRebuildPolyhedron = false;
141 mutable G4Polyhedron* fpPolyhedron = nullptr;
142
143 private:
144
145 // Making this mutable to allow GetPointOnSurface to have access to
146 // area function.
147 mutable G4double fSurfaceArea = 0.0;
148 G4double fCubicVolume = 0.0;
149
150 G4double dz, r1, r2;
151 G4double k1, k2;
152 // Defined to make some calculations easier to follow
153};
154
155#include "G4Paraboloid.icc"
156
157#endif // defined(G4GEOM_USE_UPARABOLOID) && defined(G4GEOM_USE_SYS_USOLIDS)
158
159#endif // G4Paraboloid_HH
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
G4double GetCubicVolume()
G4bool fRebuildPolyhedron
G4VSolid * Clone() const
EInside Inside(const G4ThreeVector &p) const
G4Polyhedron * CreatePolyhedron() const
G4double GetRadiusPlusZ() const
G4double CalculateSurfaceArea() const
G4ThreeVector GetPointOnSurface() const
G4double GetSurfaceArea()
void SetZHalfLength(G4double dz)
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pmin, G4double &pmax) const
G4Polyhedron * fpPolyhedron
void SetRadiusPlusZ(G4double R2)
G4double GetRadiusMinusZ() const
G4GeometryType GetEntityType() const
void DescribeYourselfTo(G4VGraphicsScene &scene) const
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const
G4double GetZHalfLength() const
std::ostream & StreamInfo(std::ostream &os) const
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const
G4Polyhedron * GetPolyhedron() const
G4Paraboloid & operator=(const G4Paraboloid &rhs)
void SetRadiusMinusZ(G4double R1)
virtual ~G4Paraboloid()
EAxis
Definition: geomdefs.hh:54
EInside
Definition: geomdefs.hh:67