![]() |
Project
|
Classes | |
| struct | Beam |
| struct | Crossing |
| struct | ListComparison |
| struct | Raster |
| struct | RayDef |
| struct | Robustness |
| struct | StepConfig |
Functions | |
| template<typename ContainsFn , typename DistOutFn , typename DistInFn > | |
| std::vector< Crossing > | stepCrossingsWithKernels (const Point3D &origin, const Point3D &dir, double tMax, const StepConfig &cfg, Robustness &stats, ContainsFn contains, DistOutFn distFromOutside, DistInFn distFromInside) |
| std::vector< Crossing > | stepWithShapeApi (const TGeoShape *shape, const Point3D &origin, const Point3D &dir, double tMax, const StepConfig &cfg, Robustness &stats) |
| Mode (a): the same loop driven by the ordinary TGeoShape virtuals. | |
| void | auditCrossingList (const std::vector< Crossing > &crossings, const TGeoShape *shape, const Point3D &origin, const Point3D &dir, double tMax, const StepConfig &cfg, Robustness &stats) |
| void | compareLists (const std::vector< Crossing > &candidate, const std::vector< Crossing > &reference, const Point3D &origin, const Point3D &dir, double tolerance, ListComparison &out) |
| double | dot3 (const Point3D &a, const Point3D &b) |
| Point3D | normalize3 (const Point3D &a) |
| Point3D | cross3 (const Point3D &a, const Point3D &b) |
| std::vector< Beam > | buildFanBeams (int count) |
| std::vector< Beam > | buildBeams (const std::string &axesSpec, double tiltDegrees) |
| Raster | buildRaster (const Point3D &bboxMin, const Point3D &bboxMax, int n, const std::vector< Beam > &beams, double transverseMargin) |
| double | chordVolume (const Raster &raster, const std::vector< double > &insideLengthPerBeam) |
|
inline |
Book the per-ray consistency properties of one crossing list. Split out because both modes and the oracle's own answer go through it, so a defect in one cannot be excused by a different bookkeeping in another.
Definition at line 201 of file XRayTransport.h.
|
inline |
Definition at line 449 of file XRayTransport.h.
The beams for axesSpec (a subset of x, y, z), each tilted by tiltDegrees.
At tilt 0 the frame is exactly the two remaining coordinate axes, so an axis-aligned box's chord integral stays EXACT (every cell centre is inside its own bounding box; see buildRaster). A non-zero tilt rotates the beam by tilt about one transverse axis and by 0.618 * tilt about the other – an irrational-looking ratio on purpose, so no beam lands on a symmetry plane of a part that was drawn on a coordinate grid. count beams spread over the sphere by the Fibonacci spiral, deterministic and seed-free.
This exists because of a measurement, not for completeness. A parallel-beam raster is DIRECTION-POOR: three axes (or three tilted axes) are three directions, however many rays are fired. The known torus quartic defect fires on a configuration that depends on the ray DIRECTION, so it is invisible to a 3-beam raster of 27648 rays and visible to a fan of many directions. Impact-parameter density and direction density are different resolutions and a benchmark that only has the first will report a clean sheet on a defect it cannot see.
Definition at line 419 of file XRayTransport.h.
|
inline |
The transverse window and the longitudinal start are deliberately DECOUPLED.
Transverse: the window is the bounding box's own extent IN THE BEAM'S FRAME plus transverseMargin, which should be as small as the bounding box's reliability allows, because the window excess is a first-order systematic on the volume.
Longitudinal: the ray must start strictly OUTSIDE the solid, or Contains() at the origin is a coin toss on the face and the whole transport starts in the wrong state. That margin is therefore generous and costs nothing – it is along the ray, not across it.
Definition at line 503 of file XRayTransport.h.
|
inline |
Each beam is an independent estimate of the same volume; the reported number is their mean and the per-beam spread is the honest error bar.
Definition at line 558 of file XRayTransport.h.
|
inline |
Definition at line 289 of file XRayTransport.h.
|
inline |
Definition at line 399 of file XRayTransport.h.
|
inline |
Definition at line 388 of file XRayTransport.h.
|
inline |
Definition at line 393 of file XRayTransport.h.
| std::vector< Crossing > o2::cad::xray::stepCrossingsWithKernels | ( | const Point3D & | origin, |
| const Point3D & | dir, | ||
| double | tMax, | ||
| const StepConfig & | cfg, | ||
| Robustness & | stats, | ||
| ContainsFn | contains, | ||
| DistOutFn | distFromOutside, | ||
| DistInFn | distFromInside | ||
| ) |
The stepping loop, parameterised on the three kernels it calls.
Templated so the SAME loop can be driven by O2BVHSurfaceSolid's BVH entry points and by its non-BVH _Loop twins. That turns the project's existing single-query "BVH == _Loop" guard into a transport-level one: every query after the first starts from a point the previous query put on a boundary, so a traversal-order difference that is invisible on an isolated query can still send the two down different sequences of states.
Definition at line 129 of file XRayTransport.h.
|
inline |
Mode (a): the same loop driven by the ordinary TGeoShape virtuals.
Definition at line 184 of file XRayTransport.h.