Get UNIFAC functional groups of PubChem compounds or SMILES representation.
Project description
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 tested for Python 3.10, 3.11, 3.12, and 3.13 on Linux, Windows
and Mac OS.
You can access the documentation here: https://ipqa-research.github.io/ugropy/
Try ugropy now
You can try ugropy without installing it by clicking on the Colab badge.
You can install ugropy by:
pip install ugropy
Models implemented
Gibbs / EoS models
- Classic liquid-vapor UNIFAC
- Predictive Soave-Redlich-Kwong (PSRK)
- Dortmund (modified UNIFAC)
Property estimators
- Joback
- Abdulelah-Gani (beta)
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
Here is a little taste of ugropy, please, check the full tutorial
here to see
all it has to offer!
Get groups from the molecule's name:
from ugropy import Groups
hexane = Groups("hexane")
print(hexane.unifac.subgroups)
print(hexane.psrk.subgroups)
print(hexane.dortmund.subgroups)
print(hexane.joback.subgroups)
print(hexane.agani.primary.subgroups)
{'CH3': 2, 'CH2': 4}
{'CH3': 2, 'CH2': 4}
{'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.dortmund.subgroups)
print(propanol.joback.subgroups)
print(propanol.agani.primary.subgroups)
{'CH3': 1, 'CH2': 2, 'OH': 1}
{'CH3': 1, 'CH2': 2, 'OH': 1}
{'CH3': 1, 'CH2': 2, 'OH (P)': 1}
{'-CH3': 1, '-CH2-': 2, '-OH (alcohol)': 1}
{'CH3': 1, 'CH2': 2, 'OH': 1}
Estimate properties with the Joback and Abdulelah-Gani models!
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 kelvin
1.0254019428522743 bar
print(limonene.agani.primary.subgroups)
print(limonene.agani.secondary.subgroups)
print(limonene.agani.tertiary.subgroups)
print(f"{limonene.agani.critical_temperature}")
print(limonene.agani.molecular_weight / limonene.agani.liquid_molar_volume)
{'CH3': 2, 'CH2=C': 1, 'CH2 (cyclic)': 3, 'CH (cyclic)': 1, 'CH=C (cyclic)': 1}
{'CH3-CHm=CHn (m,n in 0..2)': 1, '(CHn=C)cyc-CH3 (n in 0..2)': 1, 'CHcyc-C=CHn (n in 1..2)': 1}
{}
640.1457030826214 kelvin
834.8700605718585 gram / liter
Visualize your results! (The next code creates the ugropy logo)
mol = Groups("CCCC1=C(COC(C)(C)COC(=O)OCC)C=C(CC2=CC=CC=C2)C=C1", "smiles")
mol.unifac.draw(
title="ugropy",
width=800,
height=450,
title_font_size=50,
legend_font_size=14
)
ugropy can obtain multiple solutions, even nonoptimal ones if desired. For
example:
from ugropy import unifac
solutions = unifac.get_groups(
"9,10-dihydroanthracene",
search_multiple_solutions=True,
search_nonoptimal=True
)
for sol in solutions:
print(sol.subgroups)
{'ACH': 8, 'AC': 2, 'ACCH2': 2}
{'CH2': 1, 'ACH': 8, 'AC': 3, 'ACCH2': 1}
{'CH2': 2, 'ACH': 8, 'AC': 4}
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", "ethanol"]
grps = [unifac.get_groups(n) for n in names]
[writers.to_thermo(g.subgroups, unifac) for g in grps]
[{1: 2, 2: 4}, {1: 1, 2: 1, 14: 1}]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ugropy-3.1.6.tar.gz.
File metadata
- Download URL: ugropy-3.1.6.tar.gz
- Upload date:
- Size: 99.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ec6de9c57f6d3dc5b1fef40f7b6b3d9bfa91dabd5d72dd3fba50869bde40d13
|
|
| MD5 |
89cdc99e2f890468030e8bc79c17813f
|
|
| BLAKE2b-256 |
e4532d4b38c4be3dcfacb95502326ecdb02ad10dc1ce45e1ecc52e51546ce813
|
File details
Details for the file ugropy-3.1.6-py3-none-any.whl.
File metadata
- Download URL: ugropy-3.1.6-py3-none-any.whl
- Upload date:
- Size: 121.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21ed29ee4c117cdda3cfdb7b43990adde6f8de186b7b79781752d70707375b8e
|
|
| MD5 |
075dcb75d372d0d07781d9b683c80ccd
|
|
| BLAKE2b-256 |
5d555fd9f7632cdaf59a1651378b9ed160c0a358cd94f589f82b78f04ead5b37
|