Runtime¶
ORANGE runtime execution will be described here in greater detail in the future.
Acceleration structures¶
Celeritas uses a bounding interval hierarchy to accelerate volume intersections.
Tracking¶
There are three slightly different algorithms in ORANGE for finding the distance to the next point on a surface on an outer boundary of the volume.
The “simple” algorithm is for volumes that are the intersection of a number of infinite surfaces. All convex volumes are simple, but because quadric surfaces are allowed all simple surfaces do not have to be convex. Intersecting any surface by definition causes the volume to be exited. (A single “blade” of the ATLAS EMEC accordion, a “twisted trapezoid”, has hyperbolic paraboloids on its axial faces. It is simple but not convex. The same is true for a “ring” formed by subtracting two cylinders of the same height.)
The “internal surfaces” algorithm has to track through and discard any surfaces that do not result in the CSG volume changing. Crossing an internal surface is changing from one node inside the CSG tree to another.
Each universe may have a single “background” volume that is selected if a point is not inside any interior volume.
Interface¶
ORANGE runtime routines are always invoked via the track view, which encapsulates geometry navigation for a single particle track.
-
class OrangeTrackView¶
Navigate through an ORANGE geometry on a single thread.
The direction of
normalis set to always point out of the volume the track is currently in. On the boundary this is determined by the sense of the track rather than its direction.- Todo:
move_internalwith a position should depend on the safety distance, but that check is not yet implemented.