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.
Files changed (38) hide show
  1. nebcert-1.2.0/LICENSE +21 -0
  2. nebcert-1.2.0/PKG-INFO +180 -0
  3. nebcert-1.2.0/README.md +140 -0
  4. nebcert-1.2.0/nebcert/__init__.py +28 -0
  5. nebcert-1.2.0/nebcert/citation.py +22 -0
  6. nebcert-1.2.0/nebcert/cli.py +323 -0
  7. nebcert-1.2.0/nebcert/core/__init__.py +22 -0
  8. nebcert-1.2.0/nebcert/core/neb_profile.py +240 -0
  9. nebcert-1.2.0/nebcert/core/scoring.py +113 -0
  10. nebcert-1.2.0/nebcert/core/ts_frequency.py +95 -0
  11. nebcert-1.2.0/nebcert/core/tst_kinetics.py +140 -0
  12. nebcert-1.2.0/nebcert/core/tunneling.py +195 -0
  13. nebcert-1.2.0/nebcert/parsers/__init__.py +15 -0
  14. nebcert-1.2.0/nebcert/parsers/gaussian_irc.py +60 -0
  15. nebcert-1.2.0/nebcert/parsers/generic_mep_csv.py +52 -0
  16. nebcert-1.2.0/nebcert/parsers/orca_neb.py +121 -0
  17. nebcert-1.2.0/nebcert/parsers/vasp_neb.py +58 -0
  18. nebcert-1.2.0/nebcert/reporters/__init__.py +13 -0
  19. nebcert-1.2.0/nebcert/reporters/html_report.py +309 -0
  20. nebcert-1.2.0/nebcert/reporters/manuscript_prep.py +126 -0
  21. nebcert-1.2.0/nebcert/reporters/plot_generator.py +153 -0
  22. nebcert-1.2.0/nebcert.egg-info/PKG-INFO +180 -0
  23. nebcert-1.2.0/nebcert.egg-info/SOURCES.txt +36 -0
  24. nebcert-1.2.0/nebcert.egg-info/dependency_links.txt +1 -0
  25. nebcert-1.2.0/nebcert.egg-info/entry_points.txt +2 -0
  26. nebcert-1.2.0/nebcert.egg-info/requires.txt +13 -0
  27. nebcert-1.2.0/nebcert.egg-info/top_level.txt +1 -0
  28. nebcert-1.2.0/pyproject.toml +77 -0
  29. nebcert-1.2.0/setup.cfg +4 -0
  30. nebcert-1.2.0/tests/test_cli.py +29 -0
  31. nebcert-1.2.0/tests/test_eckart_reference.py +50 -0
  32. nebcert-1.2.0/tests/test_neb_profile.py +100 -0
  33. nebcert-1.2.0/tests/test_orca_neb_real.py +30 -0
  34. nebcert-1.2.0/tests/test_parsers.py +54 -0
  35. nebcert-1.2.0/tests/test_scoring.py +96 -0
  36. nebcert-1.2.0/tests/test_ts_frequency.py +45 -0
  37. nebcert-1.2.0/tests/test_tst_kinetics.py +27 -0
  38. 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
+ [![CI](https://github.com/sircalch/nebcert/actions/workflows/test.yml/badge.svg)](https://github.com/sircalch/nebcert/actions)
44
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
45
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.22217586.svg)](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).
@@ -0,0 +1,140 @@
1
+ # NEBCert
2
+
3
+ [![CI](https://github.com/sircalch/nebcert/actions/workflows/test.yml/badge.svg)](https://github.com/sircalch/nebcert/actions)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.22217586.svg)](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}"