検証¶
数値をどこまで信じてよいのか、そしてその根拠は何か — それを述べるページです。 検証は内側から外側へ 3 段 (Tier) に分かれます: コードが満たさなければならない厳密な 恒等式 (Tier 1)、一致しなければならない第 2 の実装 (Tier 2)、そして比較の相手となる 他の人の数値 (Tier 3) です。最初の 2 段はこのリポジトリだけで再現できます。3 段目には 手元に置いた参照が必要で、それらは再配布していません。
このページには 2 つの考え方が繰り返し出てくるので、最初に固定しておきます:
- ゲートとは、閾値を持ち、実行が通過しなければならない検査です —
selftestは 失敗すると非ゼロで終了します。生成されたチャネルがゲートに落ちるとfailuresに 記録され、リリース QC はそれを受け付けません。記録とは、閾値を設けずに測って 書き留めた数値です。このページではどちらなのかを明示します。 - 負のテストとは、検査が捕まえなければならない、わざと壊した入力のことです。 壊れた入力で落ちることを一度も示していない検査は、まだ何の証拠にもなりません。 以下の検査のいくつかは、負のテストを併記しています。
Tier 1 — 解析解の梯子¶
julia -t auto src/ionization.jl selftest # about a minute on a fast desktop; up to ~3 min cold
梯子の各段は、エンジンの一部を厳密に分かっているもの — 水素の閉形式の結果、コードが
再現しなければならない極限、丸め誤差まで成り立たなければならない恒等式 — と
突き合わせます。失敗は assertion なので、本物の失敗ではコマンドが非ゼロで終了し、
そうでなければ ALL PASS で終わります。テストには T0–T24 と T26–T27 の番号
(T25 は欠番) と英字の副テストが付きます。表の右列は、現在の実行が印字する値です。
| テスト | 検査内容 | 典型的な結果 |
|---|---|---|
| T0a | 球 Bessel 関数 \(j_l\) を SciPy の値と比較 | max rel. 2.2×10⁻¹⁴ |
| T0b | Coulomb 関数 \(F\), \(G\) を mpmath と比較 — 大きさ・比・Wronskian | max 3.9×10⁻¹⁴ |
| T0c | \(x \approx n\pi\) 近傍の Miller 規格化ガードを、プロセス内で計算した 512 ビットの BigFloat 参照 (外部データ無し) と比較 |
ガードが働く 60 ケース、max 8.1×10⁻¹⁶ |
| T1 | 水素 1s のエネルギーと動径関数 | ΔE 2.1×10⁻¹², max|Δu|/max|u| 8.3×10⁻⁸ |
| T2 | ε = 0.5, 8, 200 Ha における自由粒子連続状態の規格化と、持ってはならない短距離位相シフト | 7×10⁻⁵ … 1.5×10⁻³; max|δ_l| ≤ 6.5×10⁻³ |
| T3 | 動径多重極積分 \(R_{l\lambda}(Q)\) を閉形式の水素様の結果と比較、および純 Coulomb 場の短距離位相が消えること | rel. ≤ 1×10⁻⁴; max|sin δ_l| ≤ 2.3×10⁻⁴ |
| T4 | 連続状態波動関数の始状態に対する直交化 | 係数 ~10⁻⁶ 以下 |
| T5 | 水素 K 殻の σ をパイプライン全体で通し、Bote–Salvat と比較 | 比 0.997 |
| T6 | 点核 Dirac 固有値を厳密な Sommerfeld 公式と比較 (2s/2p½ の縮退と 2p³ᐟ²/2p½ の分裂を含む。Z = 26 と 79)、および小成分の割合を点核の virial 恒等式 ζ = −E/(2c²) と比較 | rel. < 1×10⁻⁵; ζ は 2×10⁻¹¹ … 8×10⁻¹¹ まで |
| T6b | 遮蔽場中の Dirac virial 恒等式 \(R = \varepsilon + 2c^2\zeta - \langle V + rV'\rangle = 0\) を、Fe と Au、Xα と KLI、軌道 1s, 2s, 2p½, 2p³ᐟ², 3d⁵ᐟ² について検査 — SCF の後で成り立つ恒等式なので、\(V\) の Hartree 部分と交換部分、節、\(l > 0\) を動かします。点核の T6 はこれらに一切触れません (\(V + rV' = \mathrm{d}(rV)/\mathrm{d}r\) は \(rV\) のスプラインから取るので、核の項は厳密に相殺します) | 最悪 η = 1.2×10⁻⁷ (Fe, KLI, 3d₅/₂) |
| T7 | 3j の閉形式、K 殻の還元 \(A = (2l'+1)\)、高 \(l\) でオーバーフローしないこと | 厳密 |
| T8 | スカラー相対論 (v3、--rel) 連続状態の \(c \to \infty\) 極限: 非相対論の連続状態に還元されなければなりません |
7×10⁻¹⁵ (ゲート 10⁻⁹) |
| T9 | EELS 出口: 恒等式としての \(\int \mathrm{d}\sigma/\mathrm{d}\Delta E \, \mathrm{d}\Delta E = \sigma\)、正値性、端が最大であること、上端で位相空間が閉じること、閾値より上にある平均損失 | 閉包 1.5×10⁻¹⁶ |
| T10 | 高 \(l\) の弾性位相シフト \(\delta_l\) を、同じポテンシャルから積分した Born 近似 \(\tan\delta_l \approx -2k\int V j_l^2 r^2 \mathrm{d}r\) と比較 | max|ratio − 1| = 2.8 % (Z = 26, ε = 200 eV, l = 8–14, 純静電場) |
| T11 | 水素 1s の GOS の両極限: \(Q \to 0\) では厳密な連続状態双極子強度 \(1 - \sum_n f_{1s \to np}\) (閉形式。和はテスト内で取る) と比較し、近づき方が \(O(Q^2)\) であること、大 \(Q\) では Bethe 和則 \(\int \mathrm{d}f/\mathrm{d}\Delta E \, \mathrm{d}\Delta E \to N\) | 双極子 −0.00 %、\(Q^2\) 比 4.00、和則 0.998 |
| T11b | 水素 1s の GOS 曲面全体を Bethe (1930) の閉形式と、(ε, q) の 9 × 24 格子上で比較 — T11 が検査するのは積分量 2 つなので、Bethe 尾根で高すぎ裾で低すぎる曲面でも通ってしまいます。こちらは尾根そのものを検査します | max rel. 全体で 5.2×10⁻³、尾根帯 0.8 ≤ q/q_ridge < 1.5 (23 点) で 3.2×10⁻³。ゲートは測定した収束到達下限のすぐ上に置いています |
| T12 | 厳密な水素 1s 密度の X 線散乱因子を閉形式 \([1+(K/2)^2]^{-2}\) と K = 0…32 で比較、加えて \(f_x(0) = Z\)、単調性、Mott–Bethe の裸核極限 | max rel. 3.3×10⁻¹⁴ |
| T12b | 水素 1s 密度の動径モーメントを閉形式 (\(M_0 = 1\), \(M_2 = 3\), \(M_4 = 22.5\)) と比較、\(f_e(0) = M_2/3 = 1\ a_0\)、そして 2 項展開 \(f_e = M_2/3 - K^2 M_4/60\) に対する小 \(K\) の残差が \(K^4\) で落ちること — これは \(M_4\) の存在だけでなく係数を固定します | モーメントは 10⁻¹⁴ まで厳密; K⁴ 比 16.0 |
| T12c | \(Z - f_x\) の桁落ちを経ずに低 \(K\) の \(f_e\) を与える δ 型求積: 水素 1s の閉形式の欠損量と比較、および依拠している補償和 | max rel. 5.6×10⁻¹⁶; K = 10⁻³ の \(f_e\) と展開の差 1.3×10⁻¹³ |
| T13 | Dirac SCF: \(c\) を 100 倍にすると非相対論 SCF 密度に潰れること、物理的な \(c\) ではずっと大きな差が残ること、1s 固有値が同梱の Bote–Salvat 表の K 端に乗ること | c→∞ で 2.2×10⁻⁵、物理的な c で 7.3×10⁻³; 1s/端 0.9908 → 1.00004 |
| T13b | 交換係数が二重に掛かっていないこと — slater_vx は裸の Slater 形でなければならず、α は SCF が、2/3 は終状態の場が供給します |
厳密 |
| T14 | 動径 Slater 関数 \(Y^k\): 閉形式の水素様 Hartree ポテンシャルとの比較、\(k=2\) での \(\langle r^2\rangle/r^2\) 極限、1 電子系での自己相互作用の厳密な相殺、交換ホールを規格化する 3j 和則 \(\sum_k (2k+1)c^k = 1\) | 2.3×10⁻⁷ / 1.7×10⁻⁷ / 3.3×10⁻¹⁶ / 0 |
| T15 | 配置平均の厳密交換: 2 電子 s 殻で \(-V_H/2\)、1 電子で完全相殺、閉殻 Ne で \(V_x \cdot r \to -1\)、\(E_x\) を独立な 2 通りで計算 | 2.2×10⁻¹⁶ / 1.2×10⁻³ / 3.3×10⁻¹⁶ |
| T16 | 軌道交換ポテンシャルと KLI: 1/2 の因子を固定する恒等式 \(\sum_a q_a \bar u_a = 2E_x\)、および開殻 (C 2p², Au 6s¹) でも漸近形 \(V_x \cdot r \to -1\) が成り立つこと — Latter 補正を不要にするのはこれです | 恒等式 1 − 10⁻¹⁰; 漸近形 −1.000 … −1.002 |
| T17 | 整数占有の自己項の角度因子 \(D_k(l) = \sum_m [3j(l\,k\,l;-m,0,m)]^2 = 1/(2k+1)\) が \(l\) に依らないこと、およびその \(m=0\) が閉形式と一致すること | 4.4×10⁻¹⁶ / 2.8×10⁻¹⁷ |
| T18 | SCF に配線した KLI。(a) 1 電子原子では交換が Hartree 項を厳密に相殺しなければならず、有効場は裸の \(-Z/r\) に、固有値は \(-Z^2/2\) に潰れます — 自己相互作用の相殺、1/2 の規約、Δ の解、遠方場ガード、SCF の配線を 1 つの assertion で覆います。(b) Latter クリップ無しで、尾は中性開殻・中性閉殻・core-hole イオンのいずれでも \(-(Z-N+1)/r\) になります。(c) 密度は Xα に対して膨らみます。これは診断が求めた方向です | (a) 1.1×10⁻⁹、ε の比 1 ± 2×10⁻⁹; (b) −1.0008 / −1.0005 / −2.0004; (c) Fe ⟨r²⟩ 1.423 → 1.551 a₀² |
| T19 | Dirac 経路の KLI 交換。(a) jj 係数を固定する 4 つの角度恒等式: 交換ホールの和則、半整数 \(j\) に対する \(D_k(j) = 1/(2k+1)\)、1 電子の相殺、そして決定打として、jj 係数を κ について和を取ると LS 係数が厳密に戻ること。(b) 1 電子 Dirac 原子は再び裸の \(-Z/r\) に潰れ、固有値は Sommerfeld 公式に乗らなければなりません。(c) \(c \to \infty\) で Dirac KLI が非相対論 KLI に潰れること (LS と jj の配置平均が一致する閉殻で)、\(\sum_a q_a \bar u_a = 2E_x\) が成り立つこと、κ 分裂した HOMO のオフセットが有界に留まること | (a) ≤3.6×10⁻¹⁵; (b) 3.2×10⁻⁹、ε 3.4×10⁻⁷; (c) c→∞ で 2.4×10⁻⁵、物理的な c で 1.1×10⁻³、恒等式 1 − 10⁻¹⁰、オフセット 6.2×10⁻³ |
| T20 | KLI 実装をその出典論文と比較。Krieger et al. (1992) は閉殻原子を \(V_{x\sigma}\) (= KLI) 近似で表にしています。T14–T19 はいずれも内部整合性の検査ですが、これは独立な実装との比較です。独立な 2 つの量 — \(\langle r^2 \rangle\) (密度の形) と \(-\varepsilon_{\mathrm{HOMO}}\) (ポテンシャルの深さ) — を比べます。どちらか一方だけなら規格化やゲージの偶然で一致し得ますが、両方が偶然一致することはないからです。測った 6 原子 (Be, Ne, Mg, Ar, Ca, Kr) すべてが、論文の印字精度で一致します。ゲートは Ne と Ar です | 差 3×10⁻⁵ … 5×10⁻⁵ — 公表値の小数 4 桁の丸めそのもの |
| T21 | 厳密 frozen core。束縛状態と連続状態を同一のポテンシャルで解けば両者は厳密に直交しなければならず、それが frozen core 処方の眼目です — Gram–Schmidt 射影無しに \(Q \to 0\) の偽の単極子を取り除きます。(a) :frozen は束縛軌道を :relaxed とビット同一に残さなければならず (同じ場だからです)、(b) 漸近電荷は :relaxed / :frozen / :frozen_static でそれぞれ 1 / 1 / 0 でなければならず、(c) orthogonalize_l0! が取り除く重なりは潰れなければなりません。⚠ 重なりは束縛状態を非相対論で解いて Schrödinger 連続状態に対して測ります。2 状態の間でポテンシャルだけが違い、演算子の不一致が入らないようにするためです |
(c) C K、ε = 5 Ha: −3.8×10⁻³ → −8.0×10⁻⁷ (4700 分の 1)。Au L3 では同じ測定が 6×10⁻¹⁵、すなわち丸め誤差まで届きます |
| T22 | 横断的 (Møller) 相互作用の核。厳密に成り立つ構造的不変量: 横断項は \(c \to \infty\) でも \(\Delta E \to 0\) でも消えること (どちらも 0 ulp まで)、物理的な \(c\) では正の寄与であること、\(\beta^2\) とともに単調に増えること。核は \(q_{\min} = k_i - k_f\) より上でしか評価されず、\(q_{\min} > \Delta E/\hbar c\) が assert されるので、遅延分母の極は積分範囲の外にあります | c→∞ と ΔE→0 はどちらも 0.0; Fe K・200 keV の \(q = 1.5\,q_{\min}\) で +9.2 %; 60→400 keV で単調 |
| T22b | 横断核を独立な解析結果と比較。Zhang et al. (2025) は、別の出典から、双極子極限の相対論補正比 \(\sigma_{\rm rel}/\sigma_{\rm conv}\) を取り込み角の関数として引用しています。我々の核を双極子 \(S \propto q^2\) に適用して \(\theta_0\) まで積分すれば、それを再現しなければなりません。これが、2024 年のプレプリント (arXiv:2405.10151) に印刷された式 38 の \(1/q^2\) の脱落を捕まえました: 印刷どおりだと核の 2 項は次元すら合わず、解析的な答えが 1.0736 のところで比は 1.0003 になりました。⚠ 先方の式 42 自体が原始関数の \(x \gg \beta^2\) 近似です (\(\theta_0 \to 0\) で 1 に向かいません)。比較には厳密な原始関数を使います | \(x = 0.03\) … 9.6×10³、\(E_0\) = 100–300 keV、\(\Delta E\) = 100–1000 eV にわたる 18 ケースで最大差 2.8×10⁻⁴ |
| T23 | κ 分解 Dirac 連続状態と小成分の行列要素。(a) 6j 記号を閉形式 \(\{a\,b\,c;0\,c\,b\}\) および自身の直交和と比較。(b) 決定打: Dirac の角度因子を \(\kappa'\) (与えられた \(l'\) の 2 つの \(j'\)) について和を取ると、\(\sum_{j'}(2j'+1)(2l+1)\{6j\}^2 = 1\) により非相対論の \((2l'+1)[3j]^2\) が厳密に戻らなければなりません — これが実装中に \((2l'+1)\) の脱落を捕まえました。(c) 自由粒子: 大成分は Riccati–Bessel 関数で、位相シフトは消えなければなりません。(d) 複合検査: \(c \to \infty\) で GOS 曲面全体 — ソルバ、エネルギー規格化、Gram–Schmidt、2 成分行列要素、角度因子のすべて — が、独立に書かれた非相対論経路に潰れなければなりません。(e) 同じ潰れを出荷量である \(Q_+ \neq Q_-\) の F(s) MDFF について検査 | (a) 5.6×10⁻¹⁷ / 1.1×10⁻¹⁶; (b) \(l \le 5\), \(\lambda \le 7\), \(l' \le 9\) で 2.2×10⁻¹⁶; (c) 3.1×10⁻⁷ と 4.7×10⁻⁶; (d) 物理効果 2.1×10⁻³ に対して 2.2×10⁻⁵ (94 分の 1); (e) 4.3×10⁻³ に対して 5.9×10⁻⁶ (730 分の 1) |
| T24 | Mott 弾性散乱 (P4)。本当の検査は閉包です: \(\lvert f\rvert^2 + \lvert g\rvert^2\) を立体角で積分した σ_el は部分波和 \((4\pi/k^2)\sum_\kappa \lvert\kappa\rvert \sin^2\delta_\kappa\) に等しくなければならず、これは 2 つの Legendre 漸化式、スピン反転振幅、求積を一度に動かします。加えて \(\lvert S(\theta)\rvert \le 1\)、正値性、\(\sigma_{\rm tr} < 2\sigma_{\rm el}\)、\(c \to \infty\) でのスピン軌道分裂の消失。⚠ 光学定理はここでは独立な検査になりません — 部分波では同じ恒等式に帰着します。⚠ 閉包が小さいことは部分波級数の長さが十分であることの証明にはなりません。両辺が同じ \(l_{\max}\) で打ち切られるからで、それを見るのが delta_tail です |
閉包 7.8×10⁻¹⁶; 10³ × c で分裂 1.09×10⁻³ → 1.2×10⁻⁷ (比 9.3×10³。残るのは位相シフトの数値ノイズです — κ と −(κ+1) を別々の系として積分するため) |
| T26 | \(l > 0\) の κ 分解経路: \(c \to \infty\) で L2 と L3 (2p½, 2p³ᐟ²) の結果は電子あたりで縮退しなければなりません — T23d が覆うのは \(l = 0\) だけなので、6j・占有数・\(l > 0\) の配線を検査するのはこれです | 物理的な \(c\) での 1.6×10⁻² に対して 2.6×10⁻³ (消える) |
| T27 | Bethe 尾根の衝撃 (impulse) 極限: 大 \(q\) で \(\mathrm{d}f/\mathrm{d}\omega\) の尾根は束縛軌道自身の Compton プロファイル \(J(0)\) にならなければならず (まず \(J(0) = 8/3\pi\) の水素で確認)、すなわち Fe K の \(q = 60\) で \(q\,\mathrm{d}f/\mathrm{d}\omega\,/\,[\text{occ}\cdot J(0)] \to 1\) | 0.9938; 水素の \(J(0)\) は 3.5×10⁻⁵ まで |
構造的に最も強い 2 つの検査は潰れテストです: T23d と T23e は κ 分解相対論コード経路の 全体 — ソルバ、規格化、2 成分行列要素、6j 角度因子、MDFF の組み立て — を動かし、 \(c \to \infty\) で独立に書かれた非相対論経路の上に落ちることを要求します (T8 は 退役したスカラー相対論 v3 連続状態について同じことをします)。単一の数値として 最も鋭いのは T18a です: 1 電子原子には交換の相手がいないので、厳密交換の連鎖の どこに誤りがあっても、あってはならない残留場として現れます。
T11b・T26・T27 が証明すること — そして証明しないこと
この 3 つは 2026-08 に、Tier 3 の GOS 比較をきっかけとして、外部データを必要と しないゲートとして追加しました。T11b は、非相対論 1s 経路に共通する組み立ての 誤り — 連続状態の規格化、動径積分、球 Bessel 関数と \(q\) 内挿、部分波の列挙と 3j 因子、\(\lambda\) 和、\(2\Delta E/q^2\) の前因子 — を排除します。これらはすべて 水素の曲面に入り、その曲面が尾根で閉形式と 3×10⁻³ で一致するからです。 多電子 SCF、遮蔽や交換、緩和 core-hole 場と frozen core 場の違い、Dirac 束縛状態と 小成分、\(\kappa\) 分解と \(l > 0\) の始状態、L2/L3 や M4/M5 の占有数の配線は 検査していません。T26 が κ の配線を検査するのは非相対論極限だけです。T27 が 検査するのは \(q\) = 40–90 の衝撃領域で、Tier 3 の比較帯がある \(q \approx 13\)–23 — 終状態の歪みがまだ残る領域 — よりずっと上です。したがって、これらに通ることが 言うのは「検査対象の非相対論 1s の組み立てはこの検査に通る」であって、「GOS は 正しい」ではありません。
Tier 2 — 独立な実装¶
同じ処方の 2 つの実装 — src/ionization.jl (Julia) と src/ionization.py (Python) —
を、数値の道具立てが異なるように書いています:
- スプライン、PCHIP、Gauss–Legendre、球 Bessel 関数は、Julia では手書き、Python では SciPy/NumPy。
- Coulomb 関数は、Julia では Steed の連分数から、Python では mpmath から。
- 並列化は、Julia ではスレッド、Python ではプロセス。
julia -t auto src/ionization.jl refcheck # ~1 min
Python 実装は v2 ベースライン — 非相対論連続状態、非相対論 SCF — です。したがって
refcheck は Julia エンジンをこの処方で走らせ (ライブラリ関数の既定が非相対論連続状態
なのは、まさにこのためです。refcheck は Python 参照に合わせるため、非相対論 SCF と
α = 1 を明示的に設定します)、Python から記録した値と比べます。両者は
max|ΔF| ≈ 9×10⁻⁸ で一致します。起源として有力なのは実装の差ではなく、独立に
収束した 2 つの SCF 解です。CI で使うゲートは 10⁻⁵ です。Tier 2 が検査するのは
共有の骨格 — 求積、連続状態ソルバ、動径と角度の組み立て — です。κ 分解の v4 追加分
には第 2 の実装が無く、Tier 1 (T23, T26) と Tier 3 に拠っています。
Tier 3 — 外部参照¶
公表値が存在するところでは、テーブルをそれと比較します。参照があるのは 3 つの量で、 比較の性格はそれぞれ異なります。
イオン化形状因子 F(s)¶
K 殻の形状因子 \(F(s)/F(0)\) は、小さい \(s\) では Oxley & Allen (2000) の表とも µSTEM の 形状因子 (Allen et al., 2015) とも一致し、\(s\) が大きくなるにつれて両参照より下に 落ちます — v5 テーブルの 200 keV では、µSTEM に対する 1 % の線を越えるのは Si K で \(s \approx 0.75\) Å⁻¹、Fe K で \(\approx 2\) Å⁻¹、Fe L 殻で \(\approx 0.3\) Å⁻¹ です。 2 つの参照どうしも互いに離れています — \(s = 1.25\) で K は約 1 %、L 殻は約 11 % です。 大 \(s\) でどちらが真値に近いかは、どの実験でも決着していません。分かっているのは、 これまでに試した STEM-EDX/ALCHEMI の観測量が \(s < 2\) Å⁻¹ にしか感度を持たないこと です。Si と Fe の曲線は 文献との比較 ページにあります。
連続状態そのものへの相対論補正の大きさには、外部参照がありません。その大きさは コードから分かっています: κ 分解 Dirac 連続状態と非相対論連続状態の差は \(s \le 1.25\) Å⁻¹ で \(F\) の 0.3 % 未満で、v4 経路は \(c \to \infty\) の潰れテスト (T23d, T23e) で抑えられています。退役したスカラー相対論 v3 連続状態は、非相対論の 結果から \(s \le 1.25\) で約 1.5 %、\(s = 2.5\) で 6 % 離れていました — 2026-08 に特定 した Darwin 型の偽項によるもので、v4 の κ 分解連続状態はこれを持ちません。
散乱因子 f_x, f_e¶
散乱因子はまず、C, Si, Fe, Au について標準的な解析パラメータ化と比較しました。 非相対論密度では、\(f_x(s)\) は軽・中 \(Z\) で 1–3 % 一致しましたが、Au では高 \(s\) で ~7 % までずれました — 相対論的収縮の欠落が予言するまさにその方向で、密度が広がり すぎ、\(f_x\) が速く落ちすぎるという形です。完全な Dirac SCF はこの隔たりを閉じ、 Au は高 \(s\) で ~1 % に一致します (補正は \(s = 4\) Å⁻¹ で \(f_x\) を 10.8 % 動かします)。
その次の層が交換の扱いで、ここで比較はパラメータ化の話ではなくなりました。公表されて いるフィット — Waasmaier & Kirfel (1995)、Cromer & Mann (1968)、Peng et al. (1996)、 Kirkland (2010) — はどれも Hartree–Fock 原子計算 (新しいものは相対論的) へのフィット なので、エンジンの誤差がフィット自身の残差に届いた時点で、比較は分解能を使い切り ました。Thorkildsen (2023) はそれを定量化しています: Waasmaier–Kirfel の平均絶対誤差 は、現代の手法が達成する値の約 50 倍です。
したがって参照はいまや OFFV1 — Olukayode et al. (2023) の数値 Dirac–Hartree–Fock 散乱因子 — です。フィットではなく、計算された表です。\(s \le 2\) Å⁻¹ における \(f_x\) の 相対 RMS:
| Z | Waasmaier–Kirfel | Cromer–Mann | Dirac + Xα | Dirac + KLI |
|---|---|---|---|---|
| 6 | 0.161 % | 0.265 % | 2.450 % | 0.153 % |
| 14 | 0.065 % | 0.117 % | 1.794 % | 0.087 % |
| 26 | 0.119 % | 0.048 % | 1.508 % | 0.079 % |
| 79 | 0.079 % | 0.054 % | 0.711 % | 0.030 % |
KLI 交換を用いると、エンジンは標準パラメータ化の精度に並び、C・Fe・Au ではそれを 上回ります — 金では 2.6 倍です。\(s = 6\) Å⁻¹ までの全範囲で最悪の \(|\Delta f_x|\) は 0.030 e です。これに対して金の Cromer–Mann は 7.8 e で、4 Gauss 形が単に力尽きる ところです。Si と Fe の \(s\) 分解した曲線 — DHF・Waasmaier–Kirfel・Cromer–Mann に 対する \(f_x\)、および DHF・Kirkland・Peng に対する \(f_e\) — は 文献との比較 ページにあります。
これが測っているのは同じ物理への忠実さであって、物理の完全さではありません: OFFV1 は Dirac–Hartree–Fock で、交換は厳密、相関は無しです。Dirac + KLI は相関無しで、交換は 交換ポテンシャルの KLI 近似までの扱いです — その近似が姿を見せる唯一の箇所、 d ブロックの \(s \to 0\) における \(f_e\) は、比較ページ にあります。
出荷した散乱因子データセットそのものについては、リリースを自前の QC
(tools/check_factor_tables.jl、検査 F1–F10: 元素集合とメタデータ、s 格子の SHA、
\(f_x(0) = Z\) と \(f_e > 0\) を含む値の構造、丸め包絡の内側での Mott–Bethe 恒等式、
生成器のゲート台帳、参照 loader の端条件、tight な τ/10 参照に対する SCF 停止
誤差の検査、golden ベクトル)、18 種の負のミュータントを持つ実行可能な仕様、そして
golden ベクトルでゲートしました。動径格子の認証と、封印した中点 (sealed midpoint) での
表現誤差の測定は生成前に行っており、その許容は データ ページ
に記しています。
GOS 出口と Dirac GOS データベースの比較¶
一般化振動子強度は、Dirac GOS データベース (Zhang et al., 2023; CC-BY-4.0) と比較 しました。これは Flexible Atomic Code により自己無撞着な Dirac–Fock–Slater 軌道から 計算されたもので、ここで用いる現代の公開 GOS 参照です。\(q = 50\) Å⁻¹ (このサイトの 規約では \(s \approx 3.98\) Å⁻¹) で止まっており、それがこの比較の範囲を限ります (上の F(s) の参照はもっと先まで届きます)。
単位の規約は、仮定せずに固定しました。使ったのは水素で、我々自身の GOS は厳密な
双極子極限と Bethe 和則に対して既に検証されています (T11)。比は 1 Ha = 27.211386 eV
に対して 27.2121 と出ました — つまり両者は同じ量を、我々は Hartree あたり、先方は
eV あたりで表にしており、水素では \(q\) = 0.1 … 15 Å⁻¹ にわたって相対 3×10⁻⁵ で
一致します。先方の data は \((n,l)\) 殻ごとに格納されており、occupancy_ratio 属性が
それを \(j\) 副殻へ変換します。先方の L2 と L3 の積分がほぼ等しいことが、それを
裏付けます。
実元素では、比較は同じ物理的なエネルギー損失で行わなければなりません: データベースの
free_energy は先方が自ら計算した閾値 (ionization_energy) から数えており、これは
比較した 4 チャネルで我々が \(E_{\rm th}\) に使う Bote–Salvat 端より 27–175 eV
(1.5–3.3 %) 低いのです (Fe K 6960 vs 7083 eV、Fe L1 816 vs 843、Au L3 11747 vs
11922、Au M5 2151 vs 2212) — 比較スクリプトの初期版は先方のオフセットに我々の端を
足していて、その分だけずれていました。物理的損失で揃えたときの、我々の値と先方の値
の比を、\(\rho = q/q_{\rm ridge}\) (Bethe 尾根 \(\Delta E = q^2/2\) に対する相対位置) の
帯ごとに示します:
| 帯 | Fe K | Fe L1 | Au L3 | Au M5 |
|---|---|---|---|---|
| 光学領域 (ρ < 0.3) | 0.975 | 1.024 | 1.002 | 1.057 |
| Bethe 尾根 (0.8 ≤ ρ < 1.5) | 1.225 | 1.120 | 1.315 | 1.355 |
双極子領域では両者は数 % で一致し、そのオフセットの一部は定義によるものです (閾値が
異なり、GOS は明示的な \(\Delta E\) の前因子を持ちます)。Bethe 尾根では我々のほうが
先方より 12–36 % 高く、これは説明がついていません。内部のつまみ 9 個を 1 つずつ
回しました — 求積プリセット (≤ 0.3 %)、出力 \(q\) サンプリング (≤ 2.2 %)、内挿方式、
交換 (--kli、≤ 4 %)、連続状態 (--no-kdirac、≤ 2 %)、終状態の場 (--frozen、
データベース自身の規約、≤ 8 %)、ε 格子の密度、およびそれらの組み合わせ — が、尾根を
8 % より大きく動かすものは 1 つもありませんでした。
差の所在を考える手掛かりとなる測定が 1 つあります。ただし、解釈には注意が必要です。水素 — GOS 曲面 が閉形式を持つ唯一の原子で、データベースにも収録されています — について、両方の 計算をデータベース自身の格子上で、同じ重み付け (行の最大値の 10 分の 1 を超える セル) と同じ統計量で、厳密曲面に対して採点しました。尾根帯では、中央値の誤差は どちらも ≤ 0.02 % です。90 パーセンタイルは我々の 0.08 % に対してデータベースは 21.9 %、最大値は 5.1 % に対して 36.5 % です。それとは独立に、データベースの Fe K エントリは固定 \(q\) で隣り合う 2 つの ε 行 (872 → 965 eV) の間に ~10 % の段差を示し、 それは重みの大きい領域にあり、我々に対する比はそこを跨いで 1.27 から 0.99 に落ちます。 ここから結論できることは限られています: 水素では、データベースの尾根帯における誤差分布 の裾 (90 パーセンタイルと最大値) は Fe/Au の食い違いと同じ大きさで厳密曲面から離れ、 我々の値は離れません。だからといって、Fe と Au の食い違いがデータベース側のものだ、 とはなりません — それらの原子には決着をつける厳密曲面がありません。データベースが 一般に間違っている、ともなりません (中央値は我々と同等に良いのです)。T11b が通るから 我々の GOS が検証されている、ともなりません (Tier 1 の下の注記を参照)。尾根の食い違いは 未解決のままです。ここでは取り繕わず、その事実を記録します。
これが出荷量にとって何を意味するかは、見積もったのであって、上界を与えたのでは ありません: \(F(s) = N(K)/N(0)\) は比なので、ρ について一様な誤差は厳密に相殺し、 \(K \ne 0\) と \(K = 0\) の間の ρ 重みの差だけが伝わります。尾根の食い違い全体を Temari 側に帰す (そして最も単純なチャネル非依存の仮定で非対角形状因子へ持ち越す) シナリオ では、閾値から離れて測った 4 行で max|δF| は \(F(0) = 1\) に対して 2–5×10⁻²、閾値 近傍の 1 行ではその 1 桁下になります — それらの行についてのシナリオ見積もりであって、 帰属でも、出荷テーブルの上界でもありません。
上の表がしていないことを 2 つ、はっきり書いておきます。「9 つのノブ、どれも尾根を 8 % 以上動かさない」はこの 4 チャネル上の観察です — 同じ 4 チャネルは、炭素を足すまで、 相対誤差 1.00 に達する角度求積の破綻を隠していました (下記)。また帯別の表は中間帯 0.3 ≤ ρ < 0.8 を飛ばしており、そこでは一度も比較していません。にもかかわらず、 β = 100 mrad・幅 1000 eV の窓では、この帯が部分断面積の最大 39 % を運び、尾根帯は 0.00–5.79 % (β ≤ 30 mrad なら ≤ 2.42 %) しか運びません。下の積分比較はこの帯を (実験が重み付けるのと同じ重みで) 含みますが、分解はしません。
同じデータベースに対する部分断面積 σ(β, Δ) — 全チャネル¶
上の帯別 GOS 比と、下の比は別の量であり、互いの逆数のように読んではいけません。 前者は ρ を固定して曲面をセルごとに比べるもの、後者は両方の曲面を同じ運動学・ 同じ収集半角 β・同じ端相対エネルギー窓 [Δ₁, Δ₂] で積分して、部分断面積 σ(β, Δ) どうしを比べるものです。EELS (あるいは k-factor を通して EDX) の測定が実際に重み付ける のは後者です。
後者は 出荷している 525 チャネル全部 (81 元素、Z = 6–86) × 窓 4 種 (それぞれの閾値から
[0,50]、[0,100]、[0,200]、[50,150] eV) × 半角 3 本 (10、30、100 mrad) = 6,300 条件で
回しました。200 keV、横断核は両側 off (データベースは縦成分のみ)、先方の殻ごとのデータに
我々の副殻占有規約を掛け、先方の occupancy_ratio 属性と毎回検算しています。各条件は
比を数える前に 2 つの門を通ります: 再構成の検算 (我々の GOS 曲面から組み直した σ が
直接求積した σ と ≤ 3×10⁻³ で一致すること。最悪 1.24×10⁻³) と、clamp 重み (どちらかの
曲面の収録範囲の外にある点が σ に持つ割合が ≤ 10⁻³ であること。ε 格子を 10⁻⁵ eV まで
下へ伸ばしたので我々側は全条件で 0)。29 条件を除外しました — すべて、データベース側の
格子 (ε の下端 0.01 eV) が As・Se の M4/M5 で重みを外挿しすぎるためです。残り 6,271 条件。
比較スクリプトの角度求積は閉じた式を持つ曲面に当てて検査してあり、t = sin²(θ/2) 上の
単一 Gauss–Legendre は a·t_β ≳ 10⁴ で相対誤差 1.00 まで壊れ (この掃引では a·t_β が
4.65×10⁵ に達します)、採用した log-x の規則は 5.4×10⁻¹⁵ で一致します — 負のテストは
スクリプトの自己検査に組み込んであります。
比 σ_database / σ_Temari の層別 (n = 条件数):
| 層 | n | 最小 | P5 | Q1 | 中央値 | Q3 | P95 | 最大 |
|---|---|---|---|---|---|---|---|---|
| 全部 | 6271 | 0.4695 | 0.8392 | 0.9616 | 1.0240 | 1.0735 | 1.1388 | 2.3358 |
| K | 540 | 1.0162 | 1.0405 | 1.0538 | 1.0771 | 1.1026 | 1.1367 | 1.2719 |
| L1 | 804 | 0.8643 | 0.8966 | 0.9314 | 0.9752 | 1.0074 | 1.0577 | 1.1372 |
| L2 | 804 | 0.8709 | 0.9756 | 1.0218 | 1.0549 | 1.0851 | 1.1383 | 1.3248 |
| L3 | 804 | 0.8733 | 0.9783 | 1.0256 | 1.0597 | 1.0896 | 1.1422 | 1.3275 |
| M1 | 684 | 0.6855 | 0.7530 | 0.8331 | 0.9180 | 1.0094 | 1.1651 | 1.4358 |
| M2 | 684 | 0.7431 | 0.8846 | 0.9683 | 1.0203 | 1.0795 | 1.2080 | 1.4525 |
| M3 | 684 | 0.7323 | 0.9020 | 0.9745 | 1.0206 | 1.0680 | 1.2006 | 1.4149 |
| M4 | 634 | 0.5361 | 0.8074 | 0.9259 | 1.0065 | 1.0547 | 1.1136 | 2.3358 |
| M5 | 633 | 0.4695 | 0.7816 | 0.9238 | 1.0061 | 1.0538 | 1.1131 | 2.3012 |
| Z 1–18 | 156 | 1.0367 | 1.0479 | 1.0760 | 1.1066 | 1.1309 | 1.2070 | 1.2719 |
| Z 19–36 | 1147 | 0.7990 | 0.9260 | 1.0015 | 1.0481 | 1.0977 | 1.2324 | 1.4358 |
| Z 37–54 | 1896 | 0.8084 | 0.9042 | 0.9898 | 1.0269 | 1.0723 | 1.1232 | 1.2469 |
| Z 55–86 | 3072 | 0.4695 | 0.7850 | 0.9210 | 1.0062 | 1.0597 | 1.1154 | 2.3358 |
| 窓 [0,50] eV | 1563 | 0.4695 | 0.7872 | 0.9089 | 0.9948 | 1.0605 | 1.1449 | 2.3358 |
| 窓 [0,100] eV | 1564 | 0.6332 | 0.8418 | 0.9629 | 1.0165 | 1.0679 | 1.1337 | 1.8324 |
| 窓 [0,200] eV | 1569 | 0.7315 | 0.8744 | 0.9810 | 1.0277 | 1.0708 | 1.1352 | 1.5713 |
| 窓 [50,150] eV | 1575 | 0.7401 | 0.8966 | 0.9995 | 1.0481 | 1.0814 | 1.1350 | 1.3767 |
| β = 10 mrad | 2090 | 0.4863 | 0.8897 | 1.0205 | 1.0721 | 1.1062 | 1.2061 | 2.3358 |
| β = 30 mrad | 2090 | 0.4778 | 0.8456 | 0.9831 | 1.0245 | 1.0680 | 1.1108 | 2.2521 |
| β = 100 mrad | 2091 | 0.4695 | 0.8016 | 0.9193 | 0.9786 | 1.0254 | 1.0708 | 2.1888 |
| [0,50] eV を除く | 4708 | 0.6332 | 0.8691 | 0.9806 | 1.0286 | 1.0754 | 1.1346 | 1.8324 |
| M4/M5 を除く | 5004 | 0.6855 | 0.8620 | 0.9699 | 1.0277 | 1.0772 | 1.1453 | 1.4525 |
| 両方除く | 3753 | 0.7245 | 0.8718 | 0.9782 | 1.0307 | 1.0774 | 1.1388 | 1.4178 |
読み方と、読み込んではいけないこと:
- 中央値と四分位範囲は、どう切ってもほとんど動きません (中央値 1.02–1.03、IQR ≈ 0.96–1.08)。広がるのは裾で、裾は 1 つの組み合わせ — M4/M5 × 最も狭い窓 [0,50] eV — です。両極端は逆向きで、最大 2.3358 は Ba M4 [0,50] eV・10 mrad、最小 0.4695 は Yb M5 [0,50] eV・100 mrad (再構成の検算はそれぞれ 1.2×10⁻⁴ と 8.8×10⁻⁵ なので、 求積の artefact ではありません — 2 つの GOS 曲面がそこで実際に食い違っています)。 どちらも 3d 端の最初の 50 eV で、空の 4f 準位が立ち上がりの形を決める領域 — 原子モデル が最も露出する場所ですが、それは測ったのではなく観察しただけです。
- K 殻は系統的に 1 より上です (全 540 条件、1.016–1.272)。端相対ではなく絶対損失で 揃えると K は 0.972–1.157 (中央値 1.021) に締まるので、このオフセットの一部は閾値の 規約 (我々は Bote–Salvat の端、データベースは自前の計算値で 1.5–3.3 % 低い) です。
- 6,271 条件は独立な 6,271 実験ではありません。1 つのモデルと 1 つの参照データベース の上の相関した点であり、この広がりが測るのは 2 つの計算の不一致であって、どちらかの 精度ではありません。
- これは作者が外部データに対して回した比較であって、第三者による検証ではありません。
条件ごとの比 (比だけです — データベースの値そのものは転記していません) は
verification/sigma_ratio_zhang_2026-08-19.csvに、測定の記録はdocs/notes/external_gate_2026-08-19.mdに、スクリプトはtools/sigma_vs_zhang.py(リポジトリに含めないrefs/の CC-BY データベースを読みます) にあります。 - σ(β, Δ) 仕様の以前の内部草案は、この比を「0.83–1.11」と書いていました。それは 4 チャネル (Fe K、Fe L1、Au L3、Au M5) の値で、全体を代表しておらず、取り下げました。
両方の比較は開発中にローカルで行いました。公表された表も、フィット係数も、GPL コード の出力も、このリポジトリには含めていません — いかなる形でもです。 CONTRIBUTING を参照して ください。
ビット同一の検査¶
これは別の軸です: 「数値が正しいか」ではなく「この変更でどこかのビットが動いたか」を
見ます。以下の道具は値を全精度で印字またはハッシュするので、コード変更の前後の
テキスト diff は、ゼロの符号まで含めて Float64 上の === 比較そのものになります。
| コマンド | 範囲 |
|---|---|
julia -t 1 tools/verify_simd_bessel.jl |
8 レーン SIMD の球 Bessel をスカラー核と比較、288 ケース |
julia -t 1 tools/verify_e5_qlane.jl |
動径積分の q レーンをその参照と比較、75 ケース |
julia -t 1 tools/verify_e5_qlane_dirac.jl |
Dirac 動径表 — v4 の出荷経路 — の q レーン SIMD 累算と厳密ゼロの先頭スキップを、移植前の参照と比較。n_q の余り、デルタ領域、Miller/上向きの境界、κ 依存の種を動かす 75 の合成ケース |
julia -t 1 tools/verify_angular_pack.jl |
v4 の角度高速経路を、保存してある参照解 legendre_sum! と比較: \(Q_+\) の巻き上げ、詰め込んだ生存チャネル配列、交互配置の Legendre 漸化式を、非相対論・κ 分解・重元素・d 殻の経路にまたがる 61440 要素で |
julia -t 4 tools/bitident_snapshot.jl <file> |
v3 処方で 5 チャネルを端から端まで、前後 diff 用に全精度でダンプ |
julia -t 4 tools/bitident_snapshot.jl --v4 <file> |
出荷 v4 処方について同じこと: 7 チャネル。M1 (3s、動径節 2 つ) と M5 (3d、l_init = 2) を加え、κ 分解 Dirac 連続状態と d 殻の角度経路を覆う |
julia -t auto tools/e5_dump.jl <dir> |
refcheck の 4 チャネルを生の Float64 バイトとして、SHA-256 で比較 |
スナップショットの 5 チャネルは、重要な範囲を覆うように選んでいます: 軽元素と重元素、 K と L3、低過電圧と高過電圧、両方の連続状態モデル — 本番で破損行が一度観測された (Z, チャネル, E₀) の組み合わせも含みます。
まず「変更前」のスナップショットを取る
変更の後からは再構成できません。午後を丸ごと失う最もありふれた原因です。
意図した変化と事故を切り分ける¶
変更が値を変えるつもりのものであるときは、その変更を無効化した版を作り、その版が
旧コードとビット同一であることを確かめてください。球 Bessel のガードはこの方法で
検証しました: 閾値を 0.0 にするとガードは無効になり、そのビルドは修正前のコードと
ビット同一でした — したがって観測された差はすべて、ガードが実際に発火したことに
帰属でき、周辺のリファクタリングにはまったく帰属しません。
データセット QC と実行可能な仕様¶
生成されたテーブルは、エンジンとは別に、製品として検査します:
| コマンド | 検査内容 |
|---|---|
julia -t auto tools/check_tables.jl <prod_dir> [--eb] |
生成された F(s, E₀) データセット: F(0)=1、有限性、s = 8 未満での K 殻の正値性と単調性、尾の整合性 (種別、epsilon の到達下限、s_cert より先の埋め草)、すべての s 列にわたる leave-one-out の E₀ 内挿誤差 (C6)、σ_own/σ_Bote の帯、生成器のゲート落ち、チャネル集合の完全性 (C15)、そして --eb 付きでは、各チャネルの κ への割り当てを Bote–Salvat の副殻端に対するスピン軌道分裂を通して検査 (C9。広い窓を持つ整合性ゲートであって、束縛エネルギーの精度試験ではありません) |
julia tools/c2_negative_test.jl [prod_dir] |
それらの検査のうち 2 つに対する負のテスト: 出荷ファイルの複製に欠陥を注入し、広げた C2 窓と全列 C6 が旧版では通っていた箇所で発火すること、そして物理的に正常な高 s の符号反転ではどちらも発火しないことを assert します |
julia -t auto tools/e0_interp_probe.jl <Z> <shell> |
E₀ 内挿誤差を直接測ります: 出荷 E₀ 区間の内側の行を再計算し、出荷の内挿規則と比べます。まず出荷行をビット単位で再現できることを証明するので、残った差は内挿であってコードのドリフトではありません |
python tools/temari_contract.py <prod_dir> |
F(s, E₀) データセットの実行可能な仕様: 利用者が落ちる 6 つの罠 (符号付き F、q = 4πs、s_cert より先の埋め草、チャネルごとの E₀ 軸、ε の上界、E₀ 内挿の座標) と、移植が再現しなければならない golden ベクトル |
julia -t auto tools/check_factor_tables.jl <dir> |
散乱因子データセットの QC (F1–F10) |
python tools/temari_factors_contract.py <dir> [--negative] |
散乱因子データセットの実行可能な仕様 (格子 SHA、スプライン規約、定義域、丸め) と、その 18 種の負のミュータントおよび golden ベクトル |
julia -t auto tools/small_component_check.jl [--scan] |
小成分の割合 ζ を、それについて存在する唯一の外部数値 (Zhang et al., 2025, §6.2: Si, Ag, Au の 2p についてそれぞれ有効数字 1 桁) と比較。CI でゲート化。判定基準は、我々の値が先方の値に丸まる区間の内側に入るかどうかであって、比の帯ではありません — 比の帯では 5 倍を許してしまいます |
C6 は E₀ 内挿誤差の上界ではない¶
C6 が抜くのは内側の E₀ 節点 (k ∈ 3:n−2) だけなので、最初と最後の区間 —
イオン化閾値をまたぐ区間と、電圧範囲の上端の区間 — は決して調べられません。そして
閾値側は、まさに ln(u − 1) の曲率が最も大きいところです。
e0_interp_probe.jl sweep で 50 チャネル 450 点の層別標本について区間の内側の点を
再計算して直接測ると、最悪は 3.0 × 10⁻³ — Po L1、第 1 区間、閾値の直上です。
危険域 (最低過電圧が 2 未満の 25 チャネルすべて) では、25 中 20 で C6 が直接測定を
下回ります。安全域では 17 すべてで上から抑えます。したがって C6 は上界でも下界でも
ありません。破損検出器として読んでください。
広げても直りません。端区間の内側は節点ではないので、leave-one-out はそこにまったく
届かず、広げた数値も上界ではありません: C6b は 50 チャネル中 4 で直接測定を下回り、
両者の比は 0.33 から 15.8 まで — 48 倍 — ばらつくので、どちらの向きにも較正された
代理量ではありません。k = 2 を許すと、ゲートの余裕も 4.2 倍から 1.02 倍に潰れます。
check_tables は C6b を可視化のために報告しますが、それでゲートはしません。
危険は両端に散らばるのではなく、閾値側に集中しています: 最悪点は 50 チャネル中 40 で
第 1 区間にあり、最終区間はわずか 2 でした。同じ掃引から得られた唯一のきれいな結果は
ε の上界で、C12 が決して見ない非節点の E₀ でも成り立ち、max|F|/eps は 50 チャネル
すべてで最大 0.496 です。
継続的インテグレーション¶
ドキュメント以外に触れるすべての push で、次を実行します:
selftestを、Ubuntu と Windows の両方、Julia 1.11.9 と 1.12 の両方で実行します。- Ubuntu の Julia 1.11.9 で: 計算カーネルのビット同一検査 (SIMD Bessel、q レーン、
Dirac q レーン、角度高速経路) とキャッシュ/チェックポイントの整合性検査、10⁻⁵ の
明示的なゲート付きの
refcheck(サブコマンド自体は報告するだけです)、そして小成分の 割合を外部の 1 桁の数値と比較する検査 (ディスク上に参照データを必要としません) を 実行します。
リリースのゲートは、再現するデータセットがピン留めしている処理系です — F(s, E₀) データセットは 1.11.9、dataset-factors v1.0.0 は 1.12.6 です。より新しい Julia でしか 通らない結果は受け入れません — 再現性の規律 を参照してください。
誤差の内訳 — なぜ 1 つの数字にならないのか¶
このページに出てくる数値は、どれも種類が違うものを表しており、種類が違う行は
足せません。全体の表は
docs/notes/error_budget_2026-08-19.md
にあります。ここで大事なのは、そこで強制している分類のほうです。
| 種類 | 何であるか | 例 |
|---|---|---|
| 受け入れの許容 | リリース時に選んだ閾値。誤差ではありません | C6 ゲート 5×10⁻³ |
| 直接測定 | 条件を明示して実際に測った値 | refcheck 9.0×10⁻⁸ |
| 標本上の観測最大 | 見えた中での最大。母集団の上界ではありません | 出荷バイトに対する C6 1.16×10⁻³ |
| 外部参照との差 | 差であって、どちらが悪いとは言っていません | µSTEM に対する形状 |
| 未解明の差 | 同上で、原因が特定できていないもの | Bethe 尾根の 12–36 % |
| シナリオ感度 | 「もし全部こちらのものだったら」の導出値 | 伝播後の ≤1.2×10⁻⁴ |
| 未測定 | 空欄。見えるように残してあります | ρ ∈ [0.3, 0.8) 帯 |
いちばん誤読されやすい 3 つ
- C6 ゲート (5×10⁻³) から直接測定 (3.0×10⁻³) を引いた差は「余裕」ではありません。 危険な層では、ゲートのほうが直接測定を下回ります (25 チャネル中 20 本) — C6 は上界ではない を参照してください。
- E₀ 内挿誤差の最悪 3.0×10⁻³ は s ≈ 6.65 Å⁻¹ にあり、試験した観測量はそこに 感度を持ちません。同じ掃引を s ≤ 2 Å⁻¹ に限ると 8.5×10⁻⁵ です。伝播に使うのは 後者であって前者ではありません — そしてどちらも上界ではありません。
- 絶対断面積は Bote–Salvat 由来の 10–24 % を抱えており、他のすべてを圧倒します。 しかしそれは F の誤差の内訳にはまったく入りません。F は F(0) = 1 に規格化されていて、 絶対スケールを持たないからです。
第三者が走らせられるベンチマーク¶
このページの内容は、まだ誰にも再現されていません。それを「歓迎する」だけでなく
実際に可能にするため、的を先に固定した仕様を用意しました:
docs/notes/benchmark_spec_2026-08-19.md。
- 10 チャネル。数値を見る前に決めた規則で選んでいます。各殻族の最軽・最重 Z (C K, Sn K, Ca L1, Rn L3, Zn M1, Rn M5)、外部参照が存在するか v3→v4 の処方変更が 最大だったもの (Si K, Fe K, Au L3)、そして公開節点内で F が符号を変える最軽の チャネル (Ca L2) です。
- 170 点。E₀ = 200 keV で、s = 0 … 8 Å⁻¹ を 0.5 刻みにした 17 節点。両方の軸とも 厳密です — 200 keV は 10 チャネルすべてで実在の行、s の値は格子点そのものなので、 再標本化は一切ありません。
- 参照値は既に公開済み:
tables/F_200keV_preview.csv(CC-BY-4.0)。45 MB のアーカイブを落とす必要はありません。10 進 6 桁に丸めてあり、 出荷 JSON との差は実測で ≤5×10⁻⁷ です。 - 受入は 2 段。同じ処方の再実装なら絶対 10⁻⁵ — 正しさの証明ではなく、 「これを超えたらどこかのつまみが違う」という切り分けの閾値です。違う処方に 対しては意図的に許容を定めません。誠実な出力は、合否ではなく s に対する偏差の 曲線と、どのつまみが違うのかの記述です。
仕様の分量の大半は落とし穴の説明に費やしています。実際に人を刺すのは物理ではないからです。
CLI の求積既定は出荷の HIGH ではなく PROD であること、関数既定はどの出荷世代にも対応
しないこと、X_ALPHA は 2/3 ではなく 1.0 であること、横断項は選択ではなく構造上入って
いないこと、吸収端エネルギーは Bote–Salvat から取らないと全行がずれること。
ここで意図的に検証しないもの¶
- 絶対断面積。Bote–Salvat の値です。エンジン自身の \(\sigma(N_0)\) は健全性の目安で あって、製品ではありません。
- M 殻の系統的な外部照合。M1–M5 は実装済みで内部の本番ゲートを通りますが、独立な 参照による照合はまだ疎らです。
- 定量的なホワイトライン。平均場中の孤立原子では、構造的に手が届きません。
未解決の項目¶
- GOS の Bethe 尾根の食い違い (上述) は未解明です。部分断面積の blocker ではもう ありません — それを門にするのは全チャネルで回した σ(β, Δ) の積分比較 (上述) で、 尾根帯が運ぶのはそのうち高々数 % です — が、原因をさらに追う (比較窓が尾根の両側に またがる 2 チャネル、Fe L1 と Au M5 で、そこでは差が振幅ではなく形の違いになります) のか、未解明の不一致として記録に留めるのかは、未決の判断です。
- 診断としての振動子強度の和則。T11 が検証済みです。その上に作る価値がまだあるのは 本来の用途です — 低 \(Q\) での占有数に対する不足分は、欠けているホワイトライン強度の 直接の尺度であり、孤立原子が出せない量への、計画中の間接経路です。
- 位相シフトの Levinson の定理。エネルギー掃引にわたって \(\delta_l\) を主値から 巻き戻す必要があります。Mott 出口には不要でした (その閉包テストは分枝に依りません) が、\(l\) ごとの束縛状態の数を検査するには必要になります。
参考文献¶
- Allen, L. J., D'Alfonso, A. J. & Findlay, S. D. (2015). Modelling the inelastic scattering of fast electrons. Ultramicroscopy 151, 11–22.
- Bethe, H. (1930). Zur Theorie des Durchgangs schneller Korpuskularstrahlen durch Materie. Annalen der Physik 397, 325–400.
- Cromer, D. T. & Mann, J. B. (1968). X-ray scattering factors computed from numerical Hartree–Fock wave functions. Acta Crystallographica A 24, 321–324.
- Kirkland, E. J. (2010). Advanced Computing in Electron Microscopy, 2nd ed. Springer, New York.
- Krieger, J. B., Li, Y. & Iafrate, G. J. (1992). Construction and application of an accurate local spin-polarized Kohn–Sham potential with integer discontinuity: Exchange-only theory. Physical Review A 45, 101–126.
- Olukayode, S., Froese Fischer, C. & Volkov, A. (2023). Revisited relativistic Dirac–Hartree–Fock X-ray scattering factors. I. Neutral atoms with Z = 2–118. Acta Crystallographica A 79, 59–79.
- Oxley, M. P. & Allen, L. J. (2000). Atomic scattering factors for K-shell and L-shell ionization by fast electrons. Acta Crystallographica A 56, 470–490.
- Peng, L.-M., Ren, G., Dudarev, S. L. & Whelan, M. J. (1996). Robust parameterization of elastic and absorptive electron atomic scattering factors. Acta Crystallographica A 52, 257–276.
- Thorkildsen, G. (2023). New benchmarks in the modelling of X-ray atomic form factors. Acta Crystallographica A 79, 318–330.
- Waasmaier, D. & Kirfel, A. (1995). New analytical scattering-factor functions for free atoms and ions. Acta Crystallographica A 51, 416–431.
- Zhang, Z., Lobato, I., Jannis, D., Verbeeck, J., Van Aert, S. & Nellist, P. (2023). Generalised oscillator strength for core-shell electron excitation by fast electrons based on Dirac solutions [Data set]. Zenodo. doi:10.5281/zenodo.7729585
- Zhang, Z., Lobato, I., Brown, H., Lamoen, D., Jannis, D., Verbeeck, J., Van Aert, S. & Nellist, P. D. (2025). Relativistic EELS scattering cross-sections for microanalysis based on Dirac solutions. Ultramicroscopy 269, 114083. (Preprint arXiv:2405.10151, 2024 — the equation numbers quoted in this documentation follow the preprint.)