This is version 2 of F0001, and its results are outdated. Version 3 (2026-10-24) corrected them: Where minimizing an IRC end changed its species, the IRC is now followed again with a ten times stricter stopping point before the reaction is left out. 31,617 of the same 63,954 reactions are kept (version 2: 29,116); 2,501 reactions rejoin the set. Version 2 left them out because its IRC stopped short. reactions whose IRC stopped short at fmax 0.1 eV/Å, so that minimizing an end changed its species, were left out without retrying a stricter IRC (fixed in git commit 87d9f69). Read the current version.
Status: verified · Version 2, updated 2026-10-22 · Jan Estrada Pabon (ORCID) · 2026-10-22 · no DOI yet
Finding. Of 63,954 Reaction-QM B3LYP-RXN reference transition states re-converged at g-xTB, 29,116 (45.5%) are first-order saddles whose IRC reaches the reference reactant and product by bond connectivity and stereochemistry, without minimization turning either IRC end into another molecule. They form a g-xTB-level benchmark set for reaction-path searches; where the other 34,838 go is the subject of a later finding (in preparation).
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.
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, accepting it only when the optimization converged tightly and the structure has exactly one imaginary frequency.1 From there we followed the path downhill in both directions (the IRC) and minimized each end.2
A reaction is kept when those two ends are the dataset's reactant and product: same atoms, bonded the same way, with the same 3D arrangement. The IRC itself has to get there: minimizing an IRC end must not turn it into another molecule.3 The kept reactions, each with its g-xTB structures, make up the benchmark set.4 We screened 63,954 reactions, about a third of the dataset and a fair sample of it.5
45.5% are kept. For 29,116 of the 63,954 reactions, g-xTB has a transition state whose IRC connects the same reactant and product.
| What g-xTB did with the B3LYP transition state | Share |
|---|---|
| Kept: its IRC connects the same reactant and product | 45.5% |
| Same reactant and product only after minimizing changed an IRC end6 | 4.4% |
| Connects only one of them | 38.7% |
| Connects something else | 9.4% |
| Stereochemistry could not be decided | 0.2% |
| Both downhill paths end in the same place | 0.8% |
| Downhill path failed, or an end could not be minimized | 0.3% |
| Not a first-order saddle at g-xTB (not exactly one imaginary frequency) | 0.5% |
| Optimization did not converge | 0.2% |
These are outcomes at g-xTB; they say nothing about whether the B3LYP transition states are right at B3LYP. The share kept is about the same for reactions of one molecule and of several (44.5% and 46.3%). Where the other 34,838 go is the subject of Finding F0002 (in preparation).
The set. The 29,116 kept reactions, with their minimized reactant and product and their g-xTB transition state, are in the data below.7 mepd's search benchmarks draw only from this set, and a search counts as a success when it finds this transition state or a lower one.4 Screening a random sample again gives the same outcomes.8
How this Finding has changed as more data came in, newest first.
| Version | Date | Change | What changed |
|---|---|---|---|
| 2 | 2026-10-22 | Corrected | 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. |
| 1 | 2026-09-19 | First version | First version. |
Errors corrected in version 2:
0594999 of mepd: transition states and IRC ends were not checked (convergence, frequencies, minimized ends, stereochemistry)5f3b655 of mepd-workflows: reactions were kept whose IRC reached the dataset's endpoints only after minimization changed an IRC end into another speciesVersion 1 (2026-09-19) said: Outdated: corrected in version 2.
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).
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), starting from g-xTB's exact Hessian, until the largest atomic force was below 0.001 eV/Å: at most 1000
steps, then up to two more rounds of 1000 from where it stopped. A converged structure was then checked by its
frequencies and accepted only with exactly one imaginary mode below −10 cm⁻¹. Gas phase, one core, a one-hour
limit per reaction. Settings of mepd git commit 0594999 (mepd.find_ts).
Sella's IRC (through ASE; fmax 0.1 eV/Å, at most 1000
steps) from the g-xTB saddle in both directions. An IRC stops before it reaches a minimum, so each end was then
minimized (Sella with g-xTB's exact Hessian, largest force below 0.001 eV/Å) and checked by its frequencies: an
end that is still a saddle (a mode below −10 cm⁻¹) is pushed 0.1 Å along that mode, both ways, and minimized
again, up to three times (mepd.irc and mepd.minimize). When both minimized ends are the same structure, the
status is degenerate_irc.
Two structures are the same molecule when their
bond graphs are the same and their stereochemistry (stereo SMILES, with an OpenBabel second opinion when RDKit
cannot perceive it) is the same (mepd.same_molecule). Bonds are perceived from geometry on both sides, never from
the dataset's SMILES labels. The rule is applied in either IRC direction. When the stereochemistry of a side
cannot be decided, the reaction is not kept (stereo_undetermined).
The stereo requirement is strict: an IRC that reaches the right molecules with one centre or double bond flipped does not count.
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 of them is kept.
A reaction qualifies for the set only by the screen: its reference transition state re-converges at g-xTB and its IRC reaches the reference reactant and product. 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. The set's reactant and product are the minimized IRC ends, which share the transition state's atom order and frame, not the dataset's own endpoint geometries.
The same reactions as version 1. Not a random
sample: the first 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. 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.
Each minimized IRC end is compared with the raw IRC
end it came from. In 2,798 reactions the minimized ends were the dataset's reactant and product,
but minimizing had turned an IRC end into another molecule: the IRC stopped far from a minimum, or barely moved off a
very soft saddle, and the minimization carried on into another molecule that happens to be the dataset's. The g-xTB
transition state is then not that reaction's transition state, so these are not kept (for example
RXN_0000011948: imaginary mode −51 cm⁻¹, both ends falling about 130 kcal/mol when minimized). The rule is
cautious: some of these may still be the same reaction. They are listed in data/screen.csv.zip with status
match and kept 0.
772 kept reactions have a soft transition state (imaginary mode above −200 cm⁻¹) whose IRC does reach both ends; they are kept.
data/screen.csv.zip has one row per screened reaction. barrier_kcal
is the g-xTB transition state above the minimized reactant-side IRC end (the pre-reaction complex for reactions of
several molecules); dataset_barrier_kcal is Reaction-QM's B3LYP barrier from separated reactant molecules. The two
are measured from different references and are not compared here; version 1 compared g-xTB and B3LYP barriers from
separated molecules. data/large/benchmark_set.xyz.gz holds the set's structures.
Screening 12 random reactions again
(seed 20261022, 2026-10-22) with the published script gave the same outcome for 11 of
12, with barriers within 0.007 kcal/mol where both runs had one
(provenance/quick_rerun.json). The one that differed, RXN_0000108544, was not a first-order saddle in the
screen but was in the rerun, whose IRC then ended in one well; it is not kept either way. The whole screen cost 1,523 core-hours (median 79 s
per reaction on one core).
Level of theory. Reference: B3LYP-D3/TZVP (Reaction-QM B3LYP-RXN). Test: g-xTB 2.0.1 energies, gradients and Hessians; TS optimization, IRC and end minimization 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 reactions of version 1's screen, which went through the dataset in its storage order (IDs 10001-20000, 100001-150000 and 3,954 of 150001-160000). data/population.csv.zip allows comparisons with the rest.
Not tested.
Known exceptions.
Reproducibility: statistical. A rerun of a random subset should reproduce each reaction's outcome for at least 90% of reactions. Sella and the IRC are deterministic for a given binary and settings, but not bitwise across library versions.
| File | Size | sha256 | What it is |
|---|---|---|---|
data/screen.csv.zip |
4.2 MB | 5000ac1984be… |
One row per screened reaction: outcome, whether it is in the set, and the checks behind it. |
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/benchmark_set.xyz.gz |
44.4 MB | 0b0a7b02ee14… |
Multi-frame XYZ (Angstrom) of the set: for each kept reaction its minimized reactant, g-xTB transition state and minimized product, in the transition state's atom order (comment line = reaction id and start | ts | end). |
data/screen.csv.zip columns:
check.py recomputes all 26 numbers in this report from these files and compares them with expected_numbers.json.
Software. Python 3.12, mepd, g-xTB 2.0.1, Sella 2.6, ASE 3.29, RDKit, OpenBabel; one core per reaction.
mepd version. Git commit 0594999, the start of the commit hash that identifies this exact version of the mepd code (git checkout 0594999).
Cost. 1,523 core-hours for 63,954 reactions (median 79 s per reaction on one core).
Download. F0001-v2.zip holds the tables, the check script, the screen script and the
list of screened reactions.
| File | What it is |
|---|---|
check.py |
Recomputes every number in this report from data/. Needs only Python 3. |
data/screen.csv.zip |
One row per screened reaction: outcome, whether it is in the set, the g-xTB transition state's lowest frequencies, how far each IRC end fell when minimized and whether it changed species, barriers, perceived SMILES. |
data/population.csv.zip |
All 199,890 B3LYP-RXN reactions with a screened flag. |
data/large/benchmark_set.xyz.gz |
The set: for each kept reaction, its minimized reactant, g-xTB transition state and minimized product (Å; comment line = reaction id and part). |
reproduce/rerun/benchmark.py |
The script that ran the screen (import-reaction-qm, then screen). A uv script: it installs mepd at the git commit it names. |
reproduce/rerun/ids.txt |
The 63,954 screened reactions. |
reproduce/rerun/quick_rerun.py |
Screens a random sample again and compares it with the table. |
reproduce/build_tables.py |
Builds data/screen.csv.zip and the set file from a screened workspace. |
Check the numbers (a few seconds):
python check.py
Rerun. This needs uv, access to mepd (git commit da31dcb; mepd is not public
yet, so uv fetches it over HTTPS with your GitHub credentials, e.g. after gh auth setup-git), g-xTB 2.0.1 on
PATH as gxtb-xtb, and B3LYPD3_TZVP.h5 from Reaction-QM. A quick
rerun of 12 random reactions takes a few minutes:
cd reproduce/rerun
python quick_rerun.py --h5 PATH/B3LYPD3_TZVP.h5 --n 12 --jobs 4
The whole screen took about 1,500 core-hours (median 79 s per reaction on one core):
cd reproduce/rerun
export OMP_NUM_THREADS=1
uv run --no-config benchmark.py import-reaction-qm ws PATH/B3LYPD3_TZVP.h5 --ids ids.txt
uv run --no-config benchmark.py screen ws --timeout 3600 --jobs 8
python ../build_tables.py ws ../../data/population.csv.zip rerun_data
Then compare rerun_data/ with data/. The screen ran with mepd git commit 0594999; the script pins da31dcb, whose
later changes only lower memory use in path searches. benchmark.py can also send the work to the authors'
cluster (--backend afh); that is not needed here.
Reproductions.
Captured: recorded by the run itself (provenance.json). The screen recorded its mepd provenance (package versions, program paths and hashes, settings).
Cited.
Data this builds on.
Software used.
Other Findings.