|
Celeritas 0.7.0-dev.169+develop.bdc0041f6
|
Track a particle in a universe of well-connected volumes. More...
#include <SimpleUnitTracker.hh>
Public Types | |
Type aliases | |
| using | ParamsRef = NativeCRef< OrangeParamsData > |
| using | Initialization = detail::Initialization |
| using | Intersection = detail::Intersection |
| using | LocalState = detail::LocalState |
Public Member Functions | |
| CELER_FUNCTION | SimpleUnitTracker (ParamsRef const ¶ms, SimpleUnitId id) |
| Construct with reference to persistent parameter data. | |
| CELER_FUNCTION LocalVolumeId::size_type | num_volumes () const |
| Number of local volumes. | |
| CELER_FUNCTION LocalSurfaceId::size_type | num_surfaces () const |
| Number of local surfaces. | |
| CELER_FUNCTION SimpleUnitRecord const & | unit_record () const |
| SimpleUnitRecord for this tracker. | |
| CELER_FUNCTION DaughterId | daughter (LocalVolumeId vol) const |
| DaughterId of universe embedded in a given volume. | |
| CELER_FUNCTION Initialization | initialize (LocalState const &state) const |
| Find the local volume from a position. | |
| CELER_FUNCTION Initialization | cross_boundary (LocalState const &state) const |
| Find the local volume on the opposite side of a surface. | |
| CELER_FUNCTION Intersection | intersect (LocalState const &state) const |
| Calculate distance-to-intercept for the next surface. | |
| CELER_FUNCTION Intersection | intersect (LocalState const &state, real_type max_dist) const |
| Calculate distance-to-intercept for the next surface. | |
| CELER_FUNCTION real_type | safety (Real3 const &pos, LocalVolumeId vol) const |
| Calculate nearest distance to a surface in any direction. | |
| CELER_FUNCTION Real3 | normal (Real3 const &pos, LocalSurfaceId surf) const |
| Calculate the local surface normal. | |
| template<class F > | |
| CELER_FUNCTION auto | intersect_impl (LocalState const &state, F &&is_valid) const -> Intersection |
| Calculate distance-to-intercept for the next surface. | |
| template<class F > | |
| CELER_FUNCTION auto | background_intersect (LocalState const &state, F &&is_valid) const -> Intersection |
| Calculate distance from the background volume to enter any other volume. | |
Track a particle in a universe of well-connected volumes.
The simple unit tracker is based on a set of non-overlapping volumes comprised of surfaces. It is a faster but less "user-friendly" version of the masked unit tracker because it requires all volumes to be exactly defined by their connected surfaces. It does not check for overlaps.
|
inline |
Construct with reference to persistent parameter data.
| CELER_FUNCTION auto celeritas::SimpleUnitTracker::background_intersect | ( | LocalState const & | state, |
| F && | is_valid | ||
| ) | const -> Intersection |
Calculate distance from the background volume to enter any other volume.
This function is accelerated with the BIH.
|
inline |
Find the local volume from a position.
To avoid edge cases and inconsistent logical/physical states, it is prohibited to initialize from an arbitrary point directly onto a surface.
| CELER_FUNCTION auto celeritas::SimpleUnitTracker::intersect_impl | ( | LocalState const & | state, |
| F && | is_valid | ||
| ) | const -> Intersection |
Calculate distance-to-intercept for the next surface.
The algorithm is:
background_intersect (equivalent of DistanceToIn for Geant4)simple_intersect.complex_intersect.
|
inline |
Calculate nearest distance to a surface in any direction.
The safety calculation uses a very limited method for calculating the safety distance: it's the nearest distance to any surface, for a certain subset of surfaces. Other surface types will return a safety distance of zero. Complex surfaces might return the distance to internal surfaces that do not represent the edge of a volume. Such distances are conservative but will necessarily slow down the simulation.