Communitygithub.com

fabioCampolim-design/rmcprofile-skill

Skill de agente de IA, conjunto de herramientas verificado, motor de enseñanza libre de réplicas, libro y curso ejecutados para RMCProfile (Monte Carlo Inverso para dispersión total).

¿Qué es rmcprofile-skill?

Este skill proporciona un conjunto de herramientas Python completo para RMCProfile (rmcprofile.ornl.gov), un programa de Monte Carlo Inverso para dispersión total. Lee y escribe todos los formatos de entrada/salida de la versión 6.7.9, verifica conjuntos de entrada contra errores documentados en el manual, ejecuta el binario instalado por el usuario y analiza configuraciones de forma independiente. Además, incluye un motor RMC ligero para fines educativos (rmclite) y un mecanismo de verificación cruzada contra el paquete instalado. Está diseñado para plataformas Linux, macOS y Windows (con soporte WSL), y requiere la variable de entorno RMCPROFILE_HOME. El skill se ejecuta desde la raíz del producto con el entorno conda 'rmcprofile' y PYTHONIOENCODING=utf-8. La documentación completa incluye un libro de once cuadernos Jupyter ejecutados, un curso de once conferencias y guías detalladas de referencia.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add fabiocampolim-design/rmcprofile-skill

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

rmcprofile-skill 0.5.5

Un conjunto de herramientas Python alrededor de RMCProfile, el programa de Monte Carlo Inverso para dispersión total (rmcprofile.ornl.gov). Lee y escribe todos los formatos de entrada y salida de la versión 6.7.9 (references/formats.md), verifica un conjunto de entrada para los errores contra los que advierte el manual, ejecuta el binario instalado por el usuario y analiza configuraciones por sí mismo (references/method.md), se verifica a sí mismo contra el paquete instalado (scripts/upstream_adapter.py) y lleva un pequeño motor RMC libre de réplicas para enseñanza (scripts/rmclite.py, references/rmclite.md). RMCProfile es de código cerrado y se distribuye bajo sus propios términos de "fines no lucrativos"; este skill nunca envía ni copia el programa — lo encuentra a través de RMCPROFILE_HOME (references/package.md). Lea references/pitfalls.md antes de tocar un directorio de ejecución. Ejecute todo desde la raíz del producto con el entorno conda rmcprofile y PYTHONIOENCODING=utf-8; cada bandera está listada en AGENTS.md.

1. Configuración y verificación

scripts/install_rmcprofile_windows.ps1        # o scripts/install_rmcprofile.sh; ambos aceptan una simulación
RMCPROFILE_HOME=/ruta/al/paquete/RMCProfile    # el directorio que contiene exe/ y tutorial/
python scripts/verify_rmcprofile.py           # importaciones, formatos, identidad de Keen, capas de sal gema, prueba de humo del paquete

El paquete es descargado por el usuario desde rmcprofile.ornl.gov/download/ (SourceForge) y desempaquetado; sin RMCPROFILE_HOME toda verificación y prueba vinculada al paquete se omite, no falla. verify_rmcprofile.py sale con 0 solo cuando todas las verificaciones pasan; su prueba de humo copia tutorial/ex_1 a un directorio temporal y lo ejecuta (unos segundos, χ²/gdl 0.4201 en ambas compilaciones).

2. Verificar un conjunto de entrada antes de ejecutar

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

Imprime una línea por hallazgo, LEVEL código: mensaje, sale con 1 en cualquier ERROR. Códigos: no-dat, dat-parse, no-configuration, rmc6f-parse, atom-order (ATOMS :: y la configuración no coinciden), 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 (el programa esperaría para siempre), bulk-rho-missing (PARTICLE_RADIUS :: sin BULK_RHO ::, el programa se detiene); advertencias end-point-beyond-data, filename-case (Linux/macOS no encontraría el archivo), no-weight, hkl-range-unspecified, stale-neighbour-files, history-file (un .his6f de una pasada de cero movimientos envenena la siguiente ejecución); información potential-lists-regenerated, summary.

