Geant4 11.3.0
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#include "G4VTouchable.hh"
54
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 ~G4VNestedParameterisation() override = 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 G4int GetNumberOfMaterials() const override =0;
93 G4Material* GetMaterial(G4int idx) const override =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
99 G4VPhysicalVolume* currentPV) const override=0;
100
101 // Methods optional in derived classes
102 // -----------------------------------
103
104 G4VSolid* ComputeSolid(const G4int no, G4VPhysicalVolume* thisVol) override;
105 // Additional standard parameterisation methods,
106 // which can be optionally defined, in case solid is used.
107
109 const G4int,
110 const G4VPhysicalVolume *) const override {}
111
113 const G4int,
114 const G4VPhysicalVolume *) const override {}
115
117 const G4int,
118 const G4VPhysicalVolume *) const override {}
119
121 const G4int,
122 const G4VPhysicalVolume *) const override {}
123
125 const G4int,
126 const G4VPhysicalVolume *) const override {}
127
129 const G4int,
130 const G4VPhysicalVolume *) const override {}
131
133 const G4int,
134 const G4VPhysicalVolume *) const override {}
135
137 const G4int,
138 const G4VPhysicalVolume *) const override {}
139
141 const G4int,
142 const G4VPhysicalVolume *) const override {}
143
145 const G4int,
146 const G4VPhysicalVolume *) const override {}
147
149 const G4int,
150 const G4VPhysicalVolume *) const override {}
151
153 const G4int,
154 const G4VPhysicalVolume *) const override {}
155
157 const G4int,
158 const G4VPhysicalVolume *) const override {}
159
160 G4Material* ComputeMaterial(const G4int repNo,
161 G4VPhysicalVolume* currentVol,
162 const G4VTouchable* parentTouch = nullptr) override;
163 // Method implemented in this class in terms of the above
164 // ComputeMaterial() method.
165
166 G4bool IsNested() const override;
168 // Methods to identify nested parameterisations. Required in order
169 // to enable material scan for nested parameterisations.
170};
171
172#endif
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4TouchableHistory G4VTouchable
Definition G4Box.hh:56
Definition G4Orb.hh:56
Definition G4Trd.hh:63
void ComputeDimensions(G4Trap &, const G4int, const G4VPhysicalVolume *) const override
G4Material * GetMaterial(G4int idx) const override=0
void ComputeDimensions(G4Hype &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Polycone &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Polyhedra &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Orb &, const G4int, const G4VPhysicalVolume *) const override
~G4VNestedParameterisation() override=default
G4VNestedParameterisation()=default
void ComputeTransformation(const G4int no, G4VPhysicalVolume *currentPV) const override=0
void ComputeDimensions(G4Trd &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Cons &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Para &, const G4int, const G4VPhysicalVolume *) const override
G4VVolumeMaterialScanner * GetMaterialScanner() override
G4int GetNumberOfMaterials() const override=0
void ComputeDimensions(G4Tubs &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Ellipsoid &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Sphere &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Torus &, const G4int, const G4VPhysicalVolume *) const override
void ComputeDimensions(G4Box &, const G4int, const G4VPhysicalVolume *) const override
G4VSolid * ComputeSolid(const G4int no, G4VPhysicalVolume *thisVol) override
virtual G4Material * ComputeMaterial(G4VPhysicalVolume *currentVol, const G4int repNo, const G4VTouchable *parentTouch=nullptr)=0
G4VPVParameterisation()=default