Communitygithub.com

fabiocampolim-design/rmcprofile-skill

AI 에이전트 스킬, 검증된 도구 모음, 클린룸 교육 엔진, RMCProfile(전체 산란을 위한 역 몬테카를로)용 실행 책 및 강좌

rmcprofile-skill란 무엇인가요?

이 스킬은 RMCProfile(rmcprofile.ornl.gov)을 위한 종합적 Python 도구 모음입니다. RMCProfile은 전체 산란 데이터 분석을 위한 역 몬테카를로(Reverse Monte Carlo) 프로그램으로, 이 스킬은 해당 소프트웨어의 모든 입출력 형식을 읽고 쓰며, 사용자 입력 세트를 수동으로 경고하는 오류에 대해 검사하고, 설치된 바이너리를 실행한 후 설정을 자체 분석합니다. 또한 교육용 클린룸 RMC 엔진(rmclite)을 포함하여 RMC 알고리즘을 가르치며, 11개의 실행 가능한 Jupyter 노트북으로 구성된 책과 11개의 강의로 구성된 강좌를 제공합니다. RMCProfile 자체는 폐쇄 소스이므로 이 스킬은 RMCPROFILE_HOME 환경 변수를 통해 사용자가 직접 설치한 패키지를 찾으며, 이를 절대 복사하거나 배포하지 않습니다. 지원 플랫폼은 Windows, Linux, macOS이며, conda 환경과 UTF-8 인코딩이 필요합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add fabiocampolim-design/rmcprofile-skill

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

rmcprofile-skill 0.5.5

전체 산란용 역 몬테카를로(Reverse Monte Carlo) 프로그램 RMCProfile(rmcprofile.ornl.gov)을 위한 Python 도구 모음입니다. 버전 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           # import, 형식, Keen 항등식, 암염(shell), 패키지 smoke 테스트

패키지는 사용자가 rmcprofile.ornl.gov/download/(SourceForge)에서 다운로드하여 압축을 풉니다. RMCPROFILE_HOME이 없으면 패키지에 바인딩된 모든 검사와 테스트를 건너뛰고, 실패하지 않습니다. verify_rmcprofile.py는 모든 검사가 통과할 때만 0으로 종료됩니다. smoke 테스트는 tutorial/ex_1을 임시 디렉토리로 복사하여 실행합니다(몇 초 소요, 두 빌드 모두 χ²/dof 0.4201).

2. 실행 전 입력 세트 검사

python scripts/rmcprofile_tools.py check STEM --dir RUNDIR

검사 결과당 한 줄씩 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 (0-이동 패스의 .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 (barn 단위 Keen의 G(r)) 및 <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는 가장 짧은 초격자(supercell) 모서리의 절반 미만으로 유지해야 합니다.

7. 함정

references/pitfalls.md: .poly 대기, 치명적 오류 시 종료 코드 0, .his6f 우선 순위, 오래된 이웃 파일, CUDA 대 CPU 이동 속도, WSL에서 /mnt/* 느림, 두 가지 .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 측정) 이내임을 의미합니다. --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-선 및 Bragg, 6 제약 조건 및 포텐셜, 7 보정(RESOLUTION_CORRECTION 및 PARTICLE_RADIUS의 측정된 형태), 8 EXAFS / 자기 / 확산, 9 설정 분석, 10 벤치마크 및 생태계. 사용자를 의역이 아닌 장으로 안내하십시오. 그 안의 모든 숫자는 노트북에서 계산되었습니다. build/part*.py를 편집한 후 재구축:

python build/assemble.py --which 07          # 한 장 다시 생성(변경되지 않은 노트북은 출력과 함께 유지)
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/(gitignored)에 기록됩니다. 응답하지 않는 피드는 보고서에 행으로 표시되고 종료 코드 1을 반환합니다. 조용한 주를 신뢰하기 전에 보고서를 읽으십시오. 첫 번째 실행(2026-W36)은 SourceForge에서 사이트의 다운로드 페이지에 나열되지 않은 6.8.0-rc.1 후보를 발견했습니다.

관련 스킬