.. |QH-correction| image:: images/QH_correction.png
.. |PhPy-PES| image:: images/Rxn_profile_PhPy.png
==========================
GoodVibes
==========================
.. contents::
:local:
Here is the `GoodVibes GitHub Page `_
Here is the `GoodVibes Publication `_
Installation
-------------
Version 4.2.0 is most up to date and required Python >= 3.9. Install with:
.. code:: shell
pip install goodvibes
or
.. code:: shell
uv pip install goodvibes
or
.. code:: shell
conda install -c conda-forge goodvibes
(you may also need to install matplotlib)
Computing Thermochemistry for QM Output Files
----------------------------------------------
You can run this code using any output file from QM calculations.
.. code:: shell
goodvibes H2O.log
You should get the following output:
.. highlight:: none
.. literalinclude:: resources/jupyter_outputs.txt
:start-after: water-start
:end-before: water-end
.. highlight:: default
Grabs Energy, frequencies, and computes thermochemical values Enthalpy (H), Entropy (S), Gibbs Free Energy (G).
Also computes quasi-harmonic corrected Entropy (qh-S) and Free Energy (qh-G).
Compute G as ``G = H - (T * S)``
Temperature Corrections
-----------------------
The default temperature in GoodVibes is ``298.15 K`` (25C)
What if the reaction was run at 100C?
.. code:: none
goodvibes benzene.log -t 373.15
This will give the following output:
.. highlight:: none
.. literalinclude:: resources/jupyter_outputs.txt
:start-after: benzene_temp-start
:end-before: benzene_temp-end
.. highlight:: default
GoodVibes can also compute temperature ranges.
.. code:: none
goodvibes benzene.log H2O.log --ti 250,400,50
This will give the output:
.. highlight:: none
.. literalinclude:: resources/jupyter_outputs.txt
:start-after: benzene_water-start
:end-before: benzene_water-end
.. highlight:: default
This computes the thermochemical values for both output files at temperatures ranging from 250K to 400K every 50K.
Quasi-Harmonic Corrections
--------------------------
.. centered:: |QH-correction|
The quasi-harmonic correction has a greater effect when molecules have a greater number of low-frequency vibrational modes.
For example:
* Methylaniline: 2 vibrational modes below 200 cm\ :sup:`-1`
* Int-III: 23 vibrational modes below 200 cm\ :sup:`-1`
.. code:: shell
goodvibes methylaniline.log Int-III.log
This gives the output:
.. highlight:: none
.. literalinclude:: resources/jupyter_outputs.txt
:start-after: methylaniline-start
:end-before: methylaniline-end
.. highlight:: default
Single Point Calculations
-------------------------
Useful for saving on computational resources:
We can optimize molecules at a lower level of theory to still obtain an accurate geometry, but do a single point energy calculation (SPC) at a higher level of theory to obtain more accurate energy values.
With the ``--spc`` argument, we can specify how the SPC file names are formatted.
.. list-table:: File Naming Scheme
:header-rows: 1
* - Calculation Type
- Filename
* - opt/freq
- file.log
* - SPC
- file_SPC.log
For example: ``ethane.log`` and ``ethane_TZ.out``
.. code:: shell
goodvibes ethane.log --spc TZ
You will get the following output:
.. highlight:: none
.. literalinclude:: resources/jupyter_outputs.txt
:start-after: ethane_spc-start
:end-before: ethane_spc-end
.. highlight:: default
Potential Energy Surface Calculations:
--------------------------------------
GoodVibes can compute relative energy/thermochemistry values to describe a reaction pathway with a potential energy surface
To do this, we need to write a yaml file with 3 sections:
* PES
* Defines reaction pathway
* Can add multiple pathways
* SPECIES
* Relates files to each species in the reaction pathway
* FORMAT
* Optional additional formatting
.. highlight:: python
.. literalinclude:: resources/PhPy.yaml
.. highlight:: default
Putting it All Together
-----------------------
* Temperature adjustments
* Single Point Calculations
* Potential Energy Surface Calculations
We can use these 24 intermediate and transition state calculations + corresponding SPC files + yaml to define a reaction pathway
.. code:: none
goodvibes *.log -t 353.15 --spc DLPNO --imag --invertifreq -5 --pes PhPy.yaml
You will get the following as output:
.. highlight:: none
.. literalinclude:: resources/jupyter_outputs.txt
:start-after: pes_numbers-start
:end-before: pes_numbers-end
.. highlight:: default
Graphing these potential energy surfaces is simple once the yaml file is created
.. code:: none
goodvibes *.log -t 353.15 --spc DLPNO --imag --invertifreq -5 --pes PhPy.yaml --graph PhPy.yaml
.. centered:: |PhPy-PES|
You can add more or less details by changing the FORMAT section of the yaml file. This is where you might tell GoodVibes you do not want to plot the different conformations of each structure, only the energies.
Running on Multiple Processors
------------------------------
GoodVibes allows you to run in multiple processors, reducing the wall time required for extracting the data.
This can be done with the ``--jobs`` flag:
.. code:: none
goodvibes *.log --jobs 16
This will use 16 processors to run GoodVibes on all your Gaussian output files.
Saving Metadata
----------------
Another feature of GoodVibes is that it will save the metadata from a run in a JSON file.
This will allow users to add single point energy corrections, temperature corrections, concentration corrections, etc.
without needing to fully parse the data again. This is specified with the ``--json`` flag:
.. code:: none
goodvibes *.log --json goodvibes_thermo_data.json
The JSON file contains the metadata for the run and can be called back in future runs with:
.. code:: none
goodvibes --import goodvibes_thermo_data.json -t 310
Check out other packages by the Paton lab @ our `GitHub `_!