Series 0.7

Major development version 0.7 can be cited through its Zenodo code release [Johnson et al., 2026].

Version 0.7.0

Released 2026/10/11

Version 0.7.0 is a long-overdue major update to Celeritas featuring many new capabilities.

  • Optical physics is now fully supported, including surface properties, Geant4 process integration, and Mie/WLS processes.

  • A LArSoft plugin that stands in for PDFastSimPar uses full-fidelity MC transport on CPU or GPU for optical photon transport from simulated energy deposition.

  • The EM tracking loop is now asynchronous (relying on built-in CUDA asynchronous streaming and events rather than an additional control thread).

  • ORANGE geometry navigation is now substantially faster and now completely supports Geant4 quadric solids.

  • G4 tracking manager integration is now set up automatically rather than requiring BeginOfRun/EndOfRun actions.

Major known deficiencies include:

  • Surface normal calculations for VecGeom is unsupported, so optical physics will be wrong if any surface physics is used.

  • The behavior of reflectivity/efficiency grids acting as pure absorbers around sensitive detector regions (i.e., black boxes for splicing) currently differs from Geant4.

  • Tessellated solids are not supported when using ORANGE.

Changes since v0.6.0, excluding those released in v0.6.3, follow.

New features

  • Add default values for track slots and initializer capacity (@amandalund, #1772)

  • Complete optical stepping loop (@amandalund, #1792)

  • Create IntersectRegion for a convex extruded polygon (@elliottbiondo, #1783)

  • Adds Sensitive Detector parameter Class (@lebuller, #1764)

  • Print Celeritas configuration options when loading downstream (@sethrj, #1802)

  • Make optical max_step_iters configurable and properly reset state after aborting (@amandalund, #1805)

  • Add reflection to ORANGE (@sethrj, #1807)

  • Add options to forcibly disable Cherenkov and scintillation (@amandalund, #1814)

  • Add replica+parameterisation support to ORANGE (@sethrj, #1817)

  • Add surface normal calculations in GeoTrackView (@hhollenb, #1804)

  • Add WLS model class, generator, and executor and support second WLS process (@amandalund, #1816)

  • Support configurable WLS reemission time distribution (@amandalund, #1822)

  • Add volume params to represent Geant4 volume graph (@sethrj, #1821)

  • Full G4ExtrudedSolid support (@elliottbiondo, #1808)

  • Read and export Geant4 surface definitions (@sethrj, #1824)

  • Add in-situ cartesian field map construction from Geant4 (@esseivaju, #1828)

  • Add geometry surface definitions to runtime (@sethrj, #1812)

  • Output optical actions (@amandalund, #1836)

  • Add polar truncation for sphere shape (@sethrj, #1832)

  • Generate optical photons directly into track slots for 2× GPU speedup (@amandalund, #1844)

  • Add track weight propagation to secondaries track (@Rashika-Gupta, #1847)

  • Reconstruct Geant4 TrackID (@esseivaju, #1837)

  • Update HitProcessor test to support non unit weights (@Rashika-Gupta, #1853)

  • Add optical primary generator (@amandalund, #1858)

  • Add VolumeSurfaceSelector (@hhollenb, #1859)

  • Support single-precision Geant4->ORANGE conversion (@sethrj, #1870)

  • Provide canonical volume and instance IDs from ORANGE (@sethrj, #1886)

  • Add optical surface physics input and import surface physics data from Geant4 (@stognini, #1862)

  • Add ORANGE track debugging utilities (@sethrj, #1911)

  • Enable muon physics and add user-defined list of offloaded particles (@stognini, #1910)

  • Add smear and Gaussian surface roughness calculators (@hhollenb, #1896)

  • Enable optical SetupOptions and allow Rayleigh when some materials lack MFP (@Rashika-Gupta, #1913)

  • Add optical surface physics (@hhollenb, #1801)

  • Implement Geant4 geometry normals and refactor/add tests (@sethrj, #1934)

  • Create placeholder SDs when loading GeantGeoParams from GDML (@sethrj, #1949)

  • Add surface normal state to optical surface physics (@hhollenb, #1922)

  • Add log code to print executable/source/dependency locations (@sethrj, #1952)

  • Simplify CSG expressions with two opposite clauses (@sethrj, #1946)

  • Adds Detectors to model input and builds the detectors from G4 sensitive detectors (@lebuller, #1955)

  • Skip wavelength shift model without data during optical model import (@Rashika-Gupta, #1963)

  • Improve optical setup and testing (@sethrj, #1970)

  • Support G4MultiUnion in ORANGE (@elliottbiondo, #1987)

  • Allow use of VecGeom solid model for surface-enabled build (@sethrj, #1993)

  • Improve autodetection of ANSI color support (@sethrj, #1999)

  • Add SurfaceModelView to optical surface physics (@hhollenb, #1980)

  • Add json event reader and writer (@amandalund, #2004)

  • Add polished surface roughness model (@hhollenb, #2006)

  • Check vecgeom navindex table for consistency (@sethrj, #2000)

  • Implement Mie scattering (@Rashika-Gupta, #1933)

  • Refactor dielectric model (@hhollenb, #2008)

  • Add profiling capabilities to celer-geo (@sethrj, #2011)

  • Add SurfaceInteractionApplier and implement PostBoundaryAction (@hhollenb, #2020)

  • Make ORANGE conversion/construction options configurable (@sethrj, #2018)

  • Add regions to model input (@amandalund, #2023)

  • Add OpNovice GDML optical geometry and integration test (@Rashika-Gupta, #2016)

  • Code coverage (@pcanal, #2013)

  • Add G4Tet conversion to ORANGE (@sethrj, #2032)

  • Improve perfetto logger/failure integration (@sethrj, #2040)

  • Add orange diagnostic output to celer-geo (@sethrj, #2036)

  • Add support for G4CutTubs (@elliottbiondo, #2051)

  • Create .github/.codecov.yml, loosen test requirement (@pcanal, #2062)

  • Add Fresnel reflectivity, refraction, and UNIFIED reflection calculators (@hhollenb, #1984)

  • Add a trivial surface interaction model (@hhollenb, #2061)

  • Improve orange csg output and geocel test harness (@sethrj, #2056)

  • Add Geant4 options to unit test and build output (@sethrj, #2076)

  • Support G4Hype (@sethrj, #2090)

  • Enable checking of integration tests for older Geant4 versions (@sethrj, #2089)

  • Support offloading optical distributions to Celeritas standalone optical loop (@amandalund, #2092)

  • Reconstruct canonical volumes directly from ORANGE track view (@sethrj, #2096)

  • Update VecGeom support for 2.0 solid and surface (@mrguilima, #1720)

  • Support timing optical actions (@amandalund, #2101)

  • Replace thrust calls with cub towards reducing CPU synchronization (@LSchwiebert, #2068)

  • Add input option for infix notation (@esseivaju, #1565)

  • Add direct optical photon generator (@hhollenb, #2104)

  • Add initial skeleton implementation of the gamma-nuclear process (@whokion, #2105)

  • Add optical surface integration tests (@hhollenb, #2112)

  • Add grid-based sampling for scintillation spectra (@Rashika-Gupta, #2100)

  • Add helper classes for managing aux data (@sethrj, #2120)

  • Add CODEOWNERS and update roles (@sethrj, #2113)

  • Make optical primary generator distributions configurable (@amandalund, #2122)

  • Add Ranluxpp Random Number Generator (@davidsgr, #2001)

  • Add muon-catalyzed fusion inp:: skeleton and basic import (@stognini, #2125)

  • Support RANLUX++ as core RNG (@sethrj, #2141)

  • cuda rdc: Check for -z undefs only when CUDA enabled (@pcanal, #2143)

  • Add Ferrari-Cardano algorithm and general Quartic Solver test suite (@osanstrong, #2010)

  • Support different CODATA measured constants with CELERITAS_CODATA config option (@sethrj, #2159)

  • Add LArSoft plugin skeleton (@sethrj, #2154)

  • Add an option to kill optical tracks after a specified number of steps (@amandalund, #2161)

  • Add CHIPS gamma-nuclear cross sections (@whokion, #2149)

  • Add a celer-config app and milan2 config (@sethrj, #2172)

  • Add an initial support for electro-nuclear process and model (@whokion, #2170)

  • Implement Celeritas-DD4hep integration plugin (@rahmans1, #1756)

  • Use a reasonable project version for shallow clones (@sethrj, #2175)

  • Add NO_COLOR support and new env helper (@sethrj, #2179)

  • Link against development LArSim (@sethrj, #2180)

  • Add rng branching (@davidsgr, #2155)

  • Add builtin surface roughness models (@hhollenb, #1928)

  • Improve messaging from multi-exception handler (@sethrj, #2196)

  • Add copilot agent instructions (@sethrj, #2195)

  • Add muon-catalyzed fusion process/model skeletons (@stognini, #2174)

  • Simplify errors when initialization fails (@sethrj, #2198)

  • Move global CoreStateCounters to the GPU (@LSchwiebert, #2177)

  • Extract splitmix64 rng (@davidsgr, #2200)

  • Add standalone optical runner (@amandalund, #2197)

  • Switch to infix tracking to accelerate ORANGE point-in-volume (#2121) (@esseivaju, #2121)

  • Add primary IDs to optical simulation (@sethrj, #2204)

  • Add SD mapping params to core and optical data (@sethrj, #2203)

  • Add JSON serialization for distribution inputs (@amandalund, #2210)

  • Add JSON serialization for optical standalone input (@amandalund, #2212)

  • Add MuCF interactor for muonic dt molecules (@stognini, #2211)

  • Move Optical Core State Counters to Device (@LSchwiebert, #2208)

  • Add generic G4 field adapter and add field testing (@sethrj, #2218)

  • Add standalone optical app (@amandalund, #2219)

  • Add options for constructing an ORANGE geometry (@elliottbiondo, #2045)

  • Modify ORANGE tracking assertions for production-level problems (@elliottbiondo, #2224)

  • Add abstract interface to CUDA/HIP events (@sethrj, #2226)

  • Add muCF atom and spin selectors (@stognini, #2216)

  • Add MuCF interactor for muonic dd molecules (@stognini, #2236)

  • Store BIH metadata and write to JSON (@elliottbiondo, #2244)

  • Accelerate ORANGE construction by two orders of magnitude (@sethrj, #2249)

  • Make proto construction independent of hardcoded runtime tracking (@sethrj, #2239)

  • Improve ORANGE construction performance by presizing label vectors (@sethrj, #2246)

  • BIH depth limit (@elliottbiondo, #2251)

  • Add error checking to vecgeom track view (@sethrj, #2245)

  • Investigate and simplify ORANGE construction warning/debug messages (@sethrj, #2247)

  • Improve surface deduplication reproducibility and performance (@sethrj, #2253)

  • Use smarter surface hash points for cyl and general quadrics (@sethrj, #2254)

  • Locate volume instance containing global point (@hhollenb, #2250)

  • Add optical sensitive detectors (@hhollenb, #2215)

  • Import muCF cycle rate data and construct muCF model (@stognini, #2240)

  • Sample scintillation photon emission time from step times when speed is unavailable (@amandalund, #2257)

  • Add LArSoft data export module and reader (@stognini, #2256)

  • Offload distributions and transport photons in LarStandaloneRunner (@amandalund, #2273)

  • Add user-defined grid reflectivity for optical physics (@hhollenb, #2266)

  • Add BIHStructure for json output (@elliottbiondo, #2268)

  • Add flag for specifying the number of BIH partition candidates (@elliottbiondo, #2274)

  • Add optical front painted and back painted surface support (@hhollenb, #2276)

  • Find optical material ID from pre-step point (@amandalund, #2280)

  • Add optical only reflection model (@hhollenb, #2279)

  • Store geometry to optical material ID mapping in GeantGeoParams (@amandalund, #2287)

  • Add Toroid surface (@osanstrong, #2158)

  • Refactor larceler component into a module (@sethrj, #2285)

  • Use optical photon group velocity for along step time calculation (@hhollenb, #2282)

  • Enable optical photon track offloading from Geant4 to Celeritas (@Rashika-Gupta, #2241)

  • Add per track reseeding (@davidsgr, #2229)

  • Allow geant geo params to be saved during detector construction (@sethrj, #2295)

  • Add helpers for array type, precision, and quantity conversion (@sethrj, #2223)

  • Integrate detector hits with larsoft (@sethrj, #2278)

  • Add an interface for invoking the PostStepDoIt action of Geant4 hadronic process (@whokion, #2302)

  • Accumulate and report cut/error counters for optical and EM tracks (@sethrj, #2307)

  • Improve consistency of scintillation/Cherenkov import with Geant4 (@sethrj, #2303)

  • Add geometry status for robust reentrant boundary handling (@sethrj, #2312)

  • Add volume params and view to core data (@sethrj, #2316)

  • Add pre-commit script to clean ASCII files (@sethrj, #2319)

  • Optimize depth finding for large number of touchable histories (@sethrj, #2317)

  • Improve performance of BIH lookup with maximum search distance (@elliottbiondo, #2323)

  • Add neutron capture cross sections and associated process (@whokion, #2321)

  • Improve agent commit behavior and add vscode debugging script (@sethrj, #2337)

  • Use robust boundary state for Geant4 navigator wrapper (@sethrj, #2328)

  • Define and map a scalar “volume unique instance” between a navigation path (@sethrj, #2322)

  • Add SpanUtils.hh with Span-based math functions (@sethrj, #2336)

  • Add covfie binary field map loaders (@rahmans1, #2335)

  • Add optical WLS secondary generation (@amandalund, #2339)

  • Refactor LdgIterator into wrapper function and ADL access (@sethrj, #2343)

  • Add JSON reader and writer for optical distribution data (@amandalund, #2352)

  • Add implicit constructor to Span (@sethrj, #2348)

  • Make OpaqueId more like std::optional (@sethrj, #2355)

  • Pr/rzmap covfie backend (@rahmans1, #2344)

  • Optimize BIH/bounding box to improve DUNE performance (@elliottbiondo, #2359)

  • Implement slab method for ray-bbox intersection (@elliottbiondo, #2374)

  • Add bare-metal Spack and apptainer UPS support for milan2 (@sethrj, #2365)

  • Add custom Geant4 Cherenkov and scintillation processes to offload generator distributions (@hhollenb, #2378)

  • Add G4 state monitor (@sethrj, #2380)

  • Improve traversal in BIHEnclosingVolFinder (@elliottbiondo, #2377)

  • Add optical step diagnostic (@amandalund, #2386)

  • Add LLDB synthetic/summary helper classes for improved debugging (@sethrj, #2383)

  • Rewrite MiniStack to use for BIH traversal (@sethrj, #2385)

  • Improve CUDA profiling with default NVTX and ranged kernels (@sethrj, #2389)

  • Support recording step times in optical loop and refactor step time storage as aux data (@amandalund, #2387)

  • Use separating axis test to speed up ORANGE propagation by 20% (@sethrj, #2391)

  • Add LDG support for array, bbox (@sethrj, #2399)

  • Support efficient VolumeUniqueInstanceId construction in geo navigators (@sethrj, #2404)

  • Add VolumeUniqueInstanceId to optical detector hits (@hhollenb, #2402)

  • Add OpenMP and ORANGE diagnostics to output (@sethrj, #2413)

  • Add reseed to config (@davidsgr, #2414)

  • Skip geometry initialization when locating missing optical material if only one material is present (@amandalund, #2417)

  • Add overlap fraction consideration to BVH partitioning (@elliottbiondo, #2419)

  • Add optical detector callbacks through accel setup (@Rashika-Gupta, #2416)

  • Enable profiling through Instruments on macOS (@sethrj, #2421)

  • Enable autovectorization of bbox intersect and fix logical all (@sethrj, #2423)

  • Add FHiCL files for FastSim and Celeritas LArSoft workflows; Add analyzer module (@stognini, #2318)

  • Add JSON IO for inp::StandaloneInput (@amandalund, #2425)

  • Use inp::StandaloneInput for celer-sim (@amandalund, #2428)

  • Integrate Toroidal surfaces into ORANGE construction (@osanstrong, #2427)

  • Add CI jobs for gcc15 and clang22 (@esseivaju, #2436)

  • Improve few-active-track GPU optical performance (@sethrj, #2450)

  • Add asynchronous Stepper launch and completion (@esseivaju, #2446)

  • Improve LarSoft integration and correctness (@sethrj, #2465)

  • Asynchronously copy primaries to device in LocalTransporter (@esseivaju, #2406)

  • Add placeholder models for EM-nuclear processes (@whokion, #2466)

  • Add universe metadata+structure to JSON output, make universe DAG dot graphs (@elliottbiondo, #2475)

  • Refactor and update github CI actions (@sethrj, #2473)

  • Add covfie field-map support to DD4HEP plugin (@rahmans1, #2448)

  • Check CUDA compute compatibility at configure time, not build time (@sethrj, #2470)

  • Add cron job to build off VecGeom master (@esseivaju, #2482)

  • Implement check on Celeritas-Geant4 fast simulation particle consistency (@drbenmorgan, #2333)

  • Make detector construction output reproducible and debuggable (@sethrj, #2487)

  • Support component-specific scintillation photon generation (@amandalund, #2485)

  • Add CI regression testing of accel integration tests (@sethrj, #2479)

  • Move scoring out of async step launch (@esseivaju, #2468)

  • Add initial integration of VecGeom navigator view (@sethrj, #2489)

  • Improve support and testing for G4 with vecgeom-based solids (@sethrj, #2495)

  • Use clang-tidy-diff for changed files (@pcanal, #2490)

  • Add additional diagnostics to checked geo output (@sethrj, #2505)

  • Support Geant4 11.4 (@sethrj, #2499)

  • Automatically initialize and finalize Celeritas when using TrackingManager (@rahmans1, #2381)

  • Refactor CI doc build and deploy (@sethrj, #2508)

  • Precompute optical group velocity grids (@Rashika-Gupta, #2452)

  • Add file handles to output registry to allow multiple writes (@sethrj, #2520)

  • Output Celeritas diagnostics from within LArSoft (@sethrj, #2477)

  • Support merge groups for pull requests (@sethrj, #2528)

  • Replace core state counter synchronization with device kernels and functors (@LSchwiebert, #2376)

  • Split device step compaction into async and copy phases (@esseivaju, #2534)

  • Enqueue HitProcessor hit compaction during async step (@esseivaju, #2543)

  • Remove synchronization from initializer buffer capacity validation (@amandalund, #2535)

  • Remove synchronization from init_charge track initialization (@esseivaju, #2551)

  • Load versions from CUDA, HIP packages at configure time and work around ROCm errors (@sethrj, #2547)

Bug fixes

  • Patch covfie shasum (@esseivaju, #1771)

  • Fix table size in physics construction (@amandalund, #1780)

  • Fix and refactor maximum cross section energy calculation for integral approach (@amandalund, #1776)

  • Support CUDA 12.9 and NVCC with cxxstd=20 (@sethrj, #1787)

  • Fix sincospi on device (@amandalund, #1791)

  • Fix assigning parent ID to track initializer (@amandalund, #1795)

  • Fix orange polyhedron orientation and roundoff error (@sethrj, #1806)

  • Flush optical tracks at the end of core stepping loop (@amandalund, #1834)

  • Reconstruct additional data in G4Track (@sethrj, #1835)

  • Add null pointer checks for Geant4 surfaces (@sethrj, #1841)

  • Fix counters in optical generator action (@amandalund, #1857)

  • Fix volume params construction in model setup (@amandalund, #1878)

  • Uniquely and consistently identify and map volume instances (@sethrj, #1903)

  • Fix volume instance IDs for background volumes in ORANGE (@sethrj, #1912)

  • Fix edge case where imported lambda and lambda prime tables have overlapping range (@amandalund, #1936)

  • Fix ORANGE surface normal calculation on boundary of daughter universes (@sethrj, #1942)

  • Fix initialization when starting on an internal surface (@sethrj, #1947)

  • Fix sincos on device when math/Turn.hh is included (@sethrj, #1951)

  • Fix data selection in SetupOptions` -> `` FrameworkInput` conversion (@amandalund, #1959)

  • Fix offloaded particles in celer-g4 (@amandalund, #1961)

  • Use consistent tolerance when checking for orthogonality (@amandalund, #1972)

  • Approximate two-point scintillation spectra as a gaussian (@Rashika-Gupta, #1983)

  • Fix setting CUDA heapSize through G4UI (@esseivaju, #1989)

  • Fix option to kill tracks after user-specified number of steps (@amandalund, #1995)

  • Move loading of celer-g4 setup options to after run manager construction (@amandalund, #1996)

  • Fix build issues with AMD ROCm (@elliottbiondo, #2007)

  • Allow degenerate G4Trd and reversed PolyCone used by ATLAS (@sethrj, #2002)

  • Fix unsigned wraparound for SurfaceTrackPosition (@amandalund, #2019)

  • Fix codecov deployment from master (@sethrj, #2035)

  • Fix Mie scattering execution on device (@amandalund, #2050)

  • Fix polysolid with zero-radius inner segment (@sethrj, #2048)

  • Fix calculation of distribution index in optical photon generation (@amandalund, #2053)

  • Fix opaque ID arithmetic for small integers (@sethrj, #2071)

  • Re-enable code coverage (@pcanal, #2073)

  • Fix stack allocator/CUDA RDC weirdness (@sethrj, #2075)

  • Fix G4Polyhedra with azimuthal truncation (@elliottbiondo, #2054)

  • Fix construction of CMS polyhedra with discontinuities (@elliottbiondo, #2085)

  • Add tests for unusual boundary crossing scenarios (@sethrj, #2087)

  • Fix erroneous failure in gcov ci (@pcanal, #2093)

  • Avoid optical state dynamic casts in test (@sethrj, #2094)

  • Fix reentrant boundary crossing via surface physics (@hhollenb, #2081)

  • Fix VecGeom 2 solids behavior by clearing last exited state (@sethrj, #2118)

  • Fix uninitialized hit counter in HitProcessor (@amandalund, #2137)

  • Fix vecgeom 2.x with CUDA (@sethrj, #2136)

  • Reduce ORANGE state size for models with background volumes (@elliottbiondo, #2139)

  • Fix field copy to device in hip build (@esseivaju, #2144)

  • Fix document warnings related CI infrastructure (@sethrj, #2148)

  • Use correct energy when generating Cherenkov and scintillation photons (@amandalund, #2152)

  • Fix compile error with VecGeom v2.0.0-rc.8 and Cuda (@esseivaju, #2157)

  • Fix device linking of downstream applications with Covfie+CUDA (@esseivaju, #2162)

  • Forward codecov secret to Spack workflow (@esseivaju, #2166)

  • Fix VgNavIndex narrowing conversion (@esseivaju, #2163)

  • Fix edge cases with optical setup and runtime (@sethrj, #2191)

  • Fix GeantOpticalPhysicsOptions JSON serialization (@amandalund, #2214)

  • Warn and replace unphysical values in MFP grid (@amandalund, #2217)

  • Fix construction of CylMapMagneticField from G4MagneticField (@esseivaju, #2222)

  • Fix optical photon import for older Geant4 versions (@amandalund, #2221)

  • Clamp out-of-bound indices in CartMapField (@esseivaju, #2225)

  • Avoid integer overflow in DeMorganSimplifier for large geometries (@amandalund, #2231)

  • Fix infinities and unions in bounding zone (@sethrj, #2255)

  • Fix infinite safety distance edge case (@sethrj, #2261)

  • Fix conversion of subtractions with no transforms (@sethrj, #2269)

  • Remove spurious warning about importing G4OpBoundaryProcess (@hhollenb, #2284)

  • Avoid id_cast when null ID is allowed (@amandalund, #2286)

  • Use std::optional to disambiguate JSON physics setup (@sethrj, #2291)

  • Notify user when using G4-incompatible scintillation spectrum (@sethrj, #2259)

  • Add support for mixing Clang and GCC (as NVCC host). (@pcanal, #2297)

  • Correctly set optical options in celer-sim (@amandalund, #2301)

  • Fix errors and add warnings with optical properties (@sethrj, #2306)

  • Fix back painted surface double interaction (@hhollenb, #2314)

  • Allow detection in non-optical materials through an optical surface (@sethrj, #2308)

  • Fix missing optical detector hits on GPU (@hhollenb, #2334)

  • Fix accidental LdgSpan-to-Span conversion (@sethrj, #2354)

  • Resolve warnings from nvcc and some older gcc compilers (@LSchwiebert, #2366)

  • Hotfix: nvtx kernel names (@sethrj, #2390)

  • Fix primary ID initialization (@sethrj, #2310)

  • Fix missing copies of primary ID, post-step ID (@sethrj, #2384)

  • Reduce branching in ORANGE and eliminate bbox checks in BIH leaf visits (@elliottbiondo, #2405)

  • Kill optical tracks that hit world boundary (@Rashika-Gupta, #2409)

  • Fix HIP unused-variable warning (@sethrj, #2412)

  • Fix nvcc 13.3 compile error (@esseivaju, #2415)

  • Validate G4LEVELGAMMADATA to avoid bizarre crashes in G4 field propagation (@sethrj, #2424)

  • Fix mathjax rendering in Safari and other documentation issues (@sethrj, #2430)

  • Fix gcc15 + CUDA 13.1 compile error (@esseivaju, #2432)

  • Fix incorrect path of Host to Device covfie field copy (@esseivaju, #2433)

  • Expose OpaqueId hash during device compilation (@esseivaju, #2435)

  • Fix C++23 constexpr ODR usage issue in field (@stephenswat, #2434)

  • Fix typo in Mie scattering ratio sampling (@hhollenb, #2442)

  • Fix FerrariSolver (@osanstrong, #2439)

  • Fix JSON serialization for control and grid enums (@amandalund, #2443)

  • Use harmonic-mean grid derivatives for optical group velocity calculation (@Rashika-Gupta, #2437)

  • Fix warnings with ROCm 7.14 (@sethrj, #2453)

  • Fix BVH navigation when given a very large search distance (@sethrj, #2471)

  • Fix stale geometry parent IDs when inserting primaries (@amandalund, #2476)

  • Normalize USolids polycone conversion and test expectations (@esseivaju, #2488)

  • Support VecGeom 2.0 and vastly improve performance by using BVH navigator (@esseivaju, #2492)

  • Fix GeoTests with Geant4+USolids (@esseivaju, #2493)

  • Update VecGeom2 safety values (@esseivaju, #2512)

  • Treat unsupported MSC step limit algorithm as error instead of warning (@amandalund, #2524)

  • Initialize the RNG of in-place secondaries when reseeding each track (@esseivaju, #2531)

  • Improve LocalTransporter cleanup after fatal errors (@amandalund, #2541)

  • Improve compatibility with NVCC and older compilers (@sethrj, #2546)

Documentation and testing

  • Release v0.6.0 (@sethrj, #1688)

  • Add helper for accumulating histograms (@sethrj, #1759)

  • Add zenodo citations to celeritas user manual (@sethrj, #1762)

  • Replace hand-rolled hooks with pre-commit and CI (@sethrj, #1765)

  • Refactor micro xs CDF calculation and add test (@amandalund, #1768)

  • Edit user manual and fix PDF build (@sethrj, #1782)

  • Document geometry hierarchy and move EM table (@sethrj, #1788)

  • Round all floating point numbers in test output to a few digits (@sethrj, #1758)

  • Work around a doxy/breathe rendering bug and make some notes internal (@sethrj, #1797)

  • Replace EXPECT_VEC_CLOSE with soft comparator (@sethrj, #1819)

  • Finish updating copyrights (@amandalund, #1820)

  • Update build script and user presets (@sethrj, #1845)

  • Detect and use ccache (@esseivaju, #1848)

  • Remove spurious optical error messages (@amandalund, #1881)

  • Add volume test base (@sethrj, #1880)

  • Fix failing celer-sim unit test with simple calo (@amandalund, #1927)

  • Add minimal extensible testing for Geant4 integration (@sethrj, #1925)

  • Define EXPECT_NORMAL_EQUIV helper function (@sethrj, #1944)

  • Use JSON reference for CSG tree (@sethrj, #1943)

  • Add shell detectors around lAr sphere test problem (@sethrj, #1948)

  • Add a test of UI command modification (@sethrj, #1957)

  • Fix a few testing issues (@amandalund, #1973)

  • Split corecel docs into multiple pages (@sethrj, #1994)

  • Abandon sphinx-mermaid and add celerstruct directive (@sethrj, #1988)

  • Add covfie device test (@esseivaju, #1997)

  • Add optical physics documentation (@sethrj, #2025)

  • Add JLSE env file (@elliottbiondo, #2017)

  • Finish making JLSE env script POSIX compliant (@elliottbiondo, #2028)

  • Add copyrights and consistent special name to workflow (@sethrj, #2037)

  • Add TracingSession to documentation (@sethrj, #2055)

  • Format python files (@sethrj, #2065)

  • Update OpticalCollector device test for #1984 (@LSchwiebert, #2070)

  • Update pre-commit hooks and add ruff (@sethrj, #2064)

  • Fix run manager construction in integration test base (@amandalund, #2083)

  • Define a GeoTrackInterface class for documentation and testing (@sethrj, #2069)

  • Use dot instead of mermaid (@sethrj, #2102)

  • Add ExCL MI300A environment (@sethrj, #2138)

  • Improve geometry track view testing (@sethrj, #2131)

  • Demonstrate stuck particle in ATLAS (@sethrj, #1914)

  • Add documentation and debug statements about Geant4 logger redirection (@sethrj, #2193)

  • Add optical physics AGENTS.md (@sethrj, #2205)

  • Add grid documentation and fix detail build (@sethrj, #2213)

  • Test grid deduplication (@sethrj, #2227)

  • Improve testing for field and geo view (@sethrj, #2230)

  • Improve testing for field integration edge case (@sethrj, #2248)

  • Add DUNE mock cryostat/arapuca test geometry (@sethrj, #2252)

  • Add Rayleigh and absorption mean free paths to DUNE cryostat GDML (@amandalund, #2260)

  • Improve geometry track view testing (@sethrj, #2262)

  • Fix VecGeom device test for #2263 (@amandalund, #2270)

  • Fix solids GDML to avoid ORANGE discrepancy (@sethrj, #2267)

  • Implement basic unit tests for FastSimulationIntegration (@drbenmorgan, #2299)

  • Document optical surface physics (@sethrj, #2277)

  • Add AI contribution section and update AGENTS file (@sethrj, #2315)

  • More tweaks to AGENTS file (@sethrj, #2324)

  • Prevent is_ci_build from crashing when using built-in CLHEP (@mrguilima, #2418)

  • Clarify the use of complex_intersect within background_intersect (@elliottbiondo, #2429)

  • Expand user documentation on input and standalone apps (@amandalund, #2445)

  • Add separate ‘geo’ logger to checked track view and move to core repo (@sethrj, #2491)

  • Test geometry calls of the field propagator substep loop (@esseivaju, #2503)

  • Add Claude Code skills and expand AGENTS.md (@esseivaju, #2522)

  • Move documentation closer to the associated code (@sethrj, #2538)

Minor internal changes

  • Require covfie v0.14 (@esseivaju, #1767)

  • Fail early if find-or-builtin package is missing (@sethrj, #1770)

  • Remove ValueGridBuilder s (@amandalund, #1766)

  • Add ostream support for enums (@amandalund, #1774)

  • Add missing typename and const to CartMapField (@esseivaju, #1769)

  • Apply pre-commit hooks across repository (@sethrj, #1773)

  • Rename logspace to geomspace (@sethrj, #1777)

  • Use correct types for physics grids (@amandalund, #1781)

  • Add tests and documentation for Tsai nuclear screening functions (@sethrj, #1779)

  • Adjust version compatibility for covfie (@sethrj, #1778)

  • Simplify nested join nodes (@sethrj, #1784)

  • Store hardwired model data by reference (@amandalund, #1785)

  • Organize optical directory (@amandalund, #1789)

  • Move core track initialization to CoreTrackView (@amandalund, #1794)

  • Add make_orthogonal helper function (@sethrj, #1793)

  • Move magnetic field retrieval to a helper function (@sethrj, #1798)

  • Extend auxiliary data helpers to support aux state data without params (@amandalund, #1799)

  • Keep persistent GeantGeoParams for geometry translation (@sethrj, #1796)

  • Refactor optical generation to reduce duplication (@amandalund, #1800)

  • Move optical photon generation to optical stepping loop (@amandalund, #1803)

  • Make Geant4 volume IDs consistent wrt load order (@sethrj, #1809)

  • Fix configuring against latest VecGeom with CUDA disabled (@pcanal, #1813)

  • Rename SurfaceId in preparation for volume-based surface definitions (@sethrj, #1811)

  • Rearrange generic geo test interface (@sethrj, #1818)

  • Use variant set for uniform field input (@amandalund, #1826)

  • Rename solid angle class (@sethrj, #1825)

  • Optimize cosine for turn (@sethrj, #1830)

  • Refactor solid Z slab as Truncated object (@sethrj, #1827)

  • Use start/stop instead of start/interior for azimuthal wedge (@sethrj, #1831)

  • Add surface properties to core and optical params (@amandalund, #1838)

  • Add a helper function for launching a CPU kernel with an arbitrary number of threads (@amandalund, #1842)

  • Define geometry implementation IDs (@sethrj, #1839)

  • Add generator interface and registry (@amandalund, #1849)

  • Document and improve build script (@sethrj, #1854)

  • Hotfix: revert accidental changes from #1839 (@sethrj, #1856)

  • Add volume params to core (@sethrj, #1846)

  • Add surface physics map (@sethrj, #1852)

  • Begin exposing Cherenkov/optical loop outside of the optical collector (@sethrj, #1861)

  • Refactor geometry construction to use static methods and shared pointers (@sethrj, #1864)

  • Move generators into optical namespace and refactor track generation utilities (@amandalund, #1865)

  • Add begin_run to optical launch action (@amandalund, #1868)

  • Rename LogicalFalse and LogicalTrue (@pcanal, #1872)

  • Add volume params visitor (@sethrj, #1874)

  • Refactor optical params and stepping loop for optical-only mode (@amandalund, #1875)

  • Prevent splitting during ROOT I/O to reduce file size (@amandalund, #1885)

  • Rename volumes to “implementation volumes” (@sethrj, #1884)

  • Add mapping from ImplVolumeId to VolumeId (@sethrj, #1889)

  • Work around spurious -Wmaybe-uninitialized warning with GCC (@amandalund, #1891)

  • Update VolumeSurfaceSelector and optical BoundaryAction for oriented surfaces (@hhollenb, #1876)

  • Refactor geo testing to use persistent Geant4 geometry (@sethrj, #1895)

  • Add global VolumeParams and rename geant_geo->global_geant_geo (@sethrj, #1905)

  • Allow constant values for R index (@Rashika-Gupta, #1904)

  • Add uniform JSON IO to OpaqueId (@sethrj, #1907)

  • Use canonical volumes for VecGeom (@sethrj, #1901)

  • Make surface model its own hierarchy and add default surface (@sethrj, #1909)

  • Only warn when imported particle data is larger than user-defined offload list (@stognini, #1915)

  • Use IDs for some ORANGE indexing (@sethrj, #1916)

  • Move model testing to geant geo test (@sethrj, #1923)

  • Modularize and expose physics lists and PG generator (@sethrj, #1918)

  • Impose minimum size to split leaf nodes during BIH construction (@elliottbiondo, #1930)

  • Use double-precision energy for input energy distributions (@sethrj, #1939)

  • Replace ImportParticle` with `` inp::Particle` (@amandalund, #1953)

  • Define Geant particle view (@sethrj, #1954)

  • Work around another spurious -Wmaybe-uninitialized warning with GCC (@amandalund, #1969)

  • Use inp data for more physics (@sethrj, #1976)

  • Remove weight` field from `` Secondary` (@amandalund, #1985)

  • Add CELER_ prefix to G4 material property names specific to Celeritas (@sethrj, #1986)

  • Improve some nomenclature (@sethrj, #1990)

  • Simplify perfetto integration (@sethrj, #1998)

  • Use empty MFP grids to have zero cross section for model/material (@sethrj, #2005)

  • Support unnormalized selection for a discrete PDF (@sethrj, #2009)

  • Improve warning messages during ORANGE simplification (@sethrj, #2024)

  • Only set MSVC warning when using MSVC (@pcanal, #2033)

  • Use a single generator action and distribution buffer for Cherenkov and scintillation (@amandalund, #2034)

  • Refactor traits for opaque ID, quantity, LDG (@sethrj, #2074)

  • Add UnivLevel and rename Level to VolumeLevel (@sethrj, #2063)

  • Add data() getter functions for the DeviceAllocation class (@LSchwiebert, #2078)

  • Refactor and extend optical setup and generation for standalone loop support (@amandalund, #2082)

  • Use opaque ID rather than integer for physics offset (@sethrj, #2088)

  • Silence some egregious shadowing warnings (@sethrj, #2095)

  • Upgrade CI docker image to ROCm 7.1 (@LSchwiebert, #2091)

  • Tweak optical offload settings and construction (@amandalund, #2099)

  • Use a single ActionSequence across all states (@amandalund, #2108)

  • Add customization of trivial traits to support some GPU types (@sethrj, #2114)

  • Use type aliases for vecgeom and simplify detail headers (@sethrj, #2115)

  • Move isotropic and uniform box distributions to corecel (@amandalund, #2128)

  • Fix spurious warning when loading scintillation properties and update device tests (@amandalund, #2129)

  • Rename SenseCalculator (@esseivaju, #2130)

  • Remove hidden state from VecGeom (@sethrj, #2116)

  • Reverse build order of protos (@elliottbiondo, #2109)

  • Validate and document Ranluxpp generator (@sethrj, #2132)

  • Fail on ROOT dictionary generation warning (@pcanal, #2145)

  • Move Grid input to corecel/inp (@amandalund, #2146)

  • Rename g4org::Options to orange::inp::OrangeGeoFromGeant (@sethrj, #2134)

  • Simplify CODEOWNERS (@sethrj, #2150)

  • Set up A100 environment on ExCL (@sethrj, #2147)

  • Support builds on fnal-dev-sl7 on scisoftbuild01 (@sethrj, #2153)

  • Hide known warnings and reduce verbosity related to Geant4 geometry and tracker (@sethrj, #2151)

  • Cleanup build script output (@esseivaju, #2156)

  • Simplify codeowners again (@sethrj, #2167)

  • Use local energy deposition to determine if scintillation photons should be sampled at collision site (@amandalund, #2160)

  • Use Vecgeom2 solids in CI job (@esseivaju, #2164)

  • Remove branching in CylMapField evaluation (@esseivaju, #2169)

  • Fix ExCL env script (@elliottbiondo, #2171)

  • Refactor along-step energy loss applier (@sethrj, #2173)

  • Document and add checks about tracking manager construction (@sethrj, #2183)

  • Ignore BUILTIN_X` when `` CELERITAS_USE_X` is false (@sethrj, #2186)

  • Centralize default capacity values (@amandalund, #2185)

  • Fix InitializedValue semantics (@sethrj, #2181)

  • Disable debug assertions for code coverage tests (@sethrj, #2184)

  • Add optical problem input and setup (@amandalund, #2189)

  • Hotfix: build errors in 2191 (@sethrj, #2192)

  • Fix ddceler build error due to IWYU (@sethrj, #2188)

  • Add checks for container validity to improve coverage (@sethrj, #2190)

  • Simplify along-step propagation (@sethrj, #2187)

  • Refactor logger handles (@sethrj, #2182)

  • Tweak optical problem setup (@sethrj, #2199)

  • Debug and fix CUDA RDC linking issue in heuristic geo (@sethrj, #2202)

  • Rename SDParams and move to geocel (@sethrj, #2201)

  • Rename and slightly refactor G4 track reconstruction helper (@sethrj, #2206)

  • Add track offload interface base class (@Rashika-Gupta, #2207)

  • Add JSON IO for cumulative tracking counters (@amandalund, #2220)

  • Rename old classes to ParamsDataStore , StateDataStore (@sethrj, #2228)

  • Rename min_split_size to max_leaf_size (@elliottbiondo, #2233)

  • Add User-defined literals for units (@esseivaju, #2234)

  • Use unordered containers in DeMorganSimplifier (@esseivaju, #2232)

  • Use User-defined literals (@esseivaju, #2235)

  • Refactor logic builder and related utilities (@sethrj, #2238)

  • Eliminate identity rotations from displaced solids (@sethrj, #2258)

  • Check for unimplemented optical surface properties (@sethrj, #2264)

  • Consolidate stream operators into the classes that need them (@sethrj, #2265)

  • Tweak Geant4 physics options and construction to support Celeritas optical-only LArSoft use case (@amandalund, #2271)

  • Fix template deduction bug (@elliottbiondo, #2281)

  • Improve optical physics construction consistency with G4 (@sethrj, #2289)

  • Add make_ref for collections (@sethrj, #2293)

  • Refactor geant physics process loading (@sethrj, #2290)

  • Make python required for docs/tests (@sethrj, #2296)

  • Refactor optical model data into inp::BulkOpticalPhysics (@sethrj, #2292)

  • Fix python configure errors due to #2296 (@sethrj, #2300)

  • Add truncated distribution sampler (@amandalund, #2304)

  • Reorganize surface helper functions (@sethrj, #2305)

  • Rename StreamToString to StreamUtils and move enum IO to it (@sethrj, #2311)

  • Rename ORANGE volume and view for consistency (@sethrj, #2313)

  • Use GeantParticleView and avoid deprecated GetDefinition (@sethrj, #2325)

  • Move MuPPET table to GeantPhysicsLoader (@sethrj, #2320)

  • Refactor and simplify optical bulk model input and construction (@amandalund, #2329)

  • Add Rivanna cmake presets and environment script (@hhollenb, #2331)

  • Define views for Geant4 step/track integration (@sethrj, #2209)

  • Remove celeritas includes from downstream and more IWYU (@sethrj, #2340)

  • Use std::size_t for Array (@sethrj, #2341)

  • Make operators inline friends to improve template matching (@sethrj, #2347)

  • Add a helper for sampling polarization orthogonal to direction (@amandalund, #2350)

  • Adjust and document optical surface traversal (@sethrj, #2345)

  • Disentangle array/span includes (@sethrj, #2353)

  • Refactor collection traits and return types (@sethrj, #2351)

  • Add Constant and integral udl (@esseivaju, #2358)

  • Use Constant udl (@esseivaju, #2356)

  • Use real_type UDL (@esseivaju, #2360)

  • Use size_type UDL (@esseivaju, #2361)

  • Test volume intersection count in BIH (@sethrj, #2362)

  • Make NVTX range names consistent across kernels and apps (@sethrj, #2364)

  • Improve rejection sampler (@sethrj, #2372)

  • Tighten bboxes and improve edge traversal (@elliottbiondo, #2375)

  • Fix IWYU errors and use std::{whatever}_t (@sethrj, #2382)

  • Separate optical distribution loading from transport timing (@amandalund, #2394)

  • Fix BIH internal types and improve BIH output (@sethrj, #2393)

  • Define BIH node view to make data layout changes easier to test (@sethrj, #2398)

  • Allow G4 geo to keep persistent volume params (@sethrj, #2396)

  • Refactor bbox to allow performance testing of transpose storage (@sethrj, #2400)

  • Infrastructure: update pre-commit and clang-format, use SOURCE_DATE_EPOCH (@sethrj, #2401)

  • Add additional validation and testing to Cherenkov offload and array utils (@sethrj, #2407)

  • Remove unused bounding_plane_pos and update BIH dot graph script (@elliottbiondo, #2410)

  • BIH -> BVH rename (@elliottbiondo, #2411)

  • Update actions (@sethrj, #2420)

  • Reduce short-circuiting in intersect_segment (@elliottbiondo, #2422)

  • Add ldg function to Range (@sethrj, #2426)

  • Resolve inp::Control defaults in problem setup and tweak default capacity values (@amandalund, #2438)

  • Update clang-format (@sethrj, #2441)

  • Update clang-format again to fix vscode (@sethrj, #2449)

  • Use JSONL for contributor/collaborator list (@sethrj, #2454)

  • Use new spack environment on ExCL and support AlmaLinux9 (@sethrj, #2440)

  • Work around GCC 8.5 compiler error (@tghaddar, #2462)

  • Work around GCC 8.5 compiler bug (@tghaddar, #2463)

  • Generalize Poisson distribution to allow zeros (@sethrj, #2408)

  • Fix missing include path for MPI (@sethrj, #2467)

  • Add ‘prettier’ pre-commit hook for JSON, YAML (@sethrj, #2472)

  • Add track and step fields to optical detector hits (@Rashika-Gupta, #2444)

  • Fix VecGeom 2.2-dev build (@esseivaju, #2481)

  • Fix VecGeom 2.2-dev CUDA build (@esseivaju, #2484)

  • Improve CI and enable C++23 (@sethrj, #2478)

  • Add pre-advance to RayleighInteractor (@davidsgr, #2469)

  • Add env script for secretariat (@sethrj, #2494)

  • Move checked geo track view to main code and add additional assertions (@sethrj, #2498)

  • Support basic Claude workflow (@esseivaju, #2504)

  • Disable ROOT from clang-tidy build and when not requested (@sethrj, #2513)

  • Use VecGeom 2.1 by default in CI (@esseivaju, #2509)

  • Support clang-tidy for generated source files (@pcanal, #2511)

  • Clear VecGeom last exited volume in SolidsNavigator (@esseivaju, #2515)

  • Skip CUDA files without compilation commands in clang-tidy CI (@pcanal, #2517)

  • Simplify agent instructions (@sethrj, #2519)

  • Simplify presets and fix building against Geant4 build directory (@sethrj, #2516)

  • Continue-on-error for tidy (@sethrj, #2521)

  • Warn and skip sources without compile database entries on tidy-v2 (@pcanal, #2523)

  • Add a container image for updating Spack buildcache (@esseivaju, #2510)

  • Add debugging output and use std::clog consistently (@sethrj, #2530)

  • Exclude nvcc commands from clang-tidy dependency scanning (@pcanal, #2529)

  • Print canonical vecgeom and celeritas versions in nightly runs (@sethrj, #2539)

  • Extract reusable thread-local processor slots from GeantSd (@esseivaju, #2532)

  • Use InitializedValue to simplify ORANGE implementation code (@sethrj, #2537)

  • More debugging for logger failure (@sethrj, #2540)

  • Clean up asynchronous stepping algorithm code (@sethrj, #2542)

  • Improve package config output (@sethrj, #2544)

  • Move counter snapshots to CoreState and clarify parts of async stepping (@amandalund, #2548)

  • Add FindX.cmake generator and modernize celeritas-gen python usage (@sethrj, #2545)

Deprecation and removal

  • Remove combined bremsstrahlung model (@amandalund, #1786)

  • Do not set -Wall -Wextra -pedantic by default (@sethrj, #2098)

  • Remove temporary sense storage (@esseivaju, #2127)

  • Remove SimpleOffload and other deprecations (@sethrj, #2168)

  • Remove use of G4Backtrace (@sethrj, #2176)

  • Delete unused run input conversion code (@sethrj, #2178)

  • Remove polyprism (@sethrj, #2194)

  • Remove infinite-distance boundary search (@sethrj, #2263)

  • Begin refactor of optical “IO” to model-specific inp (@sethrj, #2288)

  • Remove bitset (@sethrj, #2342)

  • Remove UDLs (@esseivaju, #2357)

  • Removed scoped mem and scoped time log (@sethrj, #2388)

  • Remove infinite find-next-step (@sethrj, #2392)

  • Reduce app output (@sethrj, #2395)

  • Remove vecgeom surface support (@sethrj, #2403)

  • Remove support for pre-release VecGeom 2 (@sethrj, #2501)

  • Store native VecGeom navigation state in VecGeom track state (@esseivaju, #2502)

  • Remove deprecations for 0.7 and add ORANGE track compatibility methods (@sethrj, #2526)

  • Require VecGeom 2.2.0 in release series 2 (@esseivaju, #2552)

Reviewers

  • Seth R. Johnson (@sethrj): 280

  • Amanda Lund (@amandalund): 124

  • Philippe Canal (@pcanal): 60

  • Elliott Biondo (@elliottbiondo): 60

  • Julien Esseiva (@esseivaju): 59

  • Stefano Tognini (@stognini): 23

  • Hayden Hollenbeck (@hhollenb): 23

  • Guilherme Lima (@mrguilima): 18

  • Rashika Gupta (@Rashika-Gupta): 9

  • Soon Yung Jun (@whokion): 5

  • Sakib Rahman (@rahmans1): 4

  • Loren Schwiebert (@LSchwiebert): 4

  • Ben Morgan (@drbenmorgan): 2

  • Lance Bullerwell (@lebuller): 1

  • Greg Davidson (@davidsgr): 1

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