Asymptotic classification of transition-state normal modes via projection onto roto-translational internal coordinates
Project description
PORTICO
Projection Onto Roto-Translational Internal COordinates
+------------------------------------+
| _ _ |
| _ __ ___ _ __| |_(_) ___ ___ |
| | '_ \ / _ \| '__| __| |/ __/ _ \ |
| | |_) | (_) | | | |_| | (_| (_) | |
| | .__/ \___/|_| \__|_|\___\___/ |
| |_| |
+------------------------------------+
PORTICO is a Python program for the asymptotic classification of transition-state normal modes. For a dissociation channel
R → TS‡ → P1 + P2
some of the normal modes that are vibrational at the saddle point evolve asymptotically into rotations or translations of the product fragments. PORTICO identifies these transitional modes automatically, with no manual inspection of normal-mode animations and no propagation of the reaction path toward the products.
How it works
PORTICO builds a redundant internal-coordinate representation of the transition state that explicitly separates two classes of motion:
- {q}v — internal coordinates describing the vibrations of the product fragments (generated automatically for each isolated product and verified for completeness against its Cartesian frequencies);
- {q}t,r — displacement vectors representing the translations and rotations of the fragments embedded in the transition-state geometry.
The transition-state normal modes are expressed in this mixed basis by solving the Wilson GF problem, and each mode i is assigned a scalar projection Ωi ∈ [0, 1] measuring the contribution of the roto-translational subspace. Combined with the dimensionality of the product channel, the Ωi values identify the transitional modes — those that correlate with rotations and relative translations of the separating fragments.
Channels leading to atomic, linear, and non-linear fragments are treated on the same footing.
Requirements
- Python ≥ 3.8
numpy,scipy,matplotlib,ase
Installation
From PyPI
pip install cathpkg-portico
From GitHub
pip install git+https://github.com/cathedralpkg/portico.git
In a conda environment
conda create -n portico python=3.11
conda activate portico
pip install cathpkg-portico
Any of the above installs the portico and gaussian2gts commands in
your PATH. Alternatively, the two scripts (portico.py,
gaussian2gts.py) are self-contained and can simply be downloaded and
run with python3 provided the dependencies are available.
Usage
portico -h # help
portico --input # create an example input file
portico channel.inp # run the classification
portico channel.inp --plot # ... and plot the Omega_i weights
portico -v # program version
Input file
# Files with the electronic-structure data (gts format)
file_saddle TS.gts # transition state
file_product1 P1.gts # product fragment 1
file_product2 P2.gts # product fragment 2
# Thresholds (optional; default values shown)
eps_conn 1.30 # bonding threshold
eps_ccic 6.00 # frequency tolerance (cm-1)
# Atom mapping: product atom <--> TS atom (1-based)
product1:
1 1
2 2
3 3
4 4
end
product2:
1 5
2 6
end
The required data for the transition state and for each optimized product are: geometry, Cartesian Hessian, charge/multiplicity and energy, provided in gts format. The atom mapping defines which atom of the transition state corresponds to each atom of the products.
Converting Gaussian outputs to gts
The helper script gaussian2gts converts a Gaussian log file (from a
freq calculation) into a gts file:
gaussian2gts TS.log # creates TS.gts
gaussian2gts P1.log # creates P1.gts
gaussian2gts P2.log # creates P2.gts
If you use a different electronic-structure package, write an analogous converter producing the gts format (a simple, documented plain-text format; see the header of any generated file).
Output
PORTICO prints the Ωi projection of every real-frequency normal
mode of the transition state, sorted by weight, and identifies the
transitional modes of the channel. With --plot, a bar chart of the
weights is also generated:
freq (cm^-1) Omega_i
--------------------------
-1531.2 ifreq [roto-translational]
1266.7 0.955 [roto-translational]
2210.0 0.954 [roto-translational]
812.1 0.934 [roto-translational]
715.0 0.907 [roto-translational]
1644.3 0.706
1166.2 0.537
...
Citation
If you use PORTICO in your work, please cite:
D. Ferro-Costas, PORTICO: Projection Onto Roto-Translational Internal COordinates — a program for the asymptotic classification of transition-state normal modes, submitted (2026).
License
Distributed under the MIT license. See LICENSE for details.
Author
David Ferro-Costas — Universidade de Santiago de Compostela (ORCID 0000-0002-8365-4047)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cathpkg_portico-2026.0.post3.tar.gz.
File metadata
- Download URL: cathpkg_portico-2026.0.post3.tar.gz
- Upload date:
- Size: 34.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3436d09663bc532ad4c86a7702cc7866ca1888138765632bde9cdb652238b750
|
|
| MD5 |
be9b974ebb45f099aee846bc9a0aac27
|
|
| BLAKE2b-256 |
bf09d68bb551f7cc51e59849f3aabb95c083854829259fa4d68671a8079ff507
|
File details
Details for the file cathpkg_portico-2026.0.post3-py3-none-any.whl.
File metadata
- Download URL: cathpkg_portico-2026.0.post3-py3-none-any.whl
- Upload date:
- Size: 35.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef33d91ced3684b475529ea3c5ff949a2f4a6cd639bef5ffd2fb905dbf3b7db5
|
|
| MD5 |
f921d925501439260ea2e602704d098a
|
|
| BLAKE2b-256 |
0b6d4419c978e199563ccd50358f845b18ca1ecbb42e39718f8184959062a9f1
|