示例#1
0
文件: testFMCS.py 项目: yy692/rdkit
    def test8MatchParams(self):
        smis = ("CCC1NC1", "CCC1N(C)C1", "CCC1OC1")
        ms = [Chem.MolFromSmiles(x) for x in smis]

        mcs = rdFMCS.FindMCS(ms)
        self.assertEqual(mcs.numAtoms, 4)

        ps = rdFMCS.MCSParameters()
        ps.BondCompareParameters.CompleteRingsOnly = True
        mcs = rdFMCS.FindMCS(ms, ps)
        self.assertEqual(mcs.numAtoms, 3)

        ps = rdFMCS.MCSParameters()
        ps.BondCompareParameters.MatchFusedRings = True
        mcs = rdFMCS.FindMCS(ms, ps)
        self.assertEqual(mcs.numAtoms, 3)

        ps = rdFMCS.MCSParameters()
        ps.BondCompareParameters.MatchFusedRingsStrict = True
        mcs = rdFMCS.FindMCS(ms, ps)
        self.assertEqual(mcs.numAtoms, 3)

        ps = rdFMCS.MCSParameters()
        ps.SetAtomTyper(rdFMCS.AtomCompare.CompareAny)
        mcs = rdFMCS.FindMCS(ms, ps)
        self.assertEqual(mcs.numAtoms, 5)
示例#2
0
    def test18GitHub3693(self):
        mols = [Chem.MolFromSmiles(smi) for smi in [
                "Nc1ccc(O)cc1c1ccc2ccccc2c1", "Oc1cnc(NC2CCC2)c(c1)c1ccc2ccccc2c1"]]
        params = rdFMCS.MCSParameters()
        res = rdFMCS.FindMCS(mols, params)
        self.assertEqual(res.numAtoms, 17)
        self.assertEqual(res.numBonds, 18)
        self.assertEqual(res.smartsString, "[#7]-,:[#6]:[#6](:[#6]:[#6](:[#6])-[#8])-[#6]1:[#6]:[#6]:[#6]2:[#6](:[#6]:1):[#6]:[#6]:[#6]:[#6]:2")

        params = rdFMCS.MCSParameters()
        params.BondCompareParameters.CompleteRingsOnly = True
        res = rdFMCS.FindMCS(mols, params)
        self.assertEqual(res.numAtoms, 11)
        self.assertEqual(res.numBonds, 12)
        self.assertEqual(res.smartsString, "[#6]-&!@[#6]1:&@[#6]:&@[#6]:&@[#6]2:&@[#6](:&@[#6]:&@1):&@[#6]:&@[#6]:&@[#6]:&@[#6]:&@2")

        params = rdFMCS.MCSParameters()
        params.AtomCompareParameters.CompleteRingsOnly = True
        params.BondCompareParameters.CompleteRingsOnly = True
        res = rdFMCS.FindMCS(mols, params)
        self.assertEqual(res.numAtoms, 10)
        self.assertEqual(res.numBonds, 11)
        self.assertEqual(res.smartsString, "[#6]1:&@[#6]:&@[#6]:&@[#6]2:&@[#6](:&@[#6]:&@1):&@[#6]:&@[#6]:&@[#6]:&@[#6]:&@2")

        params = rdFMCS.MCSParameters()
        params.AtomCompareParameters.CompleteRingsOnly = True
        # this will automatically be set to True
        params.BondCompareParameters.CompleteRingsOnly = False
        res = rdFMCS.FindMCS(mols, params)
        self.assertEqual(res.numAtoms, 10)
        self.assertEqual(res.numBonds, 11)
        self.assertEqual(res.smartsString, "[#6]1:&@[#6]:&@[#6]:&@[#6]2:&@[#6](:&@[#6]:&@1):&@[#6]:&@[#6]:&@[#6]:&@[#6]:&@2")
def draw_mols(x_list: list, y_list: list, names: list):

    error_names = []
    error = []

    for x, y, name in zip(x_list, y_list, names):
        e = abs(float(x) - float(y))
        if e > 10:
            error_names.append(name)
            error.append(e)

    ps = rdFMCS.MCSParameters()
    ps.AtomCompareParameters.RingMatchesRingOnly = True
    ps.SetAtomTyper(rdFMCS.AtomCompare.CompareAny)
    for name in error_names:
        mol1, mol2 = (
            Chem.MolFromSmiles(exp_results[name]["t1-smiles"]),
            Chem.MolFromSmiles(exp_results[name]["t2-smiles"]),
        )
        mcs = Chem.MolFromSmarts(
            rdFMCS.FindMCS(
                [mol1, mol2],
                bondCompare=Chem.rdFMCS.BondCompare.CompareOrder.CompareAny,
            ).smartsString)
        AllChem.Compute2DCoords(mol1)
        match1 = mol1.GetSubstructMatch(mcs)
        match2 = mol2.GetSubstructMatch(mcs)
        coords = [mol1.GetConformer().GetAtomPosition(x) for x in match1]
        coords2D = [Geometry.Point2D(pt.x, pt.y) for pt in coords]
        coordDict = {}
        for i, coord in enumerate(coords2D):
            coordDict[match2[i]] = coord
        AllChem.Compute2DCoords(mol2, coordMap=coordDict)
    Draw.MolsToGridImage([mol1, mol2], subImgSize=(250, 250), molsPerRow=2)
