**Download.** [`F0002.zip`](F0002.zip) holds everything below: the data, the scripts and the input files. | File | What it is | |---|---| | [`check.py`](check.py) | Recomputes every number in this report from `data/`. Needs only Python 3. | | [`reproduce/quick_check.py`](reproduce/quick_check.py) | Recalculates the g-xTB energy of every stored transition state and compares the amounts lower with the table. Needs [g-xTB](https://github.com/grimme-lab/g-xtb) 2.0.1. | | [`reproduce/figures.py`](reproduce/figures.py) | Redraws the figure. Needs matplotlib. | | [`reproduce/build_tables.py`](reproduce/build_tables.py) | Builds `data/scores.csv` and `data/lower_ts.xyz.gz` from scored searches. | | [`data/inputs.tar.gz`](data/inputs.tar.gz) | The two reaction sets: start, end and reference transition-state structures for all 566 reactions. | | [`reproduce/rerun/`](reproduce/rerun/) | The scripts that run and score the searches (`src/benchmark/`), the step that combines the two Geodesic searches, and the mepd input file `mepd_profile.toml`. | **Check the numbers** (a few seconds): ``` python check.py python reproduce/quick_check.py --jobs 3 # set GXTB=/path/to/xtb if g-xTB is not on PATH as gxtb-xtb ``` **Rerun the searches.** This needs mepd at git commit `672b509` (mepd is not public yet) and the `mepd` command on PATH. It also needs g-xTB 2.0.1 on PATH as `gxtb-xtb`, and the patched GSM from [jandestrada/molecularGSM](https://github.com/jandestrada/molecularGSM) (branch `mepd`), whose path goes in `mepd_profile.toml`. Each search takes up to 45 minutes on one core: 500 for Reaction-QM and 66 twice for Geodesic. `--jobs` sets how many run at once. ``` cd reproduce/rerun tar xzf ../../data/inputs.tar.gz # From doi:10.5281/zenodo.18551029, put B3LYPD3_TZVP.h5 and B3LYPD3_TZVP_reaction_info.csv in data/reaction_qm/ export PYTHONPATH=$PWD/src OMP_NUM_THREADS=1 SEARCH="--n-conformers 5 --workers 1 --jobs 8 --timeout 2700 -- --direct-only --no-parallel --pairs-per-mechanism 5 --rmsd-cutoff 0.1 --search-budget 1800 --hessian-minimum-frequency-cutoff -20 --hessian-minima-rescue-displacement 0.3" python -m benchmark.reaction_qm_channels --inputs mepd_profile.toml --dataset sets/reaction_qm_500.csv \ --output reaction_qm_runs --atom-mapping-metric endpoint-rmsd $SEARCH python -m benchmark.reaction_qm_channels --inputs mepd_profile.toml --dataset sets/geodesic_66.csv \ --output geodesic_runs_mapped --atom-mapping-metric endpoint-rmsd $SEARCH python -m benchmark.reaction_qm_channels --inputs mepd_profile.toml --dataset sets/geodesic_66.csv \ --output geodesic_runs_unmapped --no-atom-mapping --max-pairs 5 --atom-mapping-metric rmsd-geodesic $SEARCH ``` **Score the searches and rebuild the tables:** ``` python -m benchmark.score_channels --runs reaction_qm_runs --dataset sets/reaction_qm_500.csv \ --inputs mepd_profile.toml --out reaction_qm_scores.json python -m benchmark.score_channels --runs geodesic_runs_mapped --floor-roots geodesic_runs_unmapped \ --dataset sets/geodesic_66.csv --inputs mepd_profile.toml --out geodesic_mapped_scores.json python -m benchmark.score_channels --runs geodesic_runs_unmapped --floor-roots geodesic_runs_mapped \ --dataset sets/geodesic_66.csv --inputs mepd_profile.toml --out geodesic_unmapped_scores.json python combine_geodesic.py cd ../.. python reproduce/build_tables.py --out rerun_data ``` Then compare `rerun_data/` with `data/`. These are the scripts the original searches used, tidied for reuse: files and folders renamed, and set-building code that is not needed (the sets are in `data/inputs.tar.gz`) removed. A dry run produces exactly the same `mepd channels` commands as the original searches.