You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The 'Ongoing physics work' section cited E26's 'residual is the sigma_exc floor'
conclusion that E28 refuted (lowering sigma_exc IMPROVED the cascade). Rewrote it:
the residual cause is re-opened (not the floor), G(H) overshoot reduced to 1.055x.
Disclosure + finding #5 note the v0.6.1 sigma_exc=0.39 follow-up; index.html
excitation row -> 0.39. Dated E6c/E7b ledger rows kept as history.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+13-16Lines changed: 13 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -108,7 +108,7 @@ All Geant4-side numbers were produced by a freshly-built **Geant4 11.4.1 / G4EML
108
108
109
109
Reference snapshot for the WebGPU side: `N = 4096` primaries at 10 keV unless otherwise stated, DNA_Opt2 physics list, 30 μm cube, **v0.6.0 full electron cascade**, shader constants `SIGMA_EXC_SCALE = 0.39`, `RECOMB_BOOST = 1.0` (**parameter-free** in that knob), `SSB_R_DAMAGE_NM = 0.29`, `SSB_R_DAMAGE_INDIRECT_NM = 1.0`, `SSB_P_INDIRECT = 0.05`.
110
110
111
-
> **The pipeline is parameter-free in `RECOMB_BOOST`, and v0.6.0 tracks the full electron cascade.**`RECOMB_BOOST` was `2.0` (a tuning scalar with no Geant4 physical basis — the H₂O⁺ refutation); E10r showed it was not load-bearing and the RECOMB→1.0 flip (v0.5.0) removed it. **Then v0.6.0 tracks the full tertiary (gen3+) electron cascade** — previously the secondary shader absorbed tertiary electrons in place — which resolves the cascade-ion deficit (ions **0.766→0.931×**, [E25]) *and* closes the long-standing chem6 1 µs chemistry gap (5-species RMS **19.7→7.6%**; H₂/H₂O₂ deficits closed), with SSB holding in PARTRAC's 2–3 band at **2.53**. The primary track is bit-exact vs Geant4 (E20). README §Numbers, the paper, and the shipped demo all report v0.6.0. The only remaining non-unity scalar is `SIGMA_EXC_SCALE = 0.39` (v0.6.1, ≈ Born), a small documented physics-data divergence, not a tuning fudge — see [GEANT4_DIVERGENCES.md](./GEANT4_DIVERGENCES.md).
111
+
> **The pipeline is parameter-free in `RECOMB_BOOST`, and v0.6.0 tracks the full electron cascade.** `RECOMB_BOOST` was `2.0` (a tuning scalar with no Geant4 physical basis — the H₂O⁺ refutation); E10r showed it was not load-bearing and the RECOMB→1.0 flip (v0.5.0) removed it. **Then v0.6.0 tracks the full tertiary (gen3+) electron cascade** — previously the secondary shader absorbed tertiary electrons in place — which resolves the cascade-ion deficit (ions **0.766→0.931×**, [E25]) *and* closes the long-standing chem6 1 µs chemistry gap (5-species RMS **19.7→7.6%**; H₂/H₂O₂ deficits closed). **v0.6.1 then lowered `SIGMA_EXC_SCALE` 0.5→0.39 (≈Born)** — the full cascade unlocked it, nudging every axis better still (cascade **0.937×**, RMS **6.8%**, SSB **2.72**, E28). The primary track is bit-exact vs Geant4 (E20). README §Numbers, the paper, and the shipped demo all report v0.6.1. The only remaining non-unity scalar is `SIGMA_EXC_SCALE = 0.39` (v0.6.1, ≈ Born), a small documented physics-data divergence, not a tuning fudge — see [GEANT4_DIVERGENCES.md](./GEANT4_DIVERGENCES.md).
112
112
113
113
**Reproducibility caveat:** fp32 `atomicAdd` reductions on the dose grid and `rad_buf` counters are not order-deterministic across GPU vendors — same WGSL on different hardware (Apple Metal vs Nvidia Vulkan vs Intel iGPU) yields **statistically equivalent results within MC noise, NOT bit-exact**. The same machine + same seed + same shader hash IS bit-exact across re-runs. Every artifact emits `env.shaderHashes.{helpers,primary,secondary,chemistry}_wgsl` (added 2026-05-12) so you can group rows by shader version when the joint-fix scales or other shader-side tunables shift the baseline.
114
114
@@ -240,7 +240,7 @@ Each is a falsifiable claim only visible because of the protocol — not from re
240
240
2.**G(e⁻aq) is non-monotonic between 1 and 3 keV at z = 126σ** (1.163 → 1.026 → 1.147 — 12.5% drop, real track-end / spur-structure physics; chem6 independently reproduces it). [E10, E10b, E10d]
241
241
3.**MFP is consistently 5-11% lower than Geant4** across all 6 energy bins (median 0.941). [E6]
242
242
4.**σ_ion is 6.1% high and σ_el is 5.7% high vs Geant4 11.4.1.** Per E6b decomposition, the MFP shortfall is ~49% from σ_ion, ~31% from σ_el, ~20% from intentional σ_exc inflation. [E6b]
243
-
5.**The cascade-ion deficit is RESOLVED in v0.6.0 by tracking the full electron cascade — and it was a clean win on every axis.** The primary track is **bit-exact** (195.4 ionisations/primary vs Geant4 195.6, by trackID in the 6.8 GB ntuple — E20). The old 23% deficit was **80% the untracked tertiary (gen3+) cascade**: our secondary shader absorbed tertiary electrons in place rather than tracking them (E21). Tracking them recovers cascade ions **0.766→0.931×***and* improves chemistry (RMS vs chem6 **19.7→7.6%**, closing the long-standing H₂/H₂O₂ gap) with SSB holding in-band — a clean win (E25). The investigation also caught a normalization bug in my own analysis (E22–E24 chased a phantom "over-recombination" that was a `n_therm` units error; corrected in E25) — verify-before-asserting rescuing a real result. [E20, E21, E25]
243
+
5.**The cascade-ion deficit is RESOLVED in v0.6.0 by tracking the full electron cascade — and it was a clean win on every axis.** The primary track is **bit-exact** (195.4 ionisations/primary vs Geant4 195.6, by trackID in the 6.8 GB ntuple — E20). The old 23% deficit was **80% the untracked tertiary (gen3+) cascade**: our secondary shader absorbed tertiary electrons in place rather than tracking them (E21). Tracking them recovers cascade ions **0.766→0.931×***and* improves chemistry (RMS vs chem6 **19.7→7.6%**, closing the long-standing H₂/H₂O₂ gap) with SSB holding in-band — a clean win (E25). **v0.6.1 then lowered σ_exc 0.5→0.39, which the full cascade unlocked: every axis improved again (cascade 0.937×, RMS 6.8%, E28).**The investigation also caught a normalization bug in my own analysis (E22–E24 chased a phantom "over-recombination" that was a `n_therm` units error; corrected in E25) — verify-before-asserting rescuing a real result. [E20, E21, E25]
244
244
6. **WebGPU tracking is ~241× faster than Geant4 11.4.1 single-thread (v0.6.0, full cascade); the honest like-for-like figure is 1.48× end-to-end.** *Update (v0.6.0):* tracking the full electron cascade roughly doubled Phase A+B (635 ms→~1.2 s, E15d), so the tracking speedup is now ~241×/~148× — **lower than the v0.5.0 455×/280×, but a fair both-full-cascade comparison** (the old figure compared our *truncated* cascade to Geant4's full one). The end-to-end 1.48× and the methodology notes below are unaffected. Two earlier corrections, the first of which I *over*-corrected once and then measured: (a) **The init confound is NOT material — measured.** E15-fair: a 16-primary init-probe runs in 3.2 s, so Geant4 process init + DNA physics-table construction is only **~2.1 s** (0.7% of the 289 s) — the 289 s is ~99% genuine event-loop. (An earlier draft of this note claimed ~160 s of serial overhead / ~200× pure-tracking from a 2-point Amdahl read of the MT-8 1.62× scaling; that estimate was **wrong and is retracted** — init is negligible, so event-loop-only the speedup is **452×**, statistically the same as 455×.) The one *real* residual asymmetry is **per-event ntuple I/O**: Geant4 writes **6.8 GB** to `dna.root` for the full run — *measured* (16→256-primary probes give 1.65 MB/primary, ~0.1 MB fixed, near-perfectly linear), and the likely cause of the poor MT-8 scaling via row-wise merge — while the WGSL 635 ms excludes its ~87 MB dump write. (A 256-primary run also lands at 19.7 s vs the model's 20.0 s, independently confirming the ~2 s init + 0.070 s/primary.) A no-ntuple Geant4 build (E15-fairer) would isolate how much wall-time the I/O adds; so 452× is a mild over-estimate of a compute-only comparison, but nowhere near as low as the retracted ~200×. (b) **Kernel fusion contributes ~2× to the pipeline, NOT 40×.** The fused phase (Phase A) is 14.4 ms = 2% of the 635 ms; Phase B is an *un-fused* 2000-dispatch wavefront (620 ms). The earlier "455× = 10× GPU × 40× fusion (multiplicative)" claim was wrong — you cannot multiply a Phase-A-only 40× through a 98%-un-fused pipeline. Fused-vs-naive on the *same GPU* is 1324 ms → 635 ms = 2.08× (E16's 40× is Phase-A-only). [E15b, E15c, E16, E15-fair]
245
245
7.**The G(OH) deficit vs Karamitros 2011 confounds two effects**: ~70% is real LET physics (chem6 reproduces the same trend); ~30% is a real WGSL-vs-chem6 implementation gap. G(H₂)/G(H₂O₂) are the biggest implementation gaps. [E10c, E10d]
246
246
8.**The chem6 1 µs gap was the untracked tertiary electron cascade — closed in v0.6.0 (E20–E25), superseding the earlier "inter-track partitioning" attribution.** E10f measured that cross-primary pooling adds ΔG(H₂)=+0.149 and read it as "96% of the 1 μs gap"; that was looking at H₂ alone. E17 later showed cross-primary pooling is a *coupled tradeoff* (it boosts H₂ but over-recombines OH/eaq — no density matches chem6), and v0.6.0 showed the real cause was the **untracked gen3+ cascade**: tracking it closes the gap browser-native (RMS 19.7→7.6%, H₂ 0.74→0.99×). The chem6 gap did **not** require the native runtime. [E10f, E17, E20, E21, E25]
@@ -254,17 +254,14 @@ v0.6.0** by tracking the full electron cascade (E20–E25), and `RECOMB_BOOST` w
254
254
removed in v0.5.0, so the project is parameter-free in that knob. Remaining open
0 commit comments