示例#4
0
 def getParams(**kwargs):
     params = rdFMCS.MCSParameters()
     for kw in ("AtomTyper", "BondTyper"):
         v = kwargs.get(kw, None)
         if v is not None:
             v_instance = v()
             setattr(params, kw, v_instance)
     return params
示例#5
0
 def test16MCSProgressCallbackExceptions(self):
     ps = rdFMCS.MCSParameters()
     smis = ['CCCC(C)CC(CC)CC', 'OC(N)CC(C)CC(CC)CC']
     ms = [Chem.MolFromSmiles(x) for x in smis]
     self.assertRaises(TypeError, lambda ps: setattr(ps, "ProgressCallback",
                       ProgressCallbackCallbackIsInt()))
     self.assertRaises(TypeError, lambda ps: setattr(ps, "ProgressCallback",
                       ProgressCallbackNoCallback()))
示例#6
0
 def test14MCSBondCompareExceptions(self):
     ps = rdFMCS.MCSParameters()
     smis = ['CCCCC', 'CCC1CCCCC1']
     ms = [Chem.MolFromSmiles(x) for x in smis]
     self.assertRaises(TypeError, lambda ps: setattr(ps, "BondTyper",
                       BondCompareCompareIsInt()))
     self.assertRaises(TypeError, lambda ps: setattr(ps, "BondTyper",
                       BondCompareNoCompare()))
示例#7
0
    def test20AtomCompareCompleteRingsOnly(self):
        mols = [Chem.MolFromSmiles(smi) for smi in ["C1CCCC1C", "C1CCCC1C1CCCCC1"]]
        params = rdFMCS.MCSParameters()
        params.AtomCompareParameters.CompleteRingsOnly = True
        res = rdFMCS.FindMCS(mols, params)
        self.assertEqual(res.numAtoms, 5)
        self.assertEqual(res.numBonds, 5)
        self.assertEqual(res.smartsString, "[#6&R]1-&@[#6&R]-&@[#6&R]-&@[#6&R]-&@[#6&R]-&@1")

        params = rdFMCS.MCSParameters()
        params.AtomCompareParameters.CompleteRingsOnly = True
        # this will automatically be set to True
        params.BondCompareParameters.CompleteRingsOnly = False
        res = rdFMCS.FindMCS(mols, params)
        self.assertEqual(res.numAtoms, 5)
        self.assertEqual(res.numBonds, 5)
        self.assertEqual(res.smartsString, "[#6&R]1-&@[#6&R]-&@[#6&R]-&@[#6&R]-&@[#6&R]-&@1")
示例#8
0
文件: testFMCS.py 项目: zbc0315/rdkit
 def test12MCSAtomCompareExceptions(self):
     ps = rdFMCS.MCSParameters()
     smis = ['CCCCC', 'CCC1CCCCC1']
     ms = [Chem.MolFromSmiles(x) for x in smis]
     self.assertRaises(TypeError, lambda ps: setattr(ps, "AtomTyper",
                       AtomCompareCompareIsInt()))
     ps.AtomTyper = AtomCompareNoCompare()
     self.assertRaises(TypeError, lambda ms, ps: rdFMCS.FindMCS(ms, ps))
示例#9
0
 def test17MCSProgressCallbackCancel(self):
     ps = rdFMCS.MCSParameters()
     smis = ['CCCC(C)CC(CC)CC', 'OC(N)CC(C)CC(CC)CC']
     ms = [Chem.MolFromSmiles(x) for x in smis]
     ps.AtomTyper = CompareElements()
     ps.ProgressCallback = ProgressCallback(self)
     mcs = rdFMCS.FindMCS(ms, ps)
     self.assertTrue(mcs.canceled)
     self.assertEqual(ps.ProgressCallback.callCount, 3)
