Status: verified · Version 2, updated 2026-10-24 · Jan Estrada Pabon (ORCID) · 2026-10-24 · no DOI yet
Finding. Of 10,073 Transition1x reactions, 8,424 (83.6%) have a g-xTB transition state whose IRC connects the dataset's reactant and product. Searching them with mepd channels on g-xTB, 1,249 of them gave a verified route, every step of it reaching its minima by its own IRC, whose highest transition state lies more than 1 kcal/mol below that reference (14.8%; median 4.68 kcal/mol lower); for 431 (5.1%) no route was found.
Updated in version 2 (2026-10-24): corrected. Route steps must now reach their minima by their own IRC, and a reference IRC that stops short is retried with a stricter stopping point before a reaction is left out. 1,249 of the 8,424 reactions now in the set have a lower route (version 1: 1,232 of 8,271); 153 reactions rejoin the set, and in 20 the best route changed (11 now have none). Version 1's counts should not be used. How this Finding changed
mepd is a tool for mapping reaction mechanisms. Given a reactant and a product, its search, mepd channels,
looks for the transition state between them: the top of the
energy hill the reaction has to climb. A lower hill means a faster reaction, so the lowest transition state
connecting the two is the one that matters.
We test the search on reactions whose transition state is already known. Findings F0001 and F0002 did this for Reaction-QM; this Finding repeats both steps, with the same settings, on Transition1x, a dataset of about 10,000 reactions of small organic molecules whose transition states were found by nudged-elastic-band calculations with the density functional ωB97x. The search runs on g-xTB, a fast approximate quantum-chemistry method, so each known transition state is first carried over to g-xTB and kept only when it still leads to the dataset's reactant and product.
The benchmark set. We gave g-xTB each Transition1x transition state as a starting point and let it settle into the nearest g-xTB transition state, then followed the path downhill in both directions (the IRC) and minimized each end. A reaction is kept when the two ends are the dataset's reactant and product, and the IRC itself gets there: minimizing an IRC end must not turn it into another molecule. Where it did, the IRC was followed again, with a ten times stricter stopping point, and that IRC decides.1
The search. For each kept reaction, mepd channels built several starting arrangements of the reactant and product and searched for paths between them on g-xTB.2 Every transition state it reports was checked: optimized, then followed downhill to confirm it joins the requested reactant and product, either directly or through intermediates.3 Each step's IRC must reach its minima itself, by the same rule and with the same retry.4 We compared the best route's highest transition state with the known one, both on g-xTB; a route counts as lower when it is more than 1 kcal/mol below.5 All 8,424 reactions of the set were searched.6 Version 1 had neither the IRC retries nor the step check.7
The benchmark set: 8,424 of 10,073 reactions (83.6%) are kept.
| g-xTB outcome for the Transition1x transition state | Reactions |
|---|---|
| Kept: its IRC connects the same ends | 8,424 |
| Same ends only after minimizing changed an IRC end8 | 15 |
| Connects only one end | 1,308 |
| Connects something else | 93 |
| Both IRC directions end in one place | 130 |
| An IRC end could not be minimized | 49 |
| Not exactly one imaginary frequency | 34 |
| Optimization did not converge | 17 |
| Stereochemistry undecided | 3 |
The stricter IRC was needed for 349 reactions; 153 of them are in the set.
The search.
| Reactions searched | 8,424 |
|---|---|
| Verified route found | 7,979 |
| Lower than the reference | 1,249 (14.8%) |
| … as a single step | 716 (median 2.92 kcal/mol lower) |
| … through intermediates | 533 (median 12.08 kcal/mol lower) |
| About the same (within 1 kcal/mol) | 6,398 |
| Only higher routes | 332 |
| No route found | 431 (5.1%)9 |
| … of which every route found failed the step check4 | 11 |
| Stopped at the time limit | 0 |
| Stopped by an error | 1410 |
| Largest amount lower | 79.6 kcal/mol |
The 10 single-step and 10 multistep routes furthest below the reference:
Compared with Reaction-QM (F0002), fewer searches find a lower route, and far fewer find none.11 Counts are what one search budget found: a floor, not a ceiling. Higher levels of theory were not tested.
How this Finding has changed as more data came in, newest first.
| Version | Date | Change | What changed |
|---|---|---|---|
| 2 | 2026-10-24 | Corrected | Route steps must now reach their minima by their own IRC, and a reference IRC that stops short is retried with a stricter stopping point before a reaction is left out. 1,249 of the 8,424 reactions now in the set have a lower route (version 1: 1,232 of 8,271); 153 reactions rejoin the set, and in 20 the best route changed (11 now have none). Version 1's counts should not be used. |
| 1 | 2026-10-23 | First version | First version. |
Errors corrected in version 2:
87d9f69 of mepd-workflows: routes were counted although a step's IRC reached its intermediate or end only after minimization turned the IRC end into another molecule87d9f69 of mepd-workflows: reactions whose reference IRC stopped short at fmax 0.1 eV/Å, so that minimizing an end changed its species, were left out without retrying a stricter IRCVersion 1 (2026-10-23) said: Outdated: corrected in version 2. Read version 1, with its data.
Of 10,073 Transition1x reactions, 8,271 (82.1%) have a g-xTB transition state whose IRC connects the dataset's reactant and product. Searching them with mepd channels on g-xTB, 1,232 of them gave a verified route whose highest transition state lies more than 1 kcal/mol below that reference (14.9%; median 4.69 kcal/mol lower); for 407 (4.9%) no route was found.
The F0001 protocol, unchanged. Each Transition1x
ωB97x/6-31G(d) transition state was optimized to a first-order saddle at g-xTB 2.0.1 with Sella, 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), and accepted only with exactly one imaginary mode below −10 cm⁻¹. Sella's IRC (fmax
0.1 eV/Å, at most 1000 steps) then ran in both directions, and each end was minimized with the exact Hessian and
checked by its frequencies, with up to three 0.1 Å pushes off a remaining saddle. When minimizing changed an IRC
end into another molecule, the IRC was run again from the same transition state with fmax 0.01 eV/Å (at most
3000 steps per direction), and that IRC and its minimized ends decide the reaction; this was needed for
349 reactions (1 retry did not finish, and its first IRC stands). Two structures count as the
same molecule when their bond graphs, perceived from geometry, and their stereochemistry agree. A reaction is
kept when the minimized ends are the dataset's reactant and product (in either direction) and minimizing left each
IRC end the same species. The set's reactant and product are those minimized IRC ends. Transition1x reactions are
neutral, of C, H, N and O, and were computed as closed-shell singlets; the kept ones have 5 to 23 atoms.
The kept reference transition states are high: median 80.73 kcal/mol above the
reactant-side IRC end. 89 kept reactions have a soft transition state (imaginary mode above
−200 cm⁻¹). Per reaction: data/screen.csv.
mepd channels, with the F0002 settings unchanged. Each setting is explained in the mepd manual's page on channel searches (online; a copy is in this
Finding's download as reproduce/mepd-manual-channels.html):
n_conformers): up to five RDKit conformers each of the reactant
and of the product, chosen to differ in shape, each minimized on g-xTB. Every reactant conformer is paired with
every product conformer.pairs_per_mechanism): the pairs are grouped by
mechanism (which bonds break and which form, from SLAPMapper's atom mapping), and in each group only the five
pairs whose two ends are closest in shape (endpoint-rmsd) get a path search.direct_only): when a path turns out to pass through intermediates,
only the pieces that start or end at the requested reactant or product are searched further.search_budget): after 30 minutes no new path search starts
and paths are no longer split; the transition-state optimizations and IRCs of what was found still run.hessian_minimum_frequency_cutoff,
hessian_minima_rescue_displacement): a path is split at an
apparent intermediate only if it has no frequency below −20 cm⁻¹; one that fails is pushed 0.3 bohr along its
lowest mode, each way, and minimized again.The reactant and product are the minimized IRC ends of the re-converged reference transition state, so every search starts from the structures the reference is compared on. Screen and search ran with mepd git commit da31dcb.
Only routes mepd itself verified count. A single-step route is one transition state (exactly one imaginary frequency) whose IRC, with both ends minimized, reconnects the requested reactant and product species (bond graph and stereochemistry). A multistep route is a chain of such transition states through intermediates from reactant to product; its height is its highest transition state. Routes that lead to other species are not counted.
mepd channels files each step
under the minima its IRC ends minimize to, without checking that minimizing kept each end the same molecule.
We checked every step of every route found, lowest route first, with the rule of the benchmark set: when
minimizing an IRC end changed it into another molecule, the step's IRC was run again from its transition state
with fmax 0.01 eV/Å (at most 3000 steps). The step stands when both ends of that IRC keep their species on
minimization and are the same two molecules as before. A route counts only when all its steps stand, and the
best route is the lowest that counts. 178 step IRCs in
170 reactions were retried. The best route changed in
20 reactions; in 11 no route was left, and they
count as no route found. routes_dropped and step_ircs_retried in data/search_outcomes.csv give the
counts per reaction.
Both barriers are measured from one floor per reaction, the lowest g-xTB energy of the reactant and its search conformers, so the amount lower is the reference transition state's energy minus that of the best route's highest one. Outcomes: lower (more than 1 kcal/mol below), about the same (within 1), only higher (every route more than 1 kcal/mol above). An IRC end of a route found can lie slightly below the floor (another arrangement of the reactant molecules); the barriers shown are then a little high, but the amounts lower do not depend on the floor.
Each of the 8,424 reactions of the benchmark set was searched once.
Per reaction: data/search_outcomes.csv.
Version 1 counted routes with a step whose IRC reached its intermediate or end only after minimization turned the IRC end into another molecule, so the minimization, not the transition state, did part of the chemistry. It also left out of the benchmark set every reaction whose first IRC had that problem, without trying a stricter IRC. Version 1's counts (8,271 reactions in the set, 1,232 lower) should not be used; the searches of version 1 are reused unchanged, and the newly kept reactions were searched with the same settings.
Each minimized IRC end is
compared with the raw IRC end it came from. In 15 reactions the minimized ends were the dataset's
reactant and product, but minimizing had turned an IRC end into another molecule, so the g-xTB transition state is
not that reaction's transition state. Mostly the IRC stopped far from a minimum: in
12 an end dropped more than 20 kcal/mol when minimized; 2
sit on soft saddles (imaginary mode above −200 cm⁻¹). These are not in the set. The rule is cautious: some may still
be the same reaction. They are listed in data/screen.csv with status match and kept 0. The first IRC stops
when the largest force falls below 0.1 eV/Å, which on a flat stretch of the surface can be far from a minimum; the
stricter IRC brought 153 reactions back into the set (149 of them had
matched the dataset's ends before, by minimization alone). irc_retried and loose_irc_status in
data/screen.csv mark them. In the kept set, the median energy drop on minimizing an IRC end is
0.82 kcal/mol.
No transition state connecting the requested reactant and
product was found within the budget: either no path search led to one, every transition state found led
elsewhere, or every route found had a step whose IRC did not reach its minima by itself.4 It is not evidence
that no such route exists. These reactions are listed in data/search_outcomes.csv with status no_route.
In each of these, every path search between
the reactant and product failed (the path method, GSM, stopped with an error), so mepd had no result to compare
and reports an error instead of "no route found". None ran out of memory or time. They are listed in
data/search_outcomes.csv with status error; they are effectively reactions with no route.
Each search builds conformers of the two ends, pairs them, and runs a path search pair by pair until its 30-minute budget is used up. One candidate pair is the reference IRC's own two ends, between which the reference transition state is known to lie. For the 420 reactions where no route was found at all (leaving out the 11 whose routes were all set aside), that pair:
| What happened to the pair of IRC ends | Reactions |
|---|---|
| Never queued | 35 (8.3%) |
| Queued, but the budget ran out before its turn | 136 (32.4%) |
| Searched; the path went through intermediates, whose legs these direct-only searches do not follow | 111 (26.4%) |
| Searched as one step; its transition state led to other species | 138 (32.9%) |
In 12 of these reactions an IRC end was not among the conformers the search kept
at all. 262 of the 420 searches used up the budget, and
341 found transition states that lead to other species. Unlike in Reaction-QM, where the
pair of IRC ends was mostly not searched in time, here it was mostly searched and its path either split into
steps the search does not follow or led to another transition state. Pairs are compared by geometry (sorted
interatomic distances, 0.02 Å), since a search renumbers atoms when it maps the two ends. Per reaction:
data/search_diagnostics.csv.
Level of theory. g-xTB 2.0.1 throughout: TS re-convergence, IRC and minimization (Sella through ASE and mepd's g-xTB engine), path search (GSM); gas phase. Reference TSs are Transition1x's ωB97x/6-31G(d) TSs re-converged at g-xTB.
Software.
Chemical domain.
Settings the result depends on.
Tested on 8,424. Screen: all 10,073 Transition1x reactions. Search: every reaction of the set (8,424), each searched once.
Not tested.
Known exceptions.
Reproducibility: statistical. Rerunning the searches is not expected to find exactly the same routes: they depend on random conformers, timing and the code version. The screen is deterministic up to small numerical differences.
| File | Size | sha256 | What it is |
|---|---|---|---|
data/screen.csv |
0.7 MB | 510fb1469067… |
One row per screened Transition1x reaction: outcome, whether it is in the set, and the checks behind it. |
data/search_outcomes.csv |
1.1 MB | 0f1970641ae6… |
One row per reaction searched: outcome, barriers of the reference TS and of the best route, the amount lower. |
data/search_diagnostics.csv |
0.3 MB | aedd4fd49e44… |
Per reaction with a route or none (status as in search_outcomes.csv): whether the pair of the reference IRC's two ends was searched, and how the search used its budget. |
data/large/inputs.tar.xz |
10.9 MB | a1c00081f5c3… |
The input of every search: start.xyz, end.xyz (the minimized reference IRC ends) and ts.xyz (the re-converged reference TS) for each reaction of the set, in Å, with reactions.csv and the screen records (screen/results.jsonl, screen/settings.json) that select the set. Unpack in reproduce/rerun/. |
provenance/rerun_test.json |
4 kB | 397c250233f1… |
The rerun package run as a reader would, on a few reactions, compared with data/. |
report/winners.html |
0.4 MB | e7a4d7fa13eb… |
The 10 single-step and 10 multistep routes furthest below the reference, with both paths and their g-xTB energies (interactive page). |
data/screen.csv columns:
data/search_outcomes.csv columns:
data/search_diagnostics.csv columns:
check.py recomputes all 53 numbers in this report from these files and compares them with expected_numbers.json.
Software. Python 3.12, mepd, g-xTB 2.0.1, patched molecularGSM, RDKit, Sella; one thread per task.
mepd version. Git commit da31dcb, the start of the commit hash that identifies this exact version of the mepd code (git checkout da31dcb).
Cost. Screen: about 93 core-hours for all 10,073, and about 3 for the stricter IRCs. Search: about 2,600 core-hours, median 17 minutes per reaction on one core; route-step check about 1 core-hour.
Download. F0004-v2.zip holds the data, the check script, the rerun scripts and the input
structures of the search.
| File | What it is |
|---|---|
check.py |
Recomputes every number on this page from data/. Needs only Python 3. |
data/large/inputs.tar.xz |
The input of every search: for each of the 8,424 reactions of the set, the minimized reactant and product (start.xyz, end.xyz) and the re-converged reference transition state (ts.xyz), all in Å, with the reaction list and the screen records that pick the set. |
reproduce/rerun/benchmark.py |
The script that ran the screen and the searches (its import-transition1x, screen, reirc, search and rescore commands). A uv script: it installs mepd at the git commit it names. |
reproduce/rerun/search_options.toml |
The mepd channels settings of every search. |
reproduce/rerun/mepd_profile.toml |
The mepd input file: GSM as the path method, g-xTB as the engine. |
reproduce/rerun/screen_table.py |
Builds screen.csv from a screened workspace. Needs only Python 3. |
reproduce/rerun/outcomes.py |
Builds search_outcomes.csv from the searched workspace. Needs only Python 3. |
reproduce/rerun/search_diagnostics.py |
Builds search_diagnostics.csv from the searched workspace. Needs Python 3 with numpy. |
provenance/rerun_test.json |
A test of these steps on a few reactions, compared with the tables. |
Check the numbers (a few seconds):
python check.py
Both reruns need uv and 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), and g-xTB 2.0.1 on
PATH as gxtb-xtb.
Rerun the screen. It also needs Transition1x.h5 from Transition1x
(version 4). The screen of all 10,073 reactions took about 93 core-hours (median 31 s per reaction on one core),
and retrying the IRC where an end changed species (reirc, 349 reactions) about 3 more:
cd reproduce/rerun
export OMP_NUM_THREADS=1
uv run --no-config benchmark.py import-transition1x ws_screen PATH/Transition1x.h5
uv run --no-config benchmark.py screen ws_screen --timeout 3600 --jobs 8
uv run --no-config benchmark.py reirc ws_screen --timeout 1800 --jobs 8
python screen_table.py ws_screen rerun_screen.csv
Then compare rerun_screen.csv with data/screen.csv. --ids FILE (one reaction name per line, e.g. rxn0017)
imports only those reactions.
Rerun the searches. These start from the structures in inputs.tar.xz, so the screen need not be rerun first. They
also need the patched GSM from jandestrada/molecularGSM (branch
mepd) on PATH as gsm. Each search takes up to 2 hours on one core (median 17 minutes); all 8,424 took about
2,600 core-hours. --jobs sets how many run at once. rescore then checks every step of every route found
and retries the IRC of a step whose end changed species (about 1 core-hour in all).
cd reproduce/rerun
tar xJf ../../data/large/inputs.tar.xz # -> ws/
export OMP_NUM_THREADS=1
uv run --no-config benchmark.py search ws --profile mepd_profile.toml --options search_options.toml \
--timeout 7200 --jobs 8
uv run --no-config benchmark.py rescore ws --timeout 3600 --jobs 8
python outcomes.py ws rerun_search_outcomes.csv
python search_diagnostics.py ws rerun_search_outcomes.csv rerun_search_diagnostics.csv
Then compare the two tables with data/. A run can be stopped and started again: reactions already searched are
skipped. To try a few reactions first, keep only their lines in ws/screen/results.jsonl before the search. The
routes found may not match exactly: they depend on random conformers and timing. (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). Each screen and search stage records its mepd provenance (code version, settings, programs). The IRCs ran with mepd git commit da31dcb; the comparisons that decide the retried IRCs and the route-step check ran with mepd git commit 257dbb7, whose changes since da31dcb concern metal centres only (none in Transition1x).
Cited.
Data this builds on.
Software used.
Other Findings.