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: https://github.com/celeritas-project/celeritas/compare/v0.3.1…v0.3.2

Version 0.3.1#

Released 2023/08/05

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 Geant4@10.5 (@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 to ImportEmParameters (@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: https://github.com/celeritas-project/celeritas/compare/v0.3.0…v0.3.1

Version 0.3.0#

Released 2023/06/15

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 now celer-sim and is installed alongside the library.

  • demo-geant is now celer-g4 and is also installed.

  • Building with the C++17 standard 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 to num_track_slots and divide by num_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)