cathpkg-portico 2026.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.
- cathpkg_portico-2026.0/LICENSE.txt +21 -0
- cathpkg_portico-2026.0/PKG-INFO +191 -0
- cathpkg_portico-2026.0/README.md +171 -0
- cathpkg_portico-2026.0/cathpkg_portico.egg-info/PKG-INFO +191 -0
- cathpkg_portico-2026.0/cathpkg_portico.egg-info/SOURCES.txt +11 -0
- cathpkg_portico-2026.0/cathpkg_portico.egg-info/dependency_links.txt +1 -0
- cathpkg_portico-2026.0/cathpkg_portico.egg-info/entry_points.txt +3 -0
- cathpkg_portico-2026.0/cathpkg_portico.egg-info/requires.txt +4 -0
- cathpkg_portico-2026.0/cathpkg_portico.egg-info/top_level.txt +2 -0
- cathpkg_portico-2026.0/gaussian2gts.py +355 -0
- cathpkg_portico-2026.0/portico.py +2647 -0
- cathpkg_portico-2026.0/pyproject.toml +37 -0
- cathpkg_portico-2026.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 cathedralpkg
|
|
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.
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cathpkg-portico
|
|
3
|
+
Version: 2026.0
|
|
4
|
+
Summary: Asymptotic classification of transition-state normal modes via projection onto roto-translational internal coordinates
|
|
5
|
+
Author-email: David Ferro-Costas <david.ferro@usc.es>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/cathedralpkg/portico
|
|
8
|
+
Keywords: transition state,normal modes,internal coordinates,fragmentation,computational chemistry
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
12
|
+
Requires-Python: >=3.8
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE.txt
|
|
15
|
+
Requires-Dist: numpy
|
|
16
|
+
Requires-Dist: scipy
|
|
17
|
+
Requires-Dist: matplotlib
|
|
18
|
+
Requires-Dist: ase
|
|
19
|
+
Dynamic: license-file
|
|
20
|
+
|
|
21
|
+
# PORTICO
|
|
22
|
+
|
|
23
|
+
**P**rojection **O**nto **R**oto-**T**ranslational **I**nternal **CO**ordinates
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
+------------------------------------+
|
|
27
|
+
| _ _ |
|
|
28
|
+
| _ __ ___ _ __| |_(_) ___ ___ |
|
|
29
|
+
| | '_ \ / _ \| '__| __| |/ __/ _ \ |
|
|
30
|
+
| | |_) | (_) | | | |_| | (_| (_) | |
|
|
31
|
+
| | .__/ \___/|_| \__|_|\___\___/ |
|
|
32
|
+
| |_| |
|
|
33
|
+
+------------------------------------+
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
PORTICO is a Python program for the **asymptotic classification of
|
|
37
|
+
transition-state normal modes**. For a dissociation channel
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
R → TS‡ → P1 + P2
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
some of the normal modes that are *vibrational* at the saddle point evolve
|
|
44
|
+
asymptotically into *rotations* or *translations* of the product fragments.
|
|
45
|
+
PORTICO identifies these transitional modes automatically, with no manual
|
|
46
|
+
inspection of normal-mode animations and no propagation of the reaction
|
|
47
|
+
path toward the products.
|
|
48
|
+
|
|
49
|
+
## How it works
|
|
50
|
+
|
|
51
|
+
PORTICO builds a redundant internal-coordinate representation of the
|
|
52
|
+
transition state that explicitly separates two classes of motion:
|
|
53
|
+
|
|
54
|
+
- **{q}v** — internal coordinates describing the vibrations of the product
|
|
55
|
+
fragments (generated automatically for each isolated product and verified
|
|
56
|
+
for completeness against its Cartesian frequencies);
|
|
57
|
+
- **{q}t,r** — displacement vectors representing the translations and
|
|
58
|
+
rotations of the fragments embedded in the transition-state geometry.
|
|
59
|
+
|
|
60
|
+
The transition-state normal modes are expressed in this mixed basis by
|
|
61
|
+
solving the Wilson GF problem, and each mode *i* is assigned a scalar
|
|
62
|
+
projection **Ω<sub>i</sub> ∈ [0, 1]** measuring the contribution of the
|
|
63
|
+
roto-translational subspace. Combined with the dimensionality of the
|
|
64
|
+
product channel, the Ω<sub>i</sub> values identify the transitional modes
|
|
65
|
+
— those that correlate with rotations and relative translations of the
|
|
66
|
+
separating fragments.
|
|
67
|
+
|
|
68
|
+
Channels leading to atomic, linear, and non-linear fragments are treated
|
|
69
|
+
on the same footing.
|
|
70
|
+
|
|
71
|
+
## Requirements
|
|
72
|
+
|
|
73
|
+
- Python ≥ 3.8
|
|
74
|
+
- `numpy`, `scipy`, `matplotlib`, `ase`
|
|
75
|
+
|
|
76
|
+
## Installation
|
|
77
|
+
|
|
78
|
+
### From PyPI
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install cathpkg-portico
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### From GitHub
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pip install git+https://github.com/cathedralpkg/portico.git
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### In a conda environment
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
conda create -n portico python=3.11
|
|
94
|
+
conda activate portico
|
|
95
|
+
pip install cathpkg-portico
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Any of the above installs the `portico` and `gaussian2gts` commands in
|
|
99
|
+
your PATH. Alternatively, the two scripts (`portico.py`,
|
|
100
|
+
`gaussian2gts.py`) are self-contained and can simply be downloaded and
|
|
101
|
+
run with `python3` provided the dependencies are available.
|
|
102
|
+
|
|
103
|
+
## Usage
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
portico -h # help
|
|
107
|
+
portico --input # create an example input file
|
|
108
|
+
portico channel.inp # run the classification
|
|
109
|
+
portico channel.inp --plot # ... and plot the Omega_i weights
|
|
110
|
+
portico -v # program version
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Input file
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
# Files with the electronic-structure data (gts format)
|
|
117
|
+
file_saddle TS.gts # transition state
|
|
118
|
+
file_product1 P1.gts # product fragment 1
|
|
119
|
+
file_product2 P2.gts # product fragment 2
|
|
120
|
+
|
|
121
|
+
# Thresholds (optional; default values shown)
|
|
122
|
+
eps_conn 1.30 # bonding threshold
|
|
123
|
+
eps_ccic 6.00 # frequency tolerance (cm-1)
|
|
124
|
+
|
|
125
|
+
# Atom mapping: product atom <--> TS atom (1-based)
|
|
126
|
+
product1:
|
|
127
|
+
1 1
|
|
128
|
+
2 2
|
|
129
|
+
3 3
|
|
130
|
+
4 4
|
|
131
|
+
end
|
|
132
|
+
product2:
|
|
133
|
+
1 5
|
|
134
|
+
2 6
|
|
135
|
+
end
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
The required data for the transition state and for each optimized product
|
|
139
|
+
are: geometry, Cartesian Hessian, charge/multiplicity and energy, provided
|
|
140
|
+
in **gts format**. The atom mapping defines which atom of the transition
|
|
141
|
+
state corresponds to each atom of the products.
|
|
142
|
+
|
|
143
|
+
### Converting Gaussian outputs to gts
|
|
144
|
+
|
|
145
|
+
The helper script `gaussian2gts` converts a Gaussian log file (from a
|
|
146
|
+
`freq` calculation) into a gts file:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
gaussian2gts TS.log # creates TS.gts
|
|
150
|
+
gaussian2gts P1.log # creates P1.gts
|
|
151
|
+
gaussian2gts P2.log # creates P2.gts
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
If you use a different electronic-structure package, write an analogous
|
|
155
|
+
converter producing the gts format (a simple, documented plain-text
|
|
156
|
+
format; see the header of any generated file).
|
|
157
|
+
|
|
158
|
+
### Output
|
|
159
|
+
|
|
160
|
+
PORTICO prints the Ω<sub>i</sub> projection of every real-frequency normal
|
|
161
|
+
mode of the transition state, sorted by weight, and identifies the
|
|
162
|
+
transitional modes of the channel. With `--plot`, a bar chart of the
|
|
163
|
+
weights is also generated:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
freq (cm^-1) Omega_i
|
|
167
|
+
------------------------
|
|
168
|
+
1267 0.960 transitional
|
|
169
|
+
2210 0.954 transitional
|
|
170
|
+
812 0.940 transitional
|
|
171
|
+
715 0.925 transitional
|
|
172
|
+
1644 0.713
|
|
173
|
+
...
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Citation
|
|
177
|
+
|
|
178
|
+
If you use PORTICO in your work, please cite:
|
|
179
|
+
|
|
180
|
+
> D. Ferro-Costas, *PORTICO: Projection Onto Roto-Translational Internal
|
|
181
|
+
> COordinates — a program for the asymptotic classification of
|
|
182
|
+
> transition-state normal modes*, submitted (2026).
|
|
183
|
+
|
|
184
|
+
## License
|
|
185
|
+
|
|
186
|
+
Distributed under the MIT license. See `LICENSE` for details.
|
|
187
|
+
|
|
188
|
+
## Author
|
|
189
|
+
|
|
190
|
+
David Ferro-Costas — Universidade de Santiago de Compostela
|
|
191
|
+
([ORCID 0000-0002-8365-4047](https://orcid.org/0000-0002-8365-4047))
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# PORTICO
|
|
2
|
+
|
|
3
|
+
**P**rojection **O**nto **R**oto-**T**ranslational **I**nternal **CO**ordinates
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
+------------------------------------+
|
|
7
|
+
| _ _ |
|
|
8
|
+
| _ __ ___ _ __| |_(_) ___ ___ |
|
|
9
|
+
| | '_ \ / _ \| '__| __| |/ __/ _ \ |
|
|
10
|
+
| | |_) | (_) | | | |_| | (_| (_) | |
|
|
11
|
+
| | .__/ \___/|_| \__|_|\___\___/ |
|
|
12
|
+
| |_| |
|
|
13
|
+
+------------------------------------+
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
PORTICO is a Python program for the **asymptotic classification of
|
|
17
|
+
transition-state normal modes**. For a dissociation channel
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
R → TS‡ → P1 + P2
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
some of the normal modes that are *vibrational* at the saddle point evolve
|
|
24
|
+
asymptotically into *rotations* or *translations* of the product fragments.
|
|
25
|
+
PORTICO identifies these transitional modes automatically, with no manual
|
|
26
|
+
inspection of normal-mode animations and no propagation of the reaction
|
|
27
|
+
path toward the products.
|
|
28
|
+
|
|
29
|
+
## How it works
|
|
30
|
+
|
|
31
|
+
PORTICO builds a redundant internal-coordinate representation of the
|
|
32
|
+
transition state that explicitly separates two classes of motion:
|
|
33
|
+
|
|
34
|
+
- **{q}v** — internal coordinates describing the vibrations of the product
|
|
35
|
+
fragments (generated automatically for each isolated product and verified
|
|
36
|
+
for completeness against its Cartesian frequencies);
|
|
37
|
+
- **{q}t,r** — displacement vectors representing the translations and
|
|
38
|
+
rotations of the fragments embedded in the transition-state geometry.
|
|
39
|
+
|
|
40
|
+
The transition-state normal modes are expressed in this mixed basis by
|
|
41
|
+
solving the Wilson GF problem, and each mode *i* is assigned a scalar
|
|
42
|
+
projection **Ω<sub>i</sub> ∈ [0, 1]** measuring the contribution of the
|
|
43
|
+
roto-translational subspace. Combined with the dimensionality of the
|
|
44
|
+
product channel, the Ω<sub>i</sub> values identify the transitional modes
|
|
45
|
+
— those that correlate with rotations and relative translations of the
|
|
46
|
+
separating fragments.
|
|
47
|
+
|
|
48
|
+
Channels leading to atomic, linear, and non-linear fragments are treated
|
|
49
|
+
on the same footing.
|
|
50
|
+
|
|
51
|
+
## Requirements
|
|
52
|
+
|
|
53
|
+
- Python ≥ 3.8
|
|
54
|
+
- `numpy`, `scipy`, `matplotlib`, `ase`
|
|
55
|
+
|
|
56
|
+
## Installation
|
|
57
|
+
|
|
58
|
+
### From PyPI
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pip install cathpkg-portico
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### From GitHub
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install git+https://github.com/cathedralpkg/portico.git
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### In a conda environment
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
conda create -n portico python=3.11
|
|
74
|
+
conda activate portico
|
|
75
|
+
pip install cathpkg-portico
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Any of the above installs the `portico` and `gaussian2gts` commands in
|
|
79
|
+
your PATH. Alternatively, the two scripts (`portico.py`,
|
|
80
|
+
`gaussian2gts.py`) are self-contained and can simply be downloaded and
|
|
81
|
+
run with `python3` provided the dependencies are available.
|
|
82
|
+
|
|
83
|
+
## Usage
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
portico -h # help
|
|
87
|
+
portico --input # create an example input file
|
|
88
|
+
portico channel.inp # run the classification
|
|
89
|
+
portico channel.inp --plot # ... and plot the Omega_i weights
|
|
90
|
+
portico -v # program version
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Input file
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
# Files with the electronic-structure data (gts format)
|
|
97
|
+
file_saddle TS.gts # transition state
|
|
98
|
+
file_product1 P1.gts # product fragment 1
|
|
99
|
+
file_product2 P2.gts # product fragment 2
|
|
100
|
+
|
|
101
|
+
# Thresholds (optional; default values shown)
|
|
102
|
+
eps_conn 1.30 # bonding threshold
|
|
103
|
+
eps_ccic 6.00 # frequency tolerance (cm-1)
|
|
104
|
+
|
|
105
|
+
# Atom mapping: product atom <--> TS atom (1-based)
|
|
106
|
+
product1:
|
|
107
|
+
1 1
|
|
108
|
+
2 2
|
|
109
|
+
3 3
|
|
110
|
+
4 4
|
|
111
|
+
end
|
|
112
|
+
product2:
|
|
113
|
+
1 5
|
|
114
|
+
2 6
|
|
115
|
+
end
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
The required data for the transition state and for each optimized product
|
|
119
|
+
are: geometry, Cartesian Hessian, charge/multiplicity and energy, provided
|
|
120
|
+
in **gts format**. The atom mapping defines which atom of the transition
|
|
121
|
+
state corresponds to each atom of the products.
|
|
122
|
+
|
|
123
|
+
### Converting Gaussian outputs to gts
|
|
124
|
+
|
|
125
|
+
The helper script `gaussian2gts` converts a Gaussian log file (from a
|
|
126
|
+
`freq` calculation) into a gts file:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
gaussian2gts TS.log # creates TS.gts
|
|
130
|
+
gaussian2gts P1.log # creates P1.gts
|
|
131
|
+
gaussian2gts P2.log # creates P2.gts
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
If you use a different electronic-structure package, write an analogous
|
|
135
|
+
converter producing the gts format (a simple, documented plain-text
|
|
136
|
+
format; see the header of any generated file).
|
|
137
|
+
|
|
138
|
+
### Output
|
|
139
|
+
|
|
140
|
+
PORTICO prints the Ω<sub>i</sub> projection of every real-frequency normal
|
|
141
|
+
mode of the transition state, sorted by weight, and identifies the
|
|
142
|
+
transitional modes of the channel. With `--plot`, a bar chart of the
|
|
143
|
+
weights is also generated:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
freq (cm^-1) Omega_i
|
|
147
|
+
------------------------
|
|
148
|
+
1267 0.960 transitional
|
|
149
|
+
2210 0.954 transitional
|
|
150
|
+
812 0.940 transitional
|
|
151
|
+
715 0.925 transitional
|
|
152
|
+
1644 0.713
|
|
153
|
+
...
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Citation
|
|
157
|
+
|
|
158
|
+
If you use PORTICO in your work, please cite:
|
|
159
|
+
|
|
160
|
+
> D. Ferro-Costas, *PORTICO: Projection Onto Roto-Translational Internal
|
|
161
|
+
> COordinates — a program for the asymptotic classification of
|
|
162
|
+
> transition-state normal modes*, submitted (2026).
|
|
163
|
+
|
|
164
|
+
## License
|
|
165
|
+
|
|
166
|
+
Distributed under the MIT license. See `LICENSE` for details.
|
|
167
|
+
|
|
168
|
+
## Author
|
|
169
|
+
|
|
170
|
+
David Ferro-Costas — Universidade de Santiago de Compostela
|
|
171
|
+
([ORCID 0000-0002-8365-4047](https://orcid.org/0000-0002-8365-4047))
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cathpkg-portico
|
|
3
|
+
Version: 2026.0
|
|
4
|
+
Summary: Asymptotic classification of transition-state normal modes via projection onto roto-translational internal coordinates
|
|
5
|
+
Author-email: David Ferro-Costas <david.ferro@usc.es>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/cathedralpkg/portico
|
|
8
|
+
Keywords: transition state,normal modes,internal coordinates,fragmentation,computational chemistry
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
12
|
+
Requires-Python: >=3.8
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE.txt
|
|
15
|
+
Requires-Dist: numpy
|
|
16
|
+
Requires-Dist: scipy
|
|
17
|
+
Requires-Dist: matplotlib
|
|
18
|
+
Requires-Dist: ase
|
|
19
|
+
Dynamic: license-file
|
|
20
|
+
|
|
21
|
+
# PORTICO
|
|
22
|
+
|
|
23
|
+
**P**rojection **O**nto **R**oto-**T**ranslational **I**nternal **CO**ordinates
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
+------------------------------------+
|
|
27
|
+
| _ _ |
|
|
28
|
+
| _ __ ___ _ __| |_(_) ___ ___ |
|
|
29
|
+
| | '_ \ / _ \| '__| __| |/ __/ _ \ |
|
|
30
|
+
| | |_) | (_) | | | |_| | (_| (_) | |
|
|
31
|
+
| | .__/ \___/|_| \__|_|\___\___/ |
|
|
32
|
+
| |_| |
|
|
33
|
+
+------------------------------------+
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
PORTICO is a Python program for the **asymptotic classification of
|
|
37
|
+
transition-state normal modes**. For a dissociation channel
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
R → TS‡ → P1 + P2
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
some of the normal modes that are *vibrational* at the saddle point evolve
|
|
44
|
+
asymptotically into *rotations* or *translations* of the product fragments.
|
|
45
|
+
PORTICO identifies these transitional modes automatically, with no manual
|
|
46
|
+
inspection of normal-mode animations and no propagation of the reaction
|
|
47
|
+
path toward the products.
|
|
48
|
+
|
|
49
|
+
## How it works
|
|
50
|
+
|
|
51
|
+
PORTICO builds a redundant internal-coordinate representation of the
|
|
52
|
+
transition state that explicitly separates two classes of motion:
|
|
53
|
+
|
|
54
|
+
- **{q}v** — internal coordinates describing the vibrations of the product
|
|
55
|
+
fragments (generated automatically for each isolated product and verified
|
|
56
|
+
for completeness against its Cartesian frequencies);
|
|
57
|
+
- **{q}t,r** — displacement vectors representing the translations and
|
|
58
|
+
rotations of the fragments embedded in the transition-state geometry.
|
|
59
|
+
|
|
60
|
+
The transition-state normal modes are expressed in this mixed basis by
|
|
61
|
+
solving the Wilson GF problem, and each mode *i* is assigned a scalar
|
|
62
|
+
projection **Ω<sub>i</sub> ∈ [0, 1]** measuring the contribution of the
|
|
63
|
+
roto-translational subspace. Combined with the dimensionality of the
|
|
64
|
+
product channel, the Ω<sub>i</sub> values identify the transitional modes
|
|
65
|
+
— those that correlate with rotations and relative translations of the
|
|
66
|
+
separating fragments.
|
|
67
|
+
|
|
68
|
+
Channels leading to atomic, linear, and non-linear fragments are treated
|
|
69
|
+
on the same footing.
|
|
70
|
+
|
|
71
|
+
## Requirements
|
|
72
|
+
|
|
73
|
+
- Python ≥ 3.8
|
|
74
|
+
- `numpy`, `scipy`, `matplotlib`, `ase`
|
|
75
|
+
|
|
76
|
+
## Installation
|
|
77
|
+
|
|
78
|
+
### From PyPI
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install cathpkg-portico
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### From GitHub
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pip install git+https://github.com/cathedralpkg/portico.git
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### In a conda environment
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
conda create -n portico python=3.11
|
|
94
|
+
conda activate portico
|
|
95
|
+
pip install cathpkg-portico
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Any of the above installs the `portico` and `gaussian2gts` commands in
|
|
99
|
+
your PATH. Alternatively, the two scripts (`portico.py`,
|
|
100
|
+
`gaussian2gts.py`) are self-contained and can simply be downloaded and
|
|
101
|
+
run with `python3` provided the dependencies are available.
|
|
102
|
+
|
|
103
|
+
## Usage
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
portico -h # help
|
|
107
|
+
portico --input # create an example input file
|
|
108
|
+
portico channel.inp # run the classification
|
|
109
|
+
portico channel.inp --plot # ... and plot the Omega_i weights
|
|
110
|
+
portico -v # program version
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Input file
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
# Files with the electronic-structure data (gts format)
|
|
117
|
+
file_saddle TS.gts # transition state
|
|
118
|
+
file_product1 P1.gts # product fragment 1
|
|
119
|
+
file_product2 P2.gts # product fragment 2
|
|
120
|
+
|
|
121
|
+
# Thresholds (optional; default values shown)
|
|
122
|
+
eps_conn 1.30 # bonding threshold
|
|
123
|
+
eps_ccic 6.00 # frequency tolerance (cm-1)
|
|
124
|
+
|
|
125
|
+
# Atom mapping: product atom <--> TS atom (1-based)
|
|
126
|
+
product1:
|
|
127
|
+
1 1
|
|
128
|
+
2 2
|
|
129
|
+
3 3
|
|
130
|
+
4 4
|
|
131
|
+
end
|
|
132
|
+
product2:
|
|
133
|
+
1 5
|
|
134
|
+
2 6
|
|
135
|
+
end
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
The required data for the transition state and for each optimized product
|
|
139
|
+
are: geometry, Cartesian Hessian, charge/multiplicity and energy, provided
|
|
140
|
+
in **gts format**. The atom mapping defines which atom of the transition
|
|
141
|
+
state corresponds to each atom of the products.
|
|
142
|
+
|
|
143
|
+
### Converting Gaussian outputs to gts
|
|
144
|
+
|
|
145
|
+
The helper script `gaussian2gts` converts a Gaussian log file (from a
|
|
146
|
+
`freq` calculation) into a gts file:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
gaussian2gts TS.log # creates TS.gts
|
|
150
|
+
gaussian2gts P1.log # creates P1.gts
|
|
151
|
+
gaussian2gts P2.log # creates P2.gts
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
If you use a different electronic-structure package, write an analogous
|
|
155
|
+
converter producing the gts format (a simple, documented plain-text
|
|
156
|
+
format; see the header of any generated file).
|
|
157
|
+
|
|
158
|
+
### Output
|
|
159
|
+
|
|
160
|
+
PORTICO prints the Ω<sub>i</sub> projection of every real-frequency normal
|
|
161
|
+
mode of the transition state, sorted by weight, and identifies the
|
|
162
|
+
transitional modes of the channel. With `--plot`, a bar chart of the
|
|
163
|
+
weights is also generated:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
freq (cm^-1) Omega_i
|
|
167
|
+
------------------------
|
|
168
|
+
1267 0.960 transitional
|
|
169
|
+
2210 0.954 transitional
|
|
170
|
+
812 0.940 transitional
|
|
171
|
+
715 0.925 transitional
|
|
172
|
+
1644 0.713
|
|
173
|
+
...
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Citation
|
|
177
|
+
|
|
178
|
+
If you use PORTICO in your work, please cite:
|
|
179
|
+
|
|
180
|
+
> D. Ferro-Costas, *PORTICO: Projection Onto Roto-Translational Internal
|
|
181
|
+
> COordinates — a program for the asymptotic classification of
|
|
182
|
+
> transition-state normal modes*, submitted (2026).
|
|
183
|
+
|
|
184
|
+
## License
|
|
185
|
+
|
|
186
|
+
Distributed under the MIT license. See `LICENSE` for details.
|
|
187
|
+
|
|
188
|
+
## Author
|
|
189
|
+
|
|
190
|
+
David Ferro-Costas — Universidade de Santiago de Compostela
|
|
191
|
+
([ORCID 0000-0002-8365-4047](https://orcid.org/0000-0002-8365-4047))
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
LICENSE.txt
|
|
2
|
+
README.md
|
|
3
|
+
gaussian2gts.py
|
|
4
|
+
portico.py
|
|
5
|
+
pyproject.toml
|
|
6
|
+
cathpkg_portico.egg-info/PKG-INFO
|
|
7
|
+
cathpkg_portico.egg-info/SOURCES.txt
|
|
8
|
+
cathpkg_portico.egg-info/dependency_links.txt
|
|
9
|
+
cathpkg_portico.egg-info/entry_points.txt
|
|
10
|
+
cathpkg_portico.egg-info/requires.txt
|
|
11
|
+
cathpkg_portico.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|