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
G4VNestedParameterisation.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// G4VNestedParameterisation
27//
28// Class description:
29//
30// Base class for parameterisations that use information from the parent
31// volume to compute the material of a copy/instance of this volume.
32// This is in addition to using the current replication number.
33//
34// Notes:
35// - Such a volume can be nested inside a placement volume or a parameterised
36// volume.
37// - The user can modify the solid type, size or transformation using only
38// the replication number of this parameterised volume.
39// He/she is NOT allowed to change these attributes using information of
40// parent volumes - otherwise incorrect results will occur.
41// Also note that the usual restrictions apply:
42// - the mother volume, in which these copies are placed, must always be
43// of the same dimensions
44
45// 24.02.05, J.Apostolakis - First created version.
46// --------------------------------------------------------------------
47#ifndef G4VNESTEDPARAMETERISATION_HH
48#define G4VNESTEDPARAMETERISATION_HH 1
49
50#include "G4Types.hh"
53
55class G4VTouchable;
56class G4VSolid;
57class G4Material;
58
59// CSG Entities which may be parameterised/replicated
60//
61class G4Box;
62class G4Tubs;
63class G4Trd;
64class G4Trap;
65class G4Cons;
66class G4Sphere;
67class G4Orb;
68class G4Ellipsoid;
69class G4Torus;
70class G4Para;
71class G4Polycone;
72class G4Polyhedra;
73class G4Hype;
74
77{
78 public:
79
81 virtual ~G4VNestedParameterisation() = default;
82
83 // Methods required in derived classes
84 // -----------------------------------
85
87 const G4int repNo,
88 const G4VTouchable* parentTouch = nullptr) = 0;
89 // Required method, as it is the reason for this class.
90 // Must cope with parentTouch=nullptr for navigator's SetupHierarchy.
91
92 virtual G4int GetNumberOfMaterials() const=0;
93 virtual G4Material* GetMaterial(G4int idx) const=0;
94 // Needed to define materials for instances of Nested Parameterisation
95 // Current convention: each call should return the materials
96 // of all instances with the same mother/ancestor volume.
97
98 virtual void ComputeTransformation(const G4int no,
99 G4VPhysicalVolume* currentPV) const = 0;
100
101 // Methods optional in derived classes
102 // -----------------------------------
103
104 virtual G4VSolid* ComputeSolid(const G4int no, G4VPhysicalVolume* thisVol);
105 // Additional standard parameterisation methods,
106 // which can be optionally defined, in case solid is used.
107
108 virtual void ComputeDimensions(G4Box &,
109 const G4int,
110 const G4VPhysicalVolume *) const {}
111
112 virtual void ComputeDimensions(G4Tubs &,
113 const G4int,
114 const G4VPhysicalVolume *) const {}
115
116 virtual void ComputeDimensions(G4Trd &,
117 const G4int,
118 const G4VPhysicalVolume *) const {}
119
120 virtual void ComputeDimensions(G4Trap &,
121 const G4int,
122 const G4VPhysicalVolume *) const {}
123
124 virtual void ComputeDimensions(G4Cons &,
125 const G4int,
126 const G4VPhysicalVolume *) const {}
127
129 const G4int,
130 const G4VPhysicalVolume *) const {}
131
132 virtual void ComputeDimensions(G4Orb &,
133 const G4int,
134 const G4VPhysicalVolume *) const {}
135
137 const G4int,
138 const G4VPhysicalVolume *) const {}
139
141 const G4int,
142 const G4VPhysicalVolume *) const {}
143
144 virtual void ComputeDimensions(G4Para &,
145 const G4int,
146 const G4VPhysicalVolume *) const {}
147
149 const G4int,
150 const G4VPhysicalVolume *) const {}
151
153 const G4int,
154 const G4VPhysicalVolume *) const {}
155
156 virtual void ComputeDimensions(G4Hype &,
157 const G4int,
158 const G4VPhysicalVolume *) const {}
159
160
161 G4Material* ComputeMaterial(const G4int repNo,
162 G4VPhysicalVolume* currentVol,
163 const G4VTouchable* parentTouch = nullptr);
164 // Method implemented in this class in terms of the above
165 // ComputeMaterial() method.
166
167 virtual G4bool IsNested() const;
169 // Methods to identify nested parameterisations. Required in order
170 // to enable material scan for nested parameterisations.
171};
172
173#endif
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
Definition: G4Box.hh:56
Definition: G4Cons.hh:78
Definition: G4Hype.hh:69
Definition: G4Orb.hh:56
Definition: G4Para.hh:79
Definition: G4Trd.hh:63
Definition: G4Tubs.hh:75
virtual G4VSolid * ComputeSolid(const G4int no, G4VPhysicalVolume *thisVol)
virtual void ComputeDimensions(G4Trap &, const G4int, const G4VPhysicalVolume *) const
virtual G4int GetNumberOfMaterials() const =0
virtual void ComputeDimensions(G4Sphere &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Ellipsoid &, const G4int, const G4VPhysicalVolume *) const
G4VNestedParameterisation()=default
virtual void ComputeDimensions(G4Polyhedra &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Box &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeTransformation(const G4int no, G4VPhysicalVolume *currentPV) const =0
virtual void ComputeDimensions(G4Trd &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Hype &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Orb &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Tubs &, const G4int, const G4VPhysicalVolume *) const
virtual G4Material * GetMaterial(G4int idx) const =0
virtual void ComputeDimensions(G4Cons &, const G4int, const G4VPhysicalVolume *) const
virtual G4VVolumeMaterialScanner * GetMaterialScanner()
virtual void ComputeDimensions(G4Torus &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Para &, const G4int, const G4VPhysicalVolume *) const
virtual void ComputeDimensions(G4Polycone &, const G4int, const G4VPhysicalVolume *) const
virtual ~G4VNestedParameterisation()=default
virtual G4Material * ComputeMaterial(G4VPhysicalVolume *currentVol, const G4int repNo, const G4VTouchable *parentTouch=nullptr)=0