Add optical photon offloading to DDCeler#2272
Conversation
Test summary 2 files 2 suites 0s ⏱️ Results for commit 4672791. ♻️ This comment has been updated with latest results. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #2272 +/- ##
===========================================
- Coverage 87.22% 85.69% -1.54%
===========================================
Files 1357 1322 -35
Lines 43292 41647 -1645
Branches 13212 10790 -2422
===========================================
- Hits 37761 35688 -2073
- Misses 4317 4362 +45
- Partials 1214 1597 +383 🚀 New features to boost your workflow:
|
Based on the json output, it seems like optical photon actions are triggering. But I don't seem to be detecting any of them in the output. output{"internal":{"actions":{"description":["update beginning-of-step state","limit range due to multiple scattering","limit range due to energy loss","select a discrete interaction","reject by integral cross section","interact by Moller+Bhabha ionization","interact by Seltzer-Berger bremsstrahlung","interact by relativistic bremsstrahlung","interact by Livermore photoelectric effect","interact by Compton scattering (simple Klein-Nishina)","interact by Bethe-Heitler gamma conversion","interact by Rayleigh scattering","interact by positron annihilation yielding two gammas","mark a track that failed to sample an interaction","apply along-step in a uniform field with Urban MSC","create track initializers from primaries","initialize track states","apply along-step for neutral particles","pause due to propagation misbehavior","cross a geometry boundary","kill a track and deposit its energy","create track initializers from secondaries","gather pre-step steps/hits","gather post-step steps/hits","launch the optical stepping loop","gather pre-step data for optical distributions","generate Cherenkov optical distribution data","gather pre-post-step data for scintillation optical distributions","generate scintillation optical distribution data"],"label":["pre-step","msc-range","eloss-range","physics-discrete-select","physics-integral-rejected","ioni-moller-bhabha","brems-sb","brems-rel","photoel-livermore","scat-klein-nishina","conv-bethe-heitler","scat-rayleigh","annihil-2-gamma","physics-failure","along-step-uniform-msc","extend-from-primaries","initialize-tracks","along-step-neutral","geo-propagation-limit","geo-boundary","tracking-cut","extend-from-secondaries","step-gather-pre","step-gather-post","optical-offload-launch","offload-pre-gather","cherenkov-offload","offload-pre-post-gather","scintillation-offload"]},"core-sizes":{"events":1,"initializers":245760,"processes":1,"secondaries":2097152,"streams":1,"tracks":2048},"geometry":{"bbox":[[-3000.001,-3000.001,-3000.001],[3000.001,3000.001,3000.001]],"supports_safety":true,"volumes":{"label":["AbsorberLayer_vol","DetectionLayer_vol","world_volume"]}},"material":{"_units":{"atomic_mass":"amu","binding_energy":"MeV","mean_excitation_energy":"MeV","neutron_loss_energy":"MeV","nuclear_mass":"MeV/c^2","proton_loss_energy":"MeV"},"elements":{"atomic_mass":[207.217,12.0107,1.00794,14.006800000000002,15.999399999999998,39.9477],"atomic_number":[82,6,1,7,8,18],"coulomb_correction":[0.3316240662922142,0.0023005980013017513,6.400821803338426e-05,0.0031295046687931376,0.00408470993958128,0.020436033058508798],"isotope_fractions":[[0.013999999999999999,0.24100000000000002,0.22100000000000003,0.524],[0.9893000000000001,0.010700000000000001],[0.999885,0.000115],[0.9963200000000001,0.00368],[0.99757,0.00037999999999999997,0.0020499999999999997],[0.0033650000000000004,0.0006320000000000001,0.9960030000000001]],"isotope_ids":[[0,1,2,3],[4,5],[6,7],[8,9],[10,11,12],[13,14,15]],"label":["Pb","C","H","N","O","Ar"],"mass_radiation_coeff":[0.15698030788251505,0.023420896363211263,0.015862070614076185,0.026323953890036732,0.029207177938301358,0.05115401824728355]},"isotopes":{"atomic_mass_number":[204,206,207,208,12,13,1,2,14,15,16,17,18,36,38,40],"atomic_number":[82,82,82,82,6,6,1,1,7,7,8,8,8,18,18,18],"binding_energy":[1607.50564946,1622.32397574,1629.06175388,1636.4296220200001,92.16172638,97.10803477000002,0.0,2.224565989999999,104.65859742,115.49189259,127.61930321,131.76238259,139.80775169999998,306.71671914,327.34263342,343.81034234000003],"label":["Pb204","Pb206","Pb207","Pb208","C12","C13","H1","H2","N14","N15","O16","O17","O18","Ar36","Ar38","Ar40"],"neutron_loss_energy":[8.394681140000102,8.086662140000044,6.737778140000046,7.367868140000155,18.72161213999999,4.946308390000013,0.0,0.0,10.553381450000003,10.83329517,15.66392350999999,4.143079379999989,8.045369109999996,15.255447140000001,11.838489140000036,9.869021780000026],"nuclear_mass":[189958.33878913638,191822.65115313636,192755.47872013637,193687.67619713637,11174.86338798439,12109.48242473439,938.272013,1875.613,13040.20432747565,13968.936377445652,14895.081534649964,15830.503800409962,16762.02377643996,33494.36993716652,35352.87471316652,37215.537694526516],"proton_loss_energy":[6.637494590000188,7.2536835899998096,7.487650589999703,8.003642590000027,15.956853590000009,17.533377840000014,0.0,0.0,7.550562649999989,10.207424709999998,12.127410619999992,13.781641199999981,15.941861169999967,8.506970590000037,10.242269590000035,12.528673230000095]},"materials":{"density":[0.0011999999995853058,11.349999996077683,1.0319999996433626],"electron_density":[3.607708666826273e+20,2.7048004774376616e+24,3.3644965958348474e+23],"element_frac":[[0.7829173063296049,0.21271378525116588,0.0043689084192293],[1.0],[0.475,0.5249999999999999]],"element_id":[[3,4,5],[0],[1,2]],"label":["Air","Lead","ScintPS"],"matter_state":["gas","solid","solid"],"mean_excitation_energy":[8.564366463502801e-05,0.0008229999999999989,6.474917020486446e-05],"number_density":[4.9687674770687435e+19,3.298537167606904e+22,9.968878802473623e+22],"radiation_length":[30812.004666537625,0.5612533705095863,49.813217249727295],"temperature":[293.15,293.15,293.15],"zeff":[7.260771777862689,82.0,3.3749999999999996]}},"optical-actions":{"description":["select a discrete optical interaction","interact by optical absorption","interact by optical Rayleigh","interact by optical Mie scattering","Initialize optical boundary crossing action","step through optical surface actions","Finalize optical boundary crossing action","update beginning-of-step state","move to interaction or boundary","kill a track and deposit its energy","locate vacant track states","generate Cherenkov or scintillation photons from optical distribution data"],"label":["optical-discrete-select","absorption","optical-rayleigh","optical-mie","optical-boundary-init","optical-surface-stepping","optical-boundary-post","pre-step","along-step","tracking-cut","locate-vacancies","optical-generate"]},"optical-sizes":{"generators":16384,"streams":1,"tracks":2048},"particle":{"_units":{"charge":"e","mass":"MeV/c^2"},"charge":[0.0,0.0,-1.0,1.0],"decay_constant":[0.0,0.0,0.0,0.0],"is_antiparticle":[false,true,false,true],"label":["gamma","opticalphoton","e-","e+"],"mass":[0.0,0.0,0.51099891,0.51099891],"pdg":[22,-22,11,-11]},"physics":{"models":{"label":["ioni-moller-bhabha","brems-sb","brems-rel","photoel-livermore","scat-klein-nishina","conv-bethe-heitler","scat-rayleigh","annihil-2-gamma"],"process_id":[0,1,1,2,3,4,5,6]},"options":{"fixed_step_limiter":0.0,"heavy.lowest_energy":[0.001,"MeV"],"heavy.max_step_over_range":0.2,"heavy.min_range":0.01,"light.lowest_energy":[0.001,"MeV"],"light.max_step_over_range":0.2,"light.min_range":0.1,"linear_loss_limit":0.01,"min_eprime_over_e":0.8},"processes":{"label":["Electron/positron ionization","Bremsstrahlung","Photoelectric effect","Compton scattering","Photon annihiliation","Rayleigh scattering","Positron annihiliation"]},"sizes":{"integral_xs":9,"model_groups":9,"model_ids":11,"process_groups":4,"process_ids":9,"reals":3268,"uniform_grid_ids":42,"uniform_grids":42,"uniform_tables":33,"xs_grid_ids":24,"xs_grids":24,"xs_tables":9}},"vecgeom":{"scalars":{"num_volume_levels":2,"use_surface_tracking":false,"use_vgdml":true}}},"result":{"time":{"_index":"thread","_units":"s","actions":[{}],"events":[[]],"setup":3.220143507,"total":1865.121465289}},"system":{"build":{"config":{"build_type":"debug,shared","constants":"CODATA 2018","core_geo":"VecGeom","core_rng":"xorwow","debug":[],"geant4":"global-dynamic,multithreaded,shared,gdml","gpu_architectures":"80+89","hostname":"LPO-174581","openmp":"event","real_type":"double","units":"CGS","use":["covfie","cuda","geant4","hepmc3","mpi","openmp","root","vecgeom"],"vecgeom":"index,Scalar,cuda=75","versions":{"CLHEP":"2.4.7.1","CUDA":"12.5.82","G4VG":"1.0.5","Geant4":"11.3.2","HepMC3":"3.03.00","ROOT":"6.36.02","Thrust":"1.17.2.0","VecGeom":"1.2.11","covfie":"0.14.0"}},"version":"0.7+d048aa67"},"device":{"async":true,"can_map_host_memory":true,"capability":89,"capability_major":8,"capability_minor":9,"clock_rate":1740000,"debug":false,"device_id":0,"eu_per_cu":1,"max_blocks_per_grid":2147483647,"max_blocks_per_multiprocessor":24,"max_cache_size":25165824,"max_threads_per_block":1024,"max_threads_per_cu":1536,"memory_clock_rate":8001000,"multiprocessor_count":20,"name":"NVIDIA RTX 1000 Ada Generation Laptop GPU","num_devices":1,"platform":"CUDA","regs_per_block":65536,"regs_per_multiprocessor":65536,"shared_mem_per_block":49152,"threads_per_warp":32,"total_const_mem":65536,"total_global_mem":6438846464},"environ":{"CELER_COLOR":"1","CELER_DEBUG_DEVICE":"0","CELER_DEVICE_ASYNC":"1","CELER_DISABLE":"0","CELER_DISABLE_DEVICE":"","CELER_DISABLE_PARALLEL":"","CELER_DISABLE_REDIRECT":"0","CELER_DISABLE_SIGNALS":"0","CELER_ENABLE_PROFILING":"0","CELER_KILL_OFFLOAD":"0","CELER_LOG":"debug","CELER_LOG_LOCAL":"debug","CELER_MEMPOOL_RELEASE_THRESHOLD":"","CELER_PROFILE_DEVICE":"0","CELER_STRIP_SOURCEDIR":"1","CUDA_HEAP_SIZE":"","CUDA_STACK_SIZE":"","G4LEDATA":"/opt/local/share/data/G4EMLOW8.6.1","G4VG_COMPARE_VOLUMES":"0","NO_COLOR":"","VECGEOM_VERBOSE":""},"kernels":[{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"vecgeom-get-bvh","num_regs":8,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"vecgeom-get-navindex","num_regs":8,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":24,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"rng-reseed","num_regs":33,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"extend-from-primaries","num_regs":34,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"initialize-tracks","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":2,"max_threads_per_block":256,"max_warps_per_eu":16,"name":"pre-step","num_regs":89,"occupancy":0.3333333333333333,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"offload-pre-gather","num_regs":36,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":32,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"step-gather-pre","num_regs":34,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"along-step-uniform-msc-limit-step-msc-urban","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"along-step-uniform-msc-propagate","num_regs":254,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"along-step-uniform-msc-scatter-msc-urban","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"along-step-uniform-msc-update-time","num_regs":36,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":104,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"along-step-uniform-msc-apply-eloss-fluct","num_regs":67,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"along-step-uniform-msc-update-track","num_regs":18,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"along-step-neutral","num_regs":254,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"physics-discrete-select","num_regs":66,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"cherenkov-offload","num_regs":70,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"offload-pre-post-gather","num_regs":32,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"ioni-moller-bhabha","num_regs":66,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"brems-sb","num_regs":80,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":2,"max_threads_per_block":256,"max_warps_per_eu":16,"name":"brems-rel","num_regs":92,"occupancy":0.3333333333333333,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":56,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"photoel-livermore","num_regs":80,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"scat-klein-nishina","num_regs":62,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":2,"max_threads_per_block":256,"max_warps_per_eu":16,"name":"conv-bethe-heitler","num_regs":82,"occupancy":0.3333333333333333,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":3,"max_threads_per_block":256,"max_warps_per_eu":24,"name":"scat-rayleigh","num_regs":74,"occupancy":0.5,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"annihil-2-gamma","num_regs":64,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"geo-boundary","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"tracking-cut","num_regs":24,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":32,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"step-gather-post","num_regs":34,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"gather-step-scratch","num_regs":36,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":56,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"scintillation-offload","num_regs":56,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"extend-from-secondaries-locate-alive","num_regs":29,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"extend-from-secondaries-process-secondaries","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"optical-generate","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"update-sum","num_regs":8,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":32,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"pre-step","num_regs":55,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"along-step-propagate","num_regs":254,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":32,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"along-step","num_regs":40,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":32,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"optical-discrete-select","num_regs":52,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"absorption","num_regs":10,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":48,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"optical-rayleigh","num_regs":53,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":88,"max_blocks_per_cu":4,"max_threads_per_block":256,"max_warps_per_eu":32,"name":"optical-mie","num_regs":56,"occupancy":0.6666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"optical-boundary-init","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"roughness-polished","num_regs":24,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":152,"max_blocks_per_cu":2,"max_threads_per_block":256,"max_warps_per_eu":16,"name":"interaction-dielectric","num_regs":82,"occupancy":0.3333333333333333,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":1,"max_threads_per_block":256,"max_warps_per_eu":8,"name":"optical-boundary-post","num_regs":220,"occupancy":0.16666666666666666,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256},{"const_mem":27768,"heap_size":8388608,"local_mem":0,"max_blocks_per_cu":6,"max_threads_per_block":256,"max_warps_per_eu":48,"name":"tracking-cut","num_regs":10,"occupancy":1.0,"print_buffer_size":1048576,"stack_size":1024,"threads_per_block":256}],"memory":[{"_units":"kibi","cpu_delta":203280,"cpu_hwm":857228,"gpu_delta":1129024,"gpu_usage":1129024,"label":"SharedParams.construct"},{"_units":"kibi","cpu_delta":880,"cpu_hwm":757260,"gpu_usage":1090112,"label":"GeantGeoParams.construct","parent_index":0},{"_units":"kibi","cpu_delta":880,"cpu_hwm":757260,"gpu_usage":1090112,"label":"GeantGeoParams.build_metadata","parent_index":1},{"_units":"kibi","cpu_delta":96976,"cpu_hwm":856524,"gpu_delta":38912,"gpu_usage":1129024,"label":"setup::problem","parent_index":0},{"_units":"kibi","cpu_delta":94688,"cpu_hwm":854412,"gpu_delta":38912,"gpu_usage":1129024,"label":"Converter.convert","parent_index":3},{"_units":"kibi","cpu_delta":94160,"cpu_hwm":854412,"gpu_delta":38912,"gpu_usage":1129024,"label":"VecgeomParams.construct","parent_index":4},{"_units":"kibi","cpu_hwm":854412,"gpu_usage":1129024,"label":"MaterialParams.construct","parent_index":3},{"_units":"kibi","cpu_hwm":854412,"gpu_usage":1129024,"label":"GeoMaterialParams.construct","parent_index":3},{"_units":"kibi","cpu_hwm":854588,"gpu_usage":1129024,"label":"ParticleParams.construct","parent_index":3},{"_units":"kibi","cpu_hwm":854588,"gpu_usage":1129024,"label":"CutoffParams.construct","parent_index":3},{"_units":"kibi","cpu_hwm":854764,"gpu_usage":1129024,"label":"WentzelOKVIParams.construct","parent_index":3},{"_units":"kibi","cpu_delta":352,"cpu_hwm":855468,"gpu_usage":1129024,"label":"PhysicsParams.construct","parent_index":3},{"_units":"kibi","cpu_delta":176,"cpu_hwm":855292,"gpu_usage":1129024,"label":"SeltzerBergerModel.construct","parent_index":11},{"_units":"kibi","cpu_hwm":855468,"gpu_usage":1129024,"label":"UrbanMscParams.construct","parent_index":3},{"_units":"kibi","cpu_hwm":855644,"gpu_usage":1129024,"label":"CoreParams.construct","parent_index":3},{"_units":"kibi","cpu_delta":704,"cpu_hwm":856348,"gpu_usage":1129024,"label":"save_gdml","parent_index":3},{"_units":"kibi","cpu_hwm":856524,"gpu_usage":1129024,"label":"optical::CoreParams.construct","parent_index":3}]}}
Geant4 version Name: geant4-11-03-patch-02 [MT] (25-April-2025) Geant4UI INFO +++ Geant4RunManager> Install Geant4 control directory:/ddg4/Geant4RunManager/ /home/srahman1/celeritas-dd4hep/celeritas-optical/src/corecel/sys/ScopedMpiInit.cc:57: debug: MPI initialization took 0.1486s hInelastic QGSP_BERT Thresholds: Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0debug@accel/TrackingManagerConstructor.cc:106: Activating tracking manager Birks coefficients used in run timeCerenkovPhys INFO +++ Constructing: maxNumPhotonsPerStep:10 maxBeta:10.000000 track secondaries:YES stack photons:YES track secondaries:YES
|
Move optical photon demonstration to a dedicated separate example instead. Restore Preshower.xml and steeringFile.py to their original state before optical physics was added. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…t-ordered DetectorAction could score them. Moving to user_post and scoring killed tracks closes that gap. The direction field and volume hierarchy storage are added here since they are part of the same executor rewrite.
…sses it and it's not needed by OpticalHitProcessor
…detector state buffer can be sized correctly.
…sitiveDetector::Hit(), plus the thread-local registry and factory helpers.
…tion paths so the callback reaches optical::CoreParams.
…t classes that own thread-local state.
…le gun moved to before the water volume starts
full outputjug_dev+> ubuntu@LPO-174581:~/celeritas-dd4hep/celeritas-optical$ CELER_LOG_LOCAL=debug CELER_LOG=debug example/ddceler/optical/run-scintwater.sh celeritas -N 10
warning: Celeritas_ROOT is undefined: using /home/srahman1/celeritas-dd4hep/celeritas-optical/install
Running optical demo with celeritas physics
+ exec /opt/software/linux-x86_64_v2/python-3.12.9-6hyysvqfeygm2rf2mnoo44s25nci3yse/bin/python3.12 /opt/software/linux-x86_64_v2/dd4hep-1.32.1-ncwiiuduquvvdjyj5g7rcvomhrdmjeqf/bin/ddsim --compactFile=/home/srahman1/celeritas-dd4hep/celeritas-optical/example/ddceler/optical/input/ScintWater.xml --steering=/home/srahman1/celeritas-dd4hep/celeritas-optical/example/ddceler/optical/input/steeringFile.py --outputFile=optical_demo.root -N 10
PersistencyIO INFO +++ Set Streamer to dd4hep::OpaqueDataBlock
Info in : Geometry default, Detector Geometry created
Info in : --- Maximum geometry depth set to 100
XMLLoader INFO +++ Processing XML file: file:/home/srahman1/celeritas-dd4hep/celeritas-optical/example/ddceler/optical/input/ScintWater.xml
DD4hep WARN ++ STD conditions NOT defined by client. NTP defaults taken.
Detector INFO *********** Created World volume with size: 500 500 500
Info in : Top volume is world_volume. Master volume is world_volume
Compact INFO ++ Converted subdetector:WaterBox of type DD4hep_BoxSegment [calorimeter]
Compact INFO ++ Converted field: Successfully created field TinyBz [ConstantField]
Info in : Fixing runtime shapes...
Info in : ...Nothing to fix
Info in : Counting nodes...
Info in : Voxelizing...
Info in : Building cache...
Info in : max level = 1, max placements = 1
Info in : 2 nodes/ 3 volume UID's in Detector Geometry
Info in : ----------------modeler ready----------------
Detector INFO +++ Patching names of anonymous shapes....
DDG4 INFO +++ Imported 5 global values to namespace:DDG4
Geant4Kernel OutputLevel: 2
Geant4Kernel UI: UI
Geant4Kernel NumEvents: 10
Geant4Kernel NumThreads: 0
DDG4 INFO +++ List of sensitive detectors:
DDG4 INFO +++ WaterBox type:calorimeter --> Sensitive type: Geant4CalorimeterAction
Geant4UI INFO +++ UI> Install Geant4 control directory:/ddg4/UI/
Geant4Kernel INFO ++ Registered global action UI of type dd4hep::sim::Geant4UIManager
Geant4UI INFO +++ MagFieldTrackingSetup> Install Geant4 control directory:/ddg4/MagFieldTrackingSetup/
Geant4UI INFO +++ DetectorConstructionAction> Install Geant4 control directory:/ddg4/DetectorConstructionAction/
Geant4UI INFO +++ ConstructSD> Install Geant4 control directory:/ddg4/ConstructSD/
Geant4UI INFO +++ RunAction> Install Geant4 control directory:/ddg4/RunAction/
Geant4Kernel INFO ++ Registered global action RunInit of type dd4hep::sim::Test::Geant4TestRunAction
DDSim.Helper.Random INFO Choosing random seed for you: 2078610688
DDSim.Helper.OutputConfig INFO ++++ Setting up DD4hep's ROOT Output ++++
Geant4UI INFO +++ RootOutput> Install Geant4 control directory:/ddg4/RootOutput/
Geant4UI INFO +++ EventAction> Install Geant4 control directory:/ddg4/EventAction/
DDSim INFO ++++ Adding DD4hep Particle Gun ++++
DDSim INFO Enabling the PrimaryHandler
Geant4UI INFO +++ GeneratorAction> Install Geant4 control directory:/ddg4/GeneratorAction/
Geant4UI INFO +++ Gun> Install Geant4 control directory:/ddg4/Gun/
Geant4UI INFO +++ InteractionMerger> Install Geant4 control directory:/ddg4/InteractionMerger/
Geant4UI INFO +++ PrimaryHandler> Install Geant4 control directory:/ddg4/PrimaryHandler/
Geant4UI INFO +++ TrackingAction> Install Geant4 control directory:/ddg4/TrackingAction/
Geant4UI INFO +++ SteppingAction> Install Geant4 control directory:/ddg4/SteppingAction/
Geant4UI INFO +++ ParticleHandler> Install Geant4 control directory:/ddg4/ParticleHandler/
DDSim.Helper.Filter INFO ReqFilt {'edep0', 'edep1kev'}
DDSim INFO getDetectorLists - found active detector WaterBox type: calorimeter
DDSim INFO getDetectorLists - Identified WaterBox as a calorimeter
DDSim INFO Setting up SD for WaterBox with Geant4CalorimeterAction
Geant4UI INFO +++ WaterBox> Install Geant4 control directory:/ddg4/WaterBox/
Geant4UI INFO +++ WaterBoxHandler> Install Geant4 control directory:/ddg4/WaterBoxHandler/
DDSim.Helper.Filter INFO Adding default filter 'edep0' to sensitive detector for 'WaterBox'
Geant4UI INFO +++ PhysicsList> Install Geant4 control directory:/ddg4/PhysicsList/
PhysicsList +++ Dump of physics list component(s)
PhysicsList +++ Extension name FTFP_BERT
PhysicsList +++ Transportation flag: 0
PhysicsList +++ Program decays: 0
PhysicsList +++ RangeCut: 0.700000
PhysicsList +++ Verbosity: 1
Geant4UI INFO +++ GlobalRangeCut> Install Geant4 control directory:/ddg4/GlobalRangeCut/
Geant4Kernel OutputLevel: 2
Geant4Kernel UI: UI
Geant4Kernel NumEvents: 10
Geant4Kernel NumThreads: 0
PhysicsList +++ Dump of physics list component(s)
PhysicsList +++ Extension name QGSP_BERT
PhysicsList +++ Transportation flag: 0
PhysicsList +++ Program decays: 1
PhysicsList +++ RangeCut: 0.700000
PhysicsList +++ Verbosity: 1
Geant4UI INFO +++ OpticalGammaPhys> Install Geant4 control directory:/ddg4/OpticalGammaPhys/
Geant4UI INFO +++ CerenkovPhys> Install Geant4 control directory:/ddg4/CerenkovPhys/
Geant4UI INFO +++ ScintillatorPhys> Install Geant4 control directory:/ddg4/ScintillatorPhys/
PhysicsList +++ Dump of physics list component(s)
PhysicsList +++ Extension name QGSP_BERT
PhysicsList +++ Transportation flag: 0
PhysicsList +++ Program decays: 1
PhysicsList +++ RangeCut: 0.700000
PhysicsList +++ Verbosity: 1
OpticalGammaPhys +++ ParticleConstructor: G4OpticalPhoton
G4ChordFinder: stepperDriverId: 2
FieldSetup INFO Geant4 magnetic field tracking configured.
FieldSetup INFO G4MagIntegratorStepper:ClassicalRK4 G4Mag_EqRhs:Mag_UsualEqRhs
FieldSetup INFO Epsilon:[min:0.000050 mm max:0.001000 mm]
FieldSetup INFO Delta:[chord:0.025000 1-step:0.001000 intersect:0.010000] LargestStep 10000.000000 mm
|
|
@rahmans1 that's great! 🤩 For future posts (maybe add to your AGENTS.md if you're using an assistant to post these updates) can you use this bit of git magic to reduce the vertical size of the post? (It makes it easier to find the neat plots 😉 ) |
|
@rahmans1 btw I haven't been looking at these unless you specifically ask for a review because it's not marked as ready. Let me know when you'd like me to take a look! |
Add a null check on the navigation history top volume before calling UpdateYourself. When all volume instance IDs are null or trimmed, the history has no valid top volume, and passing nullptr to G4TouchableHistory::UpdateYourself causes a segfault. Return false instead so the caller can skip the hit gracefully. Prompt: "Add a null guard in LevelTouchableUpdater::operator() to handle cases where the navigation history has no valid top volume" Assisted-by: Claude Code (claude-opus-4-6)
DD4hep sensitive detectors compute cell IDs and contribution positions from the midpoint (pre+post)/2. Previously only the post-step point was populated, so the pre-step position defaulted to the origin and the midpoint was wrong. Set both pre- and post-step points to the same position, direction, energy, material, and material-cuts-couple. This also prevents null dereferences in SDs that read material via the track (e.g. Geant4StepHandler / G4EmSaturation). Prompt: "Populate the G4Step pre-step point with the same attributes as the post-step point so DD4hep SDs that use the midpoint or read material from the track get correct values" Assisted-by: Claude Code (claude-opus-4-6)
The custom TrackingManager bypasses Geant4's standard ProcessOneTrack, so G4UserTrackingAction callbacks are never fired. DD4hep registers MC-truth bookkeeping (Geant4ParticleHandler) on those callbacks, and missing them causes an inconsistent particle record and end-of-event crashes. Manually invoke PreUserTrackingAction before the offload and PostUserTrackingAction after setting the track status to fStopAndKill, so intercepted tracks remain visible to the framework. Prompt: "Fire G4UserTrackingAction pre/post callbacks in TrackingManager::HandOverOneTrack so DD4hep ParticleHandler can maintain MC-truth bookkeeping for offloaded tracks" Assisted-by: Claude Code (claude-opus-4-6)
Add an OpticalGenerator steering property to CelerPhysics that selects between "em" (default, optical photons generated inline as EM secondaries) and "direct" (pre-existing G4 optical tracks offloaded to Celeritas). In direct mode the offload particle list is overridden to contain only G4OpticalPhoton so the tracking manager intercepts optical photon tracks. Update the ScintWater steering file to use direct mode. Prompt: "Add a steering property to select between em and direct optical generator modes in the ddceler CelerPhysics plugin, and override the offload particle list for direct mode" Assisted-by: Claude Code (claude-opus-4-6)
Add RINDEX for Air so that optical photons reaching the water/air interface are transmitted rather than totally internally reflected due to a missing refractive index in the surrounding medium. Also add tracker_region_rmax and tracker_region_zmax constants (set to zero) required by DD4hep's ParticleHandler for MC-truth link initialization in geometries that have no tracker volume. Prompt: "Add air refractive index and tracker region constants to the ScintWater geometry so optical boundaries work and DD4hep ParticleHandler does not crash" Assisted-by: Claude Code (claude-opus-4-6)
Remove OpticalGenerator="direct" and userParticleHandler override from the ScintWater steering file, restoring default EM-generation mode. Add a new steering file and run script for the optical photon gun (optgun) validation study, which fires monochromatic optical photons directly into the water box using the direct-offload generator for Celeritas-vs-Geant4 comparison. Prompt: "Add optical photon gun validation study with direct-offload steering and fix ScintWater steering to use default EM generator mode" Assisted-by: Claude Code (claude-opus-4-6)











Adds optical photon physics support to the DDCeler integration plugin, enabling Cherenkov and scintillation photon processes to be offloaded from Geant4 to Celeritas for GPU-accelerated tracking.