3. Ejecutar RMCProfile y leer el resultado

python scripts/rmcprofile_tools.py run STEM --dir RUNDIR --timeout 10      # minutos; --home anula RMCPROFILE_HOME

El verificador se ejecuta primero y se niega a iniciar si hay un error. La salida estándar de la ejecución va a RUNDIR/run.log; la línea de resumen da el código de retorno, tiempo de pared y número de archivos de salida; final: repite la última fila de <stem>.chi2. En Python: res = run_rmcprofile(stem, rundir, find_package()) → res.returncode, res.seconds, res.outputs, res.final_chi2. Lea el ajuste con read_csv_pair("<stem>_PDF1.csv") (r, calc, expt), read_partials_csv("<stem>_PDFpartials.csv"), read_chi2_history("<stem>.chi2"). Una configuración faltante hace que RMCProfile se detenga con código de salida 0 — confíe en outputs y final_chi2, no en el código.

4. Preparar archivos de datos

from rmcprofile_tools import write_data_file, read_data_file
write_data_file("sample_gr.dat", r, G, "sample 300 K", style="two-line")   # o style="stog"

DATA_TYPE/FIT_TYPE son G(r), D(r), T(r) en espacio real y F(Q), S(Q), i(Q) en espacio recíproco; las definiciones, la identidad r → 0 G(0) = −(Σ c_i b_i)² y los pesos están en references/method.md. Una G(r) cuya meseta a bajo r no es −(Σ c b)² no fue normalizada como RMCProfile espera.

5. Construir o editar un archivo .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 mantiene escalares, la línea ATOMS :: y cada bloque en orden de archivo y los escribe de vuelta de manera estable en bytes; d.get(bloque, clave), d.data_blocks(), d.filenames(). La regla bloque-versus-escalar y cada palabra clave vista en el paquete están en references/formats.md. Mantenga NUMBER_DENSITY igual a la densidad del encabezado de la configuración.

6. Analizar una configuración sin el binario

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 escribe <stem>_PDFpartials.csv (g_ij), <stem>_GofR.csv (G(r) de Keen en barn) y <stem>_FofQ.csv; coord imprime el histograma de coordinación; angles escribe el histograma de ángulos B-A-C. Verificación de cordura: el primer valor de G(r) debe ser −(Σ c_i b_i)² (−0.2759 barn para SF6). En Python: read_rmc6f, partial_gr, total_gr, fq_from_gr, coordination, bond_angles, average_cell, NEUTRON_B. --rmax debe permanecer por debajo de la mitad del borde de supercelda más corto.

7. Errores comunes

