{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Failing\n", "\n", "`ugropy` may fail to obtain the subgroups of a molecule for a certain model for\n", "two reasons: either there is a bug in the code, or the molecule cannot be\n", "represented by the subgroups of the failing model.\n", "\n", "`ugropy` utilizes SMARTS for the representation of functional groups to inquire\n", "whether the molecule contains those structures. Let's examine the functional\n", "group list for the classic liquid-vapor UNIFAC model." ] }, { "cell_type": "code", "execution_count": 1, "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", "
detection_smartssmartscontributecomposedmolecular_weight
group
CH3[CX4H3]NaN{\"CH3\": 1}n15.03500
CH2[CX4H2]NaN{\"CH2\": 1}n14.02700
CH[CX4H]NaN{\"CH\": 1}n13.01900
C[CX4H0]NaN{\"C\": 1}n12.01100
CH2=CH[CH2]=[CH]NaN{\"CH2=CH\": 1}n27.04600
..................
NCO[NX2H0]=[CX2H0]=[OX1H0]NaN{\"NCO\": 1}n42.01700
(CH2)2SU[CH2]S(=O)(=O)[CH2]NaN{\"(CH2)2SU\": 1, \"CH2\": -1, \"CH2S\": -1}n92.11620
CH2CHSU[CH2]S(=O)(=O)[CH]NaN{\"CH2CHSU\": 1, \"CH\": -1, \"CH2S\": -1}n91.10840
IMIDAZOL[c]1:[c]:[n]:[c]:[n]:1NaN{\"IMIDAZOL\": 1, \"ACH\": -3}n68.07820
BTIC(F)(F)(F)S(=O)(=O)[N-]S(=O)(=O)C(F)(F)FNaN{\"BTI\": 1, \"CF3\": -2}n279.91784
\n", "

113 rows × 5 columns

\n", "
" ], "text/plain": [ " detection_smarts smarts \\\n", "group \n", "CH3 [CX4H3] NaN \n", "CH2 [CX4H2] NaN \n", "CH [CX4H] NaN \n", "C [CX4H0] NaN \n", "CH2=CH [CH2]=[CH] NaN \n", "... ... ... \n", "NCO [NX2H0]=[CX2H0]=[OX1H0] NaN \n", "(CH2)2SU [CH2]S(=O)(=O)[CH2] NaN \n", "CH2CHSU [CH2]S(=O)(=O)[CH] NaN \n", "IMIDAZOL [c]1:[c]:[n]:[c]:[n]:1 NaN \n", "BTI C(F)(F)(F)S(=O)(=O)[N-]S(=O)(=O)C(F)(F)F NaN \n", "\n", " contribute composed molecular_weight \n", "group \n", "CH3 {\"CH3\": 1} n 15.03500 \n", "CH2 {\"CH2\": 1} n 14.02700 \n", "CH {\"CH\": 1} n 13.01900 \n", "C {\"C\": 1} n 12.01100 \n", "CH2=CH {\"CH2=CH\": 1} n 27.04600 \n", "... ... ... ... \n", "NCO {\"NCO\": 1} n 42.01700 \n", "(CH2)2SU {\"(CH2)2SU\": 1, \"CH2\": -1, \"CH2S\": -1} n 92.11620 \n", "CH2CHSU {\"CH2CHSU\": 1, \"CH\": -1, \"CH2S\": -1} n 91.10840 \n", "IMIDAZOL {\"IMIDAZOL\": 1, \"ACH\": -3} n 68.07820 \n", "BTI {\"BTI\": 1, \"CF3\": -2} n 279.91784 \n", "\n", "[113 rows x 5 columns]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ugropy import unifac\n", "\n", "unifac.subgroups" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, let's check the SMARTS representation of the alcohol group ACOH:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'[cH0][OH]'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unifac.subgroups.loc[\"ACOH\", \"detection_smarts\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The SMARTS representation it's telling us that the OH group it's, of course, a\n", "hydroxyl group bounded by a single bound to an aromatic carbon atom.\n", "\n", "An example of a molecule that cannot be represented by UNIFAC groups:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACikZgqlmICgZJJ4Fcbq/xS8K6Vc/Y4r59UvzwtnpkZuJGPp8vyg+xIoA7OivO/7X+I/iTjS9Es/Ddm3S51R/NnI9REvCn2aql78Hf7ZQ3Wt+L9bvdXUZgug6xx279QyRjpz2B/I80Aen0V574e8X6joerQ+FPG+yK/b5bHVBxDfqOBz/AAydMjufqM+hUAFFFFABRRRQAUUUUAFFFVdTvf7N0u6vfs89z5ETSeTbpukkwM7VHcmgC1RWT4d8SaX4q0iPUtJuBNA3DKeHjburjsw9P6VrUAFFFFABRRRQAUUUUAFFFUdY1ex0HSbnVNSnWC0t03yO38h6kngDuTQBJe6lY6cbcXt3Db/aJRDD5rhfMkPRRnqTjpVqvOPCuj33jDXIvG/iSBookB/sXTZOltGf+Wrj/no3B9uPbHo9ABRRRQAUUUUAFFFFABRRRQAUV57rPjPxNe+L77wx4P0a0nm08RfbL++mxFCZF3KNq/MePTPQjHemn4c6rr3zeMvFt/qEZ62Nj/otv9CF5ce5waANnXPiT4U0GY21xqsdxe52i0swZ5S3ptXOD9cVjf8ACS+PvEYx4f8AC8WjWrdLzXXIfHtCvzA/XIrrND8K6D4bi8vR9JtLPjBeOMb2Hux+Y/ia2KAPPF+GEusMJfGXiXUtcJOTaI/2a1/79p1+uRXZaRoGkaBbfZ9J021sou4gjClvqep/GtGigArlfGPiPV/C/wBk1KDSRf6LHu/tEwkmeFeMOq9Co5z/AExmuqoIyMGgDn7u08O/EPwsFk8nUdLu13RyIeVP95T1Vh+Y5B7iuSsde1b4cX0OjeLbh73QZWEdhrjDmL0juPQ+jf8A19suq+F9V8E6nP4i8Ew+daSt5mo6CDhJvV4f7r+w6/oen0fWtA+IHhuR4BHd2cwMVzazr80bd0dexH/1xQB0COsiK6MGVhkMDkEetLXlv/E1+Ek3/Lxqfghm93n0vJ/Nov5f+helWN9a6nYw3tjcR3FrMoeOWNsqw9jQBYooooAKKKKACiiigDgfEfg2/wBO1eTxV4KaO21c83lixxBqC+jDor+jevXqTW34S8Zaf4ttJfJWS11G2Oy80+cbZbd+4I7j0Pf2PFdHXHeLvA/9sXcWu6Hdf2X4ltR+5vEHyyj/AJ5yj+JT09vfpQB2NFcd4R8cf2zdS6Hrdr/ZfiW1H7+yc8Sj/npEf4lPXvj3612NABRRRQAUUUdKAI7i4htLaW4uJUigiUvJI5wqqBkknsK8z063m+KmvRa3fxOnhDT5SdOtJBj7fKOPOcf3BzgH/EFL6aX4ra9JpNnI6eDtOlAvrmM4/tCVTnykP9wdyOv5GvTYIIra3jggjSKGJQiRoMKqgYAA7CgCSiiigAooooAKKKKACiiigAoorO17URo/h3UtSJAFpayz8/7Kk/0oA4/4XAX0/izXyATqGtTLG396GLCp/wCzV0mm+JotT8Wa3oMVs4OkrAZZ9wKs0qlgoHqAKzPhXpx0z4Y6DCwO+S2+0MT1JlJk5/76rO+Fv+nHxTrx5/tHWpvKb1ijwif1oA9BooooAKKKKACiiigArg/E3gq9g1ZvFXg2WOy14D/SLduINQX+7IOzejf/AKx3lFAHL+E/GVh4vtZ7aSBrPVLb93faZcj95Ceh4P3lPY/yrmr7QdV+HF9NrPhO3kvdAlYyX+hqcmL1kt/Q+q//AFtu/wCLvBEevTw6vpV0dL8R2gzbX8Y+9/sSD+JD0wen5gxeE/G76lfyeHvENqNM8S265e3J/d3K/wDPSE/xKeuOo/CgDf8AD/iHTPE+kRanpN0s9tJ3HDI3dWHYj0rUrz/X/B+o6Lq8vinwRsi1B/mvtLY7YL8d/ZZOuG7n6nO/4T8ZaZ4usne1LQXsB2XdhP8ALNbP0IZeuM5we/1yKAOhooooAKKKKACiiigDm/F3gyw8W2sRkeSz1K1O+y1CDiW3fsQe49R/I81i+G/Gd/Y6vH4V8aRx2uskYtb1eINQUd1PZ/VfX0ziu+rI8SeGdL8V6RJpurW4lhb5kccPE3ZkbsR/+vigDXorzXTfEuq+A9Rg0DxpObnTJW8vT9eIwrekc/8Adb/aPXv3NekghgCCCDyCKAFrzfxRqt74012XwR4duGhtYv8AkN6lH/ywQ/8ALFD/AH25B9OffF3xr4m1CXUYvB3hZg2vXibp7jqunwHrK3+1g/KPp7Z6Hwt4Y0/wlocWl6epKr88sz8vNIfvOx7k/wD1u1AF3SdJstD0q20zToFgtLdAkca9h6n1J6k9zV2iigAooooAKKKKACiiigAooooAK4T4wXMkXw4vrSA/6RqEsNlEPUvIAR/3yGru68+8f/8AEx8Z+BNDHIk1J9Qce1um4Z/FqAOp1a4i8NeDry4i+WPTrB2T6RocD9BWR8LdNOl/DLQIGGHe2Fw2euZCZOf++qp/GC4kT4dXdlAcXGpTQ2UXuXkGR/3yGrtrW3js7SG2iGI4Y1jQegAwKAJaKKKACiiigAooooAKKKKACue8WeD9O8XWKRXRe3vLdvMtL6A7ZrZ+zKfyyO/1wR0NFAGD4SXxJDpLW/ic2st5BKY0ubc8XEYAxIy4+Vj3HtXH3+nRSftEaTNYxxwyw6RLc37x5BmUkxIGxwSCV9+B6CvTq8+8J/8AEz+KvjXVTzHa/ZtOhPptXdIP++sUAeg0UUUAFFFFABRRRQAUUUUAVNS0yy1jTp9P1G2jubSddskUgyGH+Pv2rxrxB4j1n4NE6JbXUWq6bdws2mC6kzNYYIHz4GWjGePpjjFen+MPFtp4R0f7VLG1xeTMIbKzj5kuZT0VR/M9vrgHK8G+DZ7X7Zrvifyr3xDqqYutwDRwRHpAg6bQOD6+9AFrwB4as9D0P7ZHepqeoali5vNTDbvtLnnIP9wZ4H+NdZXmF1pGq/C+7l1Tw7DNqHhaRjJeaQp3SWmeskGe3cr/APrXv9E1zTfEWlQ6npV0lzaTDKup6HuCOoI7g0AaFFFFABRRRQAUUUUAFFFFABRRRQAV59H/AMTT48Tt1i0bRVT/AHZZXzn/AL4Feg1598Of+Jh4i8b68eftOrfY0b+8luoQEe3JoAPHv/Ex8b+BNE6q2oSahIPQQJuUn8Wr0GvPoP8AiafHe6k6xaNoqRY/uyyvuz/3wK9BoAKKKKACiiigAooooAKKKKACiiigBGYIpZiAoGST2rgPg+puPCF3rTgh9Z1O6vjnrhn2j/0Ct3x9qf8AY/gDXr4NtaOykVD6Ow2r+pFS+CdM/sfwNodgV2vDZRBx/tlQW/UmgDeooooAKKKKACiiigArL8Q+INP8MaJcatqc3lW0K54+87dlUdyT0FXL++tdMsJ769nSC1gQySyucBVHevO9Bsbr4ja9B4t1qB4tBtH3aLp8o/1h/wCfiQep/hH/AOtgC34P8P6hrWsf8Jv4ph8vUJV26bYNyLCA9OP+ejDqeoz26D0GiigArzrW/CWqeGNWm8T+BkXzJTv1DRSdsN4O7J/ck/n+Yb0WigDK0HxBZeIbD7RasVkQ7ZoJOJIX7qwrVrmNd8MzSXo1vQZls9ZQfNn/AFdyv9yQf1/+tiz4e8TQ615trPC1nqtvxc2cn3lPqv8AeX3rKM2nyz3/ADO2rhoyh7bD6xW66x9e67P5OzN6iiitTiCiiigAooooAKKq3+pWOlWrXOoXlvaQL1knkCKPxNcVP8V9OvJ3tfCulal4julOCbOEpAp/2pW4A9wCKAO11K9TTdLu76X/AFdtC8zfRVJP8q5L4RWT2nwz0mSbme7D3crf3jI5YH8iKy7zQviH40sZ7TWdQ07w7ptwjRyWlnH9omdCMFXckAZ/2TUnhXxLdeFbqy8FeLY4raaONYNM1GMbbe9jUBVX/ZkAwMHr+IyAaHgXTr1PEfjPWL+1mt5L7VPKh81CpkhhQKjjPVTk4NdvRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHn/wAXT9r8N6ZoQ5Os6ta2bKP7m/eT9BtFegAYGB0rz7xN/wATP4veDtMHKWMNzqMy/wDAQiH8GzXoNABRRRQAUUUUAFNd1jRndgqKMszHAA9TTq8y16+uviPr0/hPRp3h0CzfbrWoRHHmn/n3jPqf4j/+pgCIeZ8W9dz8y+CNOm+n9qTqf/RSn8//AEH1FEWNFRFCqowFAwAPSoLGxtdMsYLKygSC2gQRxRIMBVHQVYoAKKKKACiiigArB8Q+GYda8q7t5mstVt+be8j+8vs395fat6iplFSVma0a06M1Om7P+vw8jJ0K71SXTGOuWsdrdQMUd0cFJQP4x6A+9Zk3xF8LQzNEdUD7Thnjhd0H/AguPyqr8S7iZfDttYwyGP8AtC9jtXYdkOSf5Cuqs9PtNPsI7K1t447ZF2iMLxj39ayvPm5Ivbq/6R3OGHVJYitF++3ZRdkkrXd2pdXohbK+tdStEurK4jngcfLJG2QakmnhtomlnlSKNeWeRgoH1Jrg9Ftn0zx34i0DTZjaW9zaC7h2qGEEhwCQp46tnHsBWrB4C0+WVbjWrq71m5HO67kOxT/soOAPbmnGpOS0WoVsJh6U/fqPlaTWl201fyWmz1+Qtz4+0szNbaTDdaxcjjZYxFlH1fpj3GahMfjbWwQ72egWrdk/f3GPr90fzFdXbWtvZwiG1gigiXokSBVH4CpafJJ/E/u0/wCCZPE0aatRpr1l7z+7SP4P1OGsPhR4diulvdYN54gvx/y31aczY9gn3cexBrtYIIbaFIYIkiiQYVI1Cqo9gKkorU4QrM1/w/pnibSZdM1a1W4tpOx4KN2ZT1BHqK06KAPM7HXdV+HF7Do/iy4kvdAlYR2GuMMmL0juPT2f/wCvt9KR1kRXRgyMAVZTkEeoqG9sbXUrKayvbeO4tplKSRSLlWB7EV5rt1X4STZUXGp+CGbkcvPpeT+bRfy/9CAPUqKr2F/aapYQ31jcR3FrOoeOWNsqwqxQAUUUUAFFFMlljgiaWWRY41GWdzgAe5oAfRXD6j8VvDVtctZaW9zr2oDpbaTCZz/30Plx+NU/tPxM8S/8e9pp3hWyb/lpcH7VdY9Qo+QfQ80Ad9dXdtY273F3cRW8CDLSTOEVfqTxS21zBe2sV1azJNbzIJI5I23K6kZBBHUEVw1r8JtGmuFvPEl7qHiO9HIfUJyY1P8AsxjAA9jmui1XxD4b8G6cg1C+stNtokAjhGFO3oAka8n6AUAc1oH/ABNPjR4q1Dqmm2Vtp0bf72ZWA+hr0GvOfg88uo6JrfiCeB4zrGrz3URYYzF8oXHsMMK9GoAKKKKACiiigDnvGVhr2q6H/Z+gXcNlLcyrHcXTk74YT98xgdX9On1zzV7w9oGn+GNEttJ0yHy7aBcDP3nbuzHuSeSa06KACiiigAooooAKKKKACiiigDnPG+hXGveHmhsyBe28q3Nvk4y654/EE/jVCD4i6fHbqmp2WoWmoKMPam1ckt32noR6ZxXZUVlKD5uaLsdtLFU/ZKjWhzJNtWdmr79Hpp2+Zx3hKwv7vXNU8UalavaPehYra3k4dIlxyw7E4HHsa7GiiqhDkVjLE4h4ipztW2SXZJWSCiiirOcKKKKACiiigApGVXRkdQysMEEZBFLRQB5nf6Bqvw6vpta8JW73mhSsZL/QlPMfrJb+h9V/+tjuPD/iLTPFGkRanpNys9vJwezI3dWHZh6VqV594g8Hajo2ry+KvBBSHUX+a+0xjiC/H06LJ1w3c/U5APQa43WPih4W0q6NlFePqeoZIFnpkZuJCR2+XgH2JFaPhLxjp3i6weW1D295bt5d3YzjbNbP3Vh6dcHv9cgWzF4f8LW090U07SoZGLzSkJCHYnJLHjJoA5H+1/iP4k40vRLPw3Zt0udUfzZyPURLwp9mp8XwptNQmS58W61qXiOdTny7iUxW6n1WJOB+dLP8V9PvZntfCmk6l4juVOCbSEpAp/2pWGB9cEUz+zfiT4kOdQ1Wx8MWbdbfT0+0XGPQyN8oPutAHUSTeGvBemAO+m6NZDovyQqx9hxk/rXMP8UhqztD4O8O6nr75wLkJ9ntQfeR/wDCrulfCvwtp1z9su7WXWL8/eu9VlNw5/Bvl/Su0RFjRURQqqMBQMACgDzz/hH/AIg+JADrniSDQrVutnoseZce8zcg/wC7kVq6P8MfCWjym4GlpfXjcvdagTcSMfXL5AP0Arr6KAADAwOlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAcT4u+HUXiDVINa0nVJ9C1yIFGvrVMmVCMbXXIz7HP58Yi034TeHoJo7vWmu/EOoKObnVZ2m/JCduPY5ru6KAI4IIbaFIYIkiiQYVI1Cqo9gKkoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=", "image/png": "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", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ugropy import get_groups\n", "from rdkit.Chem import Draw\n", "\n", "mol = get_groups(unifac, \"C1(=CC=CC=C1)OC(C)(C)C\", \"smiles\")\n", "\n", "Draw.MolToImage(mol.mol_object)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{}\n" ] } ], "source": [ "print(mol.subgroups)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The library \"fails\" to obtain any functional groups to accurately represent the\n", "molecule. This failure is represented by an empty dictionary. In this case, the\n", "\"fail\" is correct, but it could fail due to errors in the groups SMARTS\n", "representations or the algorithm, resulting in an empty dictionary as well.\n", "Currently, the supported models are tested against the following numbers of\n", "molecules:\n", "\n", "- Classic liquid-vapor UNIFAC: 408\n", "- Predictive Soave-Redlich-Kwong (PSRK): 442\n", "- Joback: 285\n", "\n", "If you encounter a failing representation, you can examine the structure of the\n", "molecule and the list of functional groups of the failing model. If you\n", "determine that the molecule can indeed be modeled, you may have discovered a\n", "bug. Feel free to report the issue on the repository along with the failing\n", "molecule's SMILES/name, the failing model and the `ugropy` version.\n", "\n", "#### More than one solution\n", "Models like UNIFAC or PSRK can have multiple solutions to represent a molecule,\n", "and ugropy tries its best to find them all. In such cases, you will receive a\n", "list of dictionaries, each containing one of the solutions found. Let's take a\n", "look." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorG8W60fDvhHVtXTYZLS1eSMOMqXx8oPsWxQBs1y+u/ETwp4dYxX+s25uAcfZoD50pPptTJH44rldL8Fah4nsbGbxp4w1G7nu7ZZzpVtItrGFIBKsqYL4zjPFdtofg7w74aQDR9HtLRgMeYseZD9XOWP4mgDmP+E18Xa9lfC/gyeCE/dvdcf7On18sfMw+hqveeCdf1WxnuPG3ji4jsUjZ5rXS1FrCiAZO5zyy/UV6XSMquhR1DKwwQRkEUAeSaXqFx8NILe4ivJdb8AXZDQ3gbzZdPLf3sfejJ9Oh9+G9XtrmC9tYrq1mjmglUPHJGwZWU9CCOorzPVNCvvh1cXOqaBZtqPhW5JbU9Dxu8gH70kIPbHVOmPb7tDTrw+CrRPEfhSV9X8B3ZMlxZRktLp5P3njB52g/eQ9P1oA9goqppeqWOtabBqOnXMdzaTrujljOQR/Q+oPIq3QAUUUUANkkSGMySOqIvVmOAKq2+q2F1L5cN1E79lB5P09a88+IPjvQ9PvYrGXVYXKLuMFu3mvvJIwQucHjv61y2h+MLLV9QezWG7sbxAJI4rtPLeRf7y81jOrJPRaHp4fBUqkFzTtJ7L/ADPeKKqaXO9zpdtNJ994wW9z61brVO6uedKLjJxfQKKKKZIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVXvL6z063NxfXUFrCCAZJ5Ai5PQZPFAFiikR1kRXRgyMMqynII9RS0AFFFFABRRRQAV5/8AF0m88OaZoCE7ta1W2s2A67N29j9BtH516BXn2u/8Tb40+GNO6x6VY3GpSL2y+Ikz9DzQAmmA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Mh26dq4GIr5eyt/dk6cd/wAiwB6FRXM+J9e8QabdQWegeGJdWmmQsZ3uFhhi5xhieSe+K47WR4k8kTeNfiBp/hu1YZ+x6ThJGHoJHO/P+6DQB6LrHiHRvD8HnavqdrZJjI86UKW+g6n8K57R/iRp3iPWYLLQ9M1W+tHYiTUltWS2j4OPmbBPIx0715/pJ8KfaDN4P8C6p4rvWPOp6kCImPr5k3AP0UV166F8RdfUDU/EFl4esyMC10iHzJdvoZH+6fdaAH2Z/tf46alP96LRNJjtsdllmbfn67RivQa5vwj4J0vwbFeCxku7i4vZBJc3V5L5kspGcZOB0ye3c10lABRRRQAUUUUAFch4vRNR8ReF9IZVdGvDeOpGQBCuRn8TXX1x8pcfEDUdUuIpFtNL0sKrMpCszEuxB78Aisqr0S8zuwEV7SUn0i/vasvxaG+FLeK88Y+KtcCDe9wlir5PSJcED8Tmuyrl/h9bPD4NtJpf9dds91IfUuxIP5YrqKdK7gm+pOPUI4mcILSOn3aX+drhRRRWhxhRRRQAVSOj6c2srrBsoTqKRGAXOwbwhOdufw/n61dooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArL8QeH9M8T6PNperWyz20o+jI3ZlPZh61qUUAeZ2Xw/8ZPCdO1P4hX39kw/JCLOFY7h07b5cbgccd63tH+GPhLRp/tMekpd3h5a6vmNxIx9cvkA/QCuuooAQAAAAAAdAKWiigAooooAKKKKACiiigBrtsjZsE4BOB3riUgubrwU3iJtUvBqDWjXgxO3kr8pby/K+6Vx8pyM+9dxWC3hOxZWg8+8Fgzl2sRN+5JJyRjGduf4c49qyqRctjuwdaFO/M7ap7Xule6+enk+pr2MglsLaRYxGHiVggGAuQOKno6DAorVHFJ3bYUUUUCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z", "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAIAAAD2HxkiAAAbYklEQVR4nO3deXjNZ9oH8Ptkl4UkllheSSRaxDaqJYSqSUpVFkkdM9KG0RKlEjVTjNFWTS9KhwpDizaIvbIgiUjEMq4oMrTWSGuIJRJ7ImSV5DzvH4+eHkEWOed3n6Tfz+WPPk/Pch+X71me7acSQhAA8DHhLgDg9w4hBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEsGEQQuzZs8fT07NLly4TJ07kLgf0yYy7AKhOZWXlkSNHoqOj4+Lirl27Jjt//vnnW7duxcXFqVQq3vJAL1RCCO4aoKrS0tLU1NTt27fHx8ffvXtXdjo7O7/wwgsqlWr//v0ajWbMmDHfffedubk5b6lQfwihESkuLt63b190dPTOnTvv378vO93c3Hx9fdVqtZeXl/zo27dvX2Bg4IMHD/z8/LZu3Wptbc1aNdQXQsgvLy8vMTExMTExKSmpqKhIdnp4eKjVaj8/v969ez95l2PHjg0fPvz27dt9+/bdtWtX8+bNlS0Z9AkhZJOdnb179+6EhISUlJTy8nIiMjEx6devn5+fX1BQ0AsvvFD93S9evDh06NCLFy96eHgkJye3b99ekapB/xBCpV26dCk+Pj46Ovrw4cPyL9/U1NTT01OtVo8aNapNmzbV3PfAgQMnTpz461//KpvXr18fNmzYqVOnXFxcUlJSOnXqpMQLqI3CQjp/nnJz6eFDcnQkV1dycSEMIz0DQqiQjIyM6OjoxMTEH3/8UfY0adLE29tbrVYHBAQ0a9asxkfIy8tzd3e/d+/e9OnTFy5cKH8f3rt3z8/P79ChQ46OjgkJCf379zfsy6hReTklJ9Pp06RSUXk5EZGJCZmbk5UVBQaSiwtzeUYJITQgjUZz4sSJhISELVu2nD9/XnY6ODj4+Pj4+voGBQXZ2trW6QG3b98eHBxcWlr6zjvvrFmzRg6NlpWVBQcHx8XF2djYREdHDxs2TP+vpJZKSigykgoKqKLiKf/X3JyGDaNevRQvy9ghhPqnndyLiYnJzc2VnS1atBg2bJharR46dKiFhcVzP/j+/fsDAwPv37/v4+Ozfft2GePKyspJkyZ9++23FhYW69atGz16tH5eSZ0IQevWUU4OVVY+8zbm5hQSQvj5+jiEUJ8uXbrk4+Nz7dq1hw8fyh43N7egoKDAwEBPT08TE/2sTzp+/Pjw4cNv3brVp0+fXbt2tWjRgoiEEHPnzp07d65Kpfryyy8/+ugjvTxXHWRm0o4d9OsLfyZHRwoLU6SgBgMh1CcXF5erV68SUefOnQMCAnx9fbWTe/qVlZU1dOjQCxcudOnSJSUlRTs0umzZsmnTpmk0mvDw8IiICEWX1KxZQ9nZNdxGCLK0pLFjqW1bRWpqGBBCvSksLLSzsyOimJiYt956y9BPd+PGjWHDhp08ebJt27bJycndu3eX/Zs2bRo3blx5efmYMWMiIyPNzBRZmSgEzZtX5YvokezsVjY27o6Oj93S1JS8valfPyWqaiCwgFtvzp49S0QdOnRQIIFE1Lp16wMHDgwcODA3N3fQoEE//PCD7H/77bd3795tZ2e3fv36oKCgkpISBYqhhw/p13fzrPz8pUePuixZ0j8ysuOyZf0jIzUazW+3rKykXxcDgYQQ6s3Ro0eJyNvbW7FntLe3T01NHTlyZH5+/pAhQ5KSkmS/t7f3vn37WrZsmZCQ8Mc//lG7+tRwhJnZ8Zycf+zb12X5cvelSz9MTr5aUCC/Ch/Jzp6QkFCpzaFKRfUYl2qcBOjJn//8ZyL69ttvZTMmJmbq1KlHjx419PNWVFSEhoYSkZmZWWRkpLY/MzPT2dmZiLp27ZqdnW2Ip66srExLS5s5c2bHjh21/6IcmzQJ6dlz68iRd2bM+PL1120tLYnIv1On4tmzxWefiS++EJmZhiim4UII9cbV1ZWIzpw5I5vBwcFEtGrVKgWeWqPRzJkzh4hUKtXChQu1/bm5uT169CAiFxeXn3/+WV9PV15enpaWFh4e3rp1a232Wtrbh/TqFT969MNPPhGffab9kz5hQgtrayJ61cXl3t//LubPFw8f6quSxgEDM/px69YtJycnOzu7/Px8U1NTInJ3d8/Kyjp16pSMgQKWL18+derUKkOj+fn5/v7+cklNYmJiv3qMiJSUlOzduzc6Ojo+Pr6goEB2dujQwc/PT61We/XurVq6lMrKnrxj5u3bb2zceLWgoGurVslff/1/ivxmbkAQQv3YuXPniBEjvL299+7dS0/LpDLi4uKCg4PLyspCQkIiIyPlkpri4uJRo0bt2rXLxsYmJibmjTfeqNNj5ufnJyQkJCYm7t69u7CwUHY+fZNHVhZt3fpotdrjch88eGPjxjM3b7q6uqakpLz44ovP/yIbHQzM6Ed6ejoReXp6yqYcpHnllVeUTCARBQUFJSUlNW3adMOGDUFBQcXFxURkbW29c+fO8ePHFxUVBQQEbNmypTYPdfv27fXr1/v5+Tk5OY0dOzY6Orq4uLh3795z5sz55ZdfMjIyPvvss6rbrNzcaPRosrKiJ7Yat3V0PLhwoVf//pcvX+7fv7/8+4FHuL8PNxKDBw8movj4eNn8xz/+QUSzZs1iKebYsWMtW7Ykor59+96+fVt26v5uXLRo0bPue+nSpYiICC8vL+36HlNTUy8vr4iIiJycnFo9fVmZOHRIrFghPv9czJ0rFi4U338vsrOFEEVFRW+++SYR2draJicn6+O1NgYIoR5UVlY2bdqUiG7cuCF75ETFjh07uEq6cOGCu7s7EXl4eFy9elXbHxERIdM1c+ZMjUaj7T979uyCBQu8vLy0785WVla+vr6rVq26efOmHgsrLy9/7733iMjCwmLLli16fOTnd/WqWLhQhIaKDz4QGzaIsjKFnx8h1INTp04RkZubm2xqM3n9+nXGqnJzc3v27ElELi4umTqzAhs2bJC/FceMGZOenj5nzhzdjYj29vZqtToqKur+/fsGKkyj0cyYMUN+Ji9evNhAz1JbSUmiSRPh5SVmzxZTpoh27USPHuLWLSVLQAj1YNWqVUQUHBwsm6dPnyaiDh068FYlhMjPzx84cCAROTo6/vDDD9p+OUiju6DcyckpNDQ0OTm5TKnPAd3PZGWe8Snu3RMODmLKFKH9UnDrlnB3F2+/rWQVCKEevPvuu0S0dOlS2Vy9ejURjR49mrcqqbS0VC6js7GxSUpK0vYvWrTIxMTE3t5+2rRpaWlplZWVyte2fv16+Zn8l7/8pby8XPkCxLp1wtJS5OU91rl6tTA3F4WFilWB0VE9kGN92qFROVLat29fzpp+ZWlpuXXr1nHjxhUVFR05ckTbf+/ePY1GM2nSpK+++mrAgAH62mZVJyEhIXFxcdbW1uvWrRs5cqRCy1x1ZWSQszM5ODzW2asXlZfTL78oV4ZicW+sCgoKTExMLC0tS0tLZU+3bt2I6MiRI7yF6dJoNLGxsbojMT4+PsQ6dKSVnp4ut0QOGjTo3r17ij53WJjo3btq5/nzgkgcOqRYFfgkrK/09HSNRvPSSy9ZWloS0YMHDzIzMy0tLXsZ0zkOKpUqKChIu71Qo9EcO3aMiF555RXWuoiI+vTpc/Dgwfbt2x88eHDAgAE5OTmGfb5ffqEFC6hPH7p8mVq1oiefTu6K1FmRZ2gIYX09+V20srKyV69eMpPGKTMzs6CgwNXVta1xbK718PA4evRo9+7dz549O3DgQO15PPr000/08cfUtSt17kyzZtGxY7RjB732Gt24QVVWDuzYQc7O5Oam/xqeAdeiqK8qvwCrZNI4GWGRbdu2/c9//uPn53f48OFXX301KSnppZdequ+DajR04gQlJNCWLaQNtoMD+fiQry8FBZGtLQ0eTOPHU3Q0delCGg1t2kSrV9Py5Yoe0KjYF99GSaPRyN8zly9flj2+vr5EZCzT0M8wYcIEIlqyZAl3IVUVFhbK0+JsbW1TUlKe81EqKkRamggPF23aCKJHf1q0ECEhIj6+6lx8Xp4IChImJqJtW2FnJ5o2Fdq/ljt3xMWL9Xk5tWQUIayoqFi/fn3Pnj0HDRq0du1a7nLq4H//+x8RtWrVStvj5ORERFlZWYxV1UiehSFPHzY25eXlcsrHwsJi69attb9jUVFRTExM8vTpwt7+t+y5u4vp08Xhw6L6OZibN8WhQ+L4cfHr6JooKhJeXsLJSfz0Uz1eTa1whvCp29KIKCoqirGqOtmwYQMRjRgxQjYvXLhQJZNG6P79+6amphYWFiUlJdy1PJ1Go5k+fToRmZqafv3119XfOD8/f9u2bSEhIfL0x24tWwpTU+HhIWbOFGlpQmdAuG4KC8UbbwgiYWsr9ux5zgepHYYQPnjwYNu2baNHj5Zru6SOHTv269dP7gSvskPcmE2ZMoWIvvjiC9ncuHEjEQUEBLAWVYN9+/YRUd++fbkLqYF2S+RTl9Rcv3595cqVQ4YM0V4czsTExNPT88svvyzV13fIsjIxerQgEpaW4vvv9fOYT6NcCPPy8qKiotRqte6x0x4eHnPmzDl+/Li8TWVl5aeffkpE8vBMxWp7bi+//DIRHThwQDbDwsKIaP78+axF1WDevHlEFB4ezl1IzaKiouResFGjRslp2MuXL0dERPj4+GhPkdNu8rh27Zr+K9BoxEcfCSJhaiq++Ub/jy+EUCCEt27dioqK8vX11X3H0m5Le+pdli1bJhdwhIeHa57764ThlZSUWFhYmJqaPnjwQPbIabf9+/fzFlY9f39/Itq0aRN3ITV7+PCh9rTyZs2a6U69WllZ+fv7r1279s6dOwavIyJCqFSCSBhmmauhQljPbWmbNm3SrvR/aKxHkhw6dIiIevbsKZulpaWWlpYmJiYFBQWsddVADh1dVGTcr57kioI2bdpUOcV4xYoVSv8lR0UJMzNBJCZPrmGMp+70HEI9bkvbu3evPEvXz8+vqKhIv3XqxaJFi4ho4sSJsilP/uzRowdvVdXLysoy/qEjrX//+99ENG7cuIMHD4aFhX3yySdE1KlTJ55q4uNFkyaCSIwYIfQ6pqWfEJ49e7bKtjQbGxtfX996bkv773//q90hrsS3jjpSq9VEtGbNGtlcvHgxEYWGhvJWVb3NmzcTkb+/P3chtfLOO+8Q0cqVK2VzxYoVRDR27Fi2go4cEc2bCyIxeLDQ30fx84ewoqJCTjC0a9dOm73mzZuHhITEx8fra1vas3aIGwN5BYhz587J5qhRo4jIyMd1p06dSkTz5s3jLqRW5HGmJ06ckM0xY8YQUY2TFoZ1+rRo21YQ/TRihL7OHKhzCEtKSuLj40NDQ1u1aqXNnrOzc3h4eGpqqiF2henuENfj4Zn1JK951qxZM+1OPDm/kpGRwVtY9eTyur1793IXUrM7d+6oVCobGxvtPyp5RttPhp89r8GlSz8PHtzC0bFjx456+WldhxBevXp15MiRNjY2uhMMH3/88Y8//lj/OqqXn58/YMAAemKHOKPY2FgiGjJkiGzKTDZt2pRld2wtNZShIykxMZGIXnvtNdm8e/euSqWytrbm2f77uLt378oTXFu3bl3/N4U6hLCoqMja2lo7uafwW35paWlQUBA9sUOcizwl5dNPP5XNw4cPt2zZ0sfHh7eq6slNvd27d+cupFbkMIx2pl5eaePVV1/lrUqrsLBQnuBqa2u7p35Laur2dTQ+Pp7xh1lFRYVceWxhYbF582auMiT5Rrhr1y7dTqX3pNbRkiVLiGj8+PHchdTK66+/TkRxcXGyKc9rnDFjBm9VusrKyuQFSCwtLbdt2/bcj2MUC7hrT/fwzH/961/KFyDHgXv37m1lZWVra/u9IVcz6V2VS9YYM41GY29vT0TaWeWhQ4cSUWxsLG9hVWg0mr/97W9yGlw7iltXDSyE0tKlS5VcUiOvPTRt2jR5yRdJfjM3osMza6HKJWuMWUZGhhyKk02NRuPg4EBEBlmbVm8LFiyoZplrjRpkCIUQGzdu1C6pMdAvde0cjO728xYtWsg5mNLS0tocaG08bt68SUR2dnYVFRXctdQsMjKSiP70pz/JZmZmJhG1b9+et6pqrFu3Ti5n/eCDD+o6ONdQQygeX1JTXFysr4ctLi6WczBynYDk6uoaHh7+5NGAzzrQ2gjt2LGDiLy9vbkLqRV5xcWvvvpKNteuXUtEarWat6rq7dy5s0mTJkQUGBhYp21iDTiEQmdJjaenZz2X1Gi3pclga+dgZs6cmZaWVk3AtAdajx071hhGz59l1qxZRDR79mzuQmrlw2HDLExND/165Nn7779PRMb/jePgwYPyp+zy5ctrf6+GHUJR7+vR3r59W27ysNC5hrOcg8ms9QVlU1NTZXT9/f31+JmsX1UuWWPUHjwQpqYae/vyX/8ygwYNIqK0tDTeumrj5MmTU6ZMqdM30gYfQvFc16PV+7Y07eGZ9f9MNoQnL1lj1PbvF0SiT59HzcJCYWZW7upaZqxvcPXUGEIohMjLy9Muqanm6JSLFy/KDVbarTFWVlY+Pj4RERH1/9d57tw5Q18j/rnJS9a4u7tzF1I78+cLIhEW9qh54IAgEi+/zFqTATWSEAohioqKhg8fLpfU7N69W/d/ycm9Ll266E4wyE0e+l3AlZOTIz+TXV1dn7VlWQGnTp36/PPPddfQV7lkjbELCBBEYuPGR80vvhBEYsoU1poMqPGEUAhRUVExfvx4IjIzM5s8efLy5ctnzpwpV+JLjo6O2gkGA9WQl5cnt1M2b95c4ZPw5XtN586d5YvVXdxX5ZI1xq51a0EkLlx41BwxQhCJDRtYazKgRhVCIYRGo5k4cSI9rn379mFhYQcOHFBmikz3M9nQ16MtLy/fu3fv5MmTdTeUtWrVasKECadPn9bezMPDg4jS09MNWox+XLr06JhQ7Yh027aCSJw/z1qWATW2EEr+/v6Wlpbm5uaBgYHVTzAYSEVFhUGvR1tSUpKamhoeHi7PqpCcnZ1DQ0Pj4+OrzJRcu3ZNpVKZm5sb7vNfn7ZsEUTC1/dR8/JlQSSaN3/+wwuNXuMMoRCCfUuRIa5HW1RUFB8fHxISontapJubm1xI8NT3moyMDHn8lJ2dnV5qMLgPPxRE4vPPHzW3bhVEYvhw1poMq9GG0Ejo5Xq0d+/elZOZuheZqX5D2ZMHbb377rvPXYCiPD0FkUhNfdScNk0QiX/+k7Umw0IIDU67pKau16O9evXqqlWrqpwW6eXltWDBgvPP+IF08uTJOXPmyBFa7Thwx44dw8LC2L8a1EpZmbCyEiYmQrsprF8/QWToM7B5IYRK2LNnjzzyOCAgoMYlNVlZWVUmM7ULCXJzc596lycP2rK3t1er1fU8aIvB0aOCSHTt+qj58KFo0kSoVFWvaN24IIQKqfF6tCdOnPj444/lMKZkY2MzcuTIzZs3P/X2yhy0pbSICEEk3nvvUTM9XRAJDw/WmgwOIVTOuXPn5AFt3bp1e3JxnDwYm4gcHBzkh5j2YG9dyh+0pSh57YfVqx81ly4VRKKh/Jp9XgihonJycuRlyZ5cUhMbGztp0qRnBUk7Lqq7yaP6cdEGyc1NEAntDGdwsCASq1ax1mRwCKHS8vLy+vfvT0ROTk41HlR3586duo6LNmwnToiVK4V2TYXM5KlTrDUZnEoIQaCsoqKiUaNGJSUl2draxsbGDhkypMoNsrOzd+/enZCQkJKSUl5eTkQmJib9+vXz8/N76623dBfiNU6VlWRqSkSUkkLp6TR79qNmY8X9LvA7pXs9Wu2h3U9u8jAzM5PjotevX+ctWAmpqcLLS5iaCiLRoYOYP180hJM46g8hZKPRaKZNmybD1q5dO93TNGxtbdVq9ZYtWxrEKb36kZQkzMzEhx+KM2fElSti7Vphby8ayOmM9YSvo8zUanVMTIz8bwcHB19fXz8/vzfffFP3pPPfha5d6Q9/oE2bfuuJjaWRI+nMGerWja8sJSCE/L777rvk5GRPT8/w8HDdUzZ+R65cIVdX2rOHXn/9t04hyNGRZs+mjz7iq0wJZtwFAI0fP15ug/z9yskhInJ2fqxTpSJXV7p2jaUiJZlwFwBAJE/6KSur2l9aSmaN/3MCIQQj0LEjqVR0/vxjnSUldOUKvfgiU03KQQjBCDg6krc3LV1KlZW/dX7zDQlBAQF8ZSkEAzNgHDIzaeBA6t6dxo+npk1p3z5avpyWLaPJk7krMziEEIzGlSu0eDEdOUKlpdSpE73/Pvn4cNekBIQQgBl+EwIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYIYQAjBDCAGYIYQAzBBCAGYIIQAzhBCAGUIIwAwhBGCGEAIwQwgBmCGEAMwQQgBmCCEAM4QQgBlCCMAMIQRghhACMEMIAZghhADMEEIAZgghADOEEIAZQgjADCEEYPb/IrzX6qjISt0AAAAASUVORK5CYII=", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ugropy import Groups\n", "from rdkit.Chem import Draw\n", "\n", "\n", "mol = Groups(\"CCCC1=CC=C(CC(=O)OC)C=C1\", \"smiles\")\n", "\n", "Draw.MolToImage(mol.mol_object, highlightAtoms=[7])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This molecule can be modeled in two ways depending on how we treat the CH2\n", "attached to the ring and the ester carbon (highlighted in red). We can either\n", "form an ACCH2 group and model the ester group with COO, or we can use an AC\n", "group and model the ester group with CH2COO." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "UNIFAC:\n", "[{'CH3': 2, 'ACH': 4, 'ACCH2': 1, 'CH2COO': 1, 'CH2': 1, 'AC': 1}\n", " {'CH3': 2, 'ACH': 4, 'ACCH2': 2, 'CH2': 1, 'COO': 1}]\n", "PSRK:\n", "[{'CH3': 2, 'ACH': 4, 'ACCH2': 1, 'CH2COO': 1, 'CH2': 1, 'AC': 1}\n", " {'CH3': 2, 'ACH': 4, 'ACCH2': 2, 'CH2': 1, 'COO': 1}]\n" ] } ], "source": [ "print(\"UNIFAC:\")\n", "print(mol.unifac.subgroups)\n", "print(\"PSRK:\")\n", "print(mol.psrk.subgroups)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "svg1, svg2 = mol.unifac.draw(width=800)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "CH3ACHACCH2CH2COOCH2AC" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import SVG\n", "\n", "SVG(svg1)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "CH3ACHACCH2CH2COO" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVG(svg2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This could be useful in cases where some groups have more interaction\n", "parameters than others in the mixture that you want to model with UNIFAC.\n", "Alternatively, you can try both approaches and compare if there are any\n", "differences." ] } ], "metadata": { "kernelspec": { "display_name": "ugropy", "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.10.12" } }, "nbformat": 4, "nbformat_minor": 2 }