|
Celeritas 0.7.0-dev.164+develop.929c81eeb
|
Manage and provide access to a Geant4 geometry model. More...
#include <GeantGeoParams.hh>

Public Member Functions | |
| GeantGeoParams (G4VPhysicalVolume const *world, Ownership owns) | |
| Use an existing loaded Geant4 geometry. | |
| CELER_DEFAULT_MOVE_DELETE_COPY (GeantGeoParams) | |
| ~GeantGeoParams () final | |
| Clean up on destruction. | |
| bool | supports_safety () const final |
| Whether safety distance calculations are accurate and precise. | |
| BBox const & | bbox () const final |
| Outer bounding box of geometry. | |
| inp::Model | make_model_input () const final |
| Create model params from a Geant4 world volume. | |
| ImplVolumeMap const & | impl_volumes () const final |
| Get volume metadata. | |
| G4VPhysicalVolume const * | id_to_geant (VolumeInstanceId vol_id) const |
| Get the Geant4 physical volume corresponding to a volume instance ID. | |
| G4LogicalVolume const * | id_to_geant (VolumeId vol_id) const |
| Get the Geant4 logical volume corresponding to a volume ID. | |
| VolumeId | volume_id (ImplVolumeId) const final |
| Get the canonical volume IDs corresponding to an implementation volume. | |
| SurfaceId::size_type | num_surfaces () const |
| Get the number of surfaces (TODO: maybe live in surface params?) | |
| G4LogicalSurface const * | id_to_geant (SurfaceId surf_id) const |
| Get the Geant4 logical surface corresponding to a surface ID. | |
| ImplVolumeId::size_type | lv_offset () const |
| Offset of logical volume ID after reloading geometry. | |
| GeoMatId::size_type | mat_offset () const |
| Offset of material index after reloading geometry. | |
| GeoMatId | geant_to_id (G4Material const &mat) const |
| Get the geometry material ID for a logical volume. | |
| VolumeId | geant_to_id (G4LogicalVolume const &volume) const |
| Locate the volume ID corresponding to a Geant4 logical volume. | |
| VolumeInstanceId | geant_to_id (G4VPhysicalVolume const &volume) const |
| Get the volume instance ID corresponding to a Geant4 physical volume. | |
| BoundingBox< double > | get_clhep_bbox () const |
| Get the world bbox. | |
| HostRef const & | host_ref () const final |
| Access geometry data on host. | |
| DeviceRef const & | device_ref () const final |
| No GPU support code. | |
| G4VPhysicalVolume const * | world () const |
| G4VPhysicalVolume * | world () |
Public Member Functions inherited from celeritas::GeoParamsInterface | |
| virtual | ~GeoParamsInterface ()=0 |
| Default virtual destructor. | |
Public Member Functions inherited from celeritas::ParamsDataInterface< GeantGeoParamsData > | |
| GeantGeoParamsData< Ownership::const_reference, M > const & | ref () const |
| GeantGeoParamsData< Ownership::const_reference, M > const & | ref () const |
| Dispatch a "ref" call to host or device data. | |
Static Public Member Functions | |
| static std::shared_ptr< GeantGeoParams > | from_tracking_manager () |
| Create from a running Geant4 application. | |
| static std::shared_ptr< GeantGeoParams > | from_gdml (std::string const &filename) |
| Construct from a GDML input. | |
| static std::shared_ptr< GeantGeoParams > | from_geant (std::shared_ptr< GeantGeoParams const > const &geo) |
| Return the input geometry for a consistent interface. | |
Additional Inherited Members | |
Public Types inherited from celeritas::GeoParamsInterface | |
| using | SpanConstVolumeId = Span< ImplVolumeId const > |
| using | ImplVolumeMap = LabelIdMultiMap< ImplVolumeId > |
Public Types inherited from celeritas::ParamsDataInterface< GeantGeoParamsData > | |
| using | HostRef = HostCRef< GeantGeoParamsData > |
| using | DeviceRef = DeviceCRef< GeantGeoParamsData > |
Protected Member Functions inherited from celeritas::GeoParamsInterface | |
| CELER_DEFAULT_COPY_MOVE (GeoParamsInterface) | |
Protected Member Functions inherited from celeritas::ParamsDataInterface< GeantGeoParamsData > | |
| CELER_DEFAULT_COPY_MOVE (ParamsDataInterface) | |
Manage and provide access to a Geant4 geometry model.
This can be constructed directly by loading a GDML file, or in-memory using an existing physical volume. The make_model_input function returns the geometry hierarchy including surface definitions for optical physics. The geant_to_id and id_to_geant functions provide mappings between Geant4 pointers and Celeritas IDs.
The ImplVolumeId used by Celeritas is equal to the index of a G4LogicalVolume in the G4LogicalVolumeStore. Due to potential resetting of the geometry, the internal Geant4 ID for the volume may be offset from this index. Currently the ImplVolumeId maps exactly to the VolumeId value: some volumes may be unreachable by the world hierarchy.
In general, the G4VPhysicalVolume is equivalent to the index in its store. However, due to the way Geant4 represents "parameterised" and "replicated" placements, a single G4PV may correspond to multiple spatial placements. Celeritas disambiguates and maps each replicated instance to a distinct VolumeInstanceId (see detail::GeantVolumeInstanceMapper). When querying this ID from an in-memory physical volume, the returned value uses the G4PV's current state (i.e., the copy number). Similarly, calling id_to_geant on a volume instance ID for a replica volume will change the thread-local state of the G4VPhysicalVolume.
Each SurfaceId maps to a G4LogicalSurface instance, which is ether a G4LogicalBorderSurface (an "interface" surface between two volume instances) or a G4LogicalSkinSurface (a "boundary" surrounding a single logical volume). To ensure reproducible surface IDs across runs, we put boundaries before interfaces, and sort within each set by volume IDs (not by Geant4 object pointers, which is what the Geant4 implementation stores in a table). Surface labels are accessed via the SurfaceParams object, which can be created by the model input returned by this class.
When running standalone for testing, a "secret" environment flag G4_GEO_OPTIMIZE can disable Geant4 "voxelization" (acceleration structure setup) which can be slow for large problems and is unnecessary if not tracking on the Geant4 geometry.
Outer bounding box of geometry.
Implements celeritas::GeoParamsInterface.
|
inlinefinalvirtual |
No GPU support code.
Implements celeritas::ParamsDataInterface< GeantGeoParamsData >.
|
static |
Construct from a GDML input.
This assumes that Celeritas is driving and will manage Geant4 logging and exceptions. It saves the result to the global Celeritas Geant4 geometry weak pointer global_geant_geo.
Due to limitations in the Geant4 GDML code, this task must be performed from the main thread.
It also loads sensitive detectors and assigns dummy sensitive detectors to volumes annotated with auxiliary auxtype="SensDet" tags. It creates one detector per unique auxvalue name and shares that one among the volumes that use the same detector name. The resulting GeantGeoParams class retains ownership of the created detectors. Since this function is only called on the main thread, and the SensitiveDetector getter/setter on G4LogicalVolume uses a thread-local "split" class, worker threads will not see the sensitive detectors this loader creates. Use celeritas::DetectorConstruction if thread-local detectors are needed.
|
static |
Create from a running Geant4 application.
It saves the result to the global Celeritas Geant4 geometry weak pointer global_geant_geo.
|
inline |
Get the volume instance ID corresponding to a Geant4 physical volume.
| BoundingBox< double > celeritas::GeantGeoParams::get_clhep_bbox | ( | ) | const |
Get the world bbox.
This assumes no transformation on the global PV.
|
inlinefinalvirtual |
Access geometry data on host.
Implements celeritas::ParamsDataInterface< GeantGeoParamsData >.
| G4LogicalVolume const * celeritas::GeantGeoParams::id_to_geant | ( | VolumeId | id | ) | const |
Get the Geant4 logical volume corresponding to a volume ID.
If the input volume ID is unassigned, a null pointer will be returned.
|
inlinefinalvirtual |
Get volume metadata.
Volumes correspond directly to Geant4 logical volumes.
Implements celeritas::GeoParamsInterface.
|
finalvirtual |
Create model params from a Geant4 world volume.
Implements celeritas::GeoParamsInterface.
|
inlinefinalvirtual |
Whether safety distance calculations are accurate and precise.
Implements celeritas::GeoParamsInterface.
|
inlinefinalvirtual |
Get the canonical volume IDs corresponding to an implementation volume.
Implements celeritas::GeoParamsInterface.
|
inline |
Access the world volume
|
inline |
Access the world volume