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
fromCsgTree
(@sethrj, #1155)Import WLS data for optical photons (@stognini, #1165)
Add Parallelepiped shape (@mrguilima, #1161)
Add particle scintillation data to
ScintillationParams
; AddScintillationPreGenerator
(@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 toCoulombScattering
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 toParticleTrackView
(@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