← All findings

Contents

F0001: A g-xTB benchmark set of 29,833 Reaction-QM transition states for testing reaction-path searches

This is version 1 of F0001, and its results are outdated. Version 2 (2026-10-22) corrected them: Re-screened with checked transition states and IRCs: tight convergence with exact Hessians, frequency checks, minimized IRC ends, strict stereochemistry, and an IRC that must itself reach both ends. 29,116 of the same 63,954 reactions are kept. Version 1's set of 29,833 came from a screen without these checks. transition states and IRC ends were not checked (convergence, frequencies, minimized ends, stereochemistry) (fixed in git commit 0594999). reactions were kept whose IRC reached the dataset's endpoints only after minimization changed an IRC end into another species (fixed in git commit 5f3b655). Read the current version.

Status: verified · Version 1 · Jan Estrada Pabon (ORCID) · 2026-09-19 · no DOI yet

Finding. Of 63,954 Reaction-QM B3LYP-RXN reference transition states re-converged at g-xTB, 29,833 (46.6%) stay saddles whose IRC connects the reference reactant and product by bond connectivity and stereochemistry. They form a g-xTB-level benchmark set for reaction-path searches; where the other 34,121 go is the subject of a later finding (in preparation).

Background

mepd is a tool for mapping reaction mechanisms. Its search, mepd channels, takes a reactant and a product and looks for the transition state between them: the top of the energy hill the reaction must climb. Its height, the activation energy or barrier, sets how fast the reaction goes.

To test that search we need reactions whose transition state is already known. The searches run on g-xTB, a fast approximate quantum-chemistry method, so the known answer has to exist on g-xTB's energy surface. A search can only be judged against a transition state that exists at the level it searches on.

Reaction-QM is a public dataset of about 200,000 reactions whose transition states were computed with B3LYP-D3, a widely used density functional. This Finding sorts out which of them carry over to g-xTB, and so can serve as test cases.

Approach

We gave g-xTB each B3LYP transition state as a starting point, with no searching involved, and let it settle into the nearest g-xTB transition state.1 From there we rolled downhill in both directions to see which two molecules this transition state connects.2

A transition state survives if those two ends are the same molecules as the dataset's reactant and product: same atoms, bonded the same way, with the same 3D arrangement.3 The survivors, each with its g-xTB transition state, make up the benchmark set.4 We screened 63,954 reactions, about a third of the dataset and a fair sample of it.6

Results

46.6% survive. For 29,833 of the 63,954 reactions, g-xTB keeps a transition state that connects the same reactant and product.

What g-xTB did with the B3LYP transition state Share
Kept it: connects the same reactant and product 46.6%
Connects something else 50.7%
Both downhill paths end in the same place 1.3%
Downhill path failed 1.2%
No transition state found 0.2%

Survival is about the same for reactions of one molecule and of several (46.3% and 46.9%). Where the other 34,121 go, from a different 3D arrangement of the same molecules to a different reaction entirely, is the subject of Finding a later finding (in preparation).

The set. The 29,833 survivors and their g-xTB transition-state geometries are in the data below.9 mepd's search benchmarks now draw only from this set, and a search counts as a success when it finds this transition state or a lower one.4 Rerunning a random sample gives nearly all the same outcomes.7

Details

1. Re-optimizing the transition state

