Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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//
27// $Id$
28//
29//
30// --------------------------------------------------------------------
31// GEANT 4 class header file
32//
33// G4Paraboloid
34//
35// Class description:
36//
37// A G4Paraboloid represents a solid with parabolic profile with possible
38// cuts along the Z axis.
39//
40// Member Data:
41//
42// dz z half lenght
43// r1 radius at -dz
44// r2 radius at dz
45// r2 > r1
46//
47// Equation for the solid:
48// rho^2 <= k1 * z + k2;
49// -dz <= z <= dz
50// r1^2 = k1 * (-dz) + k2
51// r2^2 = k1 * ( dz) + k2
52
53// History:
54// -------
55// 10.07.2007 L.Lindroos (CERN) - First implementation
56// --------------------------------------------------------------------
57#ifndef G4Paraboloid_HH
58#define G4Paraboloid_HH
59
61
62#include "G4VSolid.hh"
63
64class G4Paraboloid : public G4VSolid
65{
66 public: // with description
67
68 G4Paraboloid(const G4String& pName,
69 G4double pDz,
70 G4double pR1,
71 G4double pR2);
72
73 virtual ~G4Paraboloid();
74
75 // Access functions
76
77 inline G4double GetZHalfLength() const;
78 inline G4double GetRadiusMinusZ() const;
79 inline G4double GetRadiusPlusZ() const;
80
84
85 // Modifiers functions
86
87 inline void SetZHalfLength(G4double dz);
88 inline void SetRadiusMinusZ(G4double R1);
89 inline void SetRadiusPlusZ(G4double R2);
90
91 // Solid standard methods
92
93 //void ComputeDimensions( G4VPVParamerisation p,
94 // const G4Int n,
95 // const G4VPhysicalVolume* pRep );
96 G4bool CalculateExtent(const EAxis pAxis,
97 const G4VoxelLimits& pVoxelLimit,
98 const G4AffineTransform& pTransform,
99 G4double& pmin, G4double& pmax) const;
100 EInside Inside(const G4ThreeVector& p) const;
103 const G4ThreeVector& v) const;
104 G4double DistanceToIn(const G4ThreeVector& p) const;
106 const G4ThreeVector& v,
107 const G4bool calcNorm=G4bool(false),
108 G4bool *validNorm=0,
109 G4ThreeVector *n=0) const;
110 G4double DistanceToOut(const G4ThreeVector& p) const;
111
113
114 G4VSolid* Clone() const;
115
116 std::ostream& StreamInfo(std::ostream& os) const;
117
119
120 // Visualisation functions
121
122 void DescribeYourselfTo(G4VGraphicsScene& scene) const;
124 G4Polyhedron* GetPolyhedron () const;
125 G4NURBS* CreateNURBS() 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);
135 G4Paraboloid& operator=(const G4Paraboloid& rhs);
136 // Copy constructor and assignment operator.
137
138 protected: // without description
139
141
142 private:
143
145 CreateRotatedVertices(const G4AffineTransform& pTransform,
146 G4int& noPolygonVertices) const;
147 // Making this mutable to allow GetPointOnSurface to have access to
148 // area function.
149 mutable G4double fSurfaceArea;
150 G4double fCubicVolume;
151
152 G4double dz, r1, r2;
153 G4double k1, k2;
154 // Defined to make some calculations easier to follow
155};
156
157#include "G4Paraboloid.icc"
158
159#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
std::vector< G4ThreeVector > G4ThreeVectorList
Definition: G4VSolid.hh:85
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=G4bool(false), G4bool *validNorm=0, G4ThreeVector *n=0) const
G4double GetCubicVolume()
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
G4NURBS * CreateNURBS() 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
G4Polyhedron * GetPolyhedron() const
G4Paraboloid & operator=(const G4Paraboloid &rhs)
void SetRadiusMinusZ(G4double R1)
virtual ~G4Paraboloid()
EAxis
Definition: geomdefs.hh:54
EInside
Definition: geomdefs.hh:58