diff --git a/reminder.md b/reminder.md index f856434..d930358 100644 --- a/reminder.md +++ b/reminder.md @@ -5,4 +5,6 @@ Joback good examples: Abdulelah Gani Thiopene not aromatic?! -Furane not aromatic?! \ No newline at end of file +Furane not aromatic?! + +5-F-2'-Me-4'-Br Salicyanilide : good multiple solutions example \ No newline at end of file diff --git a/tests/abdulelah_gani_frags/log_p.csv b/tests/abdulelah_gani_frags/log_p.csv index 6d5cbbc..5851938 100644 --- a/tests/abdulelah_gani_frags/log_p.csv +++ b/tests/abdulelah_gani_frags/log_p.csv @@ -67,7 +67,7 @@ Bromobenzene,p-trifluoroacetamido|Brc1ccc(cc1)NC(=O)C(F)(F)F|3.34|2.9851|3.34000 4'-Br Salicylanilide|Brc1ccc(cc1)NC(=O)c2ccccc2O|4.51|3.4733|4.5099969806379|0.00588344398020181|0|0|0|0|0|0|0|0|0|0|0|0|0|0|8|0|0|1|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 Acetamide, N-(4-bromophenyl)-2-phenyl-|Brc1ccc(cc1)NC(=O)Cc2ccccc2|3.7|3.4768|3.69999994556505|0.0046436486101961|0|0|0|0|0|0|0|0|0|0|0|0|0|0|9|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 N(p-BrPh)3-N'-piperidinoacetamide|Brc1ccc(cc1)NC(=O)CN2CCCCC2|3.57|2.7096|3.56999673951082|0.00179261853777343|0|1|0|0|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|5|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 -1,1-Dimethyl-3-p-BR-phenylurea|Brc1ccc(cc1)NC(=O)N(C)C|2.19|2.0541|2.18999120528259|0.020996200110319|1|0|0|0|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 +??1,1-Dimethyl-3-p-BR-phenylurea|Brc1ccc(cc1)NC(=O)N(C)C|2.19|2.0541|2.18999120528259|0.020996200110319|1|0|0|0|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 4-Bromophenyl 4-aminosalicylate|Brc1ccc(cc1)OC(=O)c2ccc(N)cc2O|3.46|3.0786|3.45999294898786|0.00882450865731081|0|0|0|0|0|0|0|0|0|0|0|0|0|0|7|0|0|1|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 N,N-DiMe-(4-bromo-Ph)carbamate|Brc1ccc(cc1)OC(=O)N(C)C|2.46|2.0636|2.460004639504|0.0217818274772666|0|0|0|0|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 1H-Imidazole-1-carboxylic acid, 1-[(4-bromophenoxy)methyl]-2,2-dimethylpropyl ester|Brc1ccc(cc1)OCC(OC(=O)N2C=NC=C2)C(C)(C)C|4.37|3.9558|4.37000618120581|0.00701716881729413|3|1|1|1|0|0|0|0|0|0|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 diff --git a/tests/agani.ipynb b/tests/agani.ipynb index a118f75..8ae8f15 100644 --- a/tests/agani.ipynb +++ b/tests/agani.ipynb @@ -10,7 +10,9 @@ "\n", "import pandas as pd\n", "\n", - "import numpy as np" + "import numpy as np\n", + "\n", + "from rdkit.Chem import Draw" ] }, { @@ -36,30 +38,36 @@ "name": "stdout", "output_type": "stream", "text": [ - "Brc1ccc(cc1)C(=O)NP(=O)(N2CC2)N3CC3\n", - "44\n", - "{}\n", - "{}\n", - "{15: 4, 97: 1, 126: 1, 168: 4, 176: 2, 201: 1}\n" + "Brc1ccc2c(c1)Cc3cc(N)ccc23\n", + "84\n", + "Subgrupos:\n", + "{'aCH': 6, 'aC fused with aromatic ring': 2, 'aC fused with non-aromatic ring': 2, 'aC-NH2': 1, 'aC-Br': 1, 'CH2 (cyclic)': 1}\n", + "Subgrupos por número:\n", + "{15: 6, 16: 2, 17: 2, 62: 1, 126: 1, 168: 1}\n", + "Gani: \n", + "{15: 6, 17: 4, 62: 1, 126: 1, 168: 1}\n" ] } ], "source": [ "for idx, smiles in enumerate(df.index):\n", - " solution = abdulelah_gani_p.get_groups(smiles, \"smiles\")\n", + " solution = abdulelah_gani_p.get_groups(smiles, \"smiles\", search_multiple_solutions=True)\n", " \n", " # Filtrar las columnas de la fila que no sean iguales a 0\n", " row = df.loc[smiles][df.loc[smiles] != 0]\n", " \n", " # Convertir la fila filtrada a diccionario\n", " row_dict = row.to_dict()\n", - " \n", - " # Comparar con los subgrupos calculados\n", - " if solution.subgroups_numbers != row_dict:\n", + "\n", + " # Verificar si ninguna solución tiene subgroups_numbers igual a row_dict\n", + " if all([sol.subgroups_numbers != row_dict for sol in solution]):\n", " print(smiles)\n", " print(idx)\n", - " print(solution.subgroups)\n", - " print(solution.subgroups_numbers)\n", + " print(\"Subgrupos:\")\n", + " print(\"\\n\".join(str(sol.subgroups) for sol in solution)) # Convertir a string y unir con saltos de línea\n", + " print(\"Subgrupos por número:\")\n", + " print(\"\\n\".join(str(sol.subgroups_numbers) for sol in solution)) # Convertir a string y unir con saltos de línea\n", + " print(\"Gani: \")\n", " print(row_dict)\n", " \n", " wrong_smiles = smiles\n", @@ -70,6 +78,44 @@ "cell_type": "code", "execution_count": 4, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'aCH_0': (2,),\n", + " 'aCH_1': (3,),\n", + " 'aCH_2': (6,),\n", + " 'aCH_3': (9,),\n", + " 'aCH_4': (12,),\n", + " 'aCH_5': (13,),\n", + " 'aC fused with aromatic ring_0': (4,),\n", + " 'aC fused with aromatic ring_1': (14,),\n", + " 'aC fused with non-aromatic ring_0': (5,),\n", + " 'aC fused with non-aromatic ring_1': (8,),\n", + " 'aC except as above_0': (1,),\n", + " 'aC except as above_1': (10,),\n", + " 'aC-NH2_0': (10, 11),\n", + " 'NH2 except as above_0': (11,),\n", + " 'aC-Br_0': (1, 0),\n", + " '-Br except as above_0': (0,),\n", + " 'CH2 (cyclic)_0': (7,)}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mol = instantiate_mol_object(wrong_smiles, \"smiles\")\n", + "\n", + "abdulelah_gani_p.detect_fragments(mol)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, "outputs": [ { "data": { @@ -77,69 +123,65 @@ "\n", "\n", " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "aCH: 6aC fused with aromatic ring: 2aC fused with non-aromatic ring: 2aC-NH2: 1aC-Br: 1CH2 (cyclic): 1" ], "text/plain": [ "" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -152,7 +194,27 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{15: 6, 16: 2, 17: 2, 62: 1, 126: 1, 168: 1}\n" + ] + } + ], + "source": [ + "sols = abdulelah_gani_p.get_groups(wrong_smiles, \"smiles\", search_multiple_solutions=True)\n", + "\n", + "for sol in sols:\n", + " print(sol.subgroups_numbers)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -161,84 +223,267 @@ "\n", "\n", " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "aC fused with non-aromatic ring: 2CF3: 1aC-Br: 4NH (cyclic): 1C=N (cyclic): 1" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "aCH: 6aC fused with aromatic ring: 2aC fused with non-aromatic ring: 2aC-NH2: 1aC-Br: 1CH2 (cyclic): 1" ], "text/plain": [ "" ] }, - "execution_count": 5, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sols[0].draw(width=900, height=400)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "IndexError", + "evalue": "list index out of range", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43msols\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241m.\u001b[39mdraw(width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m900\u001b[39m, height\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m400\u001b[39m)\n", + "\u001b[0;31mIndexError\u001b[0m: list index out of range" + ] + } + ], + "source": [ + "sols[1].draw(width=900, height=400)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAMgAyADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqOeeG2gee4lSKJBueSRgqqPUk9KkrifGngLSvEn2nUtWuNQuI4LZjHY/amW3V1BIfYMfN079qAOvs7601G1S6sbqC6tnzsmgkDo2OOCODUeoapp+k2/wBo1K+trOHOPMuJljXP1YiuG+B3/JJNI/35/wD0c9cRpmo+F/E/ivXvFfjq/tWsLS8aw0qzunygVOWYR/xHBUngjLHPbAB7Zpmt6TrUbPpWp2d8i/eNtOsm367ScVfrlvB9v4KlFxqfhCHSwJQscz2KquMZIBUfd656DPHtXU0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHI+IviX4W8My+ReaiJrkNhoLUeY6/72OB9Cc11cMqzwRzJnY6hlz6EZrzf4taPpmn/DfWJ7PT7W3mmmieWSKJVZ2MqkkkDJ5r0HTP8AkFWf/XBP/QRXo4ijQWFp1qV7ttO/kov5b+ZCb5mmV9e12w8N6PPqmpSmO2hAzgZZiTgADuTVXwv4q07xdp019pqzrFDOYHE6bGDgAnjJ/vCuO3f8LH+IG0fP4a8PS5Pdbq7/AKhf88NUvwa/5AWvf9hu4/8AQY63qYClSwkpTv7RcrfZ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3fpHf77LzJ5u2poeIPiPoeh3g06A3Gq6s/3LDTozNIe3OOF565Ofasj+zvH/AIy51O9TwppTf8uti4lvHX0aXon/AAHn1Fdlo3h/RvDVmYNKsILOID5mUctjuzHk/ia5rVPijpMV62meHra48R6qOPs+nDcie7y/dUe/OK5KnJzPk289yl5mx4a8D+H/AAmrNpVgq3Mg/e3UpMk0nrlzzz6DA9q5b4laFrJ1/wAOeMNCsjqM2jyN51krfNLG2MlPfqO55BwcU/8A4Rfxp4v+fxTrf9j6e3/MK0dsOw9JJjyfcDIPtXQao+oeEPDtha+F/Dr6rDbERG2F2EaOIA8hnyWOccVAHmPxQ8Z6p4i+HOpQDwdqum2YMRnutUUQlD5i4Ea9XJOBnsM17B4Y8w+EtGM2fN+wwb89c+Wua851bTfGHxQubLTtX0L/AIR7w3DOs90JbhZJrnb0UBfujnv9cnGK9aVVRAiqFVRgADgCgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDB8V+FrbxRpqwvI1te27ebZ3kfD28g6EH04GR3+uDU2h3V/DpdlbeIZ7JdYZSrLDJxLg43AHHUYJA9a0byB7qxnt47iS3kkjZFmjxujJGAwzxkda8g1jwnZ+Gfib4Kkhur28uru4mNxc3s5keTaFx7D7xr1MHBYqm8POdrXa0vsm3r0Tt569CJe67o9mqkmsaZJefY01G0a6Bx5InUvn/dzmuQ+Les3ml+EI7XTpWiu9Tuks0dTgqGySQe3TH41Wv/hF4aXwnJZWdls1GKEtDfBj5plAyGJz3Pbpzxipo4Sj7KNXETceZtKyvta7eq01/MHJ3sjuwlhpNrNKFtrO33NLK+FjXJOSzHgZPcmuPufiL/aNw9l4P0q4125U7WuF/d2sZ95G6/Qdexqt4LWy+Ivw70mXxFbrfS2spDeYx+Z0yoZsHnKkEg8E131vbQWlulvbQxwwoMJHGoVVHoAOlKcaWFqShWi5zi2tdI6emr/AFeSutjh18D6v4jcTeNdaa4hPP9laeTFbD2Y/ef8AH867DS9I07RLJbPS7GCzt16RwoFH1OOp9zV2iuWviJ1mua1lskrJfJFJJBRRRWAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArzfx5/yUz4f/APXxcfyjr0aRBJG0bZwwIOOvNefv8G/DMkiSPcaszx/cZrwkr9DjivSy2rQo1HUrSa0a0V94td1tciabVkQfGeGSPw3pmqohdNN1KKeUAdE5Gfz2j8a7XUdcsbPw1Prf2iNrNLYzrKG4cYyuPrwB9aj07w1p2neHjoe2S6sWDq63T+YXDEkgk9etcynwf8KpKoYX8loj71snu2MAP+71/WtI1sJOlGjVk7Qbs0t07ab6PTz3FaSd11E+DOny2Hw3s2mUqbmWSdQf7pOAfxC5/Gu/psUUcMSRRIqRooVUUYCgdAB6U6uHF4h4mvOs1bmbZcVZWCiiiucYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAIAAABUEpE/AAB7x0lEQVR4nO3dd3gUVRfH8ZNCEhJa6IRepPfQQ+8loQcBBUWqKAFBhFdEiiK9CShFpUkRkBoEaVISAkgvAaT3Hmp6mfePiSGEJFJudnY338/D4zOZubs5iyT725k759pomiYAAABQx9boAgAAAKwNAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAo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RETCw8PLlClz7ty577//vl+/fkaXg4Q0TStdunRgYGCDBg22bdtmdDkGCAwMbNy48Y0bNypWrLhj06aM/y5pnEr8+uuvXbp0ecXBc+fOZYFntdzc3G7dunX27NmiRYsaXYuV4/O9RQoLk6++EhH57jvSVUKOjo6TJk1q1arVV1995e3tTa9Cc7Nx48bAwEARGTRokNG1GODgwYPNmjW7f/9+7dq1169fnzG1LbwgkjlzZnd396SO3rlzR1/LpWzZsmnSpMlmHoswWpPq1auvXr167969BKwUZ/BdjHgj336riWjly2vR0UaXYq5atGghIt27dze6ECRUt25dESlWrFh06vvnu2PHjvTp04uIp6dnSEiI0eWYI9o0pDT9b7hXr15GF2L9mORuee7elQkTREQmTRJb/gcmYfr06U5OTvPnz9+3b5/RteC5Q4cO6fcfDB482DaV/fNdt25d8+bNnz59+v77769evTqtGS/hDCumT8NinrsJpK5fcNZh+HB58kRat5YGDYwuxYwVLlx44MCBMTExn3zySXR0tNHlINbkyZNFJHv27O+9916CQ7t37/b09Jw3b96dO3eMKC1lLVy4sH379mFhYZ9++unChQtpXg+juLu7Ozk5nTp16uHDh0bXYuUIWBbm9Gn55RdJk0bGjze6FLM3bNiw/PnzHz58+Oeffza6FoiIXL9+fdWqVSLy6aef6ivQxbdq1aqNGzf26tXLzc2tUqVKI0eO1KdqWYHx48d369YtKipqyJAhM2bMSG2n7mBWHB0dK1asGBMTc+DAAaNrsXZGX6PE62nRIlxE69fP6DosxG+//SYimTNnvnfvntG1QNNntadNmzbR/x33799fuHCht7d3/MbuhQoV8vHx2bNnj4VO2IqJiRk8eLCI2NnZzZ492+hyLMDt27cPHjx48ODBiJfWrj948KCHh0fHjh0NKcya6D+JI6xlTXGzRcCyJJs3b86bt2D9+mvu3ze6FMvRpEkTEenbt6/RhaR2T5480e+Y69OnT/IjQ0JC1q9f36tXr/h3gGbNmrVLly7r168PCwszTcFvLyoqqkePHiLi4OCwfPlyo8uxeOfOnROR7NmzG12IxdNPJDdq1MjoQqwcActiREVFlSlTRkQmT55sdC2WJDAwME2aNLa2tgcOHDC6llRNv3fJxsYmMDDwFR8SFRW1Z8+eIUOG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FCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACKEbAAAAAUI2ABAAAoRsACAABQjIAFAACgGAELAABAMQIWAACAYgQsAAAAxQhYAAAAihGwAAAAFCNgAQAAKEbAAgAAUIyABQAAoBgBCwAAQDECFgAAgGIELAAAAMUIWAAAAIoRsAAAABQjYAEAAChGwAIAAFCMgAUAAKAYAQsAAEAxAhYAAIBiBCwAAADFCFgAAACK/R8NjAMH9TYBJQAAAABJRU5ErkJggg==", + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Configurar etiquetas personalizadas para mostrar los índices de los átomos\n", + "for atom in mol.GetAtoms():\n", + " atom.SetProp('atomLabel', str(atom.GetIdx()))\n", + "\n", + "# Dibujar la molécula con los índices\n", + "img = Draw.MolToImage(mol, size=(800, 800))\n", + "\n", + "img" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "aCH: 16aC fused with non-aromatic ring: 4aC except as above: 3OH: 1aC-Br: 1CH2 (cyclic): 2CH (cyclic): 2C=C (cyclic): 1O (cyclic): 1CO (cyclic): 1" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "smiles = 'Brc1c(Br)c(Br)c2N=C(Nc2c1Br)C(F)(F)F'\n", + "smiles = 'Brc1ccc(cc1)c2ccc(cc2)C3Cc4ccccc4C(C3)C5=C(O)c6ccccc6OC5=O'\n", "\n", "sol = abdulelah_gani_p.get_groups(smiles, \"smiles\")\n", "\n", diff --git a/ugropy/core/frag_classes/abdulelah_gani/abdulelah_gani_p.py b/ugropy/core/frag_classes/abdulelah_gani/abdulelah_gani_p.py index 76ff82f..9b27695 100644 --- a/ugropy/core/frag_classes/abdulelah_gani/abdulelah_gani_p.py +++ b/ugropy/core/frag_classes/abdulelah_gani/abdulelah_gani_p.py @@ -129,15 +129,17 @@ def mol_preprocess(self, mol: Chem.rdchem.Mol) -> Chem.rdchem.Mol: ] # Step 3: Preprocess all rings that are not exclusively carbon atoms + # to make them aliphatic. for ring in aromatic_rings: # All ring's atoms are carbon? if not all( mol.GetAtomWithIdx(idx).GetSymbol() == "C" for idx in ring - ): - if len(ring) == 6: + ): + # Specific rings adhocs that should be kept aromatic + if is_aromatic(mol, ring): continue - # If not, set all atoms in the ring as non-aromatic + # Make atoms of the ring non-aromatic for idx in ring: mol.GetAtomWithIdx(idx).SetIsAromatic(False) @@ -168,3 +170,42 @@ def mol_preprocess(self, mol: Chem.rdchem.Mol) -> Chem.rdchem.Mol: bond.SetBondType(Chem.rdchem.BondType.AROMATIC) return mol + +def is_aromatic(mol, ring): + """ + Verifica si un anillo coincide con un patrón SMARTS en la molécula original. + + Parameters + ---------- + mol : Chem.Mol + Molécula original. + ring : list[int] + Lista de índices de los átomos del anillo. + + Returns + ------- + bool + True si el anillo coincide con algún patrón SMARTS, False en caso contrario. + """ + # Lista de patrones SMARTS + smarts_patterns = [ + "c1ncncn1", # Ejemplo: patrón para un anillo específico + # Agrega más patrones si es necesario + ] + + # Convertir la lista de índices del anillo en un set para comparación eficiente + ring_set = set(ring) + + for smarts in smarts_patterns: + pattern = Chem.MolFromSmarts(smarts) + if pattern is None: + raise ValueError(f"El patrón SMARTS '{smarts}' no es válido.") + + # Buscar coincidencias del patrón en la molécula + for match in mol.GetSubstructMatches(pattern): + # Convertir la coincidencia a set para comparación + match_set = set(match) + if match_set == ring_set: + return True # El patrón coincide exactamente con el anillo + + return False # Ningún patrón coincide diff --git a/ugropy/groupscsv/abdulelah_gani/primary/primary.csv b/ugropy/groupscsv/abdulelah_gani/primary/primary.csv index f7ddc4b..a5033b8 100644 --- a/ugropy/groupscsv/abdulelah_gani/primary/primary.csv +++ b/ugropy/groupscsv/abdulelah_gani/primary/primary.csv @@ -44,25 +44,25 @@ CHCOO|[CH;!R][C](=O)[OH0]|57.0282 CCOO|[CH0;!R][C](=O)[OH0]|56.0204 HCOO|[CH](=O)[OH0]|45.017 aC-COO|[cH0][C](=O)[OH0]|56.0204 -aC-OOCH|[CH](=O)[OH0][cH0]|57.028 -aC-OOC|[CH0](=O)[OH0][cH0]|56.0202 -COO except as above|[CH0](=O)[OH0]|44.009 +aC-OOCH|[cH0][OH0;!R][CH](=O)|57.028 +aC-OOC|[cH0][OH0;!R][CH0](=O)|56.0202 +COO except as above|[CH0;!R](=[OH0;!R])[OH0;!R]|44.009 CH3O|[CH3][OH0]|31.034 CH2O|[CH2;!R][OH0]|30.026 CH-O|[CH;!R][OH0]|29.018 C-O|[CH0;!R][OH0]|28.0102 -aC-O|[cH0][OH0]|28.0102 +aC-O|[cH0][OH0;!R]|28.0102 CH2NH2|[CX4H2;!R][NH2]|30.05 CHNH2|[CX4H;!R][NH2]|29.042 CNH2|[CX4H0;!R][NH2]|28.0342 CH3NH|[CH3][NH]|30.05 CH2NH|[CH2][NH;!R]|29.042 CHNH|[CH][NH;!R]|28.034 -CH3N|[CH3][NH0]|29.042 -CH2N|[CH2;!R][NH0]|28.034 +CH3N|[CH3][NH0;!R]|29.042 +CH2N|[CH2;!R][NH0;!R]|28.034 aC-NH2|[cH0][NH2]|28.0342 aC-NH|[cH0][NH;!R]|27.0262 -aC-N|[cH0][NH0]|26.0184 +aC-N|[cH0][NH0;!R]|26.0184 NH2 except as above|[NH2]|16.0226 CH=N|[CH;!R]=[NH0]|27.0258 C=N|[CH0;!R]=[NH0]|26.018 @@ -78,7 +78,7 @@ aC-NCO|[cH0][NH0]=[C]=[O]|54.028 CH2NO2|[CH2]N(=O)(=O)|60.032 CHNO2|[CH]N(=O)(=O)|59.024 CNO2|[CH0]N(=O)(=O)|58.016 -aC-NO2|[cH0]N(=O)(=O)|58.016 +aC-NO2|[cH0][NX3H0](=O)(-O)|58.016 NO2 except as above|[NX3H0](=O)(-O)|46.005 ONO|[NH](O)=O|30.006 ONO2|[O][NH0](=O)=O|62.004 @@ -91,21 +91,21 @@ CON(CH3)2|[CH0](=O)([N]([CH3])[CH3])|72.0858 CONCH3CH2|[CH0](=O)([N]([CH3])[CH2])|71.078 CON(CH2)2|[CH0](=O)([N]([CH2])[CH2])|70.0702 CONHCO|[CH0](=O)[NH][CH0](=O)|71.0348 -CONCO|[CH0](=O)[NH0][CH0](=O)|70.027 +CONCO|[CH0;!R](=[OH0;!R])[NH0;!R][CH0;!R](=[OH0;!R])|70.027 aC-CONH2|[cH0][CH0](=O)[NH2]|56.0436 aC-NH(CO)H|[cH0][NH][CH]=O|56.0436 aC-N(CO)H|[cH0][NH0][CH]=O|55.0358 aC-CONH|[cH0][CH0](=O)[NH]|55.0358 -aC-NHCO|[cH0][NH][CH0](=O)|55.0358 -aC-(N)CO|[cH0][NH0][CH0](=O)|54.028 +aC-NHCO|[cH0][NH;!R][CH0](=O)|55.0358 +aC-(N)CO|[cH0][NH0;!R][CH0](=O)|54.028 NHCONH|[NH][CH0](=O)[NH]|58.0396 NH2CONH|[NH2][CH0](=O)[NH]|59.0474 NH2CON|[NH2][CH0](=O)[NH0]|58.0396 -NHCON|[NH][CH0](=O)[NH0]|57.0318 +NHCON|[NH;!R][CH0;!R](=[OH0;!R])[NH0;!R]|57.0318 NCON|[NH0][CH0](=O)[NH0]|56.0239 aC-NHCONH2|[NH2][CH0](=O)[NH][cH0]|71.0584 aC-NHCONH|[NH][CH0](=O)[NH][cH0]|70.0506 -NHCO except as above|[NH][CH0]=O|43.0248 +NHCO except as above|[NH;!R][CH0;!R]=[OH0;!R]|43.0248 CH2Cl|[CH2][Cl]|49.48 CHCl|[CH][Cl]|48.472 CCl|[CH0][Cl]|47.464 @@ -199,7 +199,7 @@ Ccyclic=CH-|[CH0;R]=[CH;!R]|25.0298 Ccyclic=NH|[CH0;R]=[NH]|27.0258 N=O|[NH0]=O|30.006 Ccyclic=C|[CH0;R]=[CH0;!R]|24.022 -P=O|[PX5H0]=O|46.973 +P=O|[PX4H0]=O|46.973 N=N|[NH0;!R]=[NH0;!R]|28.014 C=NH|[CH0]=[NH]|27.0258 >C=S|[CX3H0]=[SH0]|44.076