Skip to content

Version 0.3.0

Compare
Choose a tag to compare
@sethrj sethrj released this 16 Jun 11:13
· 627 commits to develop since this release
c8db3fc

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 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)