Releases: MarkWSavage/PANDA
Release list
v1.7.7 - Existing Validations Confirmed Untainted
Confirms the existing CREME-MC, McNulty/CUPID, and Hitachi validations are untainted by the heavy-ion primaries work (v1.7.0-v1.7.6).
Regression confirmation
Reran the proton baselines for all three existing validations and confirmed each still reproduces its previously-documented result:
- CREME-MC: fresh log-RMSE 0.2915 decades vs. the documented 0.292.
- McNulty/CUPID: fresh log-RMSE 0.900 decades vs. measured (documented ~0.90-0.91), confirmed-interaction counts (1,444,245 primary + 196,409 secondary-neutron) matching the archived run's (1,444,850 + 196,577) within ordinary RNG/MT-stream variation.
- Hitachi (22 MeV spot-check, representative of the full 5-geometry sweep): fresh 10M-event rerun matches the archived result to 4 significant figures (best Qcrit=50 fC, sigma_device=2.119e-06 cm² both times).
All three full 10M-event reruns completed with zero exceptions. See Documentation/PANDA_VALIDATION_SUMMARY.md Sections 1.1-1.3 for details.
See README.md for details.
v1.7.6 - I127 SRIM Gap Confirmed Stable
Confirms I127's SRIM stopping-power gap (13%, the largest of the six heavy ions checked in v1.7.5) is a real, stable result rather than a statistics or transcription artifact.
I127 statistics confirmation
- Reran I127's SRIM cross-check at 10x the events (
Macros/run_I127_srim_check_10k.mac, 10000 vs. 1000). - LET moved from 42.736 to 42.782 MeV*cm2/mg (ratio 0.874 -> 0.875) while the mean's standard error shrank from 0.123% to 0.052% of the mean -- essentially no change despite tighter statistics.
- SRIM's 48.92 MeV*cm2/mg value was also independently re-checked and confirmed unchanged.
- The 13% gap is real and stable on both sides -- ordinary Geant4-vs-SRIM stopping-power model variation, not a sampling or data-entry artifact. See
Documentation/PANDA_VALIDATION_SUMMARY.mdSection 1.4.
See README.md for details.
v1.7.5 - SRIM Stopping-Power Cross-Check
Adds an independent SRIM stopping-power cross-check for all six heavy-ion primaries, complementing the existing nuclear-reaction-focused validations (CREME-MC, McNulty/CUPID, Hitachi).
SRIM stopping-power cross-check
Macros/run_<ion>_srim_check.mac: a small (1000-event), unbiased run per ion, deliberately sized so direct ionization dominates the mean deposited energy and rare nuclear reactions stay statistically negligible.- Mean deposited energy through the standard 8 um Si sensitive volume converts to an implied LET, compared against SRIM's reported electronic stopping power for the same ion/energy/material (15 MeV/amu each):
| Ion | Energy | PANDA LET (MeV*cm2/mg) | SRIM (MeV*cm2/mg) | Ratio |
|---|---|---|---|---|
| C12 | 180 MeV | 0.884 | 0.906 | 0.976 |
| F19 | 285 MeV | 1.966 | 2.029 | 0.969 |
| Cl35 | 525 MeV | 6.606 | 6.732 | 0.981 |
| Ni58 | 870 MeV | 15.924 | 16.23 | 0.981 |
| I127 | 1905 MeV | 42.736 | 48.92 | 0.874 |
| Au197 | 2955 MeV | 74.147 | 77.90 | 0.952 |
- Five of six agree within 5%; I127 is the outlier at 13%, investigated and attributed to ordinary Geant4-vs-SRIM stopping-power model variation rather than a methodology artifact (its shorter range relative to the dead+sensitive stack was ruled out as the cause -- too small a range fraction to matter).
- Full writeup in
Documentation/PANDA_VALIDATION_SUMMARY.mdSection 1.4.
See README.md for details.
v1.7.4 - Production-Scale Runs For All Six Heavy Ions
Adds production-scale validation macros for the remaining five heavy-ion primaries, following up v1.7.2/v1.7.3's C12 run.
Production-scale runs for all six ions
Macros/run_<ion>_biased.macnow exists for all six species, mirroringrun_C12_biased.mac's pattern (15 MeV/amu,biasCrossSectionFactor 1041,logRecoilHitsenabled).- Event counts scaled down for the three heaviest species -- Ni58 (30k), I127 (5k), Au197 (5k) -- since their much higher stopping power generates far more secondary tracks per event, making F19/Cl35's 100k impractical for them.
- All six confirmed clean (0 exceptions), biasing engaging in every case:
- C12: 100,000 events
- F19: 100,000 events, 57,145 confirmed interactions
- Cl35: 100,000 events, 73,968 confirmed interactions
- Ni58: 30,000 events, 22,960 confirmed interactions
- I127: 5,000 events, 4,811 confirmed interactions
- Au197: 5,000 events, 6,444 confirmed interactions
See README.md for details.
v1.7.3 - Faster C12 Production-Scale Run
Scales the C12 production-scale validation run down to 100k events for a faster turnaround, following up v1.7.2's 1M-event run.
Faster C12 validation run
Macros/run_C12_biased.mac: reduced from 1M to 100k events (~1.3 min vs ~16 min).- Confirmed clean: 0 exceptions, biasing scaled proportionally (47,554 confirmed interactions vs. 476,261 at 10x the events).
- Cross-section and mean deposited/collected charge consistent with the 1M-event run within statistical noise.
Results/Currentregenerated viaPANDA_Analyze.py/PANDAEX_Analyze.pyagainst this smaller run.
See README.md for details.
v1.7.2 - C12 Production-Scale Validation Run
Adds a real production-scale validation run for one of the six heavy-ion primaries introduced in v1.7.0, following up v1.7.1's quick smoke tests.
C12 production-scale run
Macros/run_C12_biased.mac: 1M-event biased C12 run (15 MeV/amu,biasCrossSectionFactor 1041,logRecoilHitsenabled) through the same 10x10 um XY, 8/5 um sensitive/dead Si/SiO2 stack used elsewhere.- Confirmed clean: 0 exceptions, biasing engaging (476,261 confirmed interactions out of 353.5M proposed).
- Recoil species breakdown (129 distinct species) shows fusion-evaporation residues (P, S, Al, Mg) from carbon fusing with silicon target nuclei -- a genuinely different regime from proton-induced spallation -- plus unbiased elastic Si recoils and light secondaries (alpha, He3, deuteron, triton, gamma). Max recoil LET 29.7 MeV*cm2/mg (Ni56), above silicon's own ~14-15 ceiling, consistent with prior heavy-fragment LET findings.
Results/Currentregenerated viaPANDA_Analyze.py/PANDAEX_Analyze.pyagainst this run's output.
See README.md for details.
v1.7.1 - Heavy-Ion Smoke-Test Macros
Adds a regression macro per heavy-ion primary, following up v1.7.0's six new species (C12, F19, Cl35, Ni58, I127, Au197).
Smoke-test macros
- One macro per ion (
Macros/run_<ion>_smoke.mac), 15 MeV/amu (typical heavy-ion SEE test facility energy) through the same 10x10 um XY, 8/5 um sensitive/dead Si/SiO2 stack used by the existingrun_<species>_unbiased.macmacros, withbiasCrossSectionFactor 1000to confirm biasing actually engages. - I127/Au197 use 500 events instead of the 10000 used for the other four: their much higher stopping power generates far more secondary tracks per event, making 10000 too slow for a quick sanity check.
- All six confirmed clean: zero exceptions,
ionInelasticcorrectly wrapped, biasing engaging (460-7490 confirmed interactions depending on species/event count).
See README.md for details.
v1.7.0 - Heavy-Ion Primaries
Adds six heavy-ion primaries, extending PANDA into the direct-ionization-dominated regime of SEE testing alongside its existing proton/neutron nuclear-recoil focus.
Heavy-ion primaries
- Six new selectable species via
/sim/particleand the GUI's Particle dropdown:C12,F19,Cl35,Ni58,I127,Au197-- ground-state, most-abundant-stable-isotope per element, matching common heavy-ion SEE test cocktails. - Motivated by wanting PANDA to cover direct ionization too, not just nuclear-recoil-driven upset -- unlike SRIM (bare ion stopping power/range, no device or charge-collection model), PANDA runs these ions through its own geometry, charge-collection-efficiency, and angle-of-incidence models directly.
- Cross-section biasing (
/sim/biasCrossSectionFactor) works for all six with no new physics-list wrapping needed: a dynamically-created ion's process manager is a clone ofGenericIon's, which was already wrapped for biasing when it was first generalized beyond protons.
Non-obvious fix along the way
- A dynamically-created ion (
G4IonTable::GetIon(Z,A,...)) requiresGenericIon's own process manager already built, butDetectorConstruction::ConstructSDandField()-- where every other species' particle definition is resolved for the biasing operator -- runs before physics construction (confirmed empirically and via Geant4's own source).SEEBiasingOperator::StartRun()is the earliest point guaranteed safe (fires only after physics tables are built), so ion resolution for these six species is now deferred there instead. - Verified: all six ions run clean smoke tests with zero exceptions and the expected
ionInelasticwrapped process; biasing confirmed actually engaging (a biased C12 test gave 77 confirmed interactions/100 events vs. 0 unbiased).
See README.md and Documentation/PANDA_MASTER_DESIGN (Section 5, Cross-section biasing exception) for details.
v1.6.0 - Incident-Angle Fidelity & Validation Closure
Widens the incident-angle model's physical fidelity, fixes two real vis-pane rendering bugs found while stress-testing it, and closes out the McNulty/CUPID comparison as an accepted validation rather than an open residual gap.
Incident-angle physics
- Widened the chord-length-elongation model (
thickness / cos(theta)) to apply to the dead layer too, not just the sensitive volume. A tilted beam traverses more physical dead-layer material before reaching the sensitive volume, not just more sensitive-volume material -- leaving it un-elongated under-modeled that contribution and visually collapsed the sensitive:dead thickness ratio toward 1:1 as angle approached 90 deg. - Added a runtime warning (
IncidentAngleLateralEscape) for extreme angles where the elongated sensitive volume becomes tall and narrow enough that real multiple-Coulomb/nuclear scattering pushes primaries out its (un-widened) side before they finish traversing it, biasing deposited-energy results low. Empirically calibrated: fires at 89 deg, silent at 80 deg and below, matching measured zero-deposit-fraction data (under 1% through 45 deg, 5.7% at 89 deg, 91% at 89.9 deg).
Vis-pane fixes
- Fixed a genuine thickness-ratio distortion: the viewpoint's slight Z-tilt made the projected view skew depend on the device's own XY-to-Z aspect ratio, so the sensitive:dead thickness ratio visibly distorted as
sensitiveXYgrew. Fixed by using an exact side-on viewpoint with no tilt. - Found and removed a non-functional "fixed camera extent" mechanism from an earlier fix -- confirmed via a controlled A/B test that
/vis/scene/add/extentis a complete no-op once real geometry is drawn, so the code claiming to control zoom scale never actually did.
Validation closure
- Tested and ruled out two candidate explanations for McNulty's high-energy residual gap: widening the beam to cover the surrounding volume (made agreement slightly worse), and growing the surrounding volume to 300/500 um (flat, non-improving trend).
- Root cause: only heavy recoil fragments deposit meaningful energy, and they have very short range, so only reactions close to the sensitive volume can contribute -- a structural feature of the physics, not a fixable sampling gap.
- Reframed the McNulty/CUPID comparison verdict from "partially addressed, residual gap accepted as a known limitation" to a genuine, accepted validation, given PANDA (Geant4 cascade physics) and CUPID (liquid-drop nuclear model) are fundamentally different nuclear models -- judged by the standard used for cross-code nuclear-model comparisons elsewhere in the field.
See README.md and Documentation/PANDA_MASTER_DESIGN/PANDA_VALIDATION_SUMMARY.md for details.
v1.5.0 - Validation Complete
Closes out the validation pass across all three of PANDA's core responsibilities -- geometry, particle generation/transport, and energy/charge scoring -- against real experimental data, other simulation tools, and PANDA's own robustness across device scale. See Documentation/PANDA_VALIDATION_SUMMARY.md for the full account.
Validation
- Hitachi HM68512 proton-SEU cross-validation against real 1994 NASA GSFC accelerator data: agreement within ~2x at Qcrit ~50fC, 20-27 um³ sensitive volume, across three independent aspect ratios.
- McNulty et al. 1989 / CUPID comparison improved by adding a surrounding silicon volume and secondary-neutron biasing (log-RMSE ~1.1 → ~0.91 decades); remaining high-energy residual gap recorded as open/understood-cause.
- Fixed a comparison-methodology bug in
compare_creme_panda.py: it was comparing CREME-MC's ideal-100%-collection reference against PANDA's collected-charge (not deposited-charge) cross section. Corrected, agreement is good (log-RMSE ~0.29 decades, full-range coverage) -- the previously-reported "intermediate-charge hump" does not survive the corrected comparison and is no longer attributed to differing nuclear reaction model families.
Geometry/physics robustness
- Region-scoped production cuts auto-scaled to device geometry, fixing a real deep-submicron charge-sharing fidelity gap (up to ~32% shift at the high-charge tail for a 50 um device).
- Fixed a Geant4 navigator boundary artifact producing non-physical LET spikes at short step lengths.
- Confirmed silicon recoil LET ceiling (~14.4-14.8 MeV·cm²/mg) holds up under 10x more statistics; confirmed deep-submicron (80nm-node) scale operation with a consistent, ~10x lower LET ceiling.
- Added heavy-metal (Au, W, Pb, Ta) dead-layer materials; confirmed real neutron- and proton-induced fission-fragment recoils up to LET ~35-41, well above silicon's own ceiling, with severity clustering in pairs (Ta/W mild, Au/Pb severe) rather than scaling with atomic number.
- Tested and rejected two plausible-sounding hypotheses: a gold package-lid LET-ceiling increase, and an ~80 um surrounding-volume "shell ceiling" -- both recorded as closed negative results.
- Added approximate angle-of-incidence support (thickness/cos(theta)).
Correctness fixes
- Fixed extreme near-zero-charge
events.csvartifacts via a pair-creation-energy per-step floor. - Fixed a GUI visualization stall (G4 vis-queue backpressure) via discard+accumulate.
- Fixed a misleading biasing ratio message in
SEEBiasingOperator. - Default the GUI's Plot Metric dropdown to Deposited charge, matching the RPP-model 100%-collection convention used by CREME-MC/CUPID.
See README.md and Documentation/PANDA_MASTER_DESIGN for details.