def __call__(self, smiles: str): mol = Chem.MolFromSmiles(smiles) if not (self.rule_dict["MW"][0] <= MolWt(mol) <= self.rule_dict["MW"][1]): return False if not (self.rule_dict["LogP"][0] <= MolLogP(mol) <= self.rule_dict["LogP"][1]): return False if not (self.rule_dict["HBD"][0] <= NumHDonors(mol) <= self.rule_dict["HBD"][1]): return False if not (self.rule_dict["HBA"][0] <= NumHAcceptors(mol) <= self.rule_dict["HBA"][1]): return False if not (self.rule_dict["TPSA"][0] <= TPSA(mol) <= self.rule_dict["TPSA"][1]): return False for row in self.rule_list: patt, max_val, desc = row if len(mol.GetSubstructMatches(patt)) > max_val: return False return True
def evaluate(self, lst_in): """ Evaluate structure alerts on a list of SMILES :param lst_in: input list of [SMILES, Name] :return: list of alerts matched or "OK" """ smiles, name = lst_in mol = Chem.MolFromSmiles(smiles) if mol is None: return [ smiles, name, 'INVALID', -999, -999, -999, -999, -999, -999 ] desc_list = [ MolWt(mol), MolLogP(mol), NumHDonors(mol), NumHAcceptors(mol), TPSA(mol), CalcNumRotatableBonds(mol) ] for row in self.rule_list: patt, max_val, desc = row if len(mol.GetSubstructMatches(patt)) > max_val: return [smiles, name] + [desc + " > %d" % (max_val)] + desc_list return [smiles, name] + ["OK"] + desc_list
canvas.addCanvasText('%s\r\nMolWt: %g\tTPSA: %g' % (s, MolWt(m), TPSA(m)), pos, font) with open('xx' + s + '.png', 'w') as f: canvas.flush() img.save(f) if __name__ == '__main__': drawmol('CN1CCC[C@H]1c2cccnc2') drawmol('CC(=O)OC1=CC=CC=C1C(=O)O') drawmol('O1C=C[C@H]([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)5') sys.exit(0) # sample code to use new drawing API (older rdkit do not have DrawString) from rdkit.Chem.AllChem import EmbedMolecule assert EmbedMolecule(m) >= 0 x = Draw.rdMolDraw2D.MolDraw2DSVG(200, 250) x.DrawMolecule(m) x.DrawString('Test String', 20, 200) x.FinishDrawing() print(x.GetDrawingText()) # sample code to generate a legend legstr = '' if molname: legstr += molname + '\n' legstr += '%s\nWt=%g LogP=%g TPSA=%g\nHBA=%d HBD=%d RotBond=%d\n' % \ (smiles, MolWt(mol), MolLogP(mol), TPSA(mol), NumHAcceptors(mol), NumHDonors(mol), NumRotatableBonds(mol))
def calc_NumHAcceptors(smiles_string): """Given a smiles string (ex. C1CCCCC1), calculate and return the NumHAcceptors""" mol = Chem.MolFromSmiles(smiles_string) return NumHAcceptors(mol)
def calc_NumHAcceptors(smiles_string): mol = Chem.MolFromSmiles(smiles_string) return NumHAcceptors(mol)