ugropy
is a Python
library to obtain subgroups from different
+thermodynamic group contribution models using both the name or the
+SMILES representation of a molecule. If the name is given, the library
+uses the PubChemPy library to
+obtain the SMILES representation from PubChem. In both cases, ugropy
+uses the RDKit library to search
+the functional groups in the molecule.
ugropy
is in an early development stage, leaving issues of examples
+of molecules that ugropy
fails solving the subgroups of a model is
+very helpful.
ugropy
is tested for Python
3.10, 3.11 and 3.12 on Linux,
+Windows and Mac OS.
Try ugropy now¶
+You can try ugropy from its +Binder. Open +the binder.ipynb file to explore the basic features.
+Models supported v2.0.5¶
+-
+
Classic liquid-vapor UNIFAC
+Predictive Soave-Redlich-Kwong (PSRK)
+Joback
+
Writers¶
+ugropy
allows you to convert the obtained functional groups or
+estimated properties to the input format required by the following
+thermodynamic libraries:
-
+
- +
- +
Example of use¶
+You can check the full tutorial +here.
+Get groups from the molecule’s name:
+from ugropy import Groups
+
+
+hexane = Groups("hexane")
+
+print(hexane.unifac.subgroups)
+print(hexane.psrk.subgroups)
+print(hexane.joback.subgroups)
+
{'CH3': 2, 'CH2': 4}
+{'CH3': 2, 'CH2': 4}
+{'-CH3': 2, '-CH2-': 4}
+
Get groups from molecule’s SMILES:
+propanol = Groups("CCCO", "smiles")
+
+print(propanol.unifac.subgroups)
+print(propanol.psrk.subgroups)
+print(propanol.joback.subgroups)
+
{'CH3': 1, 'CH2': 2, 'OH': 1}
+{'CH3': 1, 'CH2': 2, 'OH': 1}
+{'-CH3': 1, '-CH2-': 2, '-OH (alcohol)': 1}
+
Estimate properties with the Joback model!
+limonene = Groups("limonene")
+
+print(limonene.joback.subgroups)
+print(f"{limonene.joback.critical_temperature} K")
+print(f"{limonene.joback.vapor_pressure(176 + 273.15)} bar")
+
{'-CH3': 2, '=CH2': 1, '=C<': 1, 'ring-CH2-': 3, 'ring>CH-': 1, 'ring=CH-': 1, 'ring=C<': 1}
+657.4486692170663 K
+1.0254019428522743 bar
+
Visualize your results! (The next code creates the ugropy
logo)
from IPython.display import SVG
+
+mol = Groups("CCCC1=C(COC(C)(C)COC(=O)OCC)C=C(CC2=CC=CC=C2)C=C1", "smiles")
+
+svg = mol.unifac.draw(
+ title="ugropy",
+ width=800,
+ height=450,
+ title_font_size=50,
+ legend_font_size=14
+)
+
+SVG(svg)
+
Write down the +Clapeyron.jl .csv +input files.
+from ugropy import writers
+
+names = ["limonene", "adrenaline", "Trinitrotoluene"]
+
+grps = [Groups(n) for n in names]
+
+# Write the csv files into a database directory
+writers.to_clapeyron(
+ molecules_names=names,
+ unifac_groups=[g.unifac.subgroups for g in grps],
+ psrk_groups=[g.psrk.subgroups for g in grps],
+ joback_objects=[g.joback for g in grps],
+ path="database"
+)
+
Obtain the Caleb Bell’s Thermo +subgroups
+from ugropy import unifac
+
+names = ["hexane", "2-butanone"]
+
+grps = [Groups(n) for n in names]
+
+[writers.to_thermo(g.unifac.subgroups, unifac) for g in grps]
+
[{1: 2, 2: 4}, {1: 1, 2: 1, 18: 1}]
+
Installation¶
+pip install ugropy
+