← All findings

Contents

F0002: mepd channels finds g-xTB transition states below the reference ones in Reaction-QM

This is version 2 of F0002, and its results are outdated. Version 3 (2026-10-22) corrected them: The benchmark set was tightened to 29,116 reactions: 2,798 reactions whose reference IRC did not itself reach the dataset's endpoints (minimizing an IRC end changed its species) were left out, since their reference transition state is not the reaction's. Same searches; version 2's counts include them. the benchmark set kept reactions whose reference 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 2, updated 2026-10-22 · Jan Estrada Pabon (ORCID) · 2026-10-22 · no DOI yet

Finding. Searching with mepd channels on the g-xTB surface, 8,851 of the 31,914 Reaction-QM reactions of the F0001 benchmark set gave a verified route whose highest transition state lies more than 1 kcal/mol below the re-converged reference one (27.7%; median 5.11 kcal/mol lower). For 5,153 (16.1%) no route was found.

Background

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, from Reaction-QM. The search runs on g-xTB, a fast approximate quantum-chemistry method, so each known transition state was first re-converged on g-xTB and kept only when it still leads to both of the dataset's endpoints (Finding F0001). The question here: does the search find a route that is lower than the known one?

Approach

For each reaction of the F0001 benchmark set, mepd channels built several starting arrangements of the reactant and product and searched for paths between them on g-xTB.1 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.2

We compared the energy of the best route's highest transition state with that of the known transition state, both on g-xTB. A route counts as lower when it is more than 1 kcal/mol below.3 All 31,914 reactions of the set were searched.

Results

Reactions searched 31,914
Search found a verified route 26,759
Lower than the known transition state 8,851 (27.7%)
… as a single step 5,229 (median 3.35 kcal/mol lower)
… through intermediates 3,622 (median 10.83 kcal/mol lower)
About the same (within 1 kcal/mol) 15,561
Only higher routes 2,347
No route found 5,153 (16.1%)4
Stopped at the time limit 0
Stopped by an error 25
Largest amount lower 97.71 kcal/mol

The 10 single-step and 10 multistep routes furthest below the known transition state, beside the dataset's own paths:

These are counts of what one search budget found, so they are a floor, not a ceiling.7 Whether the lower routes stay lower at a higher level of theory was not tested here.

History

How this Finding has changed as more data came in, newest first.

Version Date Change What changed
2 2026-10-22 Corrected Rerun with corrected code on the whole F0001 benchmark set (31,914 Reaction-QM reactions). Version 1's counts came from searches with the two errors listed here and should not be used.
1 2026-10-05 First version First version.

Errors corrected in version 2:

Version 1 (2026-10-05) said: Outdated: corrected in version 2.

Searching with mepd channels on the g-xTB surface found a verified route whose highest transition state lies more than 1 kcal/mol below the dataset's own transition state (re-converged at g-xTB) for 103 of 500 Reaction-QM reactions (median 6.02 kcal/mol lower) and for 12 of 66 Geodesic-set reactions (median 15.72 kcal/mol lower).

Details

mepd channels with five RDKit conformers per side, direct paths only, five path searches per mechanism, a 30-minute search budget and a 2-hour hard limit per reaction, one core each, GSM with 20 nodes and at most 80 iterations as the path method. Atoms are mapped between the two ends by mepd's SLAPMapper with the endpoint-RMSD metric. A minimum is accepted when its Hessian has no frequency below −20 cm⁻¹; a rejected minimum gets one 0.3 bohr push along each imaginary mode. The reactant and product are the two ends of the re-converged reference transition state's IRC, each minimized (F0001), so every search starts from the structures the reference is compared on. The searches ran with mepd git commits 0594999 (the first 1,248), 9aee085 and da31dcb (the rest); the later two only use less memory and give the same routes and energies.

2. What counts as a found route

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.

3. Comparing energies

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.

4. No route found

No transition state connecting the requested reactant and product was found within the budget: either no path search led to one, or every transition state found led elsewhere. It is not evidence that no such route exists. These reactions are listed in data/search_outcomes.csv with status no_route.

5. Searches run twice

Nine searches first stopped early: four were killed for running out of memory, three reached the 2-hour limit and two stopped with an error. All nine were run again with the same settings, with mepd git commit da31dcb, which only lowers a search's memory use. Seven finished: two found a lower route, two about the same and three no route. The other two stopped with the same error again: every path search between their reactant and product failed, so mepd had no result to compare and reports an error instead of "no route found". They are listed in data/search_outcomes.csv with status error.

6. Which reactions

The F0001 benchmark set: of Reaction-QM's B3LYP-RXN reactions, the 31,914 whose reference transition state, re-converged on g-xTB, leads by its IRC (both ends minimized) to both of the dataset's endpoints, with the same bond graph and stereochemistry. All are neutral closed-shell singlets of 5 to 33 atoms.

7. Where this holds

Level of theory. g-xTB 2.0.1 throughout: path search (GSM), TS optimization and IRC (Sella through ASE and mepd's g-xTB engine); gas phase. Reference TSs are Reaction-QM's B3LYP TSs re-converged at g-xTB (F0001).

Software.

Chemical domain.

Settings the result depends on.

Tested on 31,914. All 31,914 reactions of the F0001 benchmark set.

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.

8. Data

File Size sha256 What it is
data/benchmark_set.csv 0.6 MB 3a7885982374… The reactions of the F0001 benchmark set searched here, with their sizes.
data/search_outcomes.csv 4.0 MB d9a83f1c0457… One row per reaction searched: outcome, barriers of the reference TS and of the best route, the amount lower.
data/large/inputs.tar.xz 51.4 MB 3d125b3202d8… 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, in Å, with reactions.csv and the F0001 screen records (screen/results.jsonl, screen/settings.json) that select the set. Unpack in reproduce/rerun/.
report/winners.html 0.4 MB 083724e42714… The 10 single-step and 10 multistep routes furthest below the reference, with both paths and their g-xTB energies (interactive page).

data/benchmark_set.csv columns:

data/search_outcomes.csv columns:

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

9. Reproducing it

Software. Python 3.12, mepd, g-xTB 2.0.1, patched molecularGSM, RDKit, Sella; one core per search.

mepd version. Git commit da31dcb, the start of the commit hash that identifies this exact version of the mepd code (git checkout da31dcb).

Cost. About 40 minutes of one core per reaction.

Download. F0002-v2.zip holds the data, the check script, the rerun scripts and the input structures.

File What it is
check.py Recomputes every number on this page from data/search_outcomes.csv. Needs only Python 3.
data/large/inputs.tar.xz The input of every search: for each of the 31,914 reactions, 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 F0001 screen records that pick the set.
reproduce/rerun/benchmark.py The script that ran the searches (its search command). 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/outcomes.py Builds search_outcomes.csv from the searched workspace. Needs only Python 3.

Check the numbers (a few seconds):

python check.py

Rerun the searches. This needs 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). It also needs g-xTB 2.0.1 on PATH as gxtb-xtb, and the patched GSM from jandestrada/molecularGSM (branch mepd) on PATH as gsm. Each search takes up to 2 hours on one core (median 37 minutes), so all 31,914 took about 18,000 core-hours; --jobs sets how many run at once.

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
python outcomes.py ws rerun_search_outcomes.csv

Then compare rerun_search_outcomes.csv with data/search_outcomes.csv. 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 searches to the authors' cluster, --backend afh; that is not needed here.)

Reproductions.

10. Provenance

Captured: recorded by the run itself (provenance.json). Each search stage records its mepd provenance (code version, settings, programs).

11. Sources

Data this builds on.

Cited.

Software used.

Other Findings.