PYthon GAUSSian Chemical Compuation Analysis
Project description
Pygauss is designed to be an API for parsing one or more input/output files from a Gaussian quantum chemical computation and provide functionality to assess molecular geometry and electronic distribution both visually and quantitatively.
It is built on top of the cclib/chemlab/chemview suite of packages and python scientific stack and is primarily designed to be used interactively in the IPython Notebook (within which this readme has been written). As shown below, a molecular optimisation can be assesed individually (much like in gaussview), but also as part of a group. The advantages of this package are then:
Faster, more efficient analysis
Reproducible analysis
Trend analysis
Detail instillation…
pip install pygauss conda install -c http://conda.binstar.org/gabrielelanaro chemlab
You should then be able to start an ipython notebook…
from IPython.display import display
%matplotlib inline
import pygauss as pg
folder = pg.get_test_folder()
Single Molecule Analysis
A molecule can be created containg data about the inital geometry, optimisation process and analysis of the final configuration.
mol = pg.molecule.Molecule(folder,
init_fname='CJS1_emim-cl_B_init.com',
opt_fname=['CJS1_emim-cl_B_6-311+g-d-p-_gd3bj_opt-modredundant_difrz.log',
'CJS1_emim-cl_B_6-311+g-d-p-_gd3bj_opt-modredundant_difrz_err.log',
'CJS1_emim-cl_B_6-311+g-d-p-_gd3bj_opt-modredundant_unfrz.log'],
freq_fname='CJS1_emim-cl_B_6-311+g-d-p-_gd3bj_freq_unfrz.log',
nbo_fname='CJS1_emim-cl_B_6-311+g-d-p-_gd3bj_pop-nbo-full-_unfrz.log',
alignto=[3,2,1])
#mol.show_initial(active=True)
display(mol.show_initial(zoom=0.5, rotations=[[0,0,90], [-90, 90, 0]]))
display(mol.show_optimisation(ball_stick=True, rotations=[[0,0,90], [-90, 90, 0]]))
Basic analysis of optimisation…
print('Optimised? {0}, Conformer? {1}, Energy = {2} a.u.'.format(
mol.is_optimised(), mol.is_conformer(), round(mol.get_optimisation_E(units='hartree'),3)))
ax = mol.plot_optimisation_E(units='hartree')
ax.get_figure().set_size_inches(3, 2)
Optimised? True, Conformer? True, Energy = -805.105 a.u.
Geometric analysis…
print 'Cl optimised polar coords from aromatic ring : ({0}, {1},{2})'.format(
*[round(i, 2) for i in mol.calc_polar_coords_from_plane(20,3,2,1)])
ax = mol.plot_opt_trajectory(20, [3,2,1])
ax.set_title('Cl optimisation path')
ax.get_figure().set_size_inches(4, 3)
Cl optimised polar coords from aromatic ring : (0.11, -116.42,-170.06)
Potential Energy Scan analysis of geometric conformers…
mol2 = pg.molecule.Molecule(folder, alignto=[3,2,1],
pes_fname=['CJS_emim_6311_plus_d3_scan.log',
'CJS_emim_6311_plus_d3_scan_bck.log'])
ax = mol2.plot_pes_scans([1,4,9,10], rotation=[0,0,90], img_pos='local_maxs', zoom=0.5)
ax.set_title('Ethyl chain rotational conformer analysis')
ax.get_figure().set_size_inches(7, 3)
Natural Bond Orbital and Second Order Perturbation Theory analysis…
print '+ve charge centre polar coords from aromatic ring: ({0} {1},{2})'.format(
*[round(i, 2) for i in mol.calc_nbo_charge_center(3, 2, 1)])
display(mol.show_nbo_charges(ball_stick=True, axis_length=0.4,
rotations=[[0,0,90], [-90, 90, 0]]))
display(mol.show_SOPT_bonds(min_energy=15., rotations=[[0, 0, 90]]))
+ve charge centre polar coords from aromatic ring: (0.02 -51.77,-33.15)
Multiple Computations Analysis
a
analysis = pg.analysis.Analysis(folder)
df, errors = analysis.add_runs(headers=['Cation', 'Anion', 'Initial'],
values=[['emim'], ['cl'],
['B', 'BE', 'BM', 'F', 'FE', 'FM']],
init_pattern='CJS1_{0}-{1}_{2}_init.com',
opt_pattern='CJS1_{0}-{1}_{2}_6-311+g-d-p-_gd3bj_opt-modredundant_unfrz.log',
freq_pattern='CJS1_{0}-{1}_{2}_6-311+g-d-p-_gd3bj_freq_unfrz.log',
nbo_pattern='CJS1_{0}-{1}_{2}_6-311+g-d-p-_gd3bj_pop-nbo-full-_unfrz.log')
print 'Read Errors:', errors
Read Errors: [{'Cation': 'emim', 'Initial': 'FM', 'Anion': 'cl'}]
analysis.add_mol_property('Opt', 'is_optimised')
analysis.add_mol_property('Energy (au)', 'get_optimisation_E', units='hartree')
analysis.add_mol_property('Cation chain, $\\psi$', 'calc_dihedral_angle', [1, 4, 9, 10])
analysis.add_mol_property('Cation Charge', 'calc_nbo_charge', range(1, 20))
analysis.add_mol_property('Anion Charge', 'calc_nbo_charge', [20])
analysis.add_mol_property(['Anion-Cation, $r$', 'Anion-Cation, $\\theta$', 'Anion-Cation, $\\phi$'],
'calc_polar_coords_from_plane', 3, 2, 1, 20)
analysis
Anion Cation Initial Opt Energy (au) Cation chain, $psi$ Cation Charge Anion Charge Anion-Cation, $r$ Anion-Cation, $theta$ Anion-Cation, $phi$ 0 cl emim B True -805.105 80.794 0.888 -0.888 0.420 -123.392 172.515 1 cl emim BE True -805.105 80.622 0.887 -0.887 0.420 -123.449 172.806 2 cl emim BM True -805.104 73.103 0.874 -0.874 0.420 124.121 -166.774 3 cl emim F True -805.118 147.026 0.840 -0.840 0.420 10.393 0.728 4 cl emim FE True -805.117 85.310 0.851 -0.851 0.417 -13.254 -4.873
RadViz is a way of visualizing multi-variate data.
ax = analysis.plot_radviz_comparison('Anion', columns=range(4, 10))
The KMeans algorithm clusters data by trying to separate samples in n groups of equal variance
kwargs = {'mtype':'optimised', 'align_to':[3,2,1],
'rotations':[[0, 0, 90], [-90, 90, 0]],
'axis_length':0.3}
def show_groups(df):
for cat, gf in df.groupby('Category'):
print 'Category {0}:'.format(cat)
mols = analysis.yield_mol_images(rows=gf.index.tolist(), **kwargs)
for mol, row in zip(mols, gf.index.tolist()):
print '(row {0})'.format(row)
display(mol)
show_groups(analysis.calc_kmean_groups('Anion', 'cl', 4, columns=range(4, 10)))
Category 0: (row 3)
Category 1: (row 0)
(row 1)
Category 2: (row 2)
Category 3: (row 4)
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
File details
Details for the file pygauss-0.1.14.zip
.
File metadata
- Download URL: pygauss-0.1.14.zip
- Upload date:
- Size: 5.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff00ba492afb0f1c707f7717c103770d2b3b1ba847a2719a1d2ae063037aa950 |
|
MD5 | 518a2d77d6b7c23a3cec61004f26ef80 |
|
BLAKE2b-256 | 6ec1d3eb558e633058e583c1d9c0f2d0a5a99157cc2ab0d7287640af779ac83b |