示例#10
0
 def test13MCSAtomCompareUserData(self):
     smis = ['CCOCCOC', 'CCNCCCC']
     ms = [Chem.MolFromSmiles(x) for x in smis]
     ps = rdFMCS.MCSParameters()
     ps.AtomTyper = AtomCompareUserData()
     ps.AtomTyper.setMatchAnyHet(False)
     mcs = rdFMCS.FindMCS(ms, ps)
     self.assertEqual(mcs.numAtoms, 2)
     ps.AtomTyper.setMatchAnyHet(True)
     mcs = rdFMCS.FindMCS(ms, ps)
     self.assertEqual(mcs.numAtoms, 5)
示例#11
0
    def test9MatchCharge(self):
        smis = ("CCNC", "CCN(C)C", "CC[N+](C)C")
        ms = [Chem.MolFromSmiles(x) for x in smis]

        mcs = rdFMCS.FindMCS(ms)
        self.assertEqual(mcs.numAtoms, 4)

        ps = rdFMCS.MCSParameters()
        ps.AtomCompareParameters.MatchFormalCharge = True
        mcs = rdFMCS.FindMCS(ms, ps)
        self.assertEqual(mcs.numAtoms, 2)
示例#12
0
def mcs_map(a, b, threshold: float = 0.5, timeout: int = 5, smarts: Optional[str] = None):
    """Find the MCS map of going from A to B"""
    params = rdFMCS.MCSParameters()
    params.BondCompareParameters.CompleteRingsOnly = 1
    params.BondCompareParameters.RingMatchesRingOnly = 1
    params.AtomCompareParameters.matchValences = 1
    params.AtomTyper = CompareDist(threshold=threshold)
    params.Timeout = timeout
    if smarts is not None:
        params.InitialSeed = smarts
    return rdFMCS.FindMCS([a, b], params)
示例#13
0
 def test15MCSBondCompareUserData(self):
     smis = ['C1CC=CCC1', 'c1ccccc1']
     ms = [Chem.MolFromSmiles(x) for x in smis]
     ps = rdFMCS.MCSParameters()
     ps.BondTyper = BondCompareUserData()
     ps.BondCompareParameters.CompleteRingsOnly = True
     ps.BondTyper.setIgnoreAromatization(False)
     mcs = rdFMCS.FindMCS(ms, ps)
     self.assertEqual(mcs.numAtoms, 0)
     ps.BondTyper.setIgnoreAromatization(True)
     mcs = rdFMCS.FindMCS(ms, ps)
     self.assertEqual(mcs.numAtoms, 6)
示例#14
0
 def getParams(**kwargs):
     have_kw = False
     params = rdFMCS.MCSParameters()
     for kw in ("AtomTyper", "BondTyper"):
         try:
             v = kwargs[kw]
         except KeyError:
             pass
         else:
             have_kw = True
             setattr(params, kw, v())
     return params
示例#15
0
    def test11Github2034(self):
        smis = ("C1CC1N2CC2", "C1CC1N")
        ms = [Chem.MolFromSmiles(x) for x in smis]

        mcs = rdFMCS.FindMCS(ms)
        self.assertEqual(mcs.numAtoms, 4)
        self.assertEqual(mcs.numBonds, 4)

        mcs = rdFMCS.FindMCS(ms, ringMatchesRingOnly=True)
        self.assertEqual(mcs.numAtoms, 3)
        self.assertEqual(mcs.numBonds, 3)

        ps = rdFMCS.MCSParameters()
        ps.AtomCompareParameters.RingMatchesRingOnly = True
        mcs = rdFMCS.FindMCS(ms, ps)
        self.assertEqual(mcs.numAtoms, 3)
        self.assertEqual(mcs.numBonds, 3)
示例#16
0
def test_setting_up_restraints_using_smarts():
    seed = 814

    mcs_params = rdFMCS.MCSParameters()
    mcs_params.AtomTyper = CompareDistNonterminal()
    mcs_params.BondTyper = rdFMCS.BondCompare.CompareAny

    smi_a = "CCCONNN"
    smi_b = "CCCNNN"
    mol_a = Chem.MolFromSmiles(smi_a)
    mol_a = Chem.AddHs(mol_a)
    mol_b = Chem.MolFromSmiles(smi_b)
    mol_b = Chem.AddHs(mol_b)
    for mol in [mol_a, mol_b]:
        AllChem.EmbedMolecule(mol, randomSeed=seed)

    result = rdFMCS.FindMCS([mol_a, mol_b], mcs_params)

    core = setup_relative_restraints_using_smarts(mol_a, mol_b,
                                                  result.smartsString)
    assert core.shape == (2, 2)