From 28b20f2e45fc75235c011268e011d756ea85ba1b Mon Sep 17 00:00:00 2001 From: bobbypaton Date: Fri, 1 Jul 2022 12:24:03 -0600 Subject: [PATCH] Create example Jupyter notebook --- ...upyter_goodvibes_examples-checkpoint.ipynb | 1216 +++++++++++++++++ goodvibes/GoodVibes.py | 11 +- goodvibes/examples/reaction_profile/PhPy.yaml | 1 - .../opt/DATS_13_endo_i.log | 0 .../opt/DATS_13_endo_ii.log | 0 .../opt/DATS_13_endo_iii.log | 0 .../opt/DATS_13_endo_iv.log | 0 .../opt/DATS_13_exo_i.log | 0 .../opt/DATS_13_exo_ii.log | 0 .../opt/DATS_13_exo_iii.log | 0 .../opt/DATS_13_exo_iv.log | 0 .../opt/DATS_14_endo_i.log | 0 .../opt/DATS_14_endo_ii.log | 0 .../opt/DATS_14_endo_iii.log | 0 .../opt/DATS_14_endo_iv.log | 0 .../opt/DATS_14_exo_i.log | 0 .../opt/DATS_14_exo_ii.log | 0 .../opt/DATS_14_exo_iii.log | 0 .../opt/DATS_14_exo_iv.log | 0 .../opt/DATS_14_exo_v.log | 0 .../spc_01/DATS_13_endo_i_TZVP.log | 0 .../spc_01/DATS_13_endo_ii_TZVP.log | 0 .../spc_01/DATS_13_endo_iii_TZVP.log | 0 .../spc_01/DATS_13_endo_iv_TZVP.log | 0 .../spc_01/DATS_13_exo_i_TZVP.log | 0 .../spc_01/DATS_13_exo_ii_TZVP.log | 0 .../spc_01/DATS_13_exo_iii_TZVP.log | 0 .../spc_01/DATS_13_exo_iv_TZVP.log | 0 .../spc_01/DATS_14_endo_i_TZVP.log | 0 .../spc_01/DATS_14_endo_ii_TZVP.log | 0 .../spc_01/DATS_14_endo_iii_TZVP.log | 0 .../spc_01/DATS_14_endo_iv_TZVP.log | 0 .../spc_01/DATS_14_exo_i_TZVP.log | 0 .../spc_01/DATS_14_exo_ii_TZVP.log | 0 .../spc_01/DATS_14_exo_iii_TZVP.log | 0 .../spc_01/DATS_14_exo_iv_TZVP.log | 0 .../spc_01/DATS_14_exo_v_TZVP.log | 0 .../spc_02/DATS_13_endo_i_TZVP.out | 0 .../spc_02/DATS_13_endo_ii_TZVP.out | 0 .../spc_02/DATS_13_endo_iii_TZVP.out | 0 .../spc_02/DATS_13_endo_iv_TZVP.out | 0 .../spc_02/DATS_13_exo_i_TZVP.out | 0 .../spc_02/DATS_13_exo_ii_TZVP.out | 0 .../spc_02/DATS_13_exo_iii_TZVP.out | 0 .../spc_02/DATS_13_exo_iv_TZVP.out | 0 .../spc_02/DATS_14_endo_i_TZVP.out | 0 .../spc_02/DATS_14_endo_ii_TZVP.out | 0 .../spc_02/DATS_14_endo_iii_TZVP.out | 0 .../spc_02/DATS_14_endo_iv_TZVP.out | 0 .../spc_02/DATS_14_exo_i_TZVP.out | 0 .../spc_02/DATS_14_exo_ii_TZVP.out | 0 .../spc_02/DATS_14_exo_iii_TZVP.out | 0 .../spc_02/DATS_14_exo_iv_TZVP.out | 0 .../spc_02/DATS_14_exo_v_TZVP.out | 0 .../spc_03/DATS_13_endo_i_DLPNO.out | 0 .../spc_03/DATS_13_endo_ii_DLPNO.out | 0 .../spc_03/DATS_13_endo_iii_DLPNO.out | 0 .../spc_03/DATS_13_endo_iv_DLPNO.out | 0 .../spc_03/DATS_13_exo_i_DLPNO.out | 0 .../spc_03/DATS_13_exo_ii_DLPNO.out | 0 .../spc_03/DATS_13_exo_iii_DLPNO.out | 0 .../spc_03/DATS_13_exo_iv_DLPNO.out | 0 .../spc_03/DATS_14_endo_i_DLPNO.out | 0 .../spc_03/DATS_14_endo_ii_DLPNO.out | 0 .../spc_03/DATS_14_endo_iii_DLPNO.out | 0 .../spc_03/DATS_14_endo_iv_DLPNO.out | 0 .../spc_03/DATS_14_exo_i_DLPNO.out | 0 .../spc_03/DATS_14_exo_ii_DLPNO.out | 0 .../spc_03/DATS_14_exo_iii_DLPNO.out | 0 .../spc_03/DATS_14_exo_iv_DLPNO.out | 0 .../spc_03/DATS_14_exo_v_DLPNO.out | 0 goodvibes/io.py | 2 +- goodvibes/pes.py | 2 +- jupyter_goodvibes_examples.ipynb | 1216 +++++++++++++++++ 74 files changed, 2440 insertions(+), 8 deletions(-) create mode 100644 .ipynb_checkpoints/jupyter_goodvibes_examples-checkpoint.ipynb rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_endo_i.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_endo_ii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_endo_iii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_endo_iv.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_exo_i.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_exo_ii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_exo_iii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_13_exo_iv.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_endo_i.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_endo_ii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_endo_iii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_endo_iv.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_exo_i.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_exo_ii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_exo_iii.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_exo_iv.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/opt/DATS_14_exo_v.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_endo_i_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_endo_ii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_endo_iii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_endo_iv_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_exo_i_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_exo_ii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_exo_iii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_13_exo_iv_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_endo_i_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_endo_ii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_endo_iii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_endo_iv_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_exo_i_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_exo_ii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_exo_iii_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_exo_iv_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_01/DATS_14_exo_v_TZVP.log (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_endo_i_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_endo_ii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_endo_iii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_endo_iv_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_exo_i_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_exo_ii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_exo_iii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_13_exo_iv_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_endo_i_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_endo_ii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_endo_iii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_endo_iv_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_exo_i_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_exo_ii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_exo_iii_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_exo_iv_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_02/DATS_14_exo_v_TZVP.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_endo_i_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_endo_ii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_endo_iii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_endo_iv_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_exo_i_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_exo_ii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_exo_iii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_13_exo_iv_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_endo_i_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_endo_ii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_endo_iii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_endo_iv_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_exo_i_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_exo_ii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_exo_iii_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_exo_iv_DLPNO.out (100%) rename goodvibes/examples/{reaction_selecivity => reaction_selectivity}/spc_03/DATS_14_exo_v_DLPNO.out (100%) create mode 100644 jupyter_goodvibes_examples.ipynb diff --git a/.ipynb_checkpoints/jupyter_goodvibes_examples-checkpoint.ipynb b/.ipynb_checkpoints/jupyter_goodvibes_examples-checkpoint.ipynb new file mode 100644 index 0000000..0d09e73 --- /dev/null +++ b/.ipynb_checkpoints/jupyter_goodvibes_examples-checkpoint.ipynb @@ -0,0 +1,1216 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os, glob, time\n", + "import pandas as pd\n", + "import numpy as np\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# here are the GoodVibes imports! \n", + "import goodvibes.GoodVibes as gv\n", + "import goodvibes.thermo as thermo\n", + "\n", + "# The following lines are only necessary if you want to select non-default options\n", + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# directory containing some output files\n", + "fdir = 'goodvibes/examples/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 01: Grimme-type quasi-harmonic correction with a (Grimme type) cut-off of 150 cm-1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "files = ['methylaniline.out', 'benzene.out']\n", + "\n", + "# Change low frequency cutoff from 100 to 150 cm-1 \n", + "options.S_freq_cutoff = 150\n", + "\n", + "# Carry out the thermochemical analysis\n", + "bbe_vals = [thermo.calc_bbe(fdir+file, sp_file=None) for file in files]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyzpeenthalpyentropyqh_entropygibbs_free_energyqh_gibbs_free_energy
0methylaniline.out-326.6649010.142118-326.5144890.0001330.000133-326.554157-326.554024
1benzene.out-232.2272010.101377-232.1205210.0001100.000110-232.153263-232.153265
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy zpe enthalpy entropy qh_entropy \\\n", + "0 methylaniline.out -326.664901 0.142118 -326.514489 0.000133 0.000133 \n", + "1 benzene.out -232.227201 0.101377 -232.120521 0.000110 0.000110 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy \n", + "0 -326.554157 -326.554024 \n", + "1 -232.153263 -232.153265 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create pandas dataframe with thermochemical values\n", + "vals = ['scf_energy', 'zpe', 'enthalpy', 'entropy', 'qh_entropy', 'gibbs_free_energy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe,k) for k in vals] for bbe in bbe_vals], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=[name for name in files])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 02: Quasi-harmonic thermochemistry with a larger basis set single point energy correction" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Using an internally linked job\n", + "file = fdir+'ethane_spc.out'\n", + "options.S_freq_cutoff = 100 # reset\n", + "options.spc = 'link' # lets consider an internally-linked job where a single point energy follows a frequency calc." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "o Found vibrational scaling factor of 0.977 for B3LYP/6-31G(d) level of theory\n", + " Alecu, I. M.; Zheng, J.; Zhao, Y.; Truhlar, D. G. J. Chem. Theory Comput. 2010, 6, 2872-2887." + ] + } + ], + "source": [ + "# Carry out the thermochemical analysis - auto-detect the vibrational scaling factor\n", + "import goodvibes.io as io\n", + "log = io.Logger(\"Goodvibes\")\n", + "level_of_theory = gv.filter_output_files([file], log, options.spc)[1]\n", + "options.freq_scale_factor, options.mm_freq_scale_factor = gv.get_vib_scale_factor([file], [level_of_theory[0]], log)\n", + "\n", + "# Carry out the thermochemical analysis\n", + "bbe_val = thermo.calc_bbe(file, spc=options.spc, freq_scale_factor=options.freq_scale_factor)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structuresp_energyscf_energyenthalpyqh_gibbs_free_energy
0goodvibes/examples/ethane_spc.out-79.858399-79.830421-79.780448-79.808019
\n", + "
" + ], + "text/plain": [ + " Structure sp_energy scf_energy enthalpy \\\n", + "0 goodvibes/examples/ethane_spc.out -79.858399 -79.830421 -79.780448 \n", + "\n", + " qh_gibbs_free_energy \n", + "0 -79.808019 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['sp_energy', 'scf_energy', 'enthalpy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe_val,k) for k in vals]], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=file)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# now lets consider the case where the single point energy calculation is in a separate file\n", + "file = fdir+'ethane.out'\n", + "sp_file = fdir+'ethane_TZ.out'\n", + "\n", + "# Carry out the thermochemical analysis\n", + "bbe_val = thermo.calc_bbe(file, sp_file, spc=True, freq_scale_factor=options.freq_scale_factor)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structuresp_energyscf_energyenthalpyqh_gibbs_free_energy
0goodvibes/examples/ethane.out-79.858399-79.830421-79.780448-79.808019
\n", + "
" + ], + "text/plain": [ + " Structure sp_energy scf_energy enthalpy \\\n", + "0 goodvibes/examples/ethane.out -79.858399 -79.830421 -79.780448 \n", + "\n", + " qh_gibbs_free_energy \n", + "0 -79.808019 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['sp_energy', 'scf_energy', 'enthalpy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe_val,k) for k in vals]], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=file)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 03: Changing the temperature (from standard 298.15 K to 1000 K) and concentration (from standard state in gas phase, 1 atm, to standard state in solution, 1 mol/l)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values \n", + "\n", + "options.conc = 1\n", + "options.temperature = 1000\n", + "options.freq_scale_factor = 0.95 # for example" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyenthalpygibbs_free_energyqh_gibbs_free_energy
0goodvibes/examples/methylaniline.out-326.664901-326.457128-326.680648-326.678943
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy enthalpy \\\n", + "0 goodvibes/examples/methylaniline.out -326.664901 -326.457128 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy \n", + "0 -326.680648 -326.678943 " + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Parse output file for energy, frequency, method, etc.\n", + "file = fdir+'methylaniline.out'\n", + "\n", + "# Carry out the thermochemical analysis and then create dataframe with results\n", + "bbe_val = thermo.calc_bbe(file, temperature = options.temperature, conc = options.conc, freq_scale_factor = options.freq_scale_factor)\n", + "vals = ['scf_energy', 'enthalpy', 'gibbs_free_energy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe_val,k) for k in vals]], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=file)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 05: Writing Cartesian coordinates to file" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values\n", + "\n", + "files = set(glob.glob(fdir+\"HCN*.out\")) # wildcard for file names\n", + "io.write_structures(\"HCN_output\", files, xyz = True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 06: Analyzing multiple files at once" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values \n", + "\n", + "files = set(glob.glob(fdir+\"*.out\")) - set(glob.glob(fdir+\"*NWChem.out\")) # \n", + "files_sorted = sorted (files, key = lambda x: ( isinstance (x, str ), x)) #alphanumeric sorting" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Carry out the thermochemical analysis\n", + "# the if statement here filters out structures for which thermochemical data is not available\n", + "bbe_vals = [thermo.calc_bbe(file, sp_file=None) for file in files_sorted if hasattr(thermo.calc_bbe(file, sp_file=None), 'zpe')]\n", + "names = [file.split(fdir)[1] for file in files_sorted if hasattr(thermo.calc_bbe(file, sp_file=None), 'zpe')]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyzpeenthalpyentropyqh_entropygibbs_free_energyqh_gibbs_free_energy
0Al_298K.out-242.3287080.000000-242.3263470.0000590.000059-242.344018-242.344018
1Al_400K.out-242.3287080.000000-242.3263470.0000590.000059-242.344018-242.344018
2CuCN.out-289.0054630.006594-288.9943070.0000870.000087-289.020260-289.020264
3H2O.out-76.3681280.020772-76.3435770.0000720.000072-76.365035-76.365035
4HCN_singlet.out-93.3588510.015978-93.3393730.0000770.000077-93.362269-93.362269
5HCN_triplet.out-93.1537870.012567-93.1377800.0000810.000081-93.161850-93.161850
6allene.out-116.5696050.053913-116.5109160.0000930.000093-116.538534-116.538537
7benzene.out-232.2272010.101377-232.1205210.0001100.000110-232.153263-232.153265
8ethane.out-79.8304210.075238-79.7507700.0000920.000092-79.778293-79.778295
9ethane_spc.out-79.8304210.075238-79.7507700.0000920.000092-79.778293-79.778295
10isobutane.out-158.4588110.132380-158.3198040.0001150.000115-158.354046-158.354056
11methylaniline.out-326.6649010.142118-326.5144890.0001330.000133-326.554157-326.554024
12neopentane.out-197.7729800.160311-197.6048240.0001240.000124-197.641776-197.641791
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy zpe enthalpy entropy qh_entropy \\\n", + "0 Al_298K.out -242.328708 0.000000 -242.326347 0.000059 0.000059 \n", + "1 Al_400K.out -242.328708 0.000000 -242.326347 0.000059 0.000059 \n", + "2 CuCN.out -289.005463 0.006594 -288.994307 0.000087 0.000087 \n", + "3 H2O.out -76.368128 0.020772 -76.343577 0.000072 0.000072 \n", + "4 HCN_singlet.out -93.358851 0.015978 -93.339373 0.000077 0.000077 \n", + "5 HCN_triplet.out -93.153787 0.012567 -93.137780 0.000081 0.000081 \n", + "6 allene.out -116.569605 0.053913 -116.510916 0.000093 0.000093 \n", + "7 benzene.out -232.227201 0.101377 -232.120521 0.000110 0.000110 \n", + "8 ethane.out -79.830421 0.075238 -79.750770 0.000092 0.000092 \n", + "9 ethane_spc.out -79.830421 0.075238 -79.750770 0.000092 0.000092 \n", + "10 isobutane.out -158.458811 0.132380 -158.319804 0.000115 0.000115 \n", + "11 methylaniline.out -326.664901 0.142118 -326.514489 0.000133 0.000133 \n", + "12 neopentane.out -197.772980 0.160311 -197.604824 0.000124 0.000124 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy \n", + "0 -242.344018 -242.344018 \n", + "1 -242.344018 -242.344018 \n", + "2 -289.020260 -289.020264 \n", + "3 -76.365035 -76.365035 \n", + "4 -93.362269 -93.362269 \n", + "5 -93.161850 -93.161850 \n", + "6 -116.538534 -116.538537 \n", + "7 -232.153263 -232.153265 \n", + "8 -79.778293 -79.778295 \n", + "9 -79.778293 -79.778295 \n", + "10 -158.354046 -158.354056 \n", + "11 -326.554157 -326.554024 \n", + "12 -197.641776 -197.641791 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['scf_energy', 'zpe', 'enthalpy', 'entropy', 'qh_entropy', 'gibbs_free_energy', 'qh_gibbs_free_energy']\n", + "bbe_df = pd.DataFrame([[getattr(i,k) for k in vals] for i in bbe_vals], columns = vals)\n", + "bbe_df.insert(loc=0, column='Structure', value=names)\n", + "bbe_df" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " TOTAL CPU 0 days 2 hrs 37 mins 0 secs\n" + ] + } + ], + "source": [ + "# Total CPU time\n", + "thermo_data = dict(zip(files_sorted, bbe_vals)) \n", + "cpu = gv.calc_cpu(thermo_data, log)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 07: Entropic Symmetry Correction" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "names = [\"allene.out\", \"benzene.out\", \"ethane.out\", \"isobutane.out\", \"neopentane.out\"]\n", + "files = [fdir+name for name in names]\n", + " \n", + "bbe_vals = [thermo.calc_bbe(file, sp_file=None, ssymm=True) for file in files]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyzpeenthalpyentropyqh_entropygibbs_free_energyqh_gibbs_free_energypoint_group
0allene.out-116.5696050.053913-116.5109160.0000930.000093-116.538534-116.538537D2d
1benzene.out-232.2272010.101377-232.1205210.0001020.000102-232.150917-232.150919D6h
2ethane.out-79.8304210.075238-79.7507700.0000870.000087-79.776601-79.776603D3d
3isobutane.out-158.4588110.132380-158.3198040.0001110.000111-158.353008-158.353019C3v
4neopentane.out-197.7729800.160311-197.6048240.0001160.000116-197.639430-197.639444Td
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy zpe enthalpy entropy qh_entropy \\\n", + "0 allene.out -116.569605 0.053913 -116.510916 0.000093 0.000093 \n", + "1 benzene.out -232.227201 0.101377 -232.120521 0.000102 0.000102 \n", + "2 ethane.out -79.830421 0.075238 -79.750770 0.000087 0.000087 \n", + "3 isobutane.out -158.458811 0.132380 -158.319804 0.000111 0.000111 \n", + "4 neopentane.out -197.772980 0.160311 -197.604824 0.000116 0.000116 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy point_group \n", + "0 -116.538534 -116.538537 D2d \n", + "1 -232.150917 -232.150919 D6h \n", + "2 -79.776601 -79.776603 D3d \n", + "3 -158.353008 -158.353019 C3v \n", + "4 -197.639430 -197.639444 Td " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['scf_energy', 'zpe', 'enthalpy', 'entropy', 'qh_entropy', 'gibbs_free_energy', 'qh_gibbs_free_energy', 'point_group']\n", + "bbe_df = pd.DataFrame([[getattr(i,k) for k in vals] for i in bbe_vals], columns = vals)\n", + "bbe_df.insert(loc=0, column='Structure', value=names)\n", + "bbe_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 08: Potential Energy Surface (PES) Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "pesdir = 'goodvibes/examples/reaction_profile/'\n", + "files = glob.glob(pesdir+\"*.log\")\n", + "sp_files = glob.glob(pesdir+\"*.out\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structuresp_energyscf_energyzpeenthalpyqh_gibbs_free_energy
0Int_I_Py_d.log-1415.698106-1415.6981060.418680-1415.254939-1415.328850
1Int_I_Py_e.log-1415.697383-1415.6973830.418818-1415.254065-1415.328111
2Int_I_Py_f.log-1415.706212-1415.7062120.419258-1415.262679-1415.335952
3Int_I_Py_b.log-1415.711031-1415.7110310.419045-1415.267713-1415.340929
4Int_I_Py_c.log-1415.713255-1415.7132550.418916-1415.269974-1415.343483
\n", + "
" + ], + "text/plain": [ + " Structure sp_energy scf_energy zpe enthalpy \\\n", + "0 Int_I_Py_d.log -1415.698106 -1415.698106 0.418680 -1415.254939 \n", + "1 Int_I_Py_e.log -1415.697383 -1415.697383 0.418818 -1415.254065 \n", + "2 Int_I_Py_f.log -1415.706212 -1415.706212 0.419258 -1415.262679 \n", + "3 Int_I_Py_b.log -1415.711031 -1415.711031 0.419045 -1415.267713 \n", + "4 Int_I_Py_c.log -1415.713255 -1415.713255 0.418916 -1415.269974 \n", + "\n", + " qh_gibbs_free_energy \n", + "0 -1415.328850 \n", + "1 -1415.328111 \n", + "2 -1415.335952 \n", + "3 -1415.340929 \n", + "4 -1415.343483 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# thermochemical calculation\n", + "bbe_vals = [thermo.calc_bbe(file, sp_file=sp, spc=True) for file,sp in zip(files,sp_files)]\n", + "\n", + "# Show a table\n", + "vals = ['sp_energy', 'scf_energy', 'zpe', 'enthalpy', 'qh_gibbs_free_energy']\n", + "bbe_df = pd.DataFrame([[getattr(i,k) for k in vals] for i in bbe_vals], columns = vals)\n", + "bbe_df.insert(loc=0, column='Structure', value=[file.split(pesdir)[1] for file in files])\n", + "bbe_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " RXN: Ph (kcal/mol) DE_SPC DE DZPE DH_SPC T.DS T.qh-DS DG(T)_SPC qh-DG(T)_SPC\n", + " *******************************************************************************************************************************************************\n", + "o Ph-Int1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\n", + "o Ph-TS1 23.93 23.93 -1.60 22.34 0.68 0.50 22.14 22.19\n", + "o Ph-Int2 -14.22 -14.22 -0.57 -14.54 3.69 2.02 -15.64 -15.14\n", + "o Ph-TS2 -12.25 -12.25 -1.35 -13.55 2.75 1.13 -14.37 -13.89\n", + "o Ph-Int3 -37.69 -37.69 -0.57 -37.68 9.78 5.92 -40.60 -39.44\n", + " *******************************************************************************************************************************************************\n", + "\n", + " RXN: Py (kcal/mol) DE_SPC DE DZPE DH_SPC T.DS T.qh-DS DG(T)_SPC qh-DG(T)_SPC\n", + " *******************************************************************************************************************************************************\n", + "o Py-Int1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\n", + "o Py-TS1 17.76 17.76 -1.24 16.52 0.16 0.21 16.47 16.46\n", + "o Py-Int2 -17.39 -17.39 -0.47 -17.80 3.35 1.43 -18.80 -18.23\n", + "o Py-TS2 -12.54 -12.54 -0.87 -13.46 1.39 0.44 -13.87 -13.59\n", + "o Py-Int3 -32.83 -32.83 -0.57 -32.82 10.12 6.08 -35.84 -34.63\n", + " *******************************************************************************************************************************************************\n" + ] + } + ], + "source": [ + "# Convert absolute values into a relatve PES \n", + "options.pes = pesdir+'PhPy.yaml' # external file defining PES\n", + "options.gconf = False\n", + "\n", + "import goodvibes.pes as pes\n", + "thermo_data = dict(zip(files, bbe_vals))\n", + "species, table = pes.tabulate(thermo_data, options, log, show=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Graphing Reaction Profile\n" + ] + }, + { + "data": { + "image/png": "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cNR12mUS03VUNsakX4nOAnkbf8EOoqOjOXv2LEePHiUqKoqzZ89y6tQp/v77b9zc3IiIiGD//v0OjWnTpk3s2bOHZ599NqPMGEP//v25++67ee655xwajz3deuut9O3bN9tWhb169WLhwoV5GtdJKWVzNr9Ou3piymAsV53rXnlEZJCIbBORbfaouZQrV45Dhw6RlpaGl5dXxictLY3IyEg8PDyIiSnUbdV8McbwxhtvMHbs2CyNGmbNmsXhw4eZNWtWkWuBl5vRo0fz3XffcfTo0SzljRs3JjU1lR07djgpMqWKDY/066j1Myg/C+d2nc4rV09MESJyI4D133PXm9EYE2qMCTbGBNujlZyIXLf1nYggIhkD4TnCTz/9RHR0NL17984o27t3L2+//TaLFi3Cy8vLYbE4SoUKFRg0aNA1TeJFhJ49e+o4TUoVXkr6ddT6Cc3DMnm+TueVqyem74FnrH8/AzjtNf9Lly7RsGFDSpcuTVxcHImJiSQmJuLm5ka5cuUoU6bMNQPh2UtKSgqvv/4648aNyxjMLzExkZ49ezJhwgRuv/12h8ThDM8//zwLFizg/PnzWcp79erF4sWLKek9yyvlBDa/TrtMYhKRRcAWoLaInBKR/sD7wAMichi43/rdKfz9/fHx8eHxxx+nWrVq+Pj4UKFCBfz9/fHy8mLAgAEOe59p1qxZVKpUif/85z8ZZa+//jpBQUH07dvXITE4S2BgII888giffPJJlvKgoCAqVarExo0bnRSZUsWfo67TLvMeky3Z4z2mlJQURowYQUJCAn5+fkRFRWXUmgIDA5kwYYJDElNkZCR169Zl/fr11KtXD4Aff/yRIUOGsGvXLofeTnSWvXv38sADD3D8+PEsz9c++OADDh8+TGhoXu4+KKWu5iov2LpMjcnVeXh4EBISgre3NydPniQhIQFjDNWqVWP48OEOqy2NHDmS3r17ZySliIgI+vfvz/z580tEUgKoX78+d955J//73/+ylPfo0YNly5Zx5coVJ0WmlLKFYlVjckRfeQUZNtxWtm3bRufOnTlw4AAVKlQgLS2Njh07EhwczDvvvOOQGFzFL7/8wosvvsjevXuztD5s3bo1r776Kp07O3UATqWKJO0rz46KY+/iaWlpNG/enMGDB2c8R5o6dSqLFy9m48aNJW5MImMMDRs25P333+ehhx7K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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the PES\n", + "import matplotlib.pyplot as plt\n", + "graph_data = pes.get_pes(options.pes, thermo_data, log, options.temperature, options.gconf)\n", + "pes.graph_reaction_profile(graph_data, options, log, plt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 09: Stereoselectivity and Boltzmann populations" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values \n", + "\n", + "seldir = 'goodvibes/examples/reaction_selectivity/opt/'\n", + "files = glob.glob(seldir+\"*.log\")\n", + "files = sorted (files, key = lambda x: ( isinstance (x, str ), x)) #alphanumeric sorting\n", + "\n", + "spcdir = 'goodvibes/examples/reaction_selectivity/spc_01/'\n", + "sp_files = glob.glob(spcdir+\"*.log\")\n", + "sp_files = sorted (sp_files, key = lambda x: ( isinstance (x, str ), x)) #alphanumeric sorting\n", + "\n", + "options.dedup = True\n", + "options.Boltz = True\n", + "# Define two groups of files by wildcard matching\n", + "options.ee = \"*_13_*:*_14_*\"" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Selectivity Excess (%) Ratio (%) Ratio Major DDG kcal/mol\n", + " *************************************************************************************************************\n", + "o 99.21 0:100 1:252 14 3.28\n", + " *************************************************************************************************************\n" + ] + } + ], + "source": [ + "bbe_vals = [thermo.calc_bbe(file, sp_file=sp, spc=True) for file,sp in zip(files,sp_files)]\n", + "thermo_data = dict(zip(files, bbe_vals))\n", + "thermo_data = gv.sort_by_stability(thermo_data, options.sort)\n", + "\n", + "# obtain Boltzmann factors\n", + "boltz_facs, weighted_free_energy = gv.get_boltz(thermo_data, options.clustering, [], options.temperature, log)\n", + "\n", + "#and selectivity values\n", + "[a_name, b_name], [a_files, b_files], ee, er, ratio, dd_free_energy, preference = gv.get_selectivity(options.ee, files, boltz_facs, options.temperature, log)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#plot the relative Gibbs energies\n", + "pes.sel_striplot(a_name, b_name, a_files, b_files, thermo_data, plt)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/goodvibes/GoodVibes.py b/goodvibes/GoodVibes.py index 243a580..72546a5 100644 --- a/goodvibes/GoodVibes.py +++ b/goodvibes/GoodVibes.py @@ -97,7 +97,7 @@ def add_time(tm, cpu): return fulldate -def calc_cpu(thermo_data, options, log): +def calc_cpu(thermo_data, log): # Initialize the total CPU time add_days = 0 cpu = datetime(100, 1, 1, 00, 00, 00, 00) @@ -115,7 +115,7 @@ def calc_cpu(thermo_data, options, log): cpu.minute, 'mins', cpu.second, 'secs')) -def get_vib_scale_factor(files, level_of_theory, freq_scale_factor, mm_freq_scale_factor, log): +def get_vib_scale_factor(files, level_of_theory, log, freq_scale_factor=False, mm_freq_scale_factor=False): ''' Attempt to automatically obtain frequency scale factor Application of freq scale factors requires all outputs to be same level of theory''' @@ -148,7 +148,8 @@ def get_vib_scale_factor(files, level_of_theory, freq_scale_factor, mm_freq_scal levels_l_o_t.append(i) filtered_calcs_l_o_t.append(files_l_o_t) filtered_calcs_l_o_t.append(levels_l_o_t) - io.print_check_fails(log, filtered_calcs_l_o_t[1], filtered_calcs_l_o_t[0], "levels of theory") + print(filtered_calcs_l_o_t) + #io.print_check_fails(log, filtered_calcs_l_o_t[1], filtered_calcs_l_o_t[0], "levels of theory") # Exit program if molecular mechanics scaling factor is given and all files are not ONIOM calculations if mm_freq_scale_factor is not False: @@ -608,7 +609,7 @@ def main(): bbe_vals = [[]] * len(file_list) # initialize a list that will be populated with thermochemical values # scaling vibrational Frequencies - options.freq_scale_factor, options.mm_freq_scale_factor = get_vib_scale_factor(file_list, l_o_t, options.freq_scale_factor, options.mm_freq_scale_factor, log) + options.freq_scale_factor, options.mm_freq_scale_factor = get_vib_scale_factor(file_list, l_o_t, log, options.freq_scale_factor, options.mm_freq_scale_factor) for i, file in enumerate(file_list): d3_term = 0.0 # computes D3 term if requested @@ -644,7 +645,7 @@ def main(): gv_summary = io.summary(thermo_data, options, log, boltz_facs, clusters) if options.cputime: # Print CPU usage if requested - cpu = calc_cpu(thermo_data, options, log) + cpu = calc_cpu(thermo_data, log) if options.ee is not False: # Compute selectivity [a_name, b_name], [a_files, b_files], ee, er, ratio, dd_free_energy, preference = get_selectivity(options.ee, file_list, boltz_facs, options.temperature, log) diff --git a/goodvibes/examples/reaction_profile/PhPy.yaml b/goodvibes/examples/reaction_profile/PhPy.yaml index 1c5063e..661755f 100755 --- a/goodvibes/examples/reaction_profile/PhPy.yaml +++ b/goodvibes/examples/reaction_profile/PhPy.yaml @@ -22,7 +22,6 @@ gridlines: True show_conformers: True show_gconf: False - dpi : 400 title: Potential Energy Surface diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_i.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_i.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_i.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_i.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_ii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_ii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_ii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_ii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_iii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_iii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_iii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_iii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_iv.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_iv.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_endo_iv.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_endo_iv.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_i.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_i.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_i.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_i.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_ii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_ii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_ii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_ii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_iii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_iii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_iii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_iii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_iv.log b/goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_iv.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_13_exo_iv.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_13_exo_iv.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_i.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_i.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_i.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_i.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_ii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_ii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_ii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_ii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_iii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_iii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_iii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_iii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_iv.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_iv.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_endo_iv.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_endo_iv.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_i.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_i.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_i.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_i.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_ii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_ii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_ii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_ii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_iii.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_iii.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_iii.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_iii.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_iv.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_iv.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_iv.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_iv.log diff --git a/goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_v.log b/goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_v.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/opt/DATS_14_exo_v.log rename to goodvibes/examples/reaction_selectivity/opt/DATS_14_exo_v.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_i_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_i_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_i_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_i_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_ii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_ii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_ii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_ii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_iii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_iii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_iii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_iii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_iv_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_iv_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_endo_iv_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_endo_iv_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_i_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_i_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_i_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_i_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_ii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_ii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_ii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_ii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_iii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_iii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_iii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_iii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_iv_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_iv_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_13_exo_iv_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_13_exo_iv_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_i_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_i_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_i_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_i_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_ii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_ii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_ii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_ii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_iii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_iii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_iii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_iii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_iv_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_iv_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_endo_iv_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_endo_iv_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_i_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_i_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_i_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_i_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_ii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_ii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_ii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_ii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_iii_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_iii_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_iii_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_iii_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_iv_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_iv_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_iv_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_iv_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_v_TZVP.log b/goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_v_TZVP.log similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_01/DATS_14_exo_v_TZVP.log rename to goodvibes/examples/reaction_selectivity/spc_01/DATS_14_exo_v_TZVP.log diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_i_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_i_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_i_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_i_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_ii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_ii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_ii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_ii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_iii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_iii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_iii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_iii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_iv_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_iv_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_endo_iv_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_endo_iv_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_i_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_i_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_i_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_i_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_ii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_ii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_ii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_ii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_iii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_iii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_iii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_iii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_iv_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_iv_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_13_exo_iv_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_13_exo_iv_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_i_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_i_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_i_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_i_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_ii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_ii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_ii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_ii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_iii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_iii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_iii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_iii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_iv_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_iv_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_endo_iv_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_endo_iv_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_i_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_i_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_i_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_i_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_ii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_ii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_ii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_ii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_iii_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_iii_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_iii_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_iii_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_iv_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_iv_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_iv_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_iv_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_v_TZVP.out b/goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_v_TZVP.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_02/DATS_14_exo_v_TZVP.out rename to goodvibes/examples/reaction_selectivity/spc_02/DATS_14_exo_v_TZVP.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_i_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_i_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_i_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_i_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_ii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_ii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_ii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_ii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_iii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_iii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_iii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_iii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_iv_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_iv_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_endo_iv_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_endo_iv_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_i_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_i_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_i_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_i_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_ii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_ii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_ii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_ii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_iii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_iii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_iii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_iii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_iv_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_iv_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_13_exo_iv_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_13_exo_iv_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_i_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_i_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_i_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_i_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_ii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_ii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_ii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_ii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_iii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_iii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_iii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_iii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_iv_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_iv_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_endo_iv_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_endo_iv_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_i_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_i_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_i_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_i_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_ii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_ii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_ii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_ii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_iii_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_iii_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_iii_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_iii_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_iv_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_iv_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_iv_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_iv_DLPNO.out diff --git a/goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_v_DLPNO.out b/goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_v_DLPNO.out similarity index 100% rename from goodvibes/examples/reaction_selecivity/spc_03/DATS_14_exo_v_DLPNO.out rename to goodvibes/examples/reaction_selectivity/spc_03/DATS_14_exo_v_DLPNO.out diff --git a/goodvibes/io.py b/goodvibes/io.py index 200af6f..0df752c 100644 --- a/goodvibes/io.py +++ b/goodvibes/io.py @@ -66,7 +66,7 @@ class Logger: log (file object): file to write GV output to. thermodata (bool): decides if string passed to logger is thermochemical data, needing to be separated by commas """ - def __init__(self, filein, append, csv): + def __init__(self, filein, append='output', csv=False): self.csv = csv if not self.csv: suffix = 'dat' diff --git a/goodvibes/pes.py b/goodvibes/pes.py index ec69076..7dcab9c 100644 --- a/goodvibes/pes.py +++ b/goodvibes/pes.py @@ -48,7 +48,7 @@ class get_pes: g_species_qhgzero (list):quasi-harmonic Gibbs free energy "zero" values used for graphing. g_rel_val (list): relative Gibbs free energy values used for graphing. """ - def __init__(self, file, thermo_data, log, temperature, gconf, QH, cosmo=None, cosmo_int=None): + def __init__(self, file, thermo_data, log, temperature, gconf=True, QH=False, cosmo=None, cosmo_int=None): # Default values self.dec, self.units, self.boltz = 2, 'kcal/mol', False diff --git a/jupyter_goodvibes_examples.ipynb b/jupyter_goodvibes_examples.ipynb new file mode 100644 index 0000000..0d09e73 --- /dev/null +++ b/jupyter_goodvibes_examples.ipynb @@ -0,0 +1,1216 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os, glob, time\n", + "import pandas as pd\n", + "import numpy as np\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# here are the GoodVibes imports! \n", + "import goodvibes.GoodVibes as gv\n", + "import goodvibes.thermo as thermo\n", + "\n", + "# The following lines are only necessary if you want to select non-default options\n", + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# directory containing some output files\n", + "fdir = 'goodvibes/examples/'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 01: Grimme-type quasi-harmonic correction with a (Grimme type) cut-off of 150 cm-1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "files = ['methylaniline.out', 'benzene.out']\n", + "\n", + "# Change low frequency cutoff from 100 to 150 cm-1 \n", + "options.S_freq_cutoff = 150\n", + "\n", + "# Carry out the thermochemical analysis\n", + "bbe_vals = [thermo.calc_bbe(fdir+file, sp_file=None) for file in files]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyzpeenthalpyentropyqh_entropygibbs_free_energyqh_gibbs_free_energy
0methylaniline.out-326.6649010.142118-326.5144890.0001330.000133-326.554157-326.554024
1benzene.out-232.2272010.101377-232.1205210.0001100.000110-232.153263-232.153265
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy zpe enthalpy entropy qh_entropy \\\n", + "0 methylaniline.out -326.664901 0.142118 -326.514489 0.000133 0.000133 \n", + "1 benzene.out -232.227201 0.101377 -232.120521 0.000110 0.000110 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy \n", + "0 -326.554157 -326.554024 \n", + "1 -232.153263 -232.153265 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create pandas dataframe with thermochemical values\n", + "vals = ['scf_energy', 'zpe', 'enthalpy', 'entropy', 'qh_entropy', 'gibbs_free_energy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe,k) for k in vals] for bbe in bbe_vals], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=[name for name in files])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 02: Quasi-harmonic thermochemistry with a larger basis set single point energy correction" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Using an internally linked job\n", + "file = fdir+'ethane_spc.out'\n", + "options.S_freq_cutoff = 100 # reset\n", + "options.spc = 'link' # lets consider an internally-linked job where a single point energy follows a frequency calc." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "o Found vibrational scaling factor of 0.977 for B3LYP/6-31G(d) level of theory\n", + " Alecu, I. M.; Zheng, J.; Zhao, Y.; Truhlar, D. G. J. Chem. Theory Comput. 2010, 6, 2872-2887." + ] + } + ], + "source": [ + "# Carry out the thermochemical analysis - auto-detect the vibrational scaling factor\n", + "import goodvibes.io as io\n", + "log = io.Logger(\"Goodvibes\")\n", + "level_of_theory = gv.filter_output_files([file], log, options.spc)[1]\n", + "options.freq_scale_factor, options.mm_freq_scale_factor = gv.get_vib_scale_factor([file], [level_of_theory[0]], log)\n", + "\n", + "# Carry out the thermochemical analysis\n", + "bbe_val = thermo.calc_bbe(file, spc=options.spc, freq_scale_factor=options.freq_scale_factor)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structuresp_energyscf_energyenthalpyqh_gibbs_free_energy
0goodvibes/examples/ethane_spc.out-79.858399-79.830421-79.780448-79.808019
\n", + "
" + ], + "text/plain": [ + " Structure sp_energy scf_energy enthalpy \\\n", + "0 goodvibes/examples/ethane_spc.out -79.858399 -79.830421 -79.780448 \n", + "\n", + " qh_gibbs_free_energy \n", + "0 -79.808019 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['sp_energy', 'scf_energy', 'enthalpy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe_val,k) for k in vals]], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=file)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# now lets consider the case where the single point energy calculation is in a separate file\n", + "file = fdir+'ethane.out'\n", + "sp_file = fdir+'ethane_TZ.out'\n", + "\n", + "# Carry out the thermochemical analysis\n", + "bbe_val = thermo.calc_bbe(file, sp_file, spc=True, freq_scale_factor=options.freq_scale_factor)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structuresp_energyscf_energyenthalpyqh_gibbs_free_energy
0goodvibes/examples/ethane.out-79.858399-79.830421-79.780448-79.808019
\n", + "
" + ], + "text/plain": [ + " Structure sp_energy scf_energy enthalpy \\\n", + "0 goodvibes/examples/ethane.out -79.858399 -79.830421 -79.780448 \n", + "\n", + " qh_gibbs_free_energy \n", + "0 -79.808019 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['sp_energy', 'scf_energy', 'enthalpy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe_val,k) for k in vals]], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=file)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 03: Changing the temperature (from standard 298.15 K to 1000 K) and concentration (from standard state in gas phase, 1 atm, to standard state in solution, 1 mol/l)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values \n", + "\n", + "options.conc = 1\n", + "options.temperature = 1000\n", + "options.freq_scale_factor = 0.95 # for example" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyenthalpygibbs_free_energyqh_gibbs_free_energy
0goodvibes/examples/methylaniline.out-326.664901-326.457128-326.680648-326.678943
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy enthalpy \\\n", + "0 goodvibes/examples/methylaniline.out -326.664901 -326.457128 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy \n", + "0 -326.680648 -326.678943 " + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Parse output file for energy, frequency, method, etc.\n", + "file = fdir+'methylaniline.out'\n", + "\n", + "# Carry out the thermochemical analysis and then create dataframe with results\n", + "bbe_val = thermo.calc_bbe(file, temperature = options.temperature, conc = options.conc, freq_scale_factor = options.freq_scale_factor)\n", + "vals = ['scf_energy', 'enthalpy', 'gibbs_free_energy', 'qh_gibbs_free_energy']\n", + "df = pd.DataFrame([[getattr(bbe_val,k) for k in vals]], columns = vals)\n", + "df.insert(loc=0, column='Structure', value=file)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 05: Writing Cartesian coordinates to file" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values\n", + "\n", + "files = set(glob.glob(fdir+\"HCN*.out\")) # wildcard for file names\n", + "io.write_structures(\"HCN_output\", files, xyz = True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 06: Analyzing multiple files at once" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values \n", + "\n", + "files = set(glob.glob(fdir+\"*.out\")) - set(glob.glob(fdir+\"*NWChem.out\")) # \n", + "files_sorted = sorted (files, key = lambda x: ( isinstance (x, str ), x)) #alphanumeric sorting" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Carry out the thermochemical analysis\n", + "# the if statement here filters out structures for which thermochemical data is not available\n", + "bbe_vals = [thermo.calc_bbe(file, sp_file=None) for file in files_sorted if hasattr(thermo.calc_bbe(file, sp_file=None), 'zpe')]\n", + "names = [file.split(fdir)[1] for file in files_sorted if hasattr(thermo.calc_bbe(file, sp_file=None), 'zpe')]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyzpeenthalpyentropyqh_entropygibbs_free_energyqh_gibbs_free_energy
0Al_298K.out-242.3287080.000000-242.3263470.0000590.000059-242.344018-242.344018
1Al_400K.out-242.3287080.000000-242.3263470.0000590.000059-242.344018-242.344018
2CuCN.out-289.0054630.006594-288.9943070.0000870.000087-289.020260-289.020264
3H2O.out-76.3681280.020772-76.3435770.0000720.000072-76.365035-76.365035
4HCN_singlet.out-93.3588510.015978-93.3393730.0000770.000077-93.362269-93.362269
5HCN_triplet.out-93.1537870.012567-93.1377800.0000810.000081-93.161850-93.161850
6allene.out-116.5696050.053913-116.5109160.0000930.000093-116.538534-116.538537
7benzene.out-232.2272010.101377-232.1205210.0001100.000110-232.153263-232.153265
8ethane.out-79.8304210.075238-79.7507700.0000920.000092-79.778293-79.778295
9ethane_spc.out-79.8304210.075238-79.7507700.0000920.000092-79.778293-79.778295
10isobutane.out-158.4588110.132380-158.3198040.0001150.000115-158.354046-158.354056
11methylaniline.out-326.6649010.142118-326.5144890.0001330.000133-326.554157-326.554024
12neopentane.out-197.7729800.160311-197.6048240.0001240.000124-197.641776-197.641791
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy zpe enthalpy entropy qh_entropy \\\n", + "0 Al_298K.out -242.328708 0.000000 -242.326347 0.000059 0.000059 \n", + "1 Al_400K.out -242.328708 0.000000 -242.326347 0.000059 0.000059 \n", + "2 CuCN.out -289.005463 0.006594 -288.994307 0.000087 0.000087 \n", + "3 H2O.out -76.368128 0.020772 -76.343577 0.000072 0.000072 \n", + "4 HCN_singlet.out -93.358851 0.015978 -93.339373 0.000077 0.000077 \n", + "5 HCN_triplet.out -93.153787 0.012567 -93.137780 0.000081 0.000081 \n", + "6 allene.out -116.569605 0.053913 -116.510916 0.000093 0.000093 \n", + "7 benzene.out -232.227201 0.101377 -232.120521 0.000110 0.000110 \n", + "8 ethane.out -79.830421 0.075238 -79.750770 0.000092 0.000092 \n", + "9 ethane_spc.out -79.830421 0.075238 -79.750770 0.000092 0.000092 \n", + "10 isobutane.out -158.458811 0.132380 -158.319804 0.000115 0.000115 \n", + "11 methylaniline.out -326.664901 0.142118 -326.514489 0.000133 0.000133 \n", + "12 neopentane.out -197.772980 0.160311 -197.604824 0.000124 0.000124 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy \n", + "0 -242.344018 -242.344018 \n", + "1 -242.344018 -242.344018 \n", + "2 -289.020260 -289.020264 \n", + "3 -76.365035 -76.365035 \n", + "4 -93.362269 -93.362269 \n", + "5 -93.161850 -93.161850 \n", + "6 -116.538534 -116.538537 \n", + "7 -232.153263 -232.153265 \n", + "8 -79.778293 -79.778295 \n", + "9 -79.778293 -79.778295 \n", + "10 -158.354046 -158.354056 \n", + "11 -326.554157 -326.554024 \n", + "12 -197.641776 -197.641791 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['scf_energy', 'zpe', 'enthalpy', 'entropy', 'qh_entropy', 'gibbs_free_energy', 'qh_gibbs_free_energy']\n", + "bbe_df = pd.DataFrame([[getattr(i,k) for k in vals] for i in bbe_vals], columns = vals)\n", + "bbe_df.insert(loc=0, column='Structure', value=names)\n", + "bbe_df" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " TOTAL CPU 0 days 2 hrs 37 mins 0 secs\n" + ] + } + ], + "source": [ + "# Total CPU time\n", + "thermo_data = dict(zip(files_sorted, bbe_vals)) \n", + "cpu = gv.calc_cpu(thermo_data, log)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 07: Entropic Symmetry Correction" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "names = [\"allene.out\", \"benzene.out\", \"ethane.out\", \"isobutane.out\", \"neopentane.out\"]\n", + "files = [fdir+name for name in names]\n", + " \n", + "bbe_vals = [thermo.calc_bbe(file, sp_file=None, ssymm=True) for file in files]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structurescf_energyzpeenthalpyentropyqh_entropygibbs_free_energyqh_gibbs_free_energypoint_group
0allene.out-116.5696050.053913-116.5109160.0000930.000093-116.538534-116.538537D2d
1benzene.out-232.2272010.101377-232.1205210.0001020.000102-232.150917-232.150919D6h
2ethane.out-79.8304210.075238-79.7507700.0000870.000087-79.776601-79.776603D3d
3isobutane.out-158.4588110.132380-158.3198040.0001110.000111-158.353008-158.353019C3v
4neopentane.out-197.7729800.160311-197.6048240.0001160.000116-197.639430-197.639444Td
\n", + "
" + ], + "text/plain": [ + " Structure scf_energy zpe enthalpy entropy qh_entropy \\\n", + "0 allene.out -116.569605 0.053913 -116.510916 0.000093 0.000093 \n", + "1 benzene.out -232.227201 0.101377 -232.120521 0.000102 0.000102 \n", + "2 ethane.out -79.830421 0.075238 -79.750770 0.000087 0.000087 \n", + "3 isobutane.out -158.458811 0.132380 -158.319804 0.000111 0.000111 \n", + "4 neopentane.out -197.772980 0.160311 -197.604824 0.000116 0.000116 \n", + "\n", + " gibbs_free_energy qh_gibbs_free_energy point_group \n", + "0 -116.538534 -116.538537 D2d \n", + "1 -232.150917 -232.150919 D6h \n", + "2 -79.776601 -79.776603 D3d \n", + "3 -158.353008 -158.353019 C3v \n", + "4 -197.639430 -197.639444 Td " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create dataframe with thermochemical values\n", + "vals = ['scf_energy', 'zpe', 'enthalpy', 'entropy', 'qh_entropy', 'gibbs_free_energy', 'qh_gibbs_free_energy', 'point_group']\n", + "bbe_df = pd.DataFrame([[getattr(i,k) for k in vals] for i in bbe_vals], columns = vals)\n", + "bbe_df.insert(loc=0, column='Structure', value=names)\n", + "bbe_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 08: Potential Energy Surface (PES) Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "pesdir = 'goodvibes/examples/reaction_profile/'\n", + "files = glob.glob(pesdir+\"*.log\")\n", + "sp_files = glob.glob(pesdir+\"*.out\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Structuresp_energyscf_energyzpeenthalpyqh_gibbs_free_energy
0Int_I_Py_d.log-1415.698106-1415.6981060.418680-1415.254939-1415.328850
1Int_I_Py_e.log-1415.697383-1415.6973830.418818-1415.254065-1415.328111
2Int_I_Py_f.log-1415.706212-1415.7062120.419258-1415.262679-1415.335952
3Int_I_Py_b.log-1415.711031-1415.7110310.419045-1415.267713-1415.340929
4Int_I_Py_c.log-1415.713255-1415.7132550.418916-1415.269974-1415.343483
\n", + "
" + ], + "text/plain": [ + " Structure sp_energy scf_energy zpe enthalpy \\\n", + "0 Int_I_Py_d.log -1415.698106 -1415.698106 0.418680 -1415.254939 \n", + "1 Int_I_Py_e.log -1415.697383 -1415.697383 0.418818 -1415.254065 \n", + "2 Int_I_Py_f.log -1415.706212 -1415.706212 0.419258 -1415.262679 \n", + "3 Int_I_Py_b.log -1415.711031 -1415.711031 0.419045 -1415.267713 \n", + "4 Int_I_Py_c.log -1415.713255 -1415.713255 0.418916 -1415.269974 \n", + "\n", + " qh_gibbs_free_energy \n", + "0 -1415.328850 \n", + "1 -1415.328111 \n", + "2 -1415.335952 \n", + "3 -1415.340929 \n", + "4 -1415.343483 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# thermochemical calculation\n", + "bbe_vals = [thermo.calc_bbe(file, sp_file=sp, spc=True) for file,sp in zip(files,sp_files)]\n", + "\n", + "# Show a table\n", + "vals = ['sp_energy', 'scf_energy', 'zpe', 'enthalpy', 'qh_gibbs_free_energy']\n", + "bbe_df = pd.DataFrame([[getattr(i,k) for k in vals] for i in bbe_vals], columns = vals)\n", + "bbe_df.insert(loc=0, column='Structure', value=[file.split(pesdir)[1] for file in files])\n", + "bbe_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " RXN: Ph (kcal/mol) DE_SPC DE DZPE DH_SPC T.DS T.qh-DS DG(T)_SPC qh-DG(T)_SPC\n", + " *******************************************************************************************************************************************************\n", + "o Ph-Int1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\n", + "o Ph-TS1 23.93 23.93 -1.60 22.34 0.68 0.50 22.14 22.19\n", + "o Ph-Int2 -14.22 -14.22 -0.57 -14.54 3.69 2.02 -15.64 -15.14\n", + "o Ph-TS2 -12.25 -12.25 -1.35 -13.55 2.75 1.13 -14.37 -13.89\n", + "o Ph-Int3 -37.69 -37.69 -0.57 -37.68 9.78 5.92 -40.60 -39.44\n", + " *******************************************************************************************************************************************************\n", + "\n", + " RXN: Py (kcal/mol) DE_SPC DE DZPE DH_SPC T.DS T.qh-DS DG(T)_SPC qh-DG(T)_SPC\n", + " *******************************************************************************************************************************************************\n", + "o Py-Int1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\n", + "o Py-TS1 17.76 17.76 -1.24 16.52 0.16 0.21 16.47 16.46\n", + "o Py-Int2 -17.39 -17.39 -0.47 -17.80 3.35 1.43 -18.80 -18.23\n", + "o Py-TS2 -12.54 -12.54 -0.87 -13.46 1.39 0.44 -13.87 -13.59\n", + "o Py-Int3 -32.83 -32.83 -0.57 -32.82 10.12 6.08 -35.84 -34.63\n", + " *******************************************************************************************************************************************************\n" + ] + } + ], + "source": [ + "# Convert absolute values into a relatve PES \n", + "options.pes = pesdir+'PhPy.yaml' # external file defining PES\n", + "options.gconf = False\n", + "\n", + "import goodvibes.pes as pes\n", + "thermo_data = dict(zip(files, bbe_vals))\n", + "species, table = pes.tabulate(thermo_data, options, log, show=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Graphing Reaction Profile\n" + ] + }, + { + "data": { + "image/png": "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cNR12mUS03VUNsakX4nOAnkbf8EOoqOjOXv2LEePHiUqKoqzZ89y6tQp/v77b9zc3IiIiGD//v0OjWnTpk3s2bOHZ599NqPMGEP//v25++67ee655xwajz3deuut9O3bN9tWhb169WLhwoV5GtdJKWVzNr9Ou3piymAsV53rXnlEZJCIbBORbfaouZQrV45Dhw6RlpaGl5dXxictLY3IyEg8PDyIiSnUbdV8McbwxhtvMHbs2CyNGmbNmsXhw4eZNWtWkWuBl5vRo0fz3XffcfTo0SzljRs3JjU1lR07djgpMqWKDY/066j1Myg/C+d2nc4rV09MESJyI4D133PXm9EYE2qMCTbGBNujlZyIXLf1nYggIhkD4TnCTz/9RHR0NL17984o27t3L2+//TaLFi3Cy8vLYbE4SoUKFRg0aNA1TeJFhJ49e+o4TUoVXkr6ddT6Cc3DMnm+TueVqyem74FnrH8/AzjtNf9Lly7RsGFDSpcuTVxcHImJiSQmJuLm5ka5cuUoU6bMNQPh2UtKSgqvv/4648aNyxjMLzExkZ49ezJhwgRuv/12h8ThDM8//zwLFizg/PnzWcp79erF4sWLKek9yyvlBDa/TrtMYhKRRcAWoLaInBKR/sD7wAMichi43/rdKfz9/fHx8eHxxx+nWrVq+Pj4UKFCBfz9/fHy8mLAgAEOe59p1qxZVKpUif/85z8ZZa+//jpBQUH07dvXITE4S2BgII888giffPJJlvKgoCAqVarExo0bnRSZUsWfo67TLvMeky3Z4z2mlJQURowYQUJCAn5+fkRFRWXUmgIDA5kwYYJDElNkZCR169Zl/fr11KtXD4Aff/yRIUOGsGvXLofeTnSWvXv38sADD3D8+PEsz9c++OADDh8+TGhoXu4+KKWu5iov2LpMjcnVeXh4EBISgre3NydPniQhIQFjDNWqVWP48OEOqy2NHDmS3r17ZySliIgI+vfvz/z580tEUgKoX78+d955J//73/+ylPfo0YNly5Zx5coVJ0WmlLKFYlVjckRfeQUZNtxWtm3bRufOnTlw4AAVKlQgLS2Njh07EhwczDvvvOOQGFzFL7/8wosvvsjevXuztD5s3bo1r776Kp07O3UATqWKJO0rz46KY+/iaWlpNG/enMGDB2c8R5o6dSqLFy9m48aNJW5MImMMDRs25P333+ehhx7K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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the PES\n", + "import matplotlib.pyplot as plt\n", + "graph_data = pes.get_pes(options.pes, thermo_data, log, options.temperature, options.gconf)\n", + "pes.graph_reaction_profile(graph_data, options, log, plt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 09: Stereoselectivity and Boltzmann populations" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "gvibes = gv.GV_options()\n", + "gvibes.parse_args()\n", + "options, args = gvibes.options, gvibes.args # reset to default values \n", + "\n", + "seldir = 'goodvibes/examples/reaction_selectivity/opt/'\n", + "files = glob.glob(seldir+\"*.log\")\n", + "files = sorted (files, key = lambda x: ( isinstance (x, str ), x)) #alphanumeric sorting\n", + "\n", + "spcdir = 'goodvibes/examples/reaction_selectivity/spc_01/'\n", + "sp_files = glob.glob(spcdir+\"*.log\")\n", + "sp_files = sorted (sp_files, key = lambda x: ( isinstance (x, str ), x)) #alphanumeric sorting\n", + "\n", + "options.dedup = True\n", + "options.Boltz = True\n", + "# Define two groups of files by wildcard matching\n", + "options.ee = \"*_13_*:*_14_*\"" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Selectivity Excess (%) Ratio (%) Ratio Major DDG kcal/mol\n", + " *************************************************************************************************************\n", + "o 99.21 0:100 1:252 14 3.28\n", + " *************************************************************************************************************\n" + ] + } + ], + "source": [ + "bbe_vals = [thermo.calc_bbe(file, sp_file=sp, spc=True) for file,sp in zip(files,sp_files)]\n", + "thermo_data = dict(zip(files, bbe_vals))\n", + "thermo_data = gv.sort_by_stability(thermo_data, options.sort)\n", + "\n", + "# obtain Boltzmann factors\n", + "boltz_facs, weighted_free_energy = gv.get_boltz(thermo_data, options.clustering, [], options.temperature, log)\n", + "\n", + "#and selectivity values\n", + "[a_name, b_name], [a_files, b_files], ee, er, ratio, dd_free_energy, preference = gv.get_selectivity(options.ee, files, boltz_facs, options.temperature, log)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#plot the relative Gibbs energies\n", + "pes.sel_striplot(a_name, b_name, a_files, b_files, thermo_data, plt)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}