nebcert 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nebcert-1.2.0/LICENSE +21 -0
- nebcert-1.2.0/PKG-INFO +180 -0
- nebcert-1.2.0/README.md +140 -0
- nebcert-1.2.0/nebcert/__init__.py +28 -0
- nebcert-1.2.0/nebcert/citation.py +22 -0
- nebcert-1.2.0/nebcert/cli.py +323 -0
- nebcert-1.2.0/nebcert/core/__init__.py +22 -0
- nebcert-1.2.0/nebcert/core/neb_profile.py +240 -0
- nebcert-1.2.0/nebcert/core/scoring.py +113 -0
- nebcert-1.2.0/nebcert/core/ts_frequency.py +95 -0
- nebcert-1.2.0/nebcert/core/tst_kinetics.py +140 -0
- nebcert-1.2.0/nebcert/core/tunneling.py +195 -0
- nebcert-1.2.0/nebcert/parsers/__init__.py +15 -0
- nebcert-1.2.0/nebcert/parsers/gaussian_irc.py +60 -0
- nebcert-1.2.0/nebcert/parsers/generic_mep_csv.py +52 -0
- nebcert-1.2.0/nebcert/parsers/orca_neb.py +121 -0
- nebcert-1.2.0/nebcert/parsers/vasp_neb.py +58 -0
- nebcert-1.2.0/nebcert/reporters/__init__.py +13 -0
- nebcert-1.2.0/nebcert/reporters/html_report.py +309 -0
- nebcert-1.2.0/nebcert/reporters/manuscript_prep.py +126 -0
- nebcert-1.2.0/nebcert/reporters/plot_generator.py +153 -0
- nebcert-1.2.0/nebcert.egg-info/PKG-INFO +180 -0
- nebcert-1.2.0/nebcert.egg-info/SOURCES.txt +36 -0
- nebcert-1.2.0/nebcert.egg-info/dependency_links.txt +1 -0
- nebcert-1.2.0/nebcert.egg-info/entry_points.txt +2 -0
- nebcert-1.2.0/nebcert.egg-info/requires.txt +13 -0
- nebcert-1.2.0/nebcert.egg-info/top_level.txt +1 -0
- nebcert-1.2.0/pyproject.toml +77 -0
- nebcert-1.2.0/setup.cfg +4 -0
- nebcert-1.2.0/tests/test_cli.py +29 -0
- nebcert-1.2.0/tests/test_eckart_reference.py +50 -0
- nebcert-1.2.0/tests/test_neb_profile.py +100 -0
- nebcert-1.2.0/tests/test_orca_neb_real.py +30 -0
- nebcert-1.2.0/tests/test_parsers.py +54 -0
- nebcert-1.2.0/tests/test_scoring.py +96 -0
- nebcert-1.2.0/tests/test_ts_frequency.py +45 -0
- nebcert-1.2.0/tests/test_tst_kinetics.py +27 -0
- nebcert-1.2.0/tests/test_tunneling.py +27 -0
nebcert-1.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Andre Monreal-Hernández
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
nebcert-1.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nebcert
|
|
3
|
+
Version: 1.2.0
|
|
4
|
+
Summary: Quality checks for NEB reaction paths, transition states and tunnelling-corrected rate constants (ORCA NEB/NEB-TS outputs)
|
|
5
|
+
Author-email: Andrés Monreal-Hernández <andres.monreal@ues.mx>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/sircalch/nebcert
|
|
8
|
+
Project-URL: Documentation, https://github.com/sircalch/nebcert#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/sircalch/nebcert.git
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/sircalch/nebcert/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/sircalch/nebcert/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: chemical-kinetics,transition-state-theory,nudged-elastic-band,neb,ci-neb,reaction-pathway,minimum-energy-path,quantum-tunneling,eckart-barrier,wigner-correction,irc,vasp,orca,gaussian,computational-chemistry,reproducibility
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Operating System :: OS Independent
|
|
24
|
+
Requires-Python: >=3.9
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: numpy>=1.20.0
|
|
28
|
+
Requires-Dist: scipy>=1.7.0
|
|
29
|
+
Requires-Dist: pandas>=1.3.0
|
|
30
|
+
Requires-Dist: matplotlib>=3.5.0
|
|
31
|
+
Requires-Dist: jinja2>=3.0.0
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: build>=0.10.0; extra == "dev"
|
|
38
|
+
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# NEBCert
|
|
42
|
+
|
|
43
|
+
[](https://github.com/sircalch/nebcert/actions)
|
|
44
|
+
[](https://opensource.org/licenses/MIT)
|
|
45
|
+
[](https://doi.org/10.5281/zenodo.22217586)
|
|
46
|
+
|
|
47
|
+
Quality checks for nudged-elastic-band (NEB) reaction paths, transition states and tunnelling-corrected
|
|
48
|
+
rate constants. NEBCert reads an ORCA NEB / NEB-CI / NEB-TS output (or a table of image energies), checks the
|
|
49
|
+
band and the transition state, and computes Eyring rate constants with Wigner and Eckart tunnelling factors.
|
|
50
|
+
|
|
51
|
+
A PASS means that the checks that were run found nothing wrong. It does not show that the path is the
|
|
52
|
+
minimum-energy path, that the transition state connects the intended minima, or that the barrier is accurate
|
|
53
|
+
at the chosen level of theory.
|
|
54
|
+
|
|
55
|
+
## What it checks
|
|
56
|
+
|
|
57
|
+
| Check | PASS | WARNING | FAIL |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| Band (NEB) | converged band, no interior minimum deeper than 0.5 kcal/mol | force > 0.05 eV/Å at the image nearest the barrier (skipped after a converged TS optimisation); interior minimum (more than one step) | band or TS optimisation not converged; end points identical; flat profile |
|
|
60
|
+
| Transition state | exactly one imaginary mode with \|ν\| ≥ 50 cm⁻¹ and no other imaginary mode | extra small imaginary modes (\|ν\| < 50 cm⁻¹); only small ones; IRC reported as failed | no imaginary mode; two or more with \|ν\| ≥ 50 cm⁻¹ |
|
|
61
|
+
| Eyring rate | barrier given as a Gibbs energy of activation | — | — |
|
|
62
|
+
| Tunnelling | T = 298.15 K above the crossover temperature T_c = hc\|ν\|/(2πk_B) | 298.15 K below T_c: Wigner invalid, one-dimensional Eckart only an estimate | barrier height ≤ 0 |
|
|
63
|
+
|
|
64
|
+
With an electronic barrier (no zero-point, thermal or entropic terms, as from a band) the Eyring number is
|
|
65
|
+
reported as NOT_APPLICABLE: it is not a TST rate constant, and it does not count towards the overall status,
|
|
66
|
+
which is the worst of the individual statuses. NEBCert does not run or read IRC calculations;
|
|
67
|
+
`--irc` records the user's statement that an IRC connected the intended minima.
|
|
68
|
+
|
|
69
|
+
For ORCA outputs NEBCert reads the last `PATH SUMMARY` table, the climbing image, the NEB and TS convergence
|
|
70
|
+
banners, the `PATH SUMMARY FOR NEB-TS` transition state and the final frequencies. When an optimised NEB-TS
|
|
71
|
+
transition state is present its energy is the barrier; otherwise the energy of a converged climbing image,
|
|
72
|
+
and otherwise the maximum of a natural cubic spline through the images. A table printed before the images were computed (E = 0, as left by a job whose image calculations
|
|
73
|
+
failed) is rejected.
|
|
74
|
+
|
|
75
|
+
The Eckart factor is κ(T) = exp(V₁/kT)/kT ∫ P(E) exp(−E/kT) dE with the transmission probability of the
|
|
76
|
+
asymmetric Eckart barrier (Eckart 1930; Johnston and Heicklen 1962), the barrier width fixed by the imaginary
|
|
77
|
+
frequency, and the integral evaluated by adaptive quadrature (scipy `quad`).
|
|
78
|
+
|
|
79
|
+
## Validation (`validation/`)
|
|
80
|
+
|
|
81
|
+
All scripts and results are in `validation/`; every number below is regenerated by them.
|
|
82
|
+
|
|
83
|
+
- **Tunnelling and rate constants** (`compare_overreact.py`, `eckart_highprecision.py`): on 720 combinations of
|
|
84
|
+
imaginary frequency (200–3000 cm⁻¹), forward and reverse barriers (2–40 and 2–60 kcal/mol) and temperature
|
|
85
|
+
(200–1000 K), κ_Eckart agrees with a 40-digit mpmath reference to 1.7 × 10⁻⁹ (relative). overreact deviates
|
|
86
|
+
from the same reference by up to 1.3 × 10⁻², above 10⁻³ at 73 points, all with κ < 1.9. κ_Wigner and the
|
|
87
|
+
Eyring rate agree with overreact to 3 × 10⁻¹¹ and 1.3 × 10⁻⁹.
|
|
88
|
+
- **Version 1.0.0** (the only release published before 1.2.0; `legacy100_grid.py`): its κ_Eckart differs from the
|
|
89
|
+
reference by more than a factor of 2 at 529 of the 720 points (median ratio 6.8, range 3 × 10⁻⁸ to 2 × 10⁴³).
|
|
90
|
+
- **Real ORCA 6.1.1 calculations** (`make_neb_inputs.py`, `benchmark_neb.py`; B3LYP-D3(BJ)/def2-SVP; results in
|
|
91
|
+
`validation/results/neb_benchmark.csv`, figure `validation/figures/fig3_profiles.png`). Eight reactions with
|
|
92
|
+
NEB-TS and frequencies (H + HCl, OH + H₂, CH₃ + H₂, Cl⁻ + CH₃Cl, HCOH → H₂CO, H₂CO → H₂ + CO, HCN → HNC,
|
|
93
|
+
NH₃ inversion), three degraded runs and one failed job.
|
|
94
|
+
- Values read from the `.out` file agree with ORCA's full-precision files: band energies within 0.006 kcal/mol
|
|
95
|
+
(`.final.interp`; the output table has five decimals), TS energies within 0.003 kcal/mol
|
|
96
|
+
(`_NEB-TS_converged.xyz`), frequencies within 0.005 cm⁻¹ (`.hess`). κ_Eckart for the eight transition states
|
|
97
|
+
agrees with the mpmath reference to 3 × 10⁻⁹.
|
|
98
|
+
- Verdicts: PASS for six reactions; WARNING for HCOH → H₂CO and H₂CO → H₂ + CO, whose imaginary frequencies
|
|
99
|
+
(2060 and 1880 cm⁻¹) put 298.15 K below the crossover temperature (κ_Eckart = 1.8 × 10⁵ and 7.6 × 10⁶).
|
|
100
|
+
FAIL for a band stopped after three iterations (its highest image, 45.8 kcal/mol, against a converged barrier
|
|
101
|
+
of 2.3 kcal/mol) and for a band whose end points collapsed into the same structure; the failed job is
|
|
102
|
+
rejected. A 3-image NEB-CI passes, with the climbing-image barrier equal to the 8-image NEB-TS barrier
|
|
103
|
+
(84.36 kcal/mol; the spline maximum is 85.62).
|
|
104
|
+
- Version 1.1.0 warned on every reaction (the `--irc` bug), passed the failed job and crashed on the collapsed
|
|
105
|
+
band. Version 1.0.0 passed the failed job, crashed on the collapsed band, and its κ_Eckart was 1.6 to
|
|
106
|
+
6 × 10⁴⁶ times the reference for the eight transition states.
|
|
107
|
+
|
|
108
|
+
### Not validated
|
|
109
|
+
- The VASP `neb.dat` and Gaussian IRC parsers have not been tested on real output; the Gaussian IRC parser is
|
|
110
|
+
not used by the command-line interface.
|
|
111
|
+
- Paths with several steps are flagged, not split.
|
|
112
|
+
|
|
113
|
+
## Installation
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pip install "git+https://github.com/sircalch/nebcert@v1.2.0"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
From source:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
git clone https://github.com/sircalch/nebcert.git
|
|
123
|
+
cd nebcert
|
|
124
|
+
pip install -e .[dev]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Command line
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# ORCA NEB / NEB-CI / NEB-TS output (frequencies are read from a NEB-TS ... Freq run)
|
|
131
|
+
nebcert assess -i reaction.out --reaction "H + HCl -> H2 + Cl" --functional "B3LYP-D3(BJ)/def2-SVP" -o report/
|
|
132
|
+
|
|
133
|
+
# Gibbs energy of activation for the Eyring rate constant
|
|
134
|
+
nebcert assess -i reaction.out --gibbs-barrier-kcal 12.4 -o report/
|
|
135
|
+
|
|
136
|
+
# Table of image energies plus frequencies
|
|
137
|
+
nebcert assess -i neb.dat --frequencies "-1250,150,300,800" -o report/
|
|
138
|
+
|
|
139
|
+
# Synthetic demonstration (not a real calculation)
|
|
140
|
+
nebcert demo -o demo/
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The report directory contains `report.html`, figures, a summary table (CSV and LaTeX), a draft methods
|
|
144
|
+
paragraph that states the results of the checks, and `citation.bib`.
|
|
145
|
+
|
|
146
|
+
## Python
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from nebcert import (calculate_neb_profile_analysis, verify_ts_frequency_and_irc,
|
|
150
|
+
calculate_eyring_tst_rates, calculate_quantum_tunneling_corrections,
|
|
151
|
+
assess_reaction_pathway_quality)
|
|
152
|
+
from nebcert.parsers.orca_neb import parse_orca_neb_output
|
|
153
|
+
|
|
154
|
+
d = parse_orca_neb_output("reaction.out")
|
|
155
|
+
ts = d["ts"]
|
|
156
|
+
neb = calculate_neb_profile_analysis(d["energies_ev"], d["coordinates_s_ang"], d["tangent_forces"],
|
|
157
|
+
band_converged=d["neb_converged"],
|
|
158
|
+
ts_energy_rel_ev=ts["barrier_fwd_ev"] if ts else None,
|
|
159
|
+
ts_optimisation_converged=ts["converged"] if ts else None)
|
|
160
|
+
freq = verify_ts_frequency_and_irc(d["frequencies"])
|
|
161
|
+
tst = calculate_eyring_tst_rates(neb.e_forward_barrier_ev, barrier_type="electronic")
|
|
162
|
+
tun = calculate_quantum_tunneling_corrections(abs(freq.imaginary_frequency_cm1),
|
|
163
|
+
neb.e_forward_barrier_ev, neb.e_reverse_barrier_ev)
|
|
164
|
+
report = assess_reaction_pathway_quality({"reaction": "H + HCl -> H2 + Cl"}, neb, freq, tst, tun)
|
|
165
|
+
print(report.overall_status, report.validation_score)
|
|
166
|
+
for message in report.recommendations:
|
|
167
|
+
print("-", message)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Citation
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
nebcert cite
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
prints the APA and BibTeX entries for the installed version (concept DOI 10.5281/zenodo.22217586).
|
|
177
|
+
|
|
178
|
+
## License
|
|
179
|
+
|
|
180
|
+
MIT, see [LICENSE](LICENSE).
|
nebcert-1.2.0/README.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# NEBCert
|
|
2
|
+
|
|
3
|
+
[](https://github.com/sircalch/nebcert/actions)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://doi.org/10.5281/zenodo.22217586)
|
|
6
|
+
|
|
7
|
+
Quality checks for nudged-elastic-band (NEB) reaction paths, transition states and tunnelling-corrected
|
|
8
|
+
rate constants. NEBCert reads an ORCA NEB / NEB-CI / NEB-TS output (or a table of image energies), checks the
|
|
9
|
+
band and the transition state, and computes Eyring rate constants with Wigner and Eckart tunnelling factors.
|
|
10
|
+
|
|
11
|
+
A PASS means that the checks that were run found nothing wrong. It does not show that the path is the
|
|
12
|
+
minimum-energy path, that the transition state connects the intended minima, or that the barrier is accurate
|
|
13
|
+
at the chosen level of theory.
|
|
14
|
+
|
|
15
|
+
## What it checks
|
|
16
|
+
|
|
17
|
+
| Check | PASS | WARNING | FAIL |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| Band (NEB) | converged band, no interior minimum deeper than 0.5 kcal/mol | force > 0.05 eV/Å at the image nearest the barrier (skipped after a converged TS optimisation); interior minimum (more than one step) | band or TS optimisation not converged; end points identical; flat profile |
|
|
20
|
+
| Transition state | exactly one imaginary mode with \|ν\| ≥ 50 cm⁻¹ and no other imaginary mode | extra small imaginary modes (\|ν\| < 50 cm⁻¹); only small ones; IRC reported as failed | no imaginary mode; two or more with \|ν\| ≥ 50 cm⁻¹ |
|
|
21
|
+
| Eyring rate | barrier given as a Gibbs energy of activation | — | — |
|
|
22
|
+
| Tunnelling | T = 298.15 K above the crossover temperature T_c = hc\|ν\|/(2πk_B) | 298.15 K below T_c: Wigner invalid, one-dimensional Eckart only an estimate | barrier height ≤ 0 |
|
|
23
|
+
|
|
24
|
+
With an electronic barrier (no zero-point, thermal or entropic terms, as from a band) the Eyring number is
|
|
25
|
+
reported as NOT_APPLICABLE: it is not a TST rate constant, and it does not count towards the overall status,
|
|
26
|
+
which is the worst of the individual statuses. NEBCert does not run or read IRC calculations;
|
|
27
|
+
`--irc` records the user's statement that an IRC connected the intended minima.
|
|
28
|
+
|
|
29
|
+
For ORCA outputs NEBCert reads the last `PATH SUMMARY` table, the climbing image, the NEB and TS convergence
|
|
30
|
+
banners, the `PATH SUMMARY FOR NEB-TS` transition state and the final frequencies. When an optimised NEB-TS
|
|
31
|
+
transition state is present its energy is the barrier; otherwise the energy of a converged climbing image,
|
|
32
|
+
and otherwise the maximum of a natural cubic spline through the images. A table printed before the images were computed (E = 0, as left by a job whose image calculations
|
|
33
|
+
failed) is rejected.
|
|
34
|
+
|
|
35
|
+
The Eckart factor is κ(T) = exp(V₁/kT)/kT ∫ P(E) exp(−E/kT) dE with the transmission probability of the
|
|
36
|
+
asymmetric Eckart barrier (Eckart 1930; Johnston and Heicklen 1962), the barrier width fixed by the imaginary
|
|
37
|
+
frequency, and the integral evaluated by adaptive quadrature (scipy `quad`).
|
|
38
|
+
|
|
39
|
+
## Validation (`validation/`)
|
|
40
|
+
|
|
41
|
+
All scripts and results are in `validation/`; every number below is regenerated by them.
|
|
42
|
+
|
|
43
|
+
- **Tunnelling and rate constants** (`compare_overreact.py`, `eckart_highprecision.py`): on 720 combinations of
|
|
44
|
+
imaginary frequency (200–3000 cm⁻¹), forward and reverse barriers (2–40 and 2–60 kcal/mol) and temperature
|
|
45
|
+
(200–1000 K), κ_Eckart agrees with a 40-digit mpmath reference to 1.7 × 10⁻⁹ (relative). overreact deviates
|
|
46
|
+
from the same reference by up to 1.3 × 10⁻², above 10⁻³ at 73 points, all with κ < 1.9. κ_Wigner and the
|
|
47
|
+
Eyring rate agree with overreact to 3 × 10⁻¹¹ and 1.3 × 10⁻⁹.
|
|
48
|
+
- **Version 1.0.0** (the only release published before 1.2.0; `legacy100_grid.py`): its κ_Eckart differs from the
|
|
49
|
+
reference by more than a factor of 2 at 529 of the 720 points (median ratio 6.8, range 3 × 10⁻⁸ to 2 × 10⁴³).
|
|
50
|
+
- **Real ORCA 6.1.1 calculations** (`make_neb_inputs.py`, `benchmark_neb.py`; B3LYP-D3(BJ)/def2-SVP; results in
|
|
51
|
+
`validation/results/neb_benchmark.csv`, figure `validation/figures/fig3_profiles.png`). Eight reactions with
|
|
52
|
+
NEB-TS and frequencies (H + HCl, OH + H₂, CH₃ + H₂, Cl⁻ + CH₃Cl, HCOH → H₂CO, H₂CO → H₂ + CO, HCN → HNC,
|
|
53
|
+
NH₃ inversion), three degraded runs and one failed job.
|
|
54
|
+
- Values read from the `.out` file agree with ORCA's full-precision files: band energies within 0.006 kcal/mol
|
|
55
|
+
(`.final.interp`; the output table has five decimals), TS energies within 0.003 kcal/mol
|
|
56
|
+
(`_NEB-TS_converged.xyz`), frequencies within 0.005 cm⁻¹ (`.hess`). κ_Eckart for the eight transition states
|
|
57
|
+
agrees with the mpmath reference to 3 × 10⁻⁹.
|
|
58
|
+
- Verdicts: PASS for six reactions; WARNING for HCOH → H₂CO and H₂CO → H₂ + CO, whose imaginary frequencies
|
|
59
|
+
(2060 and 1880 cm⁻¹) put 298.15 K below the crossover temperature (κ_Eckart = 1.8 × 10⁵ and 7.6 × 10⁶).
|
|
60
|
+
FAIL for a band stopped after three iterations (its highest image, 45.8 kcal/mol, against a converged barrier
|
|
61
|
+
of 2.3 kcal/mol) and for a band whose end points collapsed into the same structure; the failed job is
|
|
62
|
+
rejected. A 3-image NEB-CI passes, with the climbing-image barrier equal to the 8-image NEB-TS barrier
|
|
63
|
+
(84.36 kcal/mol; the spline maximum is 85.62).
|
|
64
|
+
- Version 1.1.0 warned on every reaction (the `--irc` bug), passed the failed job and crashed on the collapsed
|
|
65
|
+
band. Version 1.0.0 passed the failed job, crashed on the collapsed band, and its κ_Eckart was 1.6 to
|
|
66
|
+
6 × 10⁴⁶ times the reference for the eight transition states.
|
|
67
|
+
|
|
68
|
+
### Not validated
|
|
69
|
+
- The VASP `neb.dat` and Gaussian IRC parsers have not been tested on real output; the Gaussian IRC parser is
|
|
70
|
+
not used by the command-line interface.
|
|
71
|
+
- Paths with several steps are flagged, not split.
|
|
72
|
+
|
|
73
|
+
## Installation
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pip install "git+https://github.com/sircalch/nebcert@v1.2.0"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
From source:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git clone https://github.com/sircalch/nebcert.git
|
|
83
|
+
cd nebcert
|
|
84
|
+
pip install -e .[dev]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Command line
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# ORCA NEB / NEB-CI / NEB-TS output (frequencies are read from a NEB-TS ... Freq run)
|
|
91
|
+
nebcert assess -i reaction.out --reaction "H + HCl -> H2 + Cl" --functional "B3LYP-D3(BJ)/def2-SVP" -o report/
|
|
92
|
+
|
|
93
|
+
# Gibbs energy of activation for the Eyring rate constant
|
|
94
|
+
nebcert assess -i reaction.out --gibbs-barrier-kcal 12.4 -o report/
|
|
95
|
+
|
|
96
|
+
# Table of image energies plus frequencies
|
|
97
|
+
nebcert assess -i neb.dat --frequencies "-1250,150,300,800" -o report/
|
|
98
|
+
|
|
99
|
+
# Synthetic demonstration (not a real calculation)
|
|
100
|
+
nebcert demo -o demo/
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The report directory contains `report.html`, figures, a summary table (CSV and LaTeX), a draft methods
|
|
104
|
+
paragraph that states the results of the checks, and `citation.bib`.
|
|
105
|
+
|
|
106
|
+
## Python
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
from nebcert import (calculate_neb_profile_analysis, verify_ts_frequency_and_irc,
|
|
110
|
+
calculate_eyring_tst_rates, calculate_quantum_tunneling_corrections,
|
|
111
|
+
assess_reaction_pathway_quality)
|
|
112
|
+
from nebcert.parsers.orca_neb import parse_orca_neb_output
|
|
113
|
+
|
|
114
|
+
d = parse_orca_neb_output("reaction.out")
|
|
115
|
+
ts = d["ts"]
|
|
116
|
+
neb = calculate_neb_profile_analysis(d["energies_ev"], d["coordinates_s_ang"], d["tangent_forces"],
|
|
117
|
+
band_converged=d["neb_converged"],
|
|
118
|
+
ts_energy_rel_ev=ts["barrier_fwd_ev"] if ts else None,
|
|
119
|
+
ts_optimisation_converged=ts["converged"] if ts else None)
|
|
120
|
+
freq = verify_ts_frequency_and_irc(d["frequencies"])
|
|
121
|
+
tst = calculate_eyring_tst_rates(neb.e_forward_barrier_ev, barrier_type="electronic")
|
|
122
|
+
tun = calculate_quantum_tunneling_corrections(abs(freq.imaginary_frequency_cm1),
|
|
123
|
+
neb.e_forward_barrier_ev, neb.e_reverse_barrier_ev)
|
|
124
|
+
report = assess_reaction_pathway_quality({"reaction": "H + HCl -> H2 + Cl"}, neb, freq, tst, tun)
|
|
125
|
+
print(report.overall_status, report.validation_score)
|
|
126
|
+
for message in report.recommendations:
|
|
127
|
+
print("-", message)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Citation
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
nebcert cite
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
prints the APA and BibTeX entries for the installed version (concept DOI 10.5281/zenodo.22217586).
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
|
|
140
|
+
MIT, see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
NEBCert: quality checks for NEB reaction paths, transition states and
|
|
3
|
+
tunnelling-corrected rate constants.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
__version__ = "1.2.0"
|
|
7
|
+
__author__ = "Andres Monreal-Hernández"
|
|
8
|
+
__license__ = "MIT"
|
|
9
|
+
|
|
10
|
+
from nebcert.core.neb_profile import calculate_neb_profile_analysis, NEBProfileResult
|
|
11
|
+
from nebcert.core.ts_frequency import verify_ts_frequency_and_irc, TSFrequencyResult
|
|
12
|
+
from nebcert.core.tst_kinetics import calculate_eyring_tst_rates, TSTKineticsResult
|
|
13
|
+
from nebcert.core.tunneling import calculate_quantum_tunneling_corrections, TunnelingResult
|
|
14
|
+
from nebcert.core.scoring import assess_reaction_pathway_quality, ReactionPathwayReport
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"__version__",
|
|
18
|
+
"calculate_neb_profile_analysis",
|
|
19
|
+
"NEBProfileResult",
|
|
20
|
+
"verify_ts_frequency_and_irc",
|
|
21
|
+
"TSFrequencyResult",
|
|
22
|
+
"calculate_eyring_tst_rates",
|
|
23
|
+
"TSTKineticsResult",
|
|
24
|
+
"calculate_quantum_tunneling_corrections",
|
|
25
|
+
"TunnelingResult",
|
|
26
|
+
"assess_reaction_pathway_quality",
|
|
27
|
+
"ReactionPathwayReport"
|
|
28
|
+
]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Citation strings for NEBCert (concept DOI: resolves to the latest version on Zenodo).
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from nebcert import __version__
|
|
6
|
+
|
|
7
|
+
CONCEPT_DOI = "10.5281/zenodo.22217586"
|
|
8
|
+
TITLE = "NEBCert: quality checks for NEB paths, transition states and tunnelling-corrected rate constants"
|
|
9
|
+
|
|
10
|
+
BIBTEX = (
|
|
11
|
+
"@software{monreal2026nebcert,\n"
|
|
12
|
+
" author = {Monreal-Hern{\\'a}ndez, Andr{\\'e}s},\n"
|
|
13
|
+
f" title = {{{{{TITLE}}}}},\n"
|
|
14
|
+
" year = {2026},\n"
|
|
15
|
+
f" version = {{{__version__}}},\n"
|
|
16
|
+
" publisher = {Zenodo},\n"
|
|
17
|
+
f" doi = {{{CONCEPT_DOI}}},\n"
|
|
18
|
+
" url = {https://github.com/sircalch/nebcert}\n"
|
|
19
|
+
"}\n"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
APA = f"Monreal-Hernández, A. (2026). {TITLE} (v{__version__}). Zenodo. https://doi.org/{CONCEPT_DOI}"
|