Version 0.6.0

Released 2025/04/23

Version 0.6.0 is a major update to Celeritas featuring:

  • High-level integration utilities for Geant4 applications

  • Optical physics implementation including volumetric physics

  • Advanced field mapping capabilities with 3D cylindrical and cartesian field maps and volume-specific uniform fields

  • Extended geometry conversion and optimization-oriented features for ORANGE

  • Support for VecGeom 2.0

  • Spline interpolation for cross-section calculations and energy loss

A few minor features are noteworthy:

  • Improved debugging utilities for diagnosing stuck/errored tracks

  • Support for sensitive detectors in replica/parameterized volumes

  • Better handling of tracks that fail or get stuck during simulation

Notable bug fixes include:

  • Fixed navigation and mapping of reflecting volumes for VecGeom

  • Resolved crashes related to process construction and memory access

  • Fixed issues with GDML file loading and SD hit scoring

  • Fixed Urban MSC scattering distribution (backported to v0.5.3)

Some interfaces have been removed:

  • Obsolete demonstration apps and celer-dump-data

  • Macro setup from celer-g4

  • The ability to run on the default stream

Known deficiencies:

  • Surface optical physics (reflection, refraction) is not yet implemented

  • ORANGE performance is significantly degraded compared to v0.5

Changes since v0.5.0, excluding those released in v0.5.3, follow.

