Releases: celeritas-project/celeritas
Version 0.5.0
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)...
Version 0.4.4
Version 0.4.4 is a bugfix and minor feature update to Celeritas.
- Correctly sets track weight when integrating with Geant4 SDs
- Fix ARM build to support Grace Hopper architectures
- Add a
CELER_DEVICE_ASYNC
environment variable to fix ROCm 5.7 multithread hang - Improve multi-universe support for ORANGE
New features
- Support safety and reentrant boundaries for multi-universe ORANGE (@elliottbiondo, #1140)
Reviewers: @sethrj (1)
Bug fixes
- Fix ORANGE JSON reading and tests (@sethrj, #1164)
- Set SD track weight and warn if offload weight is not unity (@sethrj, #1270)
- Set step point weights in addition to track weight (@drbenmorgan, #1281)
- Add environment variable to disable broken HIP asynchronous allocation (@sethrj, #1318)
- Fix safety calculation at center of sphere/cyl (@sethrj, #1166)
Reviewers: @elliottbiondo (2), @drbenmorgan (1), @sethrj (1), @esseivaju (1)
Documentation improvements
- Fix Spack CI (@sethrj, #1241)
- Hotfix: work around ROCm failures due to Node20 incompatibility (@sethrj, #1305)
- Fix aarch64 compilation and add Grace Hopper preset (@ptheywood, #1277)
Reviewers: @amandalund (1), @sethrj (1)
Full Changelog: v0.4.3...v0.4.4
Version 0.4.3
Released 2024/05/01
Version 0.4.3 is a bugfix and minor feature update to Celeritas.
- Adds diagnostic output for
celer-sim
even when not recording all steps - Fixes a sampling error for keV electron ionization
- Builds with ROCm 5.7.1
- Builds with Geant4 10.5–10.7, 11.1.0
New features
- Add JSON test comparator to improve testing reliability (@sethrj, #1115)
- Add spack-based workflow to add all supported Geant4 versions to CI (@sethrj, #1149)
- Add always-on basic diagnostics to celer-sim (@amandalund, #1214)
Reviewers: @amandalund (1), @drbenmorgan (1), @sethrj (1)
Bug fixes
- Fix Moller-Bhahba energy distribution (@amandalund, #1138)
- Fix Geant4 build from 10.5–10.7 and example build for 11.1 onward (@sethrj, #1152)
- Fix missing Werror in build-fast workflow (@sethrj, #1141)
- Fix build error with [email protected] (@amandalund, #1199)
Reviewers: @sethrj (2), @whokion (1), @drbenmorgan (1), @amandalund (1)
Documentation improvements
Reviewers: @esseivaju (1)
Full Changelog: v0.4.2...v0.4.3
Version 0.4.2
Version 0.4.2 is a bugfix and minor feature update to Celeritas.
Key enhancements compared to version 0.4.1 are:
- Full reproducibility of results in Geant4 multithreaded mode
- A new
CELER_KILL_OFFLOAD
environment variable that immediately kills EM tracks to help estimate a maximum offloading speedup - Support for Geant4-VecGeom conversion of parameterized volumes
- Support for Geant4 11.2
Important bug fixes:
- GCC 14 compatibility
- Support for ROOT-exported GDML booleans
New features
- Warn and set default threads when OpenMP and Geant4 MT might collide (@sethrj, #1056)
- Add environment variable to kill Celeritas-supported tracks in Geant4 (@amandalund, #1060)
- Support Geant4-VecGeom conversion of parameterized volumes (@sethrj, #1071)
- Save action times on multi-stream CPU celer-sim (@sethrj, #1065)
- Automatically calculate number of events in apps (@amandalund, #1072)
- Add option to use CLHEP and SI unit systems instead of Gaussian CGS (@sethrj, #1076)
Reviewers: @amandalund (4), @sethrj (2), @esseivaju (1), @sawenzel (1)
Bug fixes
- Fix celer-g4 primary generator MT reproducibility (@amandalund, #1057)
- Insert SortTrackAction when sorting by particle type (@esseivaju, #1059)
- Fix range constexpr (@sethrj, #1064)
- Ensure reproducibility when using MT Geant4 with Celeritas offloading (@amandalund, #1061)
- Fix conversion of boolean solids when the "left" solid is displaced (@sethrj, #1069)
- Use environment variables to control OpenMP behavior in
celer-sim
(@amandalund, #1073) - Add support for [email protected] (@whokion, #1075)
- Fix CMake for linking CUDA RDC for executables (@pcanal, #1102)
Reviewers: @sethrj (6), @pcanal (1), @amandalund (1)
Documentation improvements
- Include documentation as mandatory CI (@sethrj, #1053)
- Remove deprecated code from v0.4 (@sethrj, #1063)
- Add additional documentation about fields (@sethrj, #1066)
- Update copyrights for 2024 (@sethrj, #1083)
Reviewers: @pcanal (3), @amandalund (2)
Minor internal changes
- Remove extra constructor templates in device ActionLauncher (@esseivaju, #1062)
- Rename
GenericXsCalculator
(@amandalund, #1081) - Add algorithm for difference of squares and move
is_monotonic_increasing()
to utils (@amandalund, #1082) - Clang-format entire repository (@sethrj, #1084)
- Fix link errors in edge cases and restore HIP testing (@sethrj, #1042)
- Fix and avoid including algorithms header for ROOT/CLING (@sethrj, #1087)
- Fix non-sticky CMake options (@sethrj, #1098)
- Add missing include needed in GCC 14 (@hartsw, #1110)
Reviewers: @amandalund (4), @sethrj (3), @pcanal (1)
Full Changelog: v0.4.1...v0.4.2
Version 0.4.1
Released 2023/12/07
Version 0.4.1 is a bugfix and minor feature update to Celeritas, primarily to
support CMSSW integration.
Key enhancements compared to version 0.4.0 are:
- A new
G4VTrackingManager
interface to Celeritas from Geant4 - Support for using a GDML-free VecGeom installation
- Improved provenance and reporting in JSON output for apps
- The ability to use stdin/stdout to drive
celer-g4
with JSON
Important bug fixes:
GeantSimpleCalo
can now be used with Celeritas offload enabled.
New features
- Write celer-g4 input to output file or screen (@sethrj, #1034)
- Support sorting tracks by particle types (@esseivaju, #1044)
- Improve JSON I/O for celer-g4/sim apps (@sethrj, #1045)
- Support JSON via stdin for celer-g4 (@sethrj, #1048)
- Support using VecGeom without VGDML (@sethrj, #1046)
- Implement jump ahead for XORWOW RNG (@amandalund, #1049)
- Implement offload to Celeritas from Geant4 using G4VTrackingManager hook (@drbenmorgan, #1050)
Reviewers: @amandalund (3), @sethrj (3), @whokion (1)
Bug fixes
- Fix GeantSimpleCalo output when Celeritas is enabled (@sethrj, #1040)
- Uniquify ROOT file name when output is directed to stdout (@pcanal, #1051)
- Fix ROOT dictionary paths (@pcanal, #1054)
Reviewers: @sethrj (2), @amandalund (1)
Documentation improvements
- Update tests to pass with cuRAND (@amandalund, #1052)
Reviewers: @sethrj (1)
Minor internal changes
- Fix Jenkins CI build and ccache use (@sethrj, #1036)
- Update Perlmutter CMake profile and env script (@esseivaju, #1041)
- Fix Jenkins CI (@sethrj, #1038)
- Update cuda build instructions (@esseivaju, #1043)
- Refactor TrackSortUtils (@esseivaju, #1047)
Reviewers: @sethrj (3), @pcanal (2)
Full Changelog: v0.4.0...v0.4.1
Version 0.4.0
Released 2023/11/27
Version 0.4.0 is a major update to Celeritas that focuses on performance and integration with Geant4. It also contains major improvements to the ORANGE navigation engine.
This is the first version of ORANGE that supports GPU neutron transport in SCALE. It is also the first version to fully support integration into ATLAS FullSimLight and CMSSW.
Key enhancements compared to version 0.3.2 are:
- Addition of the single Coulomb scattering process and Wentzel model
- Major performance improvements when running Celeritas to accelerate multithreaded Geant4
- Major performance improvements when using ORANGE
- A new
G4VFastSimulationModel
interface to Celeritas for offloading tracks with Geant4 11.1 - Experimental support for surface-based VecGeom
- Experimental support for Windows and for single-precision arithmetic
Key changes are:
- The interface for
celer-g4
now takes JSON input and writes JSON output, as the app is to be less of an example and more of a Celeritas front end to Geant4 with support for offloading. - The hit output from
celer-g4
has been rewritten so that it can be opened in downstream applications that haveceleritas
in their library path.
New features
- Launch kernels only with active tracks using "action range" (@esseivaju, #765)
- Add utility for constructing SD "force_volumes" option (@sethrj, #825)
- Add scoped NVTX ranges for improved profiling (@esseivaju, #827)
- Add isotope data to
MaterialParams
(@stognini, #831) - Add
ScopedProfiling
to device actions (@esseivaju, #836) - Gather and set more Step/Track attributes when calling sensitive detectors (@sethrj, #839)
- Add isotope selector (@stognini, #843)
- Add a HepMC3 event writer (@sethrj, #851)
- Add option to disable Celeritas offloading in celer-g4 (@amandalund, #860)
- Add option to dump offloaded tracks as an event file (@sethrj, #854)
- Expose SDSetupOptions "enabled" flag in SetupOptionsMessenger (@drbenmorgan, #859)
- Add track step counter to celer-g4 (@amandalund, #862)
- Define arithmetic operators for Array (@sethrj, #868)
- Support [email protected] (@sethrj, #869)
- Add
__launch_bounds__
to kernels based on Executor properties (@esseivaju, #853) - Add option to use RZ magnetic field and along step action in the celer-g4 application (@whokion, #874)
- Add basic field driver option support to RZ map field (@sethrj, #880)
- Implement BIH tree (@elliottbiondo, #849)
- Implement new matrix utilities for ORANGE (@sethrj, #885)
- Implement remaining quadric surfaces (@sethrj, #867)
- Add Wentzel single Coulomb scattering model (@hhollenb, #861)
- Accelerate ORANGE track initialization with Bounding Interval Hierarchy (@elliottbiondo, #881)
- Implement GPU-compatible transformations with ORANGE (@sethrj, #872)
- Add e-/e+ single Coulomb scattering process (@hhollenb, #899)
- Add JSON input and more control options to celer-g4 (@amandalund, #890)
- Implement surface promotion in ORANGE (@sethrj, #893)
- Refactor StepLimit to SoA (@esseivaju, #901)
- Implement surface translation and transformation (@sethrj, #887)
- Add more bounding box utilities (@sethrj, #889)
- Add surface "variant" class for host processing (@sethrj, #895)
- Add ROOT-based event exporter (@stognini, #900)
- Use radix sort for ordering tracks (@esseivaju, #903)
- Implement chained transformations/translations (@sethrj, #897)
- Connect ROOT event writer to accel and reader to celer-sim (@sethrj, #904)
- Define CELER_ASSUME for simpler always-on compiler assumptions (@sethrj, #905)
- Implement surface simplification (@sethrj, #894)
- Accelerate ORANGE boundary crossing with BIH (@elliottbiondo, #909)
- Add bounding box transformation (@sethrj, #906)
- Add surface clipping helper class (@sethrj, #896)
- Add option to generate primaries without an event file in celer-g4 (@amandalund, #914)
- Automatically calculate ORANGE universe depth (@elliottbiondo, #915)
- Use par_nosync execution policy to execute thrust algorithms (@esseivaju, #908)
- Implement generic transforms in multi-universe ORANGE (@sethrj, #917)
- Implement CSG tree simplification in ORANGE (@sethrj, #923)
- Add Windows support (@sethrj, #930)
- Add soft equivalence for quadric surfaces (@sethrj, #933)
- Add pinned allocator and asynchronous memory operations (@esseivaju, #910)
- Add option to disable SD hit collection in celer-g4 (@amandalund, #943)
- Define unified tolerances class for ORANGE (@sethrj, #941)
- Add timers to celer-g4 (@amandalund, #944)
- Implement asynchronous
DeviceAllocation
(@esseivaju, #953) - Support energy loss fluctuations in uniform field along-step (@amandalund, #954)
- Add collection builder that deduplicates on insertion (@sethrj, #955)
- Improve CPU along-step performance (@amandalund, #961)
- Implement TrackerVisitor for multiply-dispatched tracker types (@elliottbiondo, #959)
- Deduplicate ORANGE geometry on insertion (@sethrj, #956)
- Implement CSG tree simplification algorithms (@sethrj, #939)
- Improve JSON conversion for bounding box edge cases (@sethrj, #962)
- Add unified memory support (@esseivaju, #965)
- Implement ScopedProfiling for HIP/ROCM (@esseivaju, #970)
- Enable tracking through rectangular arrays (@elliottbiondo, #973)
- Export ORANGE input from JSON and add full support for transforms (@sethrj, #976)
- Improve Quantity for field conversions and non-real_type use cases (@sethrj, #987)
- Adapt to the new BVH navigator from VecGeom (@mrguilima, #978)
- Implement concrete G4VFastSimulationModel for offload to Celeritas (@drbenmorgan, #992)
- Add compile-time support for single-precision Celeritas (@sethrj, #988)
- Implement LdgIterator abstraction (@esseivaju, #996)
- Use LdgIterator in Collection and Span (@esseivaju, #1000)
- Add ORANGE surface construction components (@sethrj, #1001)
- Allow
celer-g4
hit output to be opened in downstream ROOT (@stognini, #999) - Add environment variable to disable ROOT and update celer-g4 input (@sethrj, #1011)
- Refactor ParticleState and ParticleParams to SoA (@esseivaju, #1012)
- Use Celeritas error and output handling in celer-g4 app (@sethrj, #1013)
- Add support for VecGeom surface model (@mrguilima, #1016)
- Add G4SD "simple calorimeter" that outputs to JSON (@sethrj, #1014)
- Optimize data access through ORANGE visitors (@esseivaju, #1018)
- Add multithread exception support and logging to Geant4 app (@sethrj, #1026)
Reviewers: @sethrj (38), @elliottbiondo (19), @amandalund (16), @whokion (5), @stognini (2), @hhollenb (1), @drbenmorgan (1), @esseivaju (1), @pcanal (1)
Bug fixes
- Fix errors when building and loading Celeritas through CMSSW (@sethrj, #821)
- Divide initializer capacity by number of streams in celer-sim (@amandalund, #824)
- Fix build errors from Geant4@10 (@drbenmorgan, #830)
- Fix default
combined_brems
option to work with multiple-element materials (@sethrj, #837) - Fix app/demo-geo-check test failure when using MPI (@stognini, #838)
- Unify convergence criteria in field driver (@sethrj, #829)
- Fix minor issues with exceptions (@sethrj, #846)
- Fix linking errors with CUDA+VecGeom caused by #847 (@pcanal, #856)
- Fix inconsistencies in Geant4-to-VecGeom boolean conversion (@sethrj, #857)
- Fix HepMC3 reading of vertices and status codes (@sethrj, #863)
- Restore "small step updates momentum" condition (part of #875) in field propagator (@sethrj, #882)
- Fix sampling of secondary gamma energies in EPlusGGInteractor (@whokion, #888)
- Fix multi-level ORANGE direction change (@tmdelellis, #912)
- Fix unit conversion errors when reading from event file (@amandalund, #916)
- Fix Seltzer-Berger max xs for positrons (@amandalund, #922)
- Fix Geant4 step limiter when ionization is disabled (@amandalund, #920)
- Fix resetting of CUDA streams when running through accel (@sethrj, #927)
- Fix uniform field unit conversion (@amandalund, #931)
- Correctly map HepMC3 events to Geant4 events (@sethrj, #938)
- Improve and fix Geant4 volume conversion on boundaries (@sethrj, #936)
- Fix ORANGE multi-level surface crossing (@tmdelellis, #929)
- Fix ORANGE bounding box bumping to be consistent with tracking tolerances (@sethrj, #940)
- Fix Geant4 field construction in celer-g4 (@amandalund, #942)
- Fix accumulated action times in celer-sim (@amandalund, #951)
- Fix using ORANGE geometry with pointer-appended GDML (@sethrj, #960)
- Fix performance regression on HIP (@sethrj, #968)
- Fix uninitialized memory access in
TrackInitParams
(@amandalund, #974) - Run "warmup step" to hide once-off overhead from total run time (@sethrj, #985)
- Fix linking to CUDA toolkit when using VecGeom (@esseivaju, #989)
Reviewers: @sethrj (15), @amandalund (9), @esseivaju (4), @whokion (2), @mrguilima (1), @stognini (1), @tmdelellis (1)
Documentation improvements
- Document how to link loadable shared libraries with Celeritas (@drbenmorgan, #842)
- Extend geometry robustness testing (@sethrj, #858)
- Release v0.3.1 (@sethrj, #876)
- Fix density correction calculation in Seltzer-Berger test (@amandalund, #921)
- Release v0.3.2 (@sethrj, #925)
- Update roles to distinguish "core advisor" (@sethrj, #947)
- Add environment scripts for exalearn4 (@esseivaju, #971)
- Stop previous builds when new changes are pushed (@aprokop, #997)
- Fix test build with single precision and disable failing tests (@sethrj, #998)
- Add Orange Shift tracking flow control test (@tmdelellis, #1003)
- Use consistent energy intervals for model applicability and selection (@amandalund, #1015)
- Update cmake presets for Zeus *(@es...
Version 0.3.2
Released 2023/09/07
Version 0.3.2 is a bug fix release of Celeritas that addresses all
identified discrepancies between Geant4 and Celeritas EM physics processes.
It also should provide better performance when running Celeritas
through Geant4 with many threads sharing the same GPU.
Bug fixes
- Fix sampling of secondary gamma energies in EPlusGGInteractor (@whokion, #888)
- Fix unit conversion errors when reading from event file (@amandalund, #916)
- Fix Seltzer-Berger max xs for positrons (@amandalund, #922)
- Fix Geant4 step limiter when ionization is disabled (@amandalund, #920)
- Fix resetting of CUDA streams when running through accel (@sethrj, #927)
Reviewers: @sethrj (4), @mrguilima (1), @stognini (1), @amandalund (1)
Documentation improvements
- Release v0.3.1 (@sethrj, #876)
- Fix density correction calculation in Seltzer-Berger test (@amandalund, #921)
Reviewers: @amandalund (1), @sethrj (1)
Full Changelog: v0.3.1...v0.3.2
Version 0.3.1
Version 0.3.1 is a bug fix and minor feature release of Celeritas targeted at supporting
experiment frameworks. Key enhancements are:
- More track and step attributes can be set when calling back to Geant4 sensitive detectors.
- Offloaded tracks can be exported as a HepMC3 event file.
- Sensitive detectors callbacks from Celeritas can be disabled with a new macro flag.
- Linking against Geant4 10.5 is supported.
- A new diagnostic in
celer-g4
prints step distributions from Geant4 CPU execution.
Key fixes:
- Backward compatibility with Geant4 10.6 is restored.
- Having multiple MSC models defined in Geant4 prints a warning instead of aborting execution.
- Initializer capacity in
celer-sim
is now scaled to be per thread.
New features
- Launch kernels only with active tracks using "action range" (@esseivaju, #765)
- Add utility for constructing SD "force_volumes" option (@sethrj, #825)
- Add scoped NVTX ranges for improved profiling (@esseivaju, #827)
- Add isotope data to
MaterialParams
(@stognini, #831) - Add
ScopedProfiling
to device actions (@esseivaju, #836) - Gather and set more Step/Track attributes when calling sensitive detectors (@sethrj, #839)
- Add isotope selector (@stognini, #843)
- Add a HepMC3 event writer (@sethrj, #851)
- Add option to disable Celeritas offloading in celer-g4 (@amandalund, #860)
- Add option to dump offloaded tracks as an event file (@sethrj, #854)
- Expose SDSetupOptions "enabled" flag in SetupOptionsMessenger (@drbenmorgan, #859)
- Add track step counter to celer-g4 (@amandalund, #862)
- Define arithmetic operators for Array (@sethrj, #868)
- Support [email protected] (@sethrj, #869)
- Add
__launch_bounds__
to kernels based on Executor properties (@esseivaju, #853) - Add option to use RZ magnetic field and along step action in the celer-g4 application (@whokion, #874)
- Add basic field driver option support to RZ map field (@sethrj, #880)
Reviewers: @sethrj (10), @amandalund (3), @whokion (3), @hhollenb (1), @drbenmorgan (1)
Bug fixes
- Fix errors when building and loading Celeritas through CMSSW (@sethrj, #821)
- Divide initializer capacity by number of streams in celer-sim (@amandalund, #824)
- Fix build errors from Geant4@10 (@drbenmorgan, #830)
- Fix default
combined_brems
option to work with multiple-element materials (@sethrj, #837) - Fix app/demo-geo-check test failure when using MPI (@stognini, #838)
- Unify convergence criteria in field driver (@sethrj, #829)
- Fix minor issues with exceptions (@sethrj, #846)
- Fix linking errors with CUDA+VecGeom caused by #847 (@pcanal, #856)
- Fix inconsistencies in Geant4-to-VecGeom boolean conversion (@sethrj, #857)
- Fix HepMC3 reading of vertices and status codes (@sethrj, #863)
- Restore "small step updates momentum" condition (part of #875) in field propagator (@sethrj, #882)
Reviewers: @amandalund (5), @sethrj (4), @whokion (2), @esseivaju (1)
Documentation improvements
- Update CI to VecGeom 1.2.3 (@sethrj, #819)
- Document how to link loadable shared libraries with Celeritas (@drbenmorgan, #842)
- Extend geometry robustness testing (@sethrj, #858)
Reviewers: @pcanal (1), @sethrj (1), @amandalund (1)
Minor internal changes
- Add field template deduction and parameterized test (@sethrj, #820)
- Improve logger construction and add test helper class (@sethrj, #826)
- Hotfix: fix warning when building with Geant4@11 (@sethrj, #833)
- Remove variadic templating from track executor (@sethrj, #832)
- Refactor hit manager SD mapping (@sethrj, #835)
- Apply C++ core guidelines for copy/move assignment/construction (@esseivaju, #834)
- Add
screening_factor
toImportEmParameters
(@stognini, #840) - cmake-rdc: add support for MODULE library. (@pcanal, #848)
- Add some quality-of-life CMake defaults (@sethrj, #847)
- Require semicolon for statement-like CELER_X_COPY_MOVE macros (@sethrj, #855)
- Hotfix: fix duplicate HepMC3 symbols by creating a wrapper function (@sethrj, #865)
- Fix large function warnings by disabling device debug code by default (@sethrj, #866)
- Add PolyEvaluator deduction guides (@hhollenb, #871)
- Add thread-safe assertion to RootStepWriter (@stognini, #873)
- Export full Celeritas version string as well as defaulted CMake variables (@sethrj, #870)
- Reuse chord length between successive field advances (@sethrj, #875)
- Improve polynomial deduction guide (@sethrj, #878)
- Validate
KernelParamCalculator
block size using CUDA/HIP function attributes (@esseivaju, #877)
Reviewers: @sethrj (6), @amandalund (5), @drbenmorgan (3), @pcanal (2), @hhollenb (2), @esseivaju (1), @whokion (1)
Full Changelog: v0.3.0...v0.3.1
Version 0.3.0
Version 0.3.0 is a major new release of Celeritas. Key enhancements are:
- Full, efficient support for multithreading inside Geant4 apps
- Improved Geant4 integration, including support for Geant4 11.1
- Automatic in-memory conversion of Geant4 geometry to VecGeom
- New diagnostic functionality and quality-of-life improvements
- Performance improvements
Key changes:
- "Stuck" tracks are killed after a certain number of steps without an intersection
- The Urban cross section model is used by default for all energies
demo-loop
is nowceler-sim
and is installed alongside the librarydemo-geant
is nowceler-g4
and is also installed- Building with the C++17 or later is required
New features
- Add filtering to
RootStepWriter
(@stognini, #630) - Add math operators to Quantity (@sethrj, #658)
- Disable Geant4+ROOT system signal hooks (@sethrj, #656)
- ORANGE: find next step across multiple universes (@elliottbiondo, #607)
- Wrap track extender/initializer functions inside concrete Actions (@drbenmorgan, #664)
- Read EM processes from G4GammaGeneral (@sethrj, #690)
- Identify and kill looping tracks (@amandalund, #685)
- Add StreamId to allow thread-safe data access in Actions (@sethrj, #693)
- Cross universe boundaries in ORANGE (@elliottbiondo, #684)
- Import a few more EM parameters from Geant4 (@amandalund, #703)
- Add UniformAlongStepFactory for Geant4 integration (@sethrj, #702)
- Add option for ordering and shuffling track slots (@esseivaju, #701)
- Define SimpleOffload for dead-simple Geant4 integration (@sethrj, #704)
- Extend Urban MSC to high energy by default (@sethrj, #705)
- Add an option to apply cuts to all secondaries (@amandalund, #709)
- Add more output diagnostics from internal classes (@sethrj, #714)
- Add new capabilities to run CMS with sensitive detectors (@sethrj, #713)
- Add memory diagnostic (@sethrj, #716)
- Convert Geant4 geometry to VecGeom in memory (@mrguilima, #557)
- Create ORANGE RectArrayRecord objects (@elliottbiondo, #718)
- Add StreamStore for thread-safe storage of states in a params object (@sethrj, #722)
- Partition tracks by status at the start of each simulation step (@esseivaju, #717)
- Sort track slots by step limit
ActionId
(@esseivaju, #727) - Add simple calorimeter (@sethrj, #733)
- Add debugging/profiling utilities (@sethrj, #738)
- Add an along step action with a RZMapField (@whokion, #736)
- Add G4LogicalVolume* to VolumeId mapping (@mrguilima, #739)
- Add ActionDiagnostic, replacing ParticleProcessDiagnostic (@amandalund, #740)
- Replace demo loop
StepDiagnostic
with thread-safe version (@amandalund, #746) - Improve and add internal utilities before refactoring action interface (@sethrj, #742)
- Expand
GeantPhysicsOptions
to encompass all physics processes (@stognini, #744) - Output descriptive state on CPU when an offloaded track dies (@sethrj, #752)
- Use separate along-step kernel for neutral particles for 25% performance boost (@sethrj, #745)
- Extend and update SWIG wrappers (@sethrj, #767)
- Add option to throw an exception when ROOT encountered an "error" (@sethrj, #760)
- Support Geant4 11.1+ (@sethrj, #768)
- Add begin-of-run interface to initialize states and actions (@sethrj, #769)
- Support multithreaded CPU using single GPU in demo loop (@amandalund, #774)
- Support running kernels on different CUDA streams (@amandalund, #777)
- Rename demo loop/geant to celer-sim and celer-g4 (@sethrj, #779)
- Implement a Geant4 geometry tracker for comparing with VecGeom (@sethrj, #759)
- Add RectArrayTracker class (@elliottbiondo, #758)
- Rename
max_num_tracks
tonum_track_slots
and divide bynum_streams
(@sethrj, #785) - Simulate zero cross section for particles without processes (@stognini, #782)
- Improve logger interaction with Geant4 (@sethrj, #804)
- Improve stream redirection behavior and logger destination (@sethrj, #815)
- Add G4ExtrudedSolid conversion (@sethrj, #813)
- Improve performance of gathering and copying detector step data on device (@amandalund, #814)
- Extend user-facing app/environment options (@sethrj, #816)
- Support manual addition/exclusion of volumes in HitManager (@sethrj, #772)
Reviewers: @sethrj (21), @amandalund (19), @pcanal (4), @esseivaju (4), @whokion (4), @stognini (2), @drbenmorgan (1), @mrguilima (1)
Bug fixes
- Fix MSC cross section units (@sethrj, #644)
- Fix SWIG and update requirements (@sethrj, #657)
- Only capture kernel context if corresponding track is alive (@sethrj, #661)
- Fix hit mapping when using GDML geometry with pointers (@sethrj, #673)
- Fix small bugs and remove special cases in Urban MSC (@sethrj, #674)
- Fix imported micro xs when lower energy grid bound is higher than upper bound (@amandalund, #679)
- Fix unique Geant4/GDML volume names (@amandalund, #680)
- Fix Collection usage from inside .cu files (@sethrj, #688)
- Give different streams unique RNG seeds (@sethrj, #696)
- Fix a few edge cases in field propagation (@amandalund, #700)
- Fix multithreading in Geant4 and HitManager (@sethrj, #694)
- Fix SWIG and mac builds (@sethrj, #706)
- Fix energy deposition for killed looping positrons (@amandalund, #708)
- Fix minor warning with VecGeom and test failures when JSON is unavailable (@sethrj, #729)
- Use weak_ptr to fix ActionDiagnostic shared cycle (@sethrj, #748)
- Fail consistently when trying to track in unsupported volumes (@sethrj, #751)
- Fix duplicate volume warnings and missing material IDs (@sethrj, #753)
- Fix conversion of Geant4 reflected shapes (@mrguilima, #761)
- Remove next-distance caching from geometry and add limited-distance safety search (@sethrj, #776)
- Fix step limiter when losing all energy over a step (@sethrj, #780)
- Fix G4VExceptionHandler lifetime and improve exception wrapping (@sethrj, #773)
- Only use ROOT in celer-g4 when Celeritas uses Geant4 (@drbenmorgan, #798)
- Fix celer-g4 ROOT PCM load error (@pcanal, #799)
- Fix UrbanMsc safety edge case (@sethrj, #803)
- Fix build on Summit (@sethrj, #806)
- Fix along-step with uniform field on CPU when no MSC (@sethrj, #807)
- Fix assertion when field driver step has zero error (@sethrj, #808)
- Fix Bremsstrahlung process construction based on
Geant4PhysicsOptions
(@stognini, #811) - Fix some VecGeom CMS Run 3 issues (@sethrj, #797)
- Rewrite VecGeom converter to fix mapping issues with reflecting volumes (@sethrj, #812)
Reviewers: @amandalund (12), @sethrj (8), @whokion (4), @pcanal (3), @stognini (1), @drbenmorgan (1), @elliottbiondo (1), @mrguilima (1)
Documentation improvements
- Add minimal failing test for #620 (@amandalund, #655)
- Fix documentation links and update celeritas logo (@sethrj, #686)
- Fix KernelContext Exception test for cases where ThreadId != TrackSlotId (@esseivaju, #695)
- Improve documentation failure mode when sphinx is unavailable (@sethrj, #712)
- Reenable and patch up HIP tests (@sethrj, #711)
- Add documentation about deprecation (@sethrj, #723)
- Add tests for AlongStepAction with RZMapField (@whokion, #747)
- Improve documentation and action descriptions (@sethrj, #749)
- Define virtual geometry interface and improve documentation (@sethrj, #754)
- Release v0.2.2 (@sethrj, #763)
- Refactor TrackInitTest and fix when JSON is unavailable (@sethrj, #793)
- Add new vecgeom tests to emulate CMS run 3 issues (@sethrj, #800)
Reviewers: @amandalund (6), @sethrj (3), @mrguilima (1), @paulromano (1), @stognini (1)
Minor internal changes
- Remove multiple scattering from Processes (@sethrj, #631)
- Require C++17 and use a few C++17 features (@sethrj, #633)
- Auto-write ROOT objects before deleting (@stognini, #610)
- Refactor import process into multiple import models (@sethrj, #634)
- Switch from genreflex/xml to rootcling/LinkDef for demo-geant-integration (@pcanal, #636)
- Disable rootmap file for demo-geant-integration dictionary. (@pcanal, #647)
- Fix duplicate CMake presets (@sethrj, #660)
- Differentiate between local and global Volume and Surface Ids within ORANGE (@elliottbiondo, #669)
- Refactor MSC implementation and add further tests (@sethrj, #641)
- Use TrackSlotId to index into states (@sethrj, #676)
- Update CI VecGeom to 1.2.2 (@sethrj, #682)
- Loosen test tolerances for VecGeom (@sethrj, #681)
- Update the CMakePreset and env script for building on Zeus (@esseivaju, #689)
- Index tracks by
TrackSlotId
(@esseivaju, #678) - Fix HIP test failure in field propagation (@sethrj, #697)
- Use more IIFE, constexpr inline, string_view (@sethrj, #699)
- Use SoA for
SimTrackView
state data (@esseivaju, #707) - Rename OutputManager to OutputRegistry and add to CoreParams (@sethrj, #710)
- Move basic grid functionality to corecel (@elliottbiondo, #719)
- Use independent params and state arguments for actions (@sethrj, #720)
- Remove universe_types/universe_indices from OrangeInput and rename UnitIndexer (@elliottbiondo, #724)
- Add more assertions and minor fixes (@amandalund, #730)
- Move some ROOT files and refactor demo-app input (@sethrj, #728)
- Move Label to corecel/io (@sethrj, #731)
- Replace RZ field reader with JSON (@sethrj, #735)
- Refactor demo-loop into Runner class (@sethrj, #732)
- Move and rename volume-based magnetic field map classes (@whokion, #725)
- Allow geometry selection independent of VecGeom being enabled (@sethrj, #726)
- Decompose along-step GPU kernel for 10% performance boost (@sethrj, #737)
- Pass host-only classes to actions (@sethrj, #741)
- Access params/state through global rather than constant memo...
Version 0.2.2
Version 0.2.2 will be the last release in the v0.2 series and includes
a few minor bug fixes. Additional fixes on the v0.3 develop branch require
enhancements specific to the new code base, so those were not backported.
Bug fixes
- Fix hit mapping when using GDML geometry with pointers (@sethrj, #672)
- Fail fast instead of giving wrong answers for multithreading (@sethrj, #691)
- Fix a few edge cases in field propagation (@amandalund, #700)
Reviewers: @stognini (1), @amandalund (1), @sethrj (1)
Documentation improvements
Reviewers: @amandalund (1)
Minor internal changes
Reviewers: @pcanal (1)
Full Changelog: v0.2.1...v0.2.2