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 input_file_name # run the classification
portico -h | --help # help
portico -g | --ginp # create an example input file
portico -v | --version # 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
# Name of file for plot (optional; default value shown)
file_plot omegas.png # plot file name
# Thresholds (optional; default values shown)
eps_conn 1.30 # bonding threshold
eps_ccic 6.00 # frequency tolerance (cm-1)
# Random seed (optional; useful for reproducibility between executions)
#seed 9876543210 # random seed
# 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.
Output
PORTICO prints the Ωi metrics of every real-frequency normal mode of the transition state and identifies the transitional modes of the channel.
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
...
The .gts file format
The .gts format is a plain-text
format shared by the programs of the Cathedral package. It stores the
electronic-structure data of a single molecular structure: charge,
multiplicity, energy, point-group symmetry, Cartesian coordinates,
gradient, and Hessian matrix.
Files in this format can be generated from Gaussian output with the
gaussian2gts utility distributed with PORTICO.
A .gts file is organized in blocks delimited by start_<block> and
end_<block> keywords. Lines beginning with # are comments and are
ignored. All quantities are given in atomic units.
start_basic / end_basic
Scalar properties of the structure:
| Keyword | Meaning |
|---|---|
charge |
total charge |
multiplicity |
spin multiplicity |
energy |
total electronic energy (hartree) |
pointgroup |
point group (e.g. C1, C2v) |
rotsigma |
rotational symmetry number |
start_cc / end_cc
One line per atom: the atomic number (as a three-digit integer, e.g.
006 for carbon) followed by the three Cartesian coordinates in bohr.
start_grad / end_grad
The Cartesian energy gradient in hartree/bohr, one atom per line (three components each). For a stationary point the gradient is (numerically) zero; it is required for the analysis at non-stationary points along a reaction path.
start_hess / end_hess
The lower-triangular part of the Cartesian Hessian matrix in hartree/bohr², listed row by row:
F_11, F_21, F_22, F_31, F_32, F_33, ...
The values are written sequentially (any number of values per line); the
program reshapes them into the full symmetric 3N x 3N matrix.
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).
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.post5.tar.gz.
File metadata
- Download URL: cathpkg_portico-2026.0.post5.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22493a6bdc70b0c566abee6820ca4ca2bf0f6907e20c0e30c475425665f760af
|
|
| MD5 |
d4eaa0f20c75fc981bfa15f6c157962a
|
|
| BLAKE2b-256 |
659b95407aa1fbc3de4618efa77f618f1412a9a3373feb02d4c10b7d513df34b
|
File details
Details for the file cathpkg_portico-2026.0.post5-py3-none-any.whl.
File metadata
- Download URL: cathpkg_portico-2026.0.post5-py3-none-any.whl
- Upload date:
- Size: 37.0 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 |
e3e2d12f62a9bad732510cbec077e35460f3f845fd7f1d7585fb35a16587fc5e
|
|
| MD5 |
6a17c5fa0ca6de96316d56fb9a134285
|
|
| BLAKE2b-256 |
1aa31267b6f078f89a7e76202a05a0dacd041d1ee4603565ef8e48ced8a673e2
|