ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VNestedParameterisation.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VNestedParameterisation.hh
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
49 
50 #include "G4Types.hh"
51 #include "G4VPVParameterisation.hh"
53 
54 class G4VPhysicalVolume;
55 class G4VTouchable;
56 class G4VSolid;
57 class G4Material;
58 
59 // CSG Entities which may be parameterised/replicated
60 //
61 class G4Box;
62 class G4Tubs;
63 class G4Trd;
64 class G4Trap;
65 class G4Cons;
66 class G4Sphere;
67 class G4Orb;
68 class G4Ellipsoid;
69 class G4Torus;
70 class G4Para;
71 class G4Polycone;
72 class G4Polyhedra;
73 class G4Hype;
74 
77 {
78  public: // with description
79 
81  virtual ~G4VNestedParameterisation();
82 
83  // Methods required in derived classes
84  // -----------------------------------
85 
86  virtual G4Material* ComputeMaterial(G4VPhysicalVolume* currentVol,
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 
128  virtual void ComputeDimensions(G4Sphere &,
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 
140  virtual void ComputeDimensions(G4Torus &,
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