Each Reaction-QM B3LYP-D3/TZVP transition-state geometry was optimized to a first-order saddle at g-xTB 2.0.1 with Sella (order 1, through ASE and mepd's g-xTB engine), fmax 0.01 eV/Å, at most 500 steps, 300 s wall-clock limit per reaction. Sella was given no Hessian function and built its curvature model from gradients. Gas phase.

2. Following the path downhill

Sella's IRC (fmax 0.1, at most 1000 steps) from the g-xTB saddle in both directions; the two final structures are the IRC endpoints. When both endpoints are the same structure, the table's status is degenerate_irc.

3. When two structures count as the same

The rule mepd used at screening time (git commit 4f17c0b) required both: the heavy-atom bond graphs are isomorphic (hydrogens removed), and the stereo SMILES of the two structures are identical. It was applied in either IRC direction (endpoint A to reactant and B to product, or the reverse). Bonds are perceived from geometry on both sides, never from the dataset's SMILES labels.

The stereo requirement is strict: an IRC that reaches the right molecules with one centre or double bond flipped counts as not surviving. a later finding (in preparation) measures how often that happens.

109 screened entries store a repeated reactant only once (A + A kept as one A), so their reactant side has fewer atoms than the transition state. None can match and all count as not surviving (104 mismatch, 4 irc_failed, 1 ts_failed); this lowers survival by 0.2 percentage points.

4. How the set is used

A reaction qualifies for the set only by surviving: the reference transition state re-converges at g-xTB and its IRC endpoints match the reference species. Agreement with the B3LYP barrier is not a criterion, because a search on the g-xTB surface is compared with the g-xTB transition state, not with B3LYP.

5. g-xTB and B3LYP barriers for the set

For the survivors, the g-xTB barrier is a median 5.27 kcal/mol above the B3LYP-D3/TZVP one (mean +5.51; mean absolute difference 8.13; 38.1% within 5, 67.9% within 10 and 95.0% within 20 kcal/mol). Both are measured from separately optimized reactant molecules, Reaction-QM's own convention: the g-xTB saddle minus the g-xTB energies of each reactant fragment optimized alone. Electronic energies only (no zero-point or thermal corrections).

This is a difference between two approximate methods, not an error of either; which is closer to the true barrier was not measured and would need a higher-level reference such as CCSD(T).

g-xTB minus B3LYP-D3 barrier for the 29,833 surviving reactions

Barriers from the pre-reaction complex (the IRC's reactant-side well) are in the table as gxtb_barrier_complex_kcal but were not assessed.

6. Which reactions were screened

Not a random sample: the screen walked the dataset in its storage order and was stopped after 63,954 reactions (all of IDs 10001–20000 and 100001–150000, and 3,954 of 150001–160000). The screened part looks like the rest: median B3LYP barrier 54.82 vs 54.25 kcal/mol, mean size 16.97 vs 16.84 atoms, and every element-set share within 0.2 percentage points. data/population.csv.zip lists all 199,890 reactions with a screened flag for other comparisons. All Reaction-QM B3LYP-RXN reactions are neutral closed-shell singlets with 4–33 atoms of C, H, N, O, F, Si, P, S and Cl, so nothing here speaks to ions, radicals or metals.

7. Does it reproduce?

A rerun of 48 random screened reactions (seed 20261013) with mepd as of 2026-10-13 gave the same outcome for 46 and identical barriers where both runs matched. The two that changed did so identically on a second rerun, so they reflect code changes in mepd since the screen, not run-to-run noise. The full screen cost 326 core-hours (median 17 s per reaction on one core).

8. Where this holds

Level of theory. Reference: B3LYP-D3/TZVP (Reaction-QM B3LYP-RXN). Test: g-xTB 2.0.1 energies and gradients; TS optimization and IRC with Sella through ASE (mepd's g-xTB engine); gas phase.

Software.

Chemical domain.

Settings the result depends on.

Tested on 63,954. Not random. The screen went through the dataset in its storage order and was stopped after 63,954 reactions: all of IDs 10001-20000 and 100001-150000, and 3,954 of 150001-160000 (4 reactions that were running when it stopped are missing). Compared with the 135,936 unscreened reactions, the median B3LYP barrier is 54.82 vs 54.25 kcal/mol, the mean size is 16.97 vs 16.84 atoms, and the element-set mix matches to within 0.2 percentage points for every set; data/population.csv.zip allows other comparisons.

Not tested.

Known exceptions.

Reproducibility: statistical. A rerun of a random subset should reproduce the per-reaction status for at least 95% of reactions and the match fraction to within the subset's binomial error. Sella and IRC are deterministic for a given binary and settings, but are not bitwise across library versions.

9. Data

File Size sha256 What it is
data/screen.csv.zip 3.4 MB 5bd3dfb2ef49… One row per screened reaction. Status, barriers, timings, perceived endpoint SMILES.
data/population.csv.zip 3.1 MB b990c5ad79fc… All 199,890 B3LYP-RXN reactions with a screened flag, so the sampling bias can be checked.
data/large/gxtb_ts.xyz.gz 6.8 MB f25004abe86b… Multi-frame XYZ (Angstrom) of the 29,833 g-xTB saddles whose IRC matched, comment line = reaction id. A g-xTB-level reference TS set.

data/screen.csv.zip columns:

check.py recomputes all 24 numbers in this report from these files and compares them with expected_numbers.json.

10. Reproducing it

Software. Python 3.12, mepd, h5py 3.16, ase 3.29, sella 2.6, g-xTB 2.0.1, single-threaded workers.

mepd version. Git commit 4f17c0b, the start of the commit hash that identifies this exact version of the mepd code (git checkout 4f17c0b), plus local changes that were not committed.

Cost. 326 core-hours for 63,954 reactions (median 17 s, 95th percentile 31 s per reaction on one core).

Download. F0001-v1.zip holds everything below: the data, the scripts and the input file.

File What it is
check.py Recomputes every number in this report from data/. Needs only Python 3.
reproduce/figures.py Redraws the figure. Needs matplotlib.
reproduce/build_tables.py Builds the three tables in data/ from the screen's output and the Reaction-QM files.
reproduce/quick_rerun.py Reruns the screen on a random sample of reactions and compares each outcome with the stored one.
reproduce/rerun/ The screen's code (src/benchmark/) and the mepd input file mepd_profile.toml.

Check the numbers (a few seconds):

python check.py

Rerun the screen. This needs mepd (not public yet), g-xTB 2.0.1 on PATH as gxtb-xtb, and h5py, ASE and Sella. The screen ran with mepd git commit 4f17c0b plus local changes that were not saved, so a rerun uses current mepd: on a 48-reaction sample, 46 outcomes matched (see Reproductions below). The original run screened 63,954 reactions in about 326 core-hours.

cd reproduce/rerun
# 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
python ../quick_rerun.py --n 48 --jobs 3       # a sample, compared with the stored outcomes
python -m benchmark.screen_gxtb --jobs 6       # the whole dataset, written to gxtb_screen/results.jsonl
cd ../..
python reproduce/build_tables.py --screen reproduce/rerun/gxtb_screen/results.jsonl \
  --reaction-qm reproduce/rerun/data/reaction_qm --out rerun_data

The screen goes through the dataset in the h5 file's order. The original run was stopped after the first 63,954 reactions, so compare rerun_data/ with data/ on those reactions. These are the scripts the original screen used, tidied for reuse: files renamed, and code for building a later test set removed. The dataset reader reaction_qm.py is the version of 2026-10-03, edited after the screen; how it reads the dataset did not change.

Reproductions.

11. Provenance

Reconstructed: written up after the run; some of it is inferred. The screen's output records no software versions or settings, so they were filled in afterward. The code is the last mepd commit before the run plus the study script it used; the run also had uncommitted mepd changes that were not saved. The g-xTB program is the one installed on 2026-09-17, before the run; other library versions are those installed now.

12. Sources

Cited.

Data this builds on.

Software used.

Other Findings.