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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }