public void TestSingleAtomMatching2() { var sp = CDK.SmilesParser; var target = sp.ParseSmiles("CNC"); var queryac = sp.ParseSmiles("C"); var query = QueryAtomContainerCreator.CreateSymbolAndBondOrderQueryContainer(queryac); var matches = uiTester.GetIsomorphMaps(target, query).ToReadOnlyList(); Assert.AreEqual(2, matches.Count); Assert.AreEqual(1, matches[0].Count); Assert.AreEqual(1, matches[1].Count); var map1 = matches[0][0]; var map2 = matches[1][0]; Assert.AreEqual(0, map1.Id1); Assert.AreEqual(0, map1.Id2); Assert.AreEqual(2, map2.Id1); Assert.AreEqual(0, map2.Id2); var atomMappings = UniversalIsomorphismTester.MakeAtomsMapsOfBondsMaps(matches, target, query); Assert.IsTrue(Compares.AreDeepEqual(matches, atomMappings)); }
public void TestSingleAtomMatching2() { var sp = CDK.SmilesParser; var target = sp.ParseSmiles("CNC"); var queryac = sp.ParseSmiles("C"); var query = QueryAtomContainerCreator.CreateSymbolAndBondOrderQueryContainer(queryac); var matches = CDKMCS.GetIsomorphMaps(target, query, true); Assert.AreEqual(2, matches.Count); Assert.AreEqual(1, matches[0].Count); Assert.AreEqual(1, matches[1].Count); var map1 = matches[0][0]; var map2 = matches[1][0]; Assert.AreEqual(0, map1.Id1); Assert.AreEqual(0, map1.Id2); Assert.AreEqual(2, map2.Id1); Assert.AreEqual(0, map2.Id2); var atomMappings = CDKMCS.MakeAtomsMapsOfBondsMaps(matches, target, query); Assert.AreEqual(matches, atomMappings); }
public void TestQueryAtomContainerMCSPLUS() { Isomorphism smsd = new Isomorphism(Algorithm.MCSPlus, true); var sp = CDK.SmilesParser; var query = sp.ParseSmiles("CC"); var target = sp.ParseSmiles("C1CCC12CCCC2"); smsd.Init(query, target, false, true); bool foundMatches = smsd.IsSubgraph(); Assert.IsTrue(foundMatches); IQueryAtomContainer queryContainer = QueryAtomContainerCreator.CreateSymbolAndBondOrderQueryContainer(query); smsd.Init(queryContainer, target); foundMatches = smsd.IsSubgraph(); Assert.IsTrue(foundMatches); }
public void TestMatchCountCDKMCS() { Isomorphism smsd = new Isomorphism(Algorithm.CDKMCS, true); var sp = CDK.SmilesParser; var query = sp.ParseSmiles("CC"); var target = sp.ParseSmiles("C1CCC12CCCC2"); smsd.Init(query, target, false, true); bool foundMatches = smsd.IsSubgraph(); Assert.AreEqual(18, smsd.GetAllAtomMapping().Count); Assert.IsTrue(foundMatches); IQueryAtomContainer queryContainer = QueryAtomContainerCreator.CreateSymbolAndBondOrderQueryContainer(query); smsd.Init(queryContainer, target); foundMatches = smsd.IsSubgraph(); Assert.IsTrue(foundMatches); }
/// <summary> /// Search if the setOfAtomContainer contains the atomContainer /// </summary> /// <param name="set">ISetOfAtomContainer object where to search</param> /// <param name="atomContainer">IAtomContainer to search</param> /// <returns>True, if the atomContainer is contained</returns> private bool ExistAC(IChemObjectSet <IAtomContainer> set, IAtomContainer atomContainer) { IAtomContainer acClone = null; acClone = (IAtomContainer)atomContainer.Clone(); if (!lookingSymmetry) { /* remove all aromatic flags */ foreach (var atom in acClone.Atoms) { atom.IsAromatic = false; } foreach (var bond in acClone.Bonds) { bond.IsAromatic = false; } } for (int i = 0; i < acClone.Atoms.Count; i++) { acClone.Atoms[i].Id = "" + acClone.Atoms.IndexOf(acClone.Atoms[i]); } if (lookingSymmetry) { try { Aromaticity.CDKLegacy.Apply(acClone); } catch (CDKException e) { Console.Error.WriteLine(e.StackTrace); } } else { if (!lookingSymmetry) { /* remove all aromatic flags */ foreach (var atom in acClone.Atoms) { atom.IsAromatic = false; } foreach (var bond in acClone.Bonds) { bond.IsAromatic = false; } } } for (int i = 0; i < set.Count; i++) { var ss = set[i]; for (int j = 0; j < ss.Atoms.Count; j++) { ss.Atoms[j].Id = "" + ss.Atoms.IndexOf(ss.Atoms[j]); } try { if (!lookingSymmetry) { var qAC = QueryAtomContainerCreator.CreateSymbolChargeIDQueryContainer(acClone); if (new UniversalIsomorphismTester().IsIsomorph(ss, qAC)) { var qAC2 = QueryAtomContainerCreator.CreateSymbolAndBondOrderQueryContainer(acClone); if (new UniversalIsomorphismTester().IsIsomorph(ss, qAC2)) { return(true); } } } else { var qAC = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(acClone); Aromaticity.CDKLegacy.Apply(ss); if (new UniversalIsomorphismTester().IsIsomorph(ss, qAC)) { return(true); } } } catch (CDKException e1) { Console.Error.WriteLine(e1); Trace.TraceError(e1.Message); Debug.WriteLine(e1); } } return(false); }