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
Example #2
0
 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
Example #3
0
    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))
Example #4
0
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)