references/pitfalls.md: la espera de .poly, código de salida 0 en un error fatal, precedencia de .his6f, archivos de vecinos obsoletos, la tasa de movimiento CUDA versus CPU, lentitud de /mnt/* bajo WSL, los dos diseños de línea de átomos en .rmc6f, CRLF, la convención de la rejilla r, pesos de abundancia natural, consolas cp1252.

8. Verificación cruzada contra el paquete instalado

python scripts/upstream_adapter.py list                      # los ocho ejercicios incluidos y sus recetas de preparación
python scripts/upstream_adapter.py crosscheck ex_1 --timeout 3

crosscheck prepara las entradas prístinas del ejercicio en un directorio temporal (salidas eliminadas, .poly/.fs/.sf conservados, TIME_LIMIT de ex_7 reducido a 5 min), ejecuta el paquete, luego compara nuestras parciales y G(r) de Keen del .rmc6f resultante con los _PDFpartials.csv y _PDF1.csv propios del paquete. "within tolerance: True" significa que cada par está dentro de tolerance_partials (1e-3; el paquete calcula en precisión simple, medido 2.8e-4 en el pico g = 20) y G(r) dentro de tolerance_gofr (1e-4 barn, medido 3e-5) de tests/records/crosscheck_v1.json. --update-records reescribe los máximos medidos y la procedencia — solo después de una nueva medición deliberada. En Python: crosscheck_partials(rmc6f, partials_csv), crosscheck_gofr(rmc6f, pdf_csv), stage_exercise, run_and_crosscheck.

9. Enseñar con rmclite

python scripts/rmclite.py synth truth.rmc6f --displace 0.05 --rmax 5 --outdir out     # objetivos de verdad + una copia desplazada
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 escribe <stem>_fit.rmc6f, <stem>_fit.chi2 (encabezado de RMCProfile m_accepted m_generated m_tested chi2), <stem>_fit_PDFpartials.csv y <stem>_fit_GofR.csv — léalos con los mismos lectores que la salida de RMCProfile. La regla de aceptación es Δ = Δχ²/2 + ΔU/k_BT, aceptar si Δ ≤ 0, en caso contrario con probabilidad e^(−Δ). Comience desde la estructura promedio, nunca desde una distorsión aleatoria; nunca ajuste objetivos sin ensanchar (delta agudo); espere que se reproduzca la distribución de pares, no las coordenadas (references/rmclite.md §5). En Python: Box.from_rmc6f, Histogram, PartialTarget, TotalGTarget, FqTarget, ClosestApproach, DistanceWindow, BondPotential, RmcLite(...).run(n), synth_targets.

10. Leer o reconstruir el libro

chapters/RMCProfile_NN_*.ipynb — once cuadernos ejecutados (§1–40, índice en chapters/README.md): 1 dispersión total y la PDF, 2 el algoritmo RMC, 3 configuraciones iniciales, 4 ajuste de datos de neutrones con RMCProfile, 5 rayos X y Bragg, 6 restricciones y potenciales, 7 correcciones (las formas medidas de RESOLUTION_CORRECTION y PARTICLE_RADIUS), 8 EXAFS / magnético / difuso, 9 análisis de configuraciones, 10 benchmarks y ecosistema. Dirija a un usuario al capítulo, no a una paráfrasis: cada número en ellos fue calculado en el cuaderno. Para reconstruir después de editar build/part*.py:

python build/assemble.py --which 07          # regenerar un capítulo (los cuadernos sin cambios se conservan con sus salidas)
RMCPROFILE_HOME=... python build/execute.py --which 07   # ejecutarlo en el kernel rmcprofile-mc; balance EXITOSO/FRACASO en logs/execute.log
python build/gallery.py                      # docs/figures + galería README
python -m pytest tests/test_notebooks.py -q  # fuentes, salidas, totales, fugas

11. Enseñar el curso

course/deck/index.html — once conferencias (L0 por qué estructura local … L10 contribuyendo), planas y lineales, cada figura de capítulo bajo su título de cuaderno; course/slides.pdf es la misma presentación sin navegador; course/handout/handout.html el acompañante A4; course/notes/LECTURER_NOTES.md las notas de cada diapositiva con su pregunta anticipada. Dirija a un profesor a course/README.md (programa, claves, reconstrucción). Después de re-ejecutar un capítulo:

python course/tools/extract_figures.py      # figuras + procedencia (--check para probar)
python course/tools/build_deck.py           # index.html, handout, notes (--check para probar)
python course/tools/make_slides_pdf.py      # slides.pdf (Playwright; confirmado)
python -m pytest tests/test_course.py -q

12. Vigilar upstream semanalmente

python scripts/watch_upstream.py --weekly          # listado de SourceForge, páginas/publicaciones del sitio, herramientas conda, vecinos de GitHub, estado del rastreador
python scripts/watch_upstream.py --snapshot        # registrar el estado sin informe
powershell -File scripts/register_watch_task.ps1   # Programador de tareas de Windows, lunes 08:00 (-DryRun, -Remove)

Los informes van a <study>/docs/watch/YYYY-WW.md, la instantánea y los registros de auditoría a <study>/forum/upstream-watch/ (gitignored). Una fuente que no responde es una fila en el informe y sale con 1; lea el informe antes de confiar en una semana silenciosa. La primera ejecución (2026-W36) encontró un candidato 6.8.0-rc.1 en SourceForge que la página de descarga del sitio no listaba.

Skills relacionados