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 memory (@sethrj, #743)
- Add a VecGeom+RelWithDebInfo+debug build to the CI (@amandalund, #715)
- Update CMake presets and gitignore (@esseivaju, #756)
- Use UniformGrid for RZMapField (@whokion, #755)
- Refactor primary-to-initializer as an action (@sethrj, #764)
- Consolidate Geant4 geometry conversion utilities (@sethrj, #771)
- Improve VecGeom testing (@sethrj, #770)
- Refactor track initialization kernels and initialization scalars (@sethrj, #766)
- Separate app CMakeLists and install executables (@sethrj, #775)
- Rename Launch⇄Execute (@sethrj, #781)
- Add a Launch helper functor to fully abstract device execution (@sethrj, #783)
- Use
ActionLauncher
for Moller-Bhabha, action diagnostic, and step gather action (@amandalund, #790) - Use ActionLauncher for LivermorePE, CombinedBrem, MuBremsstrahlung, RelativisticBrem (@pcanal, #789)
- Use ActionLauncher for Klein-Nishina model (@esseivaju, #787)
- Use ActionLauncher for boundary action (@esseivaju, #788)
- Use ActionLauncher for positron annihilation, Rayleigh scattering, and Seltzer-Berger models (@stognini, #786)
- Remove CelerGen and associated scripts (@sethrj, #792)
- Use ActionLauncher for along-step methods (@sethrj, #791)
- Use constrained safety distance for MSC step limit and scattering (@sethrj, #784)
- Account for zero-processes only in pre-step action (@sethrj, #795)
- Finalize launch simplification (@sethrj, #796)
- Create CUDA streams when integrating with Geant4 (@amandalund, #805)
- Fix G4 version check for
G4Step::Reset[Pre|Post]StepPoint
(@esseivaju, #810)
Reviewers: @amandalund (21), @sethrj (21), @pcanal (4), @esseivaju (4), @whokion (2), @stognini (2), @mrguilima (1)