Geant4 Cross Reference |
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 // G4VPVParamterisation 27 // 28 // Class description: 29 // 30 // Parameterisation class, able to compute the transformation and 31 // (indirectly) the dimensions of parameterised volumes, given a 32 // replication number. 33 34 // 25.07.96, P.Kent - Initial stub version 35 // 20.09.96, V.Grichine - Modifications for G4Trap/Cons/Sphere 36 // 31.10.96, V.Grichine - Modifications for G4Torus/Para 37 // 17.02.98, J.Apostolakis - Allowing the parameterisation of solid type 38 // -------------------------------------------------------------------- 39 #ifndef G4VPVPARAMETERISATION_HH 40 #define G4VPVPARAMETERISATION_HH 1 41 42 #include "G4Types.hh" 43 #include "G4VVolumeMaterialScanner.hh" 44 #include "G4VTouchable.hh" 45 46 class G4VPhysicalVolume; 47 class G4VSolid; 48 class G4Material; 49 50 // Entities which may be parameterised/replicated 51 // 52 class G4Box; 53 class G4Tubs; 54 class G4Trd; 55 class G4Trap; 56 class G4Cons; 57 class G4Sphere; 58 class G4Orb; 59 class G4Ellipsoid; 60 class G4Torus; 61 class G4Para; 62 class G4Polycone; 63 class G4Polyhedra; 64 class G4Hype; 65 66 class G4VVolumeMaterialScanner; 67 68 class G4VPVParameterisation 69 { 70 public: 71 72 G4VPVParameterisation() = default; 73 virtual ~G4VPVParameterisation() = default; 74 75 virtual void ComputeTransformation(const G4int, 76 G4VPhysicalVolume * ) const = 0; 77 78 virtual G4VSolid* ComputeSolid(const G4int, G4VPhysicalVolume *); 79 80 virtual G4Material* ComputeMaterial(const G4int repNo, 81 G4VPhysicalVolume* currentVol, 82 const G4VTouchable* parentTouch = nullptr); 83 // Refined method, enabling nested parameterisations 84 85 virtual G4bool IsNested() const; 86 virtual G4VVolumeMaterialScanner* GetMaterialScanner(); 87 // These enable material scan for nested parameterisations 88 89 virtual void ComputeDimensions(G4Box &, 90 const G4int, 91 const G4VPhysicalVolume *) const {} 92 93 virtual void ComputeDimensions(G4Tubs &, 94 const G4int, 95 const G4VPhysicalVolume *) const {} 96 97 virtual void ComputeDimensions(G4Trd &, 98 const G4int, 99 const G4VPhysicalVolume *) const {} 100 101 virtual void ComputeDimensions(G4Trap &, 102 const G4int, 103 const G4VPhysicalVolume *) const {} 104 105 virtual void ComputeDimensions(G4Cons &, 106 const G4int, 107 const G4VPhysicalVolume *) const {} 108 109 virtual void ComputeDimensions(G4Sphere &, 110 const G4int, 111 const G4VPhysicalVolume *) const {} 112 113 virtual void ComputeDimensions(G4Orb &, 114 const G4int, 115 const G4VPhysicalVolume *) const {} 116 117 virtual void ComputeDimensions(G4Ellipsoid &, 118 const G4int, 119 const G4VPhysicalVolume *) const {} 120 121 virtual void ComputeDimensions(G4Torus &, 122 const G4int, 123 const G4VPhysicalVolume *) const {} 124 125 virtual void ComputeDimensions(G4Para &, 126 const G4int, 127 const G4VPhysicalVolume *) const {} 128 129 virtual void ComputeDimensions(G4Polycone &, 130 const G4int, 131 const G4VPhysicalVolume *) const {} 132 133 virtual void ComputeDimensions(G4Polyhedra &, 134 const G4int, 135 const G4VPhysicalVolume *) const {} 136 137 virtual void ComputeDimensions(G4Hype &, 138 const G4int, 139 const G4VPhysicalVolume *) const {} 140 }; 141 142 #endif 143