Series 0.5

Version 0.5.0

Released 2024/10/07

Version 0.5.0 is a major update to Celeritas featuring:

  • Numerous performance improvements

  • Automatic Geant4-to-ORANGE geometry translation

  • Single coulomb scattering process and improved MSC options

  • Rasterization using any navigation engine with celer-geo

Several major new capabilities are at an experimental, proof-of-concept level of readiness and reach prototype stage during the v0.5 series:

  • Optical photon generation and physics

  • Muon physics

  • High-energy neutron physics

A few minor features are noteworthy:

  • Improved error detection and output

  • New diagnostic output for slots and steps

  • Support for native CLHEP or SI unit systems

  • CPU profiling available through Perfetto

  • Support for saving and loading offloaded primaries via ROOT

Major infrastructure changes include:

  • Nlohmann JSON is now required (downloaded automatically if unavailable)

  • SWIG wrappers have been removed

  • More granular CMake options are available for threading model and debugging

The release includes the following changes, plus all features and bug fixes from v0.4.4.

New features

  • Add Cerenkov distribution and generator (@amandalund, #1080)

  • Add specialized “permutation” transform (@sethrj, #1077)

  • Add CSG unit and unit builder (@sethrj, #1079)

  • Define unit traits and support arbitrary RZ field map units (@sethrj, #1088)

  • Add ScintillationGenerator and related data structures (@whokion, #1086)

  • Add bounding box utilities for output and upcoming ORANGE work (@sethrj, #1092)

  • Support native CLHEP unit system (@sethrj, #1085)

  • Add bounding zone (@sethrj, #1093)

  • Support importing optical properties from Geant4 (@amandalund, #1103)

  • Reduce number of Geant4 libraries linked in G4VG and elsewhere (@sethrj, #1109)

  • Add deduplicating transform inserter (@sethrj, #1112)

  • Add Wentzel OK&VI transport cross section calculator (@amandalund, #1116)

  • Add convex surface builder (@sethrj, #1113)

  • Add Cerenkov pre-generator (@stognini, #1108)

  • Add infix string builder (@sethrj, #1121)

  • Implement convex regions (@sethrj, #1119)

  • Implement second-order convex regions (@sethrj, #1125)

  • Add shape and volume builder (@sethrj, #1126)

  • Add ORANGE, geocel, and file layout documentation (@sethrj, #1134)

  • Add transformed object construction (@sethrj, #1128)

  • Add CSG operations on objects (@sethrj, #1130)

  • Add transform simplifier (@sethrj, #1131)

  • Add JSON output for CSG objects (@sethrj, #1133)

  • Add CSG wedge and helper functions (@sethrj, #1142)

  • Add neutron elastic scattering physics (@whokion, #1120)

  • Add CSG solids (@sethrj, #1137)

  • Add a common macroscopic cross section calculator (@whokion, #1145)

  • Add “minimal” and “safety plus” Urban MSC step limit algorithms (@amandalund, #1146)

  • Import scintillation particle data (@stognini, #1151)

  • Add proto-universe and CSG Unit construction (@sethrj, #1148)

  • Add utilities for building UnitInput from CsgTree (@sethrj, #1155)

  • Import WLS data for optical photons (@stognini, #1165)

  • Add Parallelepiped shape (@mrguilima, #1161)

  • Add particle scintillation data to ScintillationParams; Add ScintillationPreGenerator (@stognini, #1153)

  • Complete ORANGE construction from CSG objects (@sethrj, #1166)

  • Add minimal version of GenTrap (Arb8) shape (@mrguilima, #1171)

  • Add sense evaluator for testing (@sethrj, #1168)

  • Add additional ObjectInterface and orangeinp helpers (@sethrj, #1174)

  • Add conversion of Geant4 transforms and basic solids to ORANGE (@sethrj, #1169)

  • Implement G4Sphere conversion (@sethrj, #1177)

  • Convert Geant4 logical and physical volumes (@sethrj, #1170)

  • Add optical generator data and update pre-generators (@amandalund, #1182)

  • Construct proto-universe hierarchy from converted volumes (@sethrj, #1179)

  • Add actions and executors for generating optical distribution data (@amandalund, #1184)

  • Complete GDML-to-ORANGE geometry converter (@sethrj, #1180)

  • Add optical collector for generating scintillation and Cerenkov distribution data (@amandalund, #1173)

  • Parse log levels from Geant4 scoped logger (@sethrj, #1189)

  • Add neutron inelastic process (@whokion, #1187)

  • Add basic raytrace components (@sethrj, #1194)

  • Add Windows/Linux no-dependency builds (@sethrj, #1196)

  • Add optical track data classes (@sethrj, #1163)

  • Add generic CPU/GPU raytracer for rasterizing (@sethrj, #1191)

  • Add ORANGE converters for G4Trap and G4GenericTrap (@mrguilima, #1213)

  • Add celer-geo app for visualizing geometry (@sethrj, #1201)

  • Add ORANGE converter for G4Trd (@mrguilima, #1218)

  • Add configure-time CELERITAS_OPENMP switch to change threading (@sethrj, #1222)

  • Make accel “auto flush” threshold configurable (@amandalund, #1231)

  • Support twisted sides for the gentrap shape (@mrguilima, #1232)

  • Improve transport of single track on CPU (@esseivaju, #1235)

  • Add option to specify maximum number of substeps in field propagator (@amandalund, #1236)

  • Add custom FTFP BERT physics list with Celeritas EM physics constructor (@amandalund, #1242)

  • Add external bounding box to generic trapezoid (@sethrj, #1244)

  • Add RootPrimaryGenerator sampler to celer-sim (@stognini, #1228)

  • Support combined single and multiple Coulomb scattering (@amandalund, #1230)

  • Add support for using the build directory as an installation (@sethrj, #1249)

  • Implement polycone (@sethrj, #1247)

  • Add polyprism (G4Polyhedra) (@sethrj, #1251)

  • Integrate Perfetto as backend for ScopedProfiling (@esseivaju, #1238)

  • Import and add nuclear binding energy to isotopes (@whokion, #1258)

  • Write converted object and CSG metadata for debugging (@sethrj, #1259)

  • Add nuclear zone data (@whokion, #1269)

  • Improve HGCal build performance by a factor of 10 using surface hashing (@sethrj, #1183)

  • Add auxiliary extensible params and state (@sethrj, #1278)

  • Check units in JSON input (@sethrj, #1283)

  • Add Wentzel macro xs calculator and fix a_sq_factor (@amandalund, #1274)

  • Implement infix evaluator (@esseivaju, #1286)

  • Differentiate “geometry” from “physics” materials in ImportData (@sethrj, #1288)

  • Add Bethe-Bloch muon ionization model (@amandalund, #1291)

  • Add new track status and support user “initialization” (@sethrj, #1294)

  • Add detailed error checking for action sequence behavior (@sethrj, #1303)

  • Add debug output for track states (@sethrj, #1304)

  • Add “tracking cut” to handle errors and kill tracks (@sethrj, #1311)

  • Add Bragg and ICRU73QO ionization models (@amandalund, #1309)

  • Detect and gracefully handle ORANGE geometry errors during tracking (@sethrj, #1316)

  • Add Regula Falsi root solver (@VHLM2001, #1324)

  • Add cascade collider (@whokion, #1326)

  • Support degenerate faces for “GenTrap” and rename to GenPrism (@sethrj, #1271)

  • Add more root finding algorithms (@VHLM2001, #1333)

  • Add color and PNG for future direct raytracing/rasterization (@sethrj, #1336)

  • Fix GenPrism surface shapes to match Geant4 (@mrguilima, #1337)

  • Add involute surface to support HFIR simulation (@VHLM2001, #1295)

  • Add optical collector to celer-sim (@stognini, #1332)

  • Add inverse helpers to generic calculator (@sethrj, #1368)

  • Improve sincospi availability and implementation (@sethrj, #1364)

  • Add oriented bounding zone class to be used for safety distance calculations (@elliottbiondo, #1362)

  • Add optical absorption and Rayleigh interactors (@hhollenb, #1317)

  • Replace SWIG with JSON (via ROOT export) for data exploration (@sethrj, #1380)

  • Optimize track vector data layout for particle types (@amandalund, #1322)

  • Add volume-to-material mapping and change import data (@sethrj, #1378)

  • Implement operation to simplify negated join on CsgTree (@esseivaju, #1289)

  • Add always-on celer-sim diagnostic to count total number of tracks (@amandalund, #1383)

  • Reduce default maximum substeps in field propagator (@amandalund, #1384)

  • Implement physics constructor for OpticalPhysics (@drbenmorgan, #1348)

  • Add skeleton optical core params and launch action (@sethrj, #1386)

  • Integrate involute surface into ORANGE construction (@VHLM2001, #1342)

  • Add separate configure option for on-device assertions (@sethrj, #1394)

  • Extend Mott coefficients to include positrons and higher Z elements (@amandalund, #1395)

  • Add action to generate optical primaries from Cerenkov distributions (@amandalund, #1399)

  • Store OBZ data during runtime (@elliottbiondo, #1402)

  • Add muon EM processes to Celeritas physics list and muon brems/ioni Process classes (@amandalund, #1411)

  • Add action for generating scintillation photons from distributions (@amandalund, #1414)

  • Add initial stepping loop to optical offload (@sethrj, #1417)

  • Import muon pair production sampling table from Geant4 (@amandalund, #1419)

  • Report and annotate test failures in CI (@sethrj, #1421)

  • Add optical core track view and launcher (@sethrj, #1424)

  • Add Bethe-Bloch model and refactor muon ionization (@amandalund, #1425)

  • Fix intermittent CI failures due to corrupt XML (@sethrj, #1431)

  • Add track_order option to celer-g4 and default to partitioning by charge on GPU (@amandalund, #1433)

  • Add slot particle diagnostic (@sethrj, #1426)

  • Separate ImportOpticalModels from ImportOpticalMaterials (@hhollenb, #1439)

  • Add optical track initialization action (@amandalund, #1438)

Reviewers: @sethrj (53), @elliottbiondo (32), @amandalund (25), @whokion (12), @stognini (8), @mrguilima (7), @pcanal (5), @esseivaju (4), @drbenmorgan (3), @hhollenb (1)

Bug fixes

  • Change propagation fatal error to be recoverable (@sethrj, #1090)

  • Fix position check after propagating (@amandalund, #1094)

  • Workaround missing G4persistency target bug in Geant4 11.2 (@drbenmorgan, #1122)

  • Fix single-precision soft equivalence for plane (@sethrj, #1139)

  • Fix prism orientation in Geant4 ORANGE solid converter (@sethrj, #1193)

  • Fix no-JSON and Windows builds (@sethrj, #1200)

  • Fix Wentzel OK&VI transport cross section (@amandalund, #1202)

  • Fix gentrap orientation (@sethrj, #1206)

  • Fix polar angle sampling and Mott factor in Wentzel distribution (@amandalund, #1212)

  • Fix minor dependency issues (@sethrj, #1219)

  • Fix trapezoid construction for negative phi and older Geant4 (@sethrj, #1227)

  • Propagate parent bounding boxes to ensure objects have finite extents (@sethrj, #1225)

  • Regularize quadric surfaces to deduplicate opposing surfaces (@sethrj, #1237)

  • Fix windows test builds (@sethrj, #1255)

  • Fix Geant4-to-ORANGE transformation conversion (@sethrj, #1257)

  • Fix CSG tree simplification needed by tilecal (@sethrj, #1256)

  • Fix trapezoid construction (@sethrj, #1265)

  • Work around union/polysolid boundaries and fix transformation of explicit daughters (@sethrj, #1264)

  • Use pre-step optical material ID in optical pre-generators (@amandalund, #1297)

  • Fix muon bremsstrahlung energy limits and sampling (@amandalund, #1319)

  • Fix downstream CMake when using CUDA and not included at top level (@esseivaju, #1323)

  • Properly clear state counters and data for reuse (@amandalund, #1367)

  • Fix initialization of geometry state when inserting multiple sets of primaries (@amandalund, #1369)

  • Clear along-step action when track is marked as errored (@amandalund, #1377)

  • Fix Geant4 setup when single Coulomb scattering is enabled (@amandalund, #1392)

  • Improve multithread GPU performance by removing subtle device sync (@amandalund, #1405)

  • Work around GCC 12.3 compiler bugs (@whokion, #1407)

  • Fix construction of single-volume Geant4 with ORANGE and activate examples (@sethrj, #1409)

  • Loosen numerically iffy test tolerance (@esseivaju, #1435)

  • Fix weak vtables causing dynamic_cast error in apple clang 16 (@sethrj, #1436)

  • Test and fix nuclear form factors (@sethrj, #1398)

Reviewers: @sethrj (14), @elliottbiondo (8), @mrguilima (5), @amandalund (2), @pcanal (2), @hhollenb (1), @whokion (1), @esseivaju (1)

Documentation improvements

  • Expand position check test and fix for other unit systems (@amandalund, #1097)

  • Prevent a PR with failed actions from being merged (@sethrj, #1096)

  • Fix unit tests when using SI (@sethrj, #1100)

  • Fix CTest names (@sethrj, #1105)

  • Disable ROCm builds because of constant failures (@sethrj, #1118)

  • Update CI images and workflow actions (@sethrj, #1136)

  • Fix warning about missing low-energy cross sections (@amandalund, #1176)

  • Set global execution timeout for automated testing on Jenkins (@dalg24, #1186)

  • Pin sphinx version to fix documentation build (@sethrj, #1188)

  • Define geometry traits (@sethrj, #1190)

  • Switch ORANGE unit tests to use GDML files (@sethrj, #1181)

  • Add test for assertion messages (@sethrj, #1198)

  • Improve gentrap documentation and fix typos (@mrguilima, #1205)

  • Improve ccache use on github workflows (@sethrj, #1243)

  • Add automatic external fetching for JSON and Googletest (@sethrj, #1253)

  • Refactor CMake test name generation to be based on path (@sethrj, #1261)

  • Add initial set of clang-tidy checks (@esseivaju, #1267)

  • Fix tests for Geant4 11.2 (@sethrj, #1276)

  • Tweak documentation in CoreState (@sethrj, #1279)

  • Update perlmutter build (@esseivaju, #1285)

  • Fix ORANGE docs and ccache-clearing cron job (@sethrj, #1284)

  • Regenerate ROOT files during CI testing (@sethrj, #1287)

  • Improve documentation for physics, RNG, stepping loop (@sethrj, #1298)

  • Fix device test failures (@amandalund, #1307)

  • Refactor muon bremsstrahlung differential cross section calculation and add documentation (@amandalund, #1320)

  • Add git pre-commit hook (@esseivaju, #1329)

  • Add CUDA build instructions (@esseivaju, #1335)

  • Add unit test function wrapper for diagnosing solver convergence (@sethrj, #1331)

  • Fix HepMC3 tests to work with 3.3.0 (@sethrj, #1340)

  • Use spack-based workflow for address sanitizer (@sethrj, #1341)

  • Automatically build and deploy github documentation (@sethrj, #1350)

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

  • Automatically add Zotero publications to project site (@sethrj, #1359)

  • Add Mermaid CSG tree output (@sethrj, #1361)

  • Add documentation for config options, improve unit docs, and use doxygen todos (@sethrj, #1360)

  • Refactor user manual (@sethrj, #1363)

  • Add separate developer doc section to user manual (@sethrj, #1365)

  • Address minor documentation, contract fixes in CelerOpticalPhysics (@drbenmorgan, #1388)

  • Add clang 18 and gcc 14 builds to CI (@sethrj, #1389)

  • Fix documentation deployment (@sethrj, #1408)

  • Hotfix: untested CUDA code in #1424 (@sethrj, #1429)

Reviewers: @amandalund (19), @sethrj (10), @pcanal (5), @esseivaju (5), @stognini (4), @elliottbiondo (1), @drbenmorgan (1)

Minor internal changes

  • Remove unused data from ImportElement/Material (@sethrj, #1089)

  • Refactor Geant4 utilities in preparation for g4vg (@sethrj, #1095)

  • Reorganize geometry wrappers into a new “geocel” directory (@sethrj, #1099)

  • Rename ORANGE construction files (@sethrj, #1106)

  • Split CMake RDC utilities from Celeritas macros (@pcanal, #1104)

  • Fix ORANGE namespaces (@sethrj, #1117)

  • Fix missing explicit instantiations in ORANGE CSB (@sethrj, #1124)

  • Add compile-time consistency check for Celeritas and Geant4 versions (@sethrj, #1123)

  • Transform refactoring (@sethrj, #1127)

  • Use correct form of enable_if for functions (@sethrj, #1135)

  • Refactor MSC params and add Wentzel VI params and data (@amandalund, #1129)

  • Rename Wentzel model to CoulombScattering and add em/params subdirectory (@amandalund, #1154)

  • Add generic grid builder and refactor builder code that uses generic grids (@sethrj, #1157)

  • Split ExplicitActionInterface to support optical data (@pcanal, #1160)

  • Fix SWIG build (@sethrj, #1159)

  • Rename scale methods in g4vg (@sethrj, #1175)

  • Tweak ORANGE construction (@sethrj, #1178)

  • Add small utilities for rasterization work (@sethrj, #1185)

  • Update CMake user preset (@esseivaju, #1195)

  • Move unit enumeration to corecel and improve assertion flexibility (@sethrj, #1197)

  • Make “output interface” streamable (@sethrj, #1203)

  • Refactor ActionSequence to be templated on Params (@esseivaju, #1209)

  • Use string view for interface labels and descriptions (@sethrj, #1210)

  • Fix library macro compatibility wrappers (@sethrj, #1215)

  • Split optical pre-generator action into separate Cerenkov and scintillation actions (@amandalund, #1217)

  • Write celer-sim results as ‘null’ when they’re disabled (@sethrj, #1223)

  • Refactor trapezoid construction (@sethrj, #1221)

  • Add generic grid inserter to simplify construction (@hhollenb, #1229)

  • Split ORANGE test into subtests (@sethrj, #1234)

  • Update single and multiple Coulomb scattering configurations in GeantPhysicsList (@amandalund, #1239)

  • Rename ConvexRegion to IntersectRegion (@sethrj, #1245)

  • Minor refactoring/niceties for upcoming polycone work (@sethrj, #1246)

  • Add gdml-to-dot and improve celer-geo (@sethrj, #1252)

  • Set correct energy limits for Coulomb scattering (@amandalund, #1266)

  • Refactor nuclear zone builder to separate numerical integration (@sethrj, #1275)

  • Improve GenTrap regularization and construction (@sethrj, #1262)

  • Refactor optical data to use extensible params/states (@sethrj, #1280)

  • Require JSON (@sethrj, #1254)

  • Store model action IDs in model class instead of in data (@amandalund, #1293)

  • Add helper functions for sampling/calculating direction in interactors (@amandalund, #1301)

  • Add final state helper for ionization interactions (@amandalund, #1306)

  • Add a helper function to copy a “collection group” back to the host (@sethrj, #1310)

  • Skip indirection array for sorted track slots (@sethrj, #1315)

  • Remove celeritas include in corecel (@esseivaju, #1328)

  • Refactor types to reduce duplication and cyclic dependencies (@sethrj, #1327)

  • Update frontier toolchain and backward compatibility (@sethrj, #1330)

  • Consolidate header naming convention (@esseivaju, #1325)

  • Reduce string duplication from assertion messages (@sethrj, #1338)

  • Add optical sub-namespace (@hhollenb, #1314)

  • Fix minor compile error/warning with nvcc+clang (@esseivaju, #1343)

  • Fix clang-tidy checks, including some use-after-move (@esseivaju, #1352)

  • Refactor rejection sampling using a helper class (@sethrj, #1354)

  • Improve use of distributions and simplify interactions (@sethrj, #1357)

  • Accept single CsgTree from stdin (@esseivaju, #1366)

  • Clang format develop with clang 18 (@sethrj, #1372)

  • Allow normal distribution to preserve spare value (@sethrj, #1371)

  • Define optical MaterialView and rename MaterialParams (@sethrj, #1370)

  • Sample cerenkov photons one at a time using rejection (@sethrj, #1373)

  • Sample scintillation photons individually (@sethrj, #1376)

  • Count number of optical primaries to be generated from distributions (@amandalund, #1379)

  • Fix warnings on updated Cray/ROCm toolchain (@sethrj, #1381)

  • Allow sim params without looping (@sethrj, #1382)

  • Rename ExplicitAction to StepAction and add templating (@sethrj, #1387)

  • Refactor primaries as aux data (@sethrj, #1393)

  • Change LocalTransporter deallocation semantics (@sethrj, #1403)

  • Refactor action sequence into action group plus extras (@sethrj, #1410)

  • Define “static” concrete action for those with unique name/description (@sethrj, #1416)

  • Improve PRINT_EXPECTED formatting for long strings and vectors (@sethrj, #1420)

  • Support aliased nodes during CsgTree simplification (@esseivaju, #1418)

  • Refactor action launcher components into kernel launcher (@sethrj, #1423)

  • Add total_energy accessor to ParticleTrackView (@amandalund, #1432)

  • Clang format develop with clang 18 (@sethrj, #1437)

  • Rename track slot enumerations (@sethrj, #1434)

  • Add a hack to override ORANGE max intersections/faces (@sethrj, #1430)

  • Add global MPI communicator and refactor some internals (@sethrj, #1428)

Reviewers: @amandalund (30), @sethrj (21), @elliottbiondo (7), @stognini (5), @esseivaju (5), @whokion (4), @mrguilima (4), @drbenmorgan (3), @pcanal (2), @tmdelellis (1)

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