Skip to content

Releases: MarkWSavage/PANDA

v1.7.7 - Existing Validations Confirmed Untainted

Choose a tag to compare

@MarkWSavage MarkWSavage released this 20 Jul 08:53

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

Choose a tag to compare

@MarkWSavage MarkWSavage released this 20 Jul 08:40

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.md Section 1.4.

See README.md for details.

v1.7.5 - SRIM Stopping-Power Cross-Check

Choose a tag to compare

@MarkWSavage MarkWSavage released this 20 Jul 03:31

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.md Section 1.4.

See README.md for details.

v1.7.4 - Production-Scale Runs For All Six Heavy Ions

Choose a tag to compare

@MarkWSavage MarkWSavage released this 20 Jul 02:06

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.mac now exists for all six species, mirroring run_C12_biased.mac's pattern (15 MeV/amu, biasCrossSectionFactor 1041, logRecoilHits enabled).
  • 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

Choose a tag to compare

@MarkWSavage MarkWSavage released this 20 Jul 00:18

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/Current regenerated via PANDA_Analyze.py/PANDAEX_Analyze.py against this smaller run.

See README.md for details.

v1.7.2 - C12 Production-Scale Validation Run

Choose a tag to compare

@MarkWSavage MarkWSavage released this 20 Jul 00:13

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, logRecoilHits enabled) 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/Current regenerated via PANDA_Analyze.py/PANDAEX_Analyze.py against this run's output.

See README.md for details.

v1.7.1 - Heavy-Ion Smoke-Test Macros

Choose a tag to compare

@MarkWSavage MarkWSavage released this 19 Jul 23:33

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 existing run_<species>_unbiased.mac macros, with biasCrossSectionFactor 1000 to 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, ionInelastic correctly wrapped, biasing engaging (460-7490 confirmed interactions depending on species/event count).

See README.md for details.

v1.7.0 - Heavy-Ion Primaries

Choose a tag to compare

@MarkWSavage MarkWSavage released this 19 Jul 23:08

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/particle and 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 of GenericIon'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,...)) requires GenericIon's own process manager already built, but DetectorConstruction::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 ionInelastic wrapped 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

Choose a tag to compare

@MarkWSavage MarkWSavage released this 19 Jul 16:10

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 sensitiveXY grew. 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/extent is 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

Choose a tag to compare

@MarkWSavage MarkWSavage released this 19 Jul 12:18

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.csv artifacts 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.