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.
@@ -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,3 @@
1
+ [console_scripts]
2
+ gaussian2gts = gaussian2gts:main
3
+ portico = portico:main
@@ -0,0 +1,4 @@
1
+ numpy
2
+ scipy
3
+ matplotlib
4
+ ase
@@ -0,0 +1,2 @@
1
+ gaussian2gts
2
+ portico