rmcprofile-skill 0.5.5
RMCProfile(rmcprofile.ornl.gov)向けPythonツールキット。RMCProfileは全散乱のための逆モンテカルロ(Reverse Monte Carlo)プログラムです。バージョン6.7.9の全入出力形式を読み書きし(references/formats.md)、マニュアルで警告されている入力セットの誤りをチェックし、ユーザーがインストールしたバイナリを実行し、単独でコンフィギュレーションを解析します(references/method.md)。インストール済みパッケージとの相互検証(scripts/upstream_adapter.py)も行います。また、教育用の小型クリーンルームRMCエンジン(scripts/rmclite.py、references/rmclite.md)を同梱しています。RMCProfileはクローズドソースであり、独自の「非営利目的」条件で配布されています。このスキルはRMCProfileを同梱またはコピーすることはなく、RMCPROFILE_HOME環境変数を通じてそれを見つけます(references/package.md)。実行ディレクトリを操作する前にreferences/pitfalls.mdをお読みください。製品ルートから、rmcprofile conda環境とPYTHONIOENCODING=utf-8を使用してすべてを実行してください。すべてのフラグはAGENTS.mdにリストされています。
1. セットアップと検証
scripts/install_rmcprofile_windows.ps1 # または scripts/install_rmcprofile.sh; どちらもdry-runを受け付けます
export RMCPROFILE_HOME=/path/to/RMCProfile_package # exe/ と tutorial/ を含むディレクトリ
python scripts/verify_rmcprofile.py # インポート、形式、Keen恒等式、岩塩シェル、パッケージスモークテスト
パッケージはユーザーがrmcprofile.ornl.gov/download/(SourceForge)からダウンロードして展開します。RMCPROFILE_HOMEが設定されていない場合、パッケージに依存するチェックとテストはすべてスキップされ、失敗とはなりません。verify_rmcprofile.pyはすべてのチェックが成功した場合のみ終了コード0を返します。そのスモークテストはtutorial/ex_1を一時ディレクトリにコピーして実行します(数秒、両ビルドでχ²/dof 0.4201)。
2. 実行前の入力セットのチェック
python scripts/rmcprofile_tools.py check STEM --dir RUNDIR
検出結果ごとに1行を出力します。形式はLEVEL code: messageです。ERRORがある場合、終了コード1を返します。コード: no-dat、dat-parse、no-configuration、rmc6f-parse、atom-order(ATOMS :: とコンフィギュレーションが矛盾)、minimum-distances-count、maximum-moves-count、data-file-missing、data-file-parse、data-block-no-filename、bragg-file-missing、bragg-inst-missing、bragg-back-missing、bragg-parse、poly-file-missing(プログラムが永久に待機する)、bulk-rho-missing(PARTICLE_RADIUS :: があり BULK_RHO :: がないとプログラムが停止する)。警告: end-point-beyond-data、filename-case(Linux/macOSではファイルが見つからない)、no-weight、hkl-range-unspecified、stale-neighbour-files、history-file(ゼロ移動パスの.his6fが次の実行を汚染する)。情報: potential-lists-regenerated、summary。
3. RMCProfileの実行と結果の読み取り
python scripts/rmcprofile_tools.py run STEM --dir RUNDIR --timeout 10 # 分; --home で RMCPROFILE_HOME を上書き
チェッカーが最初に実行され、エラーがある場合は開始を拒否します。実行の標準出力はRUNDIR/run.logに出力されます。サマリー行は、リターンコード、経過時間、出力ファイル数を示します。final: は <stem>.chi2 の最終行を表示します。Pythonでは: res = run_rmcprofile(stem, rundir, find_package()) → res.returncode、res.seconds、res.outputs、res.final_chi2。read_csv_pair("<stem>_PDF1.csv") (r, calc, expt)、read_partials_csv("<stem>_PDFpartials.csv")、read_chi2_history("<stem>.chi2") を使用してフィットを読み取ります。コンフィギュレーションがない場合、RMCProfileは終了コード0で停止します。コードではなくoutputsとfinal_chi2を信頼してください。
4. データファイルの準備
from rmcprofile_tools import write_data_file, read_data_file
write_data_file("sample_gr.dat", r, G, "sample 300 K", style="two-line") # または style="stog"
DATA_TYPE/FIT_TYPE は実空間では G(r)、D(r)、T(r)、逆空間では F(Q)、S(Q)、i(Q) です。定義、r → 0 での恒等式 G(0) = −(Σ c_i b_i)²、および重みは references/method.md にあります。低rプラトーが −(Σ c b)² でない G(r) は、RMCProfileが期待する方法で正規化されていません。
5. .datファイルの構築または編集
from rmcprofile_tools import read_dat
d = read_dat("sample.dat")
d.set("NEUTRON_REAL_SPACE_DATA", "WEIGHT", "0.02")
d.scalars["TIME_LIMIT"] = "30.00 MINUTES"
d.write("sample.dat")
DatFile はスカラー、ATOMS :: 行、およびすべてのブロックをファイル順に保持し、バイト安定な形式で書き戻します。d.get(block, key)、d.data_blocks()、d.filenames() を使用します。ブロック対スカラーのルールと、パッケージで見られるすべてのキーワードは references/formats.md にあります。NUMBER_DENSITY はコンフィギュレーションのヘッダー密度と等しく保ってください。
6. バイナリを使わないコンフィギュレーションの解析
python scripts/rmcprofile_tools.py pdf FILE.rmc6f --rmax 8 --dr 0.02 --qmax 30 --dq 0.02 --radiation neutron --outdir out
python scripts/rmcprofile_tools.py coord FILE.rmc6f --pair Na Cl --rmax 3.0
python scripts/rmcprofile_tools.py angles FILE.rmc6f --triplet Na Cl Cl --rmax 3.0 --dangle 2 --outdir out
pdf は <stem>_PDFpartials.csv (g_ij)、<stem>_GofR.csv (KeenのG(r)、単位はbarn)、<stem>_FofQ.csv を書き出します。coord は配位数ヒストグラムを表示します。angles は B-A-C 角度ヒストグラムを書き出します。健全性チェック: G(r) の最初の値は −(Σ c_i b_i)² でなければなりません(SF6 の場合は −0.2759 barn)。Pythonでは: read_rmc6f、partial_gr、total_gr、fq_from_gr、coordination、bond_angles、average_cell、NEUTRON_B を使用します。--rmax は最短のスーパーセルエッジの半分未満に保つ必要があります。
7. 落とし穴
references/pitfalls.md: .poly による待機、致命的エラーでの終了コード0、.his6f の優先順位、古い近傍ファイル、CUDA対CPUの移動レート、WSL下での /mnt/* の遅さ、2種類の .rmc6f 原子行レイアウト、CRLF、r-グリッド規則、天然存在比の重み、cp1252 コンソール。
8. インストール済みパッケージとの相互検証
python scripts/upstream_adapter.py list # 8つの出荷済み演習とそのステージング手順
python scripts/upstream_adapter.py crosscheck ex_1 --timeout 3
crosscheck は、演習の元の入力ファイルをスクラッチディレクトリにステージングし(出力は削除、.poly/.fs/.sf は保持、ex_7 の TIME_LIMIT は5分に短縮)、パッケージを実行し、結果の .rmc6f に対する当該部分分布と Keen G(r) を、パッケージ自身の _PDFpartials.csv と _PDF1.csv と比較します。「within tolerance: True」は、すべてのペアが tolerance_partials(1e-3; パッケージは単精度で計算、g=20ピークで2.8e-4を測定)と G(r) が tolerance_gofr(1e-4 barn、3e-5を測定)以内であることを意味します。tests/records/crosscheck_v1.json と比較します。--update-records は測定された最大値と来歴を書き換えます。意図的な再測定後にのみ使用してください。Pythonでは: crosscheck_partials(rmc6f, partials_csv)、crosscheck_gofr(rmc6f, pdf_csv)、stage_exercise、run_and_crosscheck。
9. rmcliteで教える
python scripts/rmclite.py synth truth.rmc6f --displace 0.05 --rmax 5 --outdir out # 真のターゲット + 変位コピー
python scripts/rmclite.py fit average.rmc6f --target out/truth_target_PDFpartials.csv --moves 3000 --sigma 0.2 --min-dist "Na-Na:3.0,Na-Cl:2.2,Cl-Cl:3.0" --outdir out
fit は <stem>_fit.rmc6f、<stem>_fit.chi2(RMCProfileのヘッダー m_accepted m_generated m_tested chi2)、<stem>_fit_PDFpartials.csv、<stem>_fit_GofR.csv を書き出します。これらはRMCProfileの出力と同じリーダーで読み取れます。受理ルールは Δ = Δχ²/2 + ΔU/k_BT で、Δ ≤ 0 なら受理、そうでなければ確率 e^(−Δ) で受理します。平均構造から開始し、ランダムな歪みからは決して開始しないでください。ブロードニングされていない(デルタ状の)ターゲットをフィットしないでください。対分布は再現されることが期待されますが、座標は再現されません(references/rmclite.md §5)。Pythonでは: Box.from_rmc6f、Histogram、PartialTarget、TotalGTarget、FqTarget、ClosestApproach、DistanceWindow、BondPotential、RmcLite(...).run(n)、synth_targets。
10. ブックの読み取りまたは再構築
chapters/RMCProfile_NN_*.ipynb — 11個の実行済みノートブック(§1–40、インデックスは chapters/README.md): 1 全散乱とPDF、2 RMCアルゴリズム、3 開始コンフィギュレーション、4 RMCProfileによる中性子データのフィッティング、5 X線とブラッグ、6 拘束条件とポテンシャル、7 補正(RESOLUTION_CORRECTION と PARTICLE_RADIUS の測定された形式)、8 EXAFS / 磁気 / 拡散散乱、9 コンフィギュレーションの解析、10 ベンチマークとエコシステム。ユーザーには章を直接参照させ、言い換えは避けてください。すべての数値はノートブック内で計算されています。build/part*.py を編集した後に再構築するには:
python build/assemble.py --which 07 # 1つの章を再生成(変更されていないノートブックは出力を保持)
RMCPROFILE_HOME=... python build/execute.py --which 07 # rmcprofile-mc カーネルで実行。PASS/FAIL 集計は logs/execute.log に
python build/gallery.py # docs/figures + README ギャラリー
python -m pytest tests/test_notebooks.py -q # ソース、出力、合計、リーク
11. コースの指導
course/deck/index.html — 11の講義(L0 なぜ局所構造か... L10 貢献する)、フラットで線形的、各章の図はノートブックのキャプションの下にあります。course/slides.pdf はブラウザなしでも同じデッキです。course/handout/handout.html はA4コンパニオン。course/notes/LECTURER_NOTES.md は予想される質問を含むすべてのスライドのノートです。講師には course/README.md(シラバス、鍵、再構築)を参照させてください。章を再実行した後:
python course/tools/extract_figures.py # 図 + 来歴(--check でテスト)
python course/tools/build_deck.py # index.html、handout、notes(--check でテスト)
python course/tools/make_slides_pdf.py # slides.pdf(Playwright使用。コミット済み)
python -m pytest tests/test_course.py -q
12. 上流の週次監視
python scripts/watch_upstream.py --weekly # SourceForgeリスト、サイトページ/投稿、condaツール、GitHub隣接リポジトリ、トラッカーステータス
python scripts/watch_upstream.py --snapshot # レポートなしで状態を記録
powershell -File scripts/register_watch_task.ps1 # Windowsタスクスケジューラ、毎週月曜08:00(-DryRun、-Remove)
レポートは <study>/docs/watch/YYYY-WW.md に、スナップショットと監査ログは <study>/forum/upstream-watch/(gitignore)に出力されます。応答がないフィードはレポートの1行となり、終了コード1を返します。サイレントな週を信頼する前にレポートを読んでください。最初の実行(2026-W36)では、SourceForgeに6.8.0-rc.1の候補が見つかりましたが、サイトのダウンロードページにはリストされていませんでした。