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
G4GenericPolycone.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// G4GenericPolycone
27//
28// Class description:
29//
30// Class implementing a GenericPolycone constructed by points with
31// (r,z)coordinates, allows Z 'go back'
32//
33//
34// G4GenericPolycone( const G4String& name,
35// G4double phiStart, // initial phi starting angle
36// G4double phiTotal, // total phi angle
37// G4int numRZ, // number corners in r,z space
38// const G4double r[], // r coordinate of these corners
39// const G4double z[]) // z coordinate of these corners
40//
41
42// Authors: T.Nikitina, G.Cosmo - CERN
43// --------------------------------------------------------------------
44#ifndef G4GENERICPOLYCONE_HH
45#define G4GENERICPOLYCONE_HH
46
47#include "G4GeomTypes.hh"
48
49#if defined(G4GEOM_USE_USOLIDS)
50#define G4GEOM_USE_UGENERICPOLYCONE 1
51#endif
52
53#if defined(G4GEOM_USE_UGENERICPOLYCONE)
54 #define G4UGenericPolycone G4GenericPolycone
55 #include "G4UGenericPolycone.hh"
56#else
57
58#include "G4VCSGfaceted.hh"
59#include "G4PolyconeSide.hh"
60
63class G4VCSGface;
64
66{
67
68 public: // with description
69
70 G4GenericPolycone( const G4String& name,
71 G4double phiStart, // initial phi starting angle
72 G4double phiTotal, // total phi angle
73 G4int numRZ, // number corners in r,z space
74 const G4double r[], // r coordinate of these corners
75 const G4double z[] ); // z coordinate of these corners
76
77 virtual ~G4GenericPolycone();
78
79 // Methods for solid
80
81 EInside Inside( const G4ThreeVector &p ) const;
82 G4double DistanceToIn( const G4ThreeVector &p, const G4ThreeVector &v ) const;
83 G4double DistanceToIn( const G4ThreeVector &p ) const;
84
85 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const;
86 G4bool CalculateExtent(const EAxis pAxis,
87 const G4VoxelLimits& pVoxelLimit,
88 const G4AffineTransform& pTransform,
89 G4double& pmin, G4double& pmax) const;
90
93
95
97
98 G4VSolid* Clone() const;
99
100 std::ostream& StreamInfo(std::ostream& os) const;
101
103
104 G4bool Reset();
105
106 // Accessors
107
108 inline G4double GetStartPhi() const;
109 inline G4double GetEndPhi() const;
110 inline G4double GetSinStartPhi() const;
111 inline G4double GetCosStartPhi() const;
112 inline G4double GetSinEndPhi() const;
113 inline G4double GetCosEndPhi() const;
114 inline G4bool IsOpen() const;
115 inline G4int GetNumRZCorner() const;
116 inline G4PolyconeSideRZ GetCorner(G4int index) const;
117
118 public: // without description
119
120 G4GenericPolycone(__void__&);
121 // Fake default constructor for usage restricted to direct object
122 // persistency for clients requiring preallocation of memory for
123 // persistifiable objects.
124
125 G4GenericPolycone( const G4GenericPolycone& source );
127 // Copy constructor and assignment operator.
128
129 protected: // without description
130
131 // Generic initializer, called by all constructors
132
133 void Create( G4double phiStart, // initial phi starting angle
134 G4double phiTotal, // total phi angle
135 G4ReduciblePolygon* rz ); // r/z coordinate of these corners
136
137 void CopyStuff( const G4GenericPolycone& source );
138
139 // Methods for random point generation
140
141 void SetSurfaceElements() const;
142
143 protected: // without description
144
145 // Here are our parameters
146
147 G4double startPhi; // Starting phi value (0 < phiStart < 2pi)
148 G4double endPhi; // end phi value (0 < endPhi-phiStart < 2pi)
149 G4bool phiIsOpen = false; // true if there is a phi segment
150 G4int numCorner; // number RZ points
151 G4PolyconeSideRZ* corners = nullptr; // corner r,z points
152
153 G4EnclosingCylinder* enclosingCylinder = nullptr; // Our quick test
154
155 struct surface_element { G4double area = 0.; G4int i0 = 0, i1 = 0, i2 = 0; };
156 mutable std::vector<surface_element>* fElements = nullptr;
157};
158
159#include "G4GenericPolycone.icc"
160
161#endif
162
163#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const
G4bool IsOpen() const
void SetSurfaceElements() const
G4PolyconeSideRZ * corners
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pmin, G4double &pmax) const
G4EnclosingCylinder * enclosingCylinder
G4double GetStartPhi() const
void CopyStuff(const G4GenericPolycone &source)
G4GenericPolycone & operator=(const G4GenericPolycone &source)
G4double GetEndPhi() const
G4int GetNumRZCorner() const
G4GeometryType GetEntityType() const
G4VSolid * Clone() const
G4double GetCosEndPhi() const
G4double GetSinStartPhi() const
G4PolyconeSideRZ GetCorner(G4int index) const
G4ThreeVector GetPointOnSurface() const
G4double GetSinEndPhi() const
std::ostream & StreamInfo(std::ostream &os) const
void Create(G4double phiStart, G4double phiTotal, G4ReduciblePolygon *rz)
G4Polyhedron * CreatePolyhedron() const
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const
G4double GetCosStartPhi() const
std::vector< surface_element > * fElements
EInside Inside(const G4ThreeVector &p) const
EAxis
Definition: geomdefs.hh:54
EInside
Definition: geomdefs.hh:67