Import Geant4 11.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2025-12-05 08:54:02 +01:00
parent a499fb82e9
commit b4a16de652
6484 changed files with 232674 additions and 221097 deletions
@@ -42,10 +42,10 @@
// - the mother volume, in which these copies are placed, must always be
// of the same dimensions
// 24.02.05, J.Apostolakis - First created version.
// Author: John Apostolakis (CERN), 24.02.2005 - First created version
// --------------------------------------------------------------------
#ifndef G4VNESTEDPARAMETERISATION_HH
#define G4VNESTEDPARAMETERISATION_HH 1
#define G4VNESTEDPARAMETERISATION_HH
#include "G4Types.hh"
#include "G4VPVParameterisation.hh"
@@ -72,38 +72,90 @@ class G4Polycone;
class G4Polyhedra;
class G4Hype;
/**
* @brief G4VNestedParameterisation is a base class for parameterisations that
* use information from the parent volume to compute the material of a
* copy/instance of this volume. This is in addition to using the current
* replication number. Such a volume can be nested inside a placement volume
* or a parameterised volume. The user can modify the solid type, size or
* transformation using only the replication number of this parameterised
* volume; it is NOT allowed to change these attributes using information of
* the parent volumes, otherwise incorrect results will occur.
*/
class G4VNestedParameterisation : public G4VPVParameterisation,
public G4VVolumeMaterialScanner
{
public:
/**
* Default Constructor & Destructor.
*/
G4VNestedParameterisation() = default;
~G4VNestedParameterisation() override = default;
// Methods required in derived classes
// -----------------------------------
/**
* Computes the material for the 'currentVol' and replica number 'repNo'.
* It is a required method, as it is the reason for this class.
* Must cope with parentTouch=nullptr for navigator's SetupHierarchy().
* @param[in] currentVol Pointer to the current physical volume.
* @param[in] repNo The copy number index.
* @param[in] parentTouch Pointer to the touchable of the parent volume.
* @returns A pointer to the associated material.
*/
virtual G4Material* ComputeMaterial(G4VPhysicalVolume* currentVol,
const G4int repNo,
const G4VTouchable* parentTouch = nullptr)=0;
// Required method, as it is the reason for this class.
// Must cope with parentTouch=nullptr for navigator's SetupHierarchy.
G4int GetNumberOfMaterials() const override =0;
/**
* Accessors needed to define materials for instances of a Nested
* Parameterisation. Eeach call should return the materials of all
* instances with the same mother/ancestor volume.
*/
G4int GetNumberOfMaterials() const override =0;
G4Material* GetMaterial(G4int idx) const override =0;
// Needed to define materials for instances of Nested Parameterisation
// Current convention: each call should return the materials
// of all instances with the same mother/ancestor volume.
void ComputeTransformation(const G4int no,
G4VPhysicalVolume* currentPV) const override=0;
/**
* Computes the transformation for the 'currentPV' and replica number 'no'.
* It is a required method, as it is the reason for this class.
* Must cope with parentTouch=nullptr for navigator's SetupHierarchy().
* @param[in] currentPV Pointer to the current physical volume.
* @param[in] no The copy number index.
*/
void ComputeTransformation(const G4int no,
G4VPhysicalVolume* currentPV) const override=0;
// Methods optional in derived classes
// -----------------------------------
/**
* Computes the solid for the 'thisVol' volume and replica number 'no'.
* To be optionally defined in derived classes, for parameterisation of
* the solid type.
* @param[in] no The copy number index.
* @param[in] thisVol Pointer to the current physical volume.
*/
G4VSolid* ComputeSolid(const G4int no, G4VPhysicalVolume* thisVol) override;
// Additional standard parameterisation methods,
// which can be optionally defined, in case solid is used.
/**
* Method implemented in this class in terms of the above ComputeMaterial().
*/
G4Material* ComputeMaterial(const G4int repNo,
G4VPhysicalVolume* currentVol,
const G4VTouchable* parentTouch = nullptr) override;
/**
* Methods to identify nested parameterisations. Required in order
* to enable material scan for nested parameterisations.
*/
G4bool IsNested() const override;
G4VVolumeMaterialScanner* GetMaterialScanner() override;
// Dispatch methods for the specific solids where parameterisation is allowed
// --------------------------------------------------------------------------
void ComputeDimensions(G4Box &,
const G4int,
@@ -156,17 +208,6 @@ class G4VNestedParameterisation : public G4VPVParameterisation,
void ComputeDimensions(G4Hype &,
const G4int,
const G4VPhysicalVolume *) const override {}
G4Material* ComputeMaterial(const G4int repNo,
G4VPhysicalVolume* currentVol,
const G4VTouchable* parentTouch = nullptr) override;
// Method implemented in this class in terms of the above
// ComputeMaterial() method.
G4bool IsNested() const override;
G4VVolumeMaterialScanner* GetMaterialScanner() override;
// Methods to identify nested parameterisations. Required in order
// to enable material scan for nested parameterisations.
};
#endif