The ESIpy program is aimed at the calculation of population analysis and aromaticity indicators from different Hilbert-space partitions using the PySCF module. The program supports both restricted and unrestricted calculations for single-determinant wave functions. The atomic partitions supported by the program are Mulliken, Löwdin, meta-Löwdin, Natural Atomic Orbitals (NAO), and Intrinsic Atomic Orbitals (IAO). The ESIpy repository contains the esi.py main code as well as several example scripts.
All the calculations performed for the creation and implementation of this program have been conducted in the following scientific paper:
Joan Grèbol-Tomàs, Eduard Matito, Pedro Salvador, Chem. Eur. J. 2024, e202401282.
Also, find it on-line here. Please if you are publishing the results obtained from ESIpy remember to cite the program. The code is licensed under the GNU GPLv3. See the LICENSE file for details. See the examples/README.md file for details on how to use the program. If you encounter any bugs, please feel free to report them on the Issues page, or send a mail to joangrebol@gmail.com.
In order to obtain information of the atomic contributions in a given chemical system (for instance atomic populations and electron sharing indices) it is crucial to define an atom in a molecule (AIM), which can either be real-space partition (allocating each point of the 3D space fully or partially to a specific atom) or Hilbert-space partition (separating the atomic basis functions belonging to a certain atom). The ESI-3D code[1] developed by Dr. Eduard Matito mainly used Bader's QTAIM[2] (real-space scheme) as the AIM for the calculations. However, in this program we propose the use of Hilbert-space schemes (Mulliken[3], Löwdin[4], Meta-Löwdin[5], NAO[6], and IAO[7]) available in the PySCF[8] framework as the partition of the system. QTAIM relies on numerical integrations, so the error accumulation makes some of these aromaticity descriptors become unviable in large systems. This newer approach, however, does not require numerical integration, but rather relies on the separation of the molecule by using atomic basis functions, leading to an exact partition of the system. The most fundamental magnitude is the Atomic Overlap Matrix (AOM,
The average number of electrons in a given atom can be expressed in terms of the AO basis as
where we can introduce the elements of the P-matrix,
Moreover, the Delocalization Index (DI,
In order to mimic the expression of the AOM as that of QTAIM, one can introduce a new auxiliary matrix,
The resulting matrix is non-symmetric due to the underlying AO basis being non-orthogonal. To overcome these issues, chemists have explored alternative Hilbert-space methods that rely on orthogonalized AO bases, mainly obtained through a unitary transformation of the original AO basis used in calculations. Löwdin first proposed the symmetric orthogonalization procedure by using
The ESI present in this program rely on the atomic overlap matrices. The following aromaticity indicators will be expressed in terms of the ring connectivities mol
object.
Fulton reported that the delocalization indices in a given aromatic 6-membered ring in the para position were larger than that in the meta position. From that idea, Poater and coworkers proposed to average the DIs in the para position in a 6-membered ring, so the para-delocalization index (PDI)[10]:
A larger PDI value indicates a more aromatic character. The index can only be calculated for rings of
Giambiagi and coworkers proposed to express an index in terms of the generalized bond order along the ring, the Iring[11]. That is, to account for the delocalization along the ring, following the specified connectivity:
This index relies on the multicenter character of a molecule. A larger Iring value indicates larger aromaticity along the ring.
As an aim to improve the Iring, Bultinck and coworkers proposed the Multicenter Index (MCI)[12] by not only taking into account the Kekulé structure of the system but rather all the
As well as the previous indices, a larger MCI value denotes a more aromatic character. Due to the exponential growth of the calculation, we do not suggest computing the MCI for rings larger than
When using QTAIM as the atomic partition, the numerical integration error made the multicenter indices in large rings non-viable. Matito proposed an index that contained the multicenter character as those of Iring and MCI, but without the size-extensivity problem. Therefore, he suggested to average all the 4c-MCI values along the ring that keep the positional relationship of 1,2,4,5, so designing the new index AV1245[13] as follows:
where if
The Fluctuation Index (FLU)[14] measures the resemblance of a series of tabulated
Where one can separate it into two parts: the polarizability of the bond and the comparison to some tabulated
The Bond Order Alternation (BOA) reflects the alternation of the delocalization indices along a conjugated circuit and is built upon the BLA premise (see below in the Geometrical Aromaticity Indicators section):
where
The Harmonic Oscillator Model of Aromaticity (HOMA)[15] was defined by Kruszewski and Krygowski and relies only on geometrical data.
The formula depends on a series of tabulated
The Bond-Length Alternation (BLA)[18] index measures the average of the bond lengths of consecutive bonds in the ring
where
This new definition can indeed be used for closed rings, but produces numbers that even if qualitatively agree with BLA, they do not match completely.
make_aoms(mol, mf, partition, save)
: From PySCF'smol
andmf
objects andpartition
as a string containing the desired partition (mulliken
,lowdin
,meta_lowdin
,nao
,iao
), generate a list of matrices containing the Atomic Overlap Matrices (AOMs). The variablesave
is a string containing the name of the file where to save the AOMs.aromaticity(Smo, ring, mol, mf, partition, mci, av1245, flurefs, homarefs, connectivity, geom, num_threads)
: Compute population analyses, delocalization analyses, and aromaticity indicators from the AOMs (variable Smo). Only the AOMs,Smo
, and the ring connectivities,ring
, are required for the calculation. Any other information will complement the calculation. The varibleSmo
can either be the variable that directly comes from themake_aoms()
function or a string containing the name of the previously saved AOMs. The variablering
is either a list or a list of lists containing the indices of the atoms for the aromaticity calculations.mci
andav1245
are boolean variables to compute the MCI and AV1425 indices, respectively. Multi-core processing for the MCI calculation is supported by settingnum_threads
at a number of cores different than 1, albeit the speed-up is non-linear. Theflurefs
,homarefs
,connectivity
andgeom
variables are optional in case of computing the FLU, HOMA, HOMER and/or BLA indicators without providing themol
object; see examples/examples04.py and examples/examples05.py for a guide on how to provide custom reference values for the HOMA, HOMER and FLU indicators.- Sole functions to compute each of the aromaticity indicators (Iring, MCI, AV1245, PDI, BOA, FLU, HOMA, HOMER and BLA), see examples/example06.py.
write_int(mol, mf, molname, Smo, ring, partition)
: Writes the AOMs as input for Dr. Eduard Matito's ESI-3D code (see examples/example08.py). The atomic files are stored in a self-created directory, as well as a general input for the program ('molname'.bad
). The ring variable is not mandatory but recommended.read_int(path)
: Reads the AOMs from either the .int files generated by ESIpy or the ones generated from the AIMAll package (see examples/example09.py).
To install PySCF it is recommended to create a conda environment as follows:
conda create --name pyscf_env python=3.9
and install PySCF as:
conda activate pyscf_env
conda install -c pyscf_env pyscf
For a more detailed installation guide, please check PySCF's installation guide.
To install ESIpy in your local working stations:
git clone https://github.com/jgrebol/ESIpy.git
Make sure to have previously installed git
with sudo apt install git
. Add to your .bashrc
file or to the file sent to queue:
export PYTHONPATH=~/ESIpy:$PYTHONPATH (or the directory where it is located)
For a detailed explanation on how to run the code and how to customize it, please see the directory examples and the examples/README.md file.
Smo
: List of matrices or string. Contains each of the AOMs. Generated from themake_aoms()
function. Can also be a string containing the name of the saved AOMs.ring
: List (or list of lists). Contains the indices for the definition of the ring required for the calculation of aromaticity indicators.mol
: From PySCF's module. Provides information about the molecule and the basis set employed for the calculation.mf
: From PySCF's module. Provides information about the type of calculation performed.partition
: String. Sets the type of partition of the system.save
: String. Sets the name of the file where to save the AOMs in themake_aoms()
function.molname
: String. Sets the name of the molecule for the generation of the.int
files.mci
: Boolean: Sets whether the MCI is desired to be computed. By default, False.av1245
: Boolean: Sets whether the AV1245 (and AVmin) are desired to be computed. By default, False.flurefs
: Dictionary. Contains the structure { "Bond tpye (e.g., "CC")" : DI (e.g., 1.400) }. By default, None.homarefs
: Dictionary. Contains the structure "{Bond type {"r_opt": distance}, {"alpha": alpha} (e.g., {"CC" : {"r_opt" : 1.400, "alpha" : 200.00} }.}. By default, None.connectivity
: List. The atomic symbols of the centers in ring connectivity: ["C", "C", "O", "C"] for a "C-C-O-C" ring. By default, None.geom
: List. The coordinates of the molecule as provided by themol.atom_coords()
PySCF function. By default, None.num_threads
: Integer. Sets the number of threads desired for the calculation of the MCI. By default, 1.
- Function: Implementation for correlated wave functions.
- Function: Approximations for the MCI calculation in large systems.
- Function: Read the AOMs (or the data required for their calculation) from other source programs and store them as ESIpy's
Smo
. - Function: Calculation of aromaticity indicators from defined fragments.
- Utility: Split the calculation into orbital contributions.
- [1] E. Matito, in ‘ESI-3D Electron Sharing Indexes Program for 3D Molecular Space Partitioning’, Girona IQC, 2006
- [2] R. F. W. Bader, Atoms in molecules: a quantum theory, Clarendon Press; Oxford University Press, Oxford [England]: New York, 1994.
- [3] R. S. Mulliken, The Journal of Chemical Physics, 1955, 23, 1833–1840.
- [4] P.-O. Löwdin, The Journal of Chemical Physics, 1950, 18, 365–375.
- [5] A. E. Reed, R. B. Weinstock and F. Weinhold, The Journal of Chemical Physics, 1985, 83, 735–746.
- [6] Q. Sun and G. K.-L. Chan, Journal of Chemical Theory and Computation, 2014, 10, 3784–3790.
- [7] G. Knizia, Journal of Chemical Theory and Computation, 2013, 9, 4834–4843.
- [8] Q. Sun et al. The Journal of Chemical Physics, 2020, 153, 024109.
- [9] I. Mayer, Chemical Physics Letters, 1983, 97, 270–274.
- [10] J. Poater et al., Chemistry–A European Journal, 2003, 9, 400–406.
- [11] M. Giambiagi, M. S. De Giambiagi and K. C. Mundim, Structural Chemistry, 1990, 1, 423–427.
- [12] P. Bultinck, R. Ponec and S. Van Damme, Journal of Physical Organic Chemistry, 2005, 18, 706–718.
- [13] E. Matito, Physical Chemistry Chemical Physics, 2016, 18, 11839–11846.
- [14] E. Matito, M.Duran, M.Solà. The Journal of Chemical Physics, 2005, 122, 014109.
- [15] J. Kruszewski and T. M. Krygowski. Tetrahedron Lett., 13(36):3839–3842, 1972.
- [16] E. M. Arpa and B. Durbeej. Physical Chemistry Chemical Physics. 2023, 25, 16763-16771.