Skip to content

v0.6.0 — full electron cascade

Choose a tag to compare

@abgnydn abgnydn released this 09 Jun 08:11
· 36 commits to main since this release

v0.6.0 — full electron cascade

The secondary shader now tracks the full electron cascade (tertiary / gen3+), instead of absorbing tertiary electrons in place. This resolves the long-standing cascade-ion deficit and is a clean win on every axis:

metric v0.5.0 v0.6.0
cascade ions @10 keV vs Geant4 0.766× 0.931×
chemistry RMS vs chem6 19.7% 7.6%
G(H₂) vs chem6 0.74× 0.99×
G(H₂O₂) vs chem6 0.69× 0.93×
SSB indirect/direct 2.32 2.53 (band 2–3)
  • The chem6 1 µs gap — the H₂/H₂O₂ deficits that stood through the entire project history — is largely closed.
  • Primary track is bit-exact vs Geant4 (195.4 ionisations/primary vs 195.6, by trackID in the 6.8 GB ntuple).
  • Validated across all 8 ESTAR energies; the browser build is bit-identical to the native runtime; energy conserved (99.9%).

How

secondary.wgsl emits tertiary electrons into sec_buf (G4DNABornAngle direction sampling, OH+H₃O⁺ products, deferred eaq); dispatch.ts grows the Phase B wavefront in chunks so they get tracked.

Honest note

The investigation included a self-caught error: a normalization bug in the analysis (run_irt invoked with the wrong n_therm) briefly made the fix look like it broke chemistry, and two experiments (E23–E24) chased a phantom before verify-before-asserting caught it (E25). The fix was always a clean win.

Full details in CHANGELOG.md.