New features

  • Add optical “locate vacancies” and pre-step actions (@amandalund, #1441)

  • Extend debug utilities for stuck/errored tracks (@sethrj, #1451)

  • Add CELER_NONFATAL_FLUSH to cleanly kill stuck tracks (@sethrj, #1455)

  • Add optical absorption model with imported data (@hhollenb, #1440)

  • Add multilevel “volume instance” (@sethrj, #1461)

  • Reconstruct Geant4 navigation history from stack (@sethrj, #1466)

  • Add “cut” for individual track steps (@sethrj, #1467)

  • Improve error checking and diagnostic output for managing GPU (@sethrj, #1464)

  • Add distance-to-bbox function (@elliottbiondo, #1446)

  • Add multi-level state to detector step result (@sethrj, #1471)

  • Override and save Geant4 dataset variables at configure time (@pcanal, #1475)

  • Implement spline interpolation for cross-section calculation (@lebuller, #1444)

  • Implement optical Rayleigh model (@hhollenb, #1469)

  • Allow core and optical loops to have different numbers of track slots (@amandalund, #1491)

  • Add muon decay interactor (@stognini, #1456)

  • Add option to use spline-interpolated energy loss (@lebuller, #1496)

  • Add an Optical WLS (@whokion, #1507)

  • Add muon pair production (@amandalund, #1518)

  • Extend BIH capabilities for intersection operations (@elliottbiondo, #1479)

  • Add along-step and tracking cut optical executors (@sethrj, #1540)

  • Enable optical stepping loop (@sethrj, #1546)

  • Simplify UnitProto after building a CsgUnit (@esseivaju, #1415)

  • Implement device bitset (@esseivaju, #1547)

  • Reduce celer-sim memory usage and improve its CELER_LOG transport output (@stognini, #1550)

  • Support sense caching for future lazy evaluation (@esseivaju, #1539)

  • Support building infix logic representation (@esseivaju, #1530)

  • Import and use muon+hadron EM physics parameters (@amandalund, #1581)

  • Extend Coulomb scattering to support additional particle types (@amandalund, #1574)

  • Add optical model importer and refactor imported optical materials (@hhollenb, #1520)

  • Add global Celeritas input definition (@sethrj, #1562)

  • Always select at-rest process for stopped tracks (@amandalund, #1592)

  • Use BIH to accelerate background_intersect (@elliottbiondo, #1599)

  • Add ultra-simple tracking manager integration (@sethrj, #1609)

  • Implement cubic spline interpolation (@amandalund, #1607)

  • Add a calculator to integrate range from energy loss (@amandalund, #1544)

  • Add G4Ellipsoid without bottom/top cuts (@elliottbiondo, #1617)

  • Add safety visualization tool (@sethrj, #1614)

  • Remove pointers from Geant4 labels (@sethrj, #1620)

  • Add high-level user/fast sim integration helpers (@sethrj, #1615)

  • Support spline interpolation on a nonuniform grid (@amandalund, #1625)

  • Prune primaries that start outside the world volume (@sethrj, #1624)

  • Add support for Z cuts when converting G4Solids (@elliottbiondo, #1638)

  • Support sensitive detectors in replica/parameterized volumes (@sethrj, #1649)

  • Add an option to enable status checker through celer-sim (@sethrj, #1650)

  • Add support for elliptical cylinders and elliptical cones in orange and g4org (@elliottbiondo, #1642)

  • Support post-step touchable location and step status (@sethrj, #1653)

  • Support surface-based VecGeom 2.x navigator (@mrguilima, #1422)

  • Approximate G4Torus using inner/outer bounding cylinders (@elliottbiondo, #1654)

  • Support volume-specific uniform field (@amandalund, #1659)

  • Implement discrete optical physics (@hhollenb, #1604)

  • Add an example user action for gathering statistics on GPU (@sethrj, #1664)

  • Add quantity support to FindInterp and template Turn (@sethrj, #1675)

  • Support VecGeom 2.0 (@sethrj, #1674)

  • Add 3D Cylindrical field map (@esseivaju, #1662)

  • Make SB energy limit configurable and partially fix failures when using a single brems model (@amandalund, #1686)

  • Add timers to accel integration classes (@amandalund, #1693)

  • Use float for field interpolation (@esseivaju, #1684)

  • Allow some “required” SetupOptions to be set via Geant4 UI (@sethrj, #1697)

  • Support counter with NVTX (@esseivaju, #1702)

  • Use programmatic optical counters instead of absurdly verbose printout (@sethrj, #1707)

  • Allow G4 applications to query celeritas offload mode (@sethrj, #1711)

  • Reduce logging verbosity during Geant4 runs (@sethrj, #1705)

  • Improve messages when multiple tracks fail in flight (@sethrj, #1715)

  • Estimate scintillation wavelength distribution parameters from tabulated values when only the latter is provided (@amandalund, #1722)

  • Add utilities to stabilize downstream use of ORANGE (@sethrj, #1736)

  • Expand support for spline interpolation (@amandalund, #1633)

  • Add cartesian magnetic field using Covfie (@esseivaju, #1744)

Bug fixes

  • Define a “unique event ID” different from event counter (@sethrj, #1447)

  • Fix optical import when unused materials are defined (@sethrj, #1449)

  • Remove trackid counter from primary (@sethrj, #1448)

  • Improve single-event mode in accel (@sethrj, #1452)

  • Fix GDML export messages and geometry-only use case (@sethrj, #1454)

  • Fix tracking cut message (@sethrj, #1458)

  • Anchor vtables to fix broken dynamic cast in tests (@sethrj, #1474)

  • Fix documentation (@sethrj, #1502)

  • Fix clang-tidy weekly cron (@esseivaju, #1541)

  • Fix multiple release() calls to ensure nullptr is not used in process construction (@amandalund, #1612)

  • Support different grid spacings for cross section data (@amandalund, #1622)

  • Fix crash in multithreaded celer-g4 (@amandalund, #1627)

  • Fix loading of GDML files with reflection (@sethrj, #1626)

  • Fix navigation and mapping of reflecting volumes (@sethrj, #1629)

  • Fix reading and writing HepMC3 events (@amandalund, #1635)

  • Initialize MPI in high-level integration classes (@sethrj, #1672)

  • Fix bremsstrahlung process construction when using only a single model (@amandalund, #1677)

  • Lazily fetch volumes for UniformAlongStepFactory (@rahmans1, #1666)

  • Fix BoundingZone floating point issue (@elliottbiondo, #1681)

  • Fix out-of-bounds memory access in CylMapField (@amandalund, #1689)

  • Fix Geant4 SD hit scoring (@amandalund, #1708)

  • Fix field map usage from accel (@sethrj, #1724)

  • Fix failures when integral approach is disabled (@amandalund, #1727)

Documentation improvements

  • Improve XSCalculator documentation and tests (@sethrj, #1450)

  • Require clang-tidy in CI (@esseivaju, #1524)

  • Tidy headers (@esseivaju, #1534)

  • Run clang-tidy on modified files only (@esseivaju, #1531)

  • Build VecGeom in weekly clang-tidy cron (@esseivaju, #1551)

  • Document and slightly refactor Bethe-Heitler interactor (@sethrj, #1553)

  • Update copyrights (@sethrj, #1560)

  • Enable more dependencies in clang-tidy checks (@esseivaju, #1561)

  • Fix Doxygen member group formatting (@amandalund, #1567)

  • Improve and fix documentation (@sethrj, #1588)

  • Add generic geometry test interface to reduce duplication (@sethrj, #1623)

  • Improve testing and documentation for VecGeom (@sethrj, #1639)

  • Fix rendering of README (@dalg24, #1640)

  • Add ORCID to citation (@esseivaju, #1645)

  • Improve geometry testing (@sethrj, #1652)

  • Move offload template into a celeritas::example namespace (@sethrj, #1663)

  • Enable optical GPU tests (@amandalund, #1682)

  • Update ROOT data and tests with Geant4 version 11.3.0 (@amandalund, #1687)

  • Split EM physics and Geant4 interface into sub-files (@sethrj, #1698)

  • Improve doc generation and brems-related documentation (@sethrj, #1701)

  • Update Geant4 version to 11.3 in CI build (@amandalund, #1712)

  • Add histogram helper class to simplify distribution tests (@amandalund, #1717)

  • Add string simplifier helper class for testing (@sethrj, #1719)

  • Improve MSC test code coverage (@sethrj, #1723)

  • Add quick-start documentation for integrating (@sethrj, #1725)

  • Fix pedantic warning in tests (@elliottbiondo, #1730)

  • Add authorship guidelines (@sethrj, #1747)

  • Support testing nested container equivalence and tweak Histogram class (@amandalund, #1753)

Minor internal changes

  • Give priority to existing environment variables for G4 data location (@pcanal, #1457)

  • Define id_cast helper function (@sethrj, #1459)

  • Simplify geometry “volume” interface (@sethrj, #1460)

  • Refactor step storage to use aux state (@sethrj, #1465)

  • Refactor pinned allocator to reduce need for templates (@sethrj, #1468)

  • Tweak Perfetto integration (@sethrj, #1470)

  • Escape semicolons in exported CMake variables (@drbenmorgan, #1472)

  • Require CELERITAS_DEBUG be on to enable CELERITAS_DEVICE_DEBUG (@amandalund, #1476)

  • Use kernel launchers instead of macros (@sethrj, #1477)

  • Fix missing brace and refactor #1475 (@sethrj, #1480)

  • Fix build with latest Geant4 develop (@pcanal, #1484)

  • Refactor “touchable updater” that uses a navigator (@sethrj, #1483)

  • Store edge bounding boxes on BIH and refactor for upcoming intersection capabilities (@elliottbiondo, #1478)

  • Add FourVector helper functions (@sethrj, #1510)

  • Define hypotenuse function using fma (@sethrj, #1513)

  • Add a helper class for inverse transform sampling (@amandalund, #1525)

  • Rename Cerenkov to Cherenkov (@amandalund, #1533)

  • Clean up optical mock test data (@hhollenb, #1519)

  • Store a single process-integrated energy loss and range table per particle (@amandalund, #1536)

  • Add piecewise integrator and CDF utilities (@sethrj, #1537)

  • Define precision-agnostic Constant class (@sethrj, #1549)

  • Adapt bitset word size (@esseivaju, #1554)

  • Add ‘LogicalTrue’ functor (@sethrj, #1564)

  • Fix unnecessary use of inline constexpr (@sethrj, #1568)

  • Replace “volid” with “vol_id” throughout ORANGE (@elliottbiondo, #1486)

  • Compose caching functionality of LazySenseCalculator (@esseivaju, #1569)

  • Use lazy sense calculator (@esseivaju, #1576)

  • Change PrimaryGeneratorAction to be a wrapper (@sethrj, #1593)

  • Refactor primary generator using new inp (@sethrj, #1583)

  • Add postfix to infix conversion utility (@esseivaju, #1582)

  • Move physics lists out of details and rename tracking offload (@sethrj, #1603)

  • Add TrackingManagerConstructor and SharedParams::GetMode (@sethrj, #1606)

  • Move PolyEvaluator to corecel/math (@amandalund, #1610)

  • Rename fast simulation offload (@sethrj, #1613)

  • Rename Generic grid to Nonuniform (@amandalund, #1616)

  • Require VecGeom 1.2.10 for CUDA RDC support (@pcanal, #1628)

  • Construct CoreParams from new problem input in celer-sim (@sethrj, #1601)

  • Move Geant4 SD integration into celeritas/ext (@sethrj, #1631)

  • Refactor log handlers for better reuse (@sethrj, #1636)

  • Rename CoreTrackView methods (@amandalund, #1658)

  • Refactor geometry tests into common file (@sethrj, #1656)

  • Use extern static data for versions, configuration (@sethrj, #1657)

  • Use CLI11 for front end command line parsing (@sethrj, #1660)

  • Hide Thrust from .cc code (@sethrj, #1670)

  • Remove G4EmExtraPhysics from FtfpBertPhysicsList (@whokion, #1644)

  • Define dependency helper targets and reorganize CMakeLists (@sethrj, #1673)

  • Change default field substeps in accel (@esseivaju, #1690)

  • Update and fix G4VG external integration (@sethrj, #1700)

  • Use inp to build accel core params (@sethrj, #1632)

  • Move random to corecel (@sethrj, #1716)

  • Remove dependency of orange test on celeritas (@sethrj, #1718)

  • Simplify Geant4 user application interface (@sethrj, #1729)

  • Replace ImportPhysicsVector with inp::Grid (@amandalund, #1735)

  • Add ExtThrust for more explicit dependencies (@sethrj, #1694)

  • Rename field integration interfaces: Stepper→Integrators, Driver→Substepper (@sethrj, #1737)

  • Add uniform grid input and continue to simplify grid construction (@amandalund, #1739)

  • Rename material ID types (@sethrj, #1742)

  • Simplify grid construction in a few more places (@amandalund, #1743)

  • Fix ROCTX find: hip not cuda (@sethrj, #1755)

  • Move types around to fix ROOT error (@sethrj, #1757)

  • Simplify MSC angular sampling (@sethrj, #1714)

Deprecation and removal

  • Delete obsolete demonstration apps (@sethrj, #1463)

  • Remove ‘default_stream’ option (@sethrj, #1667)

  • Remove deprecations for v0.6 (@sethrj, #1691)

  • Remove macro setup from celer-g4 (@sethrj, #1710)

  • Remove per-process switch for integral cross section method (@amandalund, #1734)

  • Remove celer-dump-data app (@amandalund, #1740)

Reviewers

  • Seth R. Johnson (@sethrj): 89

  • Amanda Lund (@amandalund): 68

  • Philippe Canal (@pcanal): 22

  • Stefano Tognini (@stognini): 10

  • Guilherme Lima (@mrguilima): 9

  • Julien Esseiva (@esseivaju): 7

  • Elliott Biondo (@elliottbiondo): 5

  • Soon Yung Jun (@whokion): 3

Full Changelog: https://github.com/celeritas-project/celeritas/compare/v0.5.0…v0.6.0