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
G4PVDivision.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// G4PVDivision
27//
28// Class description:
29//
30// Represents many touchable detector elements differing only in their
31// positioning. The elements' positions are calculated by means of a simple
32// linear formula.
33//
34// G4PVDivision(const G4String& pName,
35// G4LogicalVolume* pLogical,
36// G4LogicalVolume* pMother,
37// const EAxis pAxis,
38// const G4int nReplicas,
39// const G4double width,
40// const G4double offset=0)
41//
42// Division may occur along:
43//
44// o Cartesian axes (kXAxis,kYAxis,kZAxis)
45//
46// The divisions, of specified width have coordinates of
47// form (-width*(nReplicas-1)*0.5+n*width,0,0) where n=0.. nReplicas-1
48// for the case of kXAxis, and are unrotated.
49//
50// o Radial axis (cylindrical polar) (kRho)
51//
52// The divisions are cons/tubs sections, centred on the origin
53// and are unrotated.
54// They have radii of width*n+offset to width*(n+1)+offset
55// where n=0..nReplicas-1
56//
57// o Phi axis (cylindrical polar) (kPhi)
58// The divisions are `phi sections' or wedges, and of cons/tubs form
59// They have phi of offset+n*width to offset+(n+1)*width where
60// n=0..nReplicas-1
61
62// 09.05.01 - P.Arce, Initial version
63// ----------------------------------------------------------------------
64#ifndef G4PVDIVISION_HH
65#define G4PVDIVISION_HH
66
67#include "geomdefs.hh"
68#include "G4PVReplica.hh"
70
71class G4LogicalVolume;
72class G4VSolid;
73
75{
76 public: // with description
77
78 G4PVDivision(const G4String& pName,
79 G4LogicalVolume* pLogical,
80 G4LogicalVolume* pMother,
81 const EAxis pAxis,
82 const G4int nReplicas,
83 const G4double width,
84 const G4double offset );
85 // Constructor with number of divisions and width
86
87 G4PVDivision(const G4String& pName,
88 G4LogicalVolume* pLogical,
89 G4LogicalVolume* pMotherLogical,
90 const EAxis pAxis,
91 const G4int nReplicas,
92 const G4double offset );
93 // Constructor with number of divisions
94
95 G4PVDivision(const G4String& pName,
96 G4LogicalVolume* pLogical,
97 G4LogicalVolume* pMotherLogical,
98 const EAxis pAxis,
99 const G4double width,
100 const G4double offset );
101 // Constructor with width
102
103 G4PVDivision(const G4String& pName,
104 G4LogicalVolume* pLogical,
105 G4VPhysicalVolume* pMother,
106 const EAxis pAxis,
107 const G4int nReplicas,
108 const G4double width,
109 const G4double offset);
110 // Constructor in mother physical volume (same as first constructor)
111
112 virtual ~G4PVDivision();
113
114 G4PVDivision(const G4PVDivision&) = delete;
116
117 virtual G4bool IsMany() const;
118 virtual G4bool IsReplicated() const;
119 virtual G4int GetMultiplicity() const;
121 virtual void GetReplicationData( EAxis& axis,
122 G4int& nReplicas,
123 G4double& width,
124 G4double& offset,
125 G4bool& consuming ) const;
126 EAxis GetDivisionAxis() const;
127 G4bool IsParameterised() const;
128
129 virtual EVolume VolumeType() const;
130 // Characterise the type of volume - normal/replicated/parameterised.
131
132 G4bool IsRegularStructure() const;
134 // Methods to identify volume that can have revised 'regular' navigation.
135 // Currently divisions do not qualify for this.
136
137 private:
138
139 void CheckAndSetParameters( const EAxis pAxis,
140 const G4int nDivs,
141 const G4double width,
142 const G4double offset,
143 DivisionType divType,
144 const G4LogicalVolume* pMotherLogical );
145
146 void SetParameterisation( G4LogicalVolume* motherLogical,
147 const EAxis pAxis,
148 const G4int nReplicas,
149 const G4double width,
150 const G4double offset,
151 DivisionType divType );
152 void ErrorInAxis( EAxis axis, G4VSolid* solid );
153
154 protected:
155
156 EAxis faxis; // axis of optimisation
157 EAxis fdivAxis; // axis of division
159 G4double fwidth = 0.0, foffset = 0.0;
161};
162
163#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
virtual G4VPVParameterisation * GetParameterisation() const
virtual G4bool IsReplicated() const
virtual ~G4PVDivision()
virtual G4int GetMultiplicity() const
G4PVDivision & operator=(const G4PVDivision &)=delete
virtual EVolume VolumeType() const
G4double foffset
virtual G4bool IsMany() const
G4double fwidth
G4VDivisionParameterisation * fparam
EAxis GetDivisionAxis() const
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const
G4bool IsRegularStructure() const
G4bool IsParameterised() const
G4int GetRegularStructureId() const
G4PVDivision(const G4PVDivision &)=delete
EAxis
Definition: geomdefs.hh:54
EVolume
Definition: geomdefs.hh:83