Celeritas
0.5.0-86+4a8eea4
|
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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.
|
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:
simple_intersect
.complex_intersect
.background_intersect
(equivalent of DistanceToIn for Geant4)
|
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.