Communitygithub.com

fabiocampolim-design/rmcprofile-skill

Compétence d'agent IA, boîte à outils vérifiée, moteur d'enseignement en salle blanche, livre et cours exécutés pour RMCProfile (Reverse Monte Carlo pour la diffusion totale).

Qu'est-ce que rmcprofile-skill ?

Cette compétence fournit une boîte à outils Python complète autour de RMCProfile, le programme Reverse Monte Carlo pour la diffusion totale (rmcprofile.ornl.gov). Elle lit et écrit tous les formats d'entrée et de sortie de la version 6.7.9, vérifie un jeu d'entrées pour les erreurs mentionnées dans le manuel, exécute le binaire installé par l'utilisateur et analyse les configurations de manière autonome. La compétence s'auto-vérifie par rapport au package installé et inclut un petit moteur RMC en salle blanche pour l'enseignement. Elle est utile pour les scientifiques et ingénieurs qui utilisent RMCProfile pour l'affinement de structures à partir de données de diffusion totale, en automatisant les tâches de préparation, d'exécution, de vérification et d'analyse. Compatible avec les agents d'IA comme Claude Code, Cursor ou Codex, cette compétence opère via des scripts Python et des entrées en ligne de commande, en s'appuyant sur la variable d'environnement RMCPROFILE_HOME pour localiser le package RMCProfile sans jamais le copier. Elle est conçue pour être exécutée depuis la racine du produit avec l'environnement conda 'rmcprofile' et PYTHONIOENCODING=utf-8.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

rmcprofile-skill 0.5.5

Une boîte à outils Python autour de RMCProfile, le programme Reverse Monte Carlo pour la diffusion totale (rmcprofile.ornl.gov). Elle lit et écrit tous les formats d'entrée et de sortie de la version 6.7.9 (references/formats.md), vérifie un jeu d'entrées pour les erreurs mentionnées dans le manuel, exécute le binaire installé par l'utilisateur et analyse les configurations de manière autonome (references/method.md), s'auto-vérifie par rapport au package installé (scripts/upstream_adapter.py) et inclut un petit moteur RMC en salle blanche pour l'enseignement (scripts/rmclite.py, references/rmclite.md). RMCProfile est un logiciel propriétaire distribué selon ses propres termes "à but non lucratif" ; cette compétence ne l'expédie ni ne le copie jamais — elle le trouve via RMCPROFILE_HOME (references/package.md). Lisez references/pitfalls.md avant de toucher à un répertoire d'exécution. Exécutez tout depuis la racine du produit avec l'environnement conda rmcprofile et PYTHONIOENCODING=utf-8 ; tous les indicateurs sont listés dans AGENTS.md.

1. Configuration et vérification

scripts/install_rmcprofile_windows.ps1        # ou scripts/install_rmcprofile.sh ; les deux acceptent un dry-run
export RMCPROFILE_HOME=/chemin/vers/RMCProfile_package    # le répertoire contenant exe/ et tutorial/
python scripts/verify_rmcprofile.py           # imports, formats, identité de Keen, couches de sel gemme, test de validation du package

Le package est téléchargé par l'utilisateur depuis rmcprofile.ornl.gov/download/ (SourceForge) et décompressé ; sans RMCPROFILE_HOME, toute vérification et tout test lié au package sont ignorés, pas échoués. verify_rmcprofile.py ne sort avec le code 0 que lorsque chaque vérification réussit ; son test de validation copie tutorial/ex_1 dans un répertoire temporaire et l'exécute (quelques secondes, χ²/ddl 0.4201 sur les deux builds).

2. Vérifier un jeu d'entrées avant l'exécution

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

Affiche une ligne par constatation, LEVEL code: message, sort avec le code 1 en cas d'ERROR. Codes : no-dat, dat-parse, no-configuration, rmc6f-parse, atom-order (les ATOMS :: et la configuration sont en désaccord), 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 (le programme attendrait indéfiniment), bulk-rho-missing (PARTICLE_RADIUS :: sans BULK_RHO ::, le programme s'arrête) ; avertissements end-point-beyond-data, filename-case (Linux/macOS ne trouverait pas le fichier), no-weight, hkl-range-unspecified, stale-neighbour-files, history-file (un .his6f issu d'un passage à zéro mouvement empoisonne la prochaine exécution) ; informations potential-lists-regenerated, summary.

3. Exécuter RMCProfile et lire le résultat

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

Le vérificateur s'exécute d'abord et refuse de démarrer en cas d'erreur. La sortie standard de l'exécution va dans RUNDIR/run.log ; la ligne de résumé donne le code de retour, le temps réel et le nombre de fichiers de sortie ; final : répète la dernière ligne de <stem>.chi2. En Python : res = run_rmcprofile(stem, rundir, find_package()) → res.returncode, res.seconds, res.outputs, res.final_chi2. Lisez l'ajustement avec read_csv_pair("<stem>_PDF1.csv") (r, calc, expt), read_partials_csv("<stem>_PDFpartials.csv"), read_chi2_history("<stem>.chi2"). Une configuration manquante fait que RMCProfile s'arrête avec le code de sortie 0 — faites confiance à outputs et final_chi2, pas au code.

4. Préparer les fichiers de données

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

DATA_TYPE/FIT_TYPE sont G(r), D(r), T(r) dans l'espace réel et F(Q), S(Q), i(Q) dans l'espace réciproque ; les définitions, l'identité r → 0 G(0) = −(Σ c_i b_i)² et les poids sont dans references/method.md. Un G(r) dont le plateau aux faibles r n'est pas −(Σ c b)² n'a pas été normalisé comme RMCProfile l'attend.

5. Construire ou éditer un fichier .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 conserve les scalaires, la ligne ATOMS :: et chaque bloc dans l'ordre du fichier et les réécrit de manière stable au niveau des octets ; d.get(block, key), d.data_blocks(), d.filenames(). La règle bloc-scalaire et chaque mot-clé vu dans le package sont dans references/formats.md. Gardez NUMBER_DENSITY égal à la densité d'en-tête de la configuration.

6. Analyser une configuration sans le binaire

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 écrit <stem>_PDFpartials.csv (g_ij), <stem>_GofR.csv (G(r) de Keen en barn) et <stem>_FofQ.csv ; coord affiche l'histogramme de coordination ; angles écrit l'histogramme des angles B-A-C. Vérification de cohérence : la première valeur de G(r) doit être −(Σ c_i b_i)² (−0.2759 barn pour SF6). En Python : read_rmc6f, partial_gr, total_gr, fq_from_gr, coordination, bond_angles, average_cell, NEUTRON_B. --rmax doit rester inférieur à la moitié du plus petit bord de la supercellule.

7. Pièges

references/pitfalls.md : l'attente .poly, le code de sortie 0 sur une erreur fatale, la précédence de .his6f, les fichiers de voisins obsolètes, le taux de déplacement CUDA contre CPU, la lenteur de /mnt/* sous WSL, les deux dispositions de lignes d'atomes dans .rmc6f, les sauts de ligne CRLF, la convention de la grille r, les poids d'abondance naturelle, les consoles cp1252.

8. Vérification croisée avec le package installé

python scripts/upstream_adapter.py list                      # les huit exercices fournis et leurs recettes de préparation
python scripts/upstream_adapter.py crosscheck ex_1 --timeout 3

crosscheck prépare les entrées vierges de l'exercice dans un répertoire temporaire (sorties supprimées, .poly/.fs/.sf conservés, TIME_LIMIT de ex_7 réduit à 5 min), exécute le package, puis compare nos partielles et notre G(r) de Keen pour le .rmc6f résultant avec les propres _PDFpartials.csv et _PDF1.csv du package. "dans la tolérance : True" signifie que chaque paire se trouve dans tolerance_partials (1e-3 ; le package calcule en simple précision, mesuré à 2.8e-4 sur le pic g = 20) et G(r) dans tolerance_gofr (1e-4 barn, mesuré 3e-5) de tests/records/crosscheck_v1.json. --update-records réécrit les maximums mesurés et la provenance — seulement après une nouvelle mesure délibérée. En Python : crosscheck_partials(rmc6f, partials_csv), crosscheck_gofr(rmc6f, pdf_csv), stage_exercise, run_and_crosscheck.

9. Enseigner avec rmclite

python scripts/rmclite.py synth truth.rmc6f --displace 0.05 --rmax 5 --outdir out     # cibles de la vérité + une copie déplacée
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 écrit <stem>_fit.rmc6f, <stem>_fit.chi2 (l'en-tête de RMCProfile m_accepted m_generated m_tested chi2), <stem>_fit_PDFpartials.csv et <stem>_fit_GofR.csv — lisez-les avec les mêmes lecteurs que la sortie de RMCProfile. La règle d'acceptation est Δ = Δχ²/2 + ΔU/k_BT, accepter si Δ ≤ 0, sinon avec probabilité e^(−Δ). Commencez par la structure moyenne, jamais par une distorsion aléatoire ; n'ajustez jamais des cibles non élargies (delta-sharp) ; attendez-vous à ce que la distribution de paires soit reproduite, pas les coordonnées (references/rmclite.md §5). En Python : Box.from_rmc6f, Histogram, PartialTarget, TotalGTarget, FqTarget, ClosestApproach, DistanceWindow, BondPotential, RmcLite(...).run(n), synth_targets.

10. Lire ou reconstruire le livre

chapters/RMCProfile_NN_*.ipynb — onze cahiers exécutés (§1–40, index dans chapters/README.md) : 1 la diffusion totale et la PDF, 2 l'algorithme RMC, 3 les configurations de départ, 4 l'ajustement de données neutroniques avec RMCProfile, 5 rayons X et Bragg, 6 contraintes et potentiels, 7 corrections (les formes mesurées de RESOLUTION_CORRECTION et PARTICLE_RADIUS), 8 EXAFS / magnétique / diffus, 9 l'analyse des configurations, 10 les benchmarks et l'écosystème. Dirigez un utilisateur vers le chapitre, pas vers une paraphrase : chaque nombre qu'ils contiennent a été calculé dans le cahier. Pour reconstruire après avoir modifié build/part*.py :

python build/assemble.py --which 07          # régénérer un chapitre (les cahiers inchangés sont conservés avec leurs sorties)
RMCPROFILE_HOME=... python build/execute.py --which 07   # l'exécuter sur le noyau rmcprofile-mc ; bilan SUCCÈS/ÉCHEC dans logs/execute.log
python build/gallery.py                      # docs/figures + galerie README
python -m pytest tests/test_notebooks.py -q  # sources, sorties, totaux, fuites

11. Enseigner le cours

course/deck/index.html — onze conférences (L0 pourquoi la structure locale … L10 contribuer), plates et linéaires, chaque figure de chapitre sous sa légende de cahier ; course/slides.pdf est le même diaporama sans navigateur ; course/handout/handout.html le compagnon A4 ; course/notes/LECTURER_NOTES.md les notes de chaque diapositive avec sa question anticipée. Dirigez un conférencier vers course/README.md (programme, clés, reconstruction). Après avoir réexécuté un chapitre :

python course/tools/extract_figures.py      # figures + provenance (--check pour tester)
python course/tools/build_deck.py           # index.html, handout, notes (--check pour tester)
python course/tools/make_slides_pdf.py      # slides.pdf (Playwright ; commit)
python -m pytest tests/test_course.py -q

12. Surveiller en amont chaque semaine

python scripts/watch_upstream.py --weekly          # Liste SourceForge, pages/articles du site, outils conda, voisins GitHub, statut du suivi
python scripts/watch_upstream.py --snapshot        # enregistrer l'état sans rapport
powershell -File scripts/register_watch_task.ps1   # Planificateur de tâches Windows, lundis 08:00 (-DryRun, -Remove)

Les rapports vont dans <study>/docs/watch/YYYY-WW.md, l'instantané et les journaux d'audit dans <study>/forum/upstream-watch/ (gitignorés). Un flux qui ne répond pas est une ligne dans le rapport et la sortie 1 ; lisez le rapport avant de faire confiance à une semaine silencieuse. La première exécution (2026-W36) a trouvé un candidat 6.8.0-rc.1 sur SourceForge que la page de téléchargement du site ne listait pas.

Skills associés