public void TestSingleAtomMismatching()
        {
            var sp     = CDK.SmilesParser;
            var target = sp.ParseSmiles("C");
            var query  = sp.ParseSmiles("N");

            var tester = new UniversalIsomorphismTester();

            Assert.IsFalse(tester.IsIsomorph(target, query), "Single carbon and nitrogen should not match");
            Assert.IsFalse(tester.IsIsomorph(query, target), "Single nitrogen and carbon should not match");
        }
        public void TestSingleAtomMatching()
        {
            var sp     = CDK.SmilesParser;
            var target = sp.ParseSmiles("C");
            var query  = sp.ParseSmiles("C");

            var tester = new UniversalIsomorphismTester();

            Assert.IsTrue(tester.IsIsomorph(target, query));
            Assert.IsTrue(tester.IsIsomorph(query, target));
        }
        public void TestIsIsomorphIAtomContainerIAtomContainer()
        {
            var ac1 = builder.NewAtomContainer();

            ac1.Atoms.Add(builder.NewAtom("C"));
            var ac2 = builder.NewAtomContainer();

            ac2.Atoms.Add(builder.NewAtom("C"));
            Assert.IsTrue(uiTester.IsIsomorph(ac1, ac2));
            Assert.IsTrue(uiTester.IsSubgraph(ac1, ac2));
        }
Esempio n. 4
0
        public override void TestInitiate_IAtomContainerSet_IAtomContainerSet()
        {
            var type = new AdductionProtonLPReaction();

            /* initiate */
            var paramList = new List <IParameterReaction>();
            var param     = new SetReactionCenter();

            param.IsSetParameter = false;
            paramList.Add(param);
            type.ParameterList = paramList;
            var setOfReactions = type.Initiate(GetExampleReactants(), null);

            Assert.AreEqual(1, setOfReactions.Count);
            Assert.AreEqual(1, setOfReactions[0].Products.Count);

            var product   = setOfReactions[0].Products[0];
            var molecule2 = GetExpectedProducts()[0];
            var queryAtom = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(product);

            Assert.IsTrue(uiTester.IsIsomorph(molecule2, queryAtom));
        }
Esempio n. 5
0
        /// <summary>
        /// Perform a full structure search
        /// </summary>
        /// <param name="query"></param>
        /// <param name="target"></param>
        /// <param name="switches"></param>
        /// <returns></returns>

        public bool FullStructureMatch(
            INativeMolMx query,
            INativeMolMx target,
            string FullStructureSearchType = null)
        {
            if (query == null || target == null)
            {
                return(false);
            }

            CdkMol q = query as CdkMol;

            q.UpdateNativeMolecule(); // be sure up to date
            if (q?.NativeMol == null)
            {
                return(false);
            }

            CdkMol t = target as CdkMol;

            t.UpdateNativeMolecule();
            if (t?.NativeMol == null)
            {
                return(false);
            }

            var fs = new UniversalIsomorphismTester();

            if (fs.IsIsomorph(q.NativeMol, t.NativeMol))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 6
0
        public override void TestInitiate_IAtomContainerSet_IAtomContainerSet()
        {
            //CreateFromSmiles("CC=C")
            IAtomContainer molecule = builder.NewAtomContainer();

            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.AddBond(molecule.Atoms[0], molecule.Atoms[1], BondOrder.Single);
            molecule.AddBond(molecule.Atoms[1], molecule.Atoms[2], BondOrder.Double);
            molecule.Atoms.Add(builder.NewAtom("H"));
            molecule.Atoms.Add(builder.NewAtom("H"));
            molecule.Atoms.Add(builder.NewAtom("H"));
            molecule.Atoms.Add(builder.NewAtom("H"));
            molecule.Atoms.Add(builder.NewAtom("H"));
            molecule.Atoms.Add(builder.NewAtom("H"));
            molecule.AddBond(molecule.Atoms[0], molecule.Atoms[3], BondOrder.Single);
            molecule.AddBond(molecule.Atoms[0], molecule.Atoms[4], BondOrder.Single);
            molecule.AddBond(molecule.Atoms[0], molecule.Atoms[5], BondOrder.Single);
            molecule.AddBond(molecule.Atoms[1], molecule.Atoms[6], BondOrder.Single);
            molecule.AddBond(molecule.Atoms[2], molecule.Atoms[7], BondOrder.Single);
            molecule.AddBond(molecule.Atoms[2], molecule.Atoms[8], BondOrder.Single);
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(molecule);

            molecule.Atoms[1].IsReactiveCenter = true;
            molecule.Atoms[2].IsReactiveCenter = true;
            molecule.Bonds[1].IsReactiveCenter = true;

            var setOfReactants = ChemObjectBuilder.Instance.NewAtomContainerSet();

            setOfReactants.Add(molecule);

            IReactionProcess type = new HeterolyticCleavagePBReaction();
            var paramList         = new List <IParameterReaction>();
            var param             = new SetReactionCenter();

            param.IsSetParameter = true;
            paramList.Add(param);
            type.ParameterList = paramList;

            /* initiate */
            var setOfReactions = type.Initiate(setOfReactants, null);

            Assert.AreEqual(2, setOfReactions.Count);

            // expected products

            //CreateFromSmiles("C[C+][C-]")
            IAtomContainer expected1 = builder.NewAtomContainer();

            expected1.Atoms.Add(builder.NewAtom("C"));
            expected1.Atoms.Add(builder.NewAtom("C"));
            expected1.Atoms[1].FormalCharge = +1;
            expected1.Atoms.Add(builder.NewAtom("C"));
            expected1.Atoms[2].FormalCharge = -1;
            expected1.AddBond(expected1.Atoms[0], expected1.Atoms[1], BondOrder.Single);
            expected1.AddBond(expected1.Atoms[1], expected1.Atoms[2], BondOrder.Single);
            expected1.Atoms.Add(builder.NewAtom("H"));
            expected1.Atoms.Add(builder.NewAtom("H"));
            expected1.Atoms.Add(builder.NewAtom("H"));
            expected1.Atoms.Add(builder.NewAtom("H"));
            expected1.Atoms.Add(builder.NewAtom("H"));
            expected1.Atoms.Add(builder.NewAtom("H"));
            expected1.AddBond(expected1.Atoms[0], expected1.Atoms[3], BondOrder.Single);
            expected1.AddBond(expected1.Atoms[0], expected1.Atoms[4], BondOrder.Single);
            expected1.AddBond(expected1.Atoms[0], expected1.Atoms[5], BondOrder.Single);
            expected1.AddBond(expected1.Atoms[1], expected1.Atoms[6], BondOrder.Single);
            expected1.AddBond(expected1.Atoms[2], expected1.Atoms[7], BondOrder.Single);
            expected1.AddBond(expected1.Atoms[2], expected1.Atoms[8], BondOrder.Single);
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(expected1);
            CDK.LonePairElectronChecker.Saturate(expected1);
            IAtomContainer     product1  = setOfReactions[0].Products[0];
            QueryAtomContainer queryAtom = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(expected1);

            Assert.IsTrue(uiTester.IsIsomorph(product1, queryAtom));

            //CreateFromSmiles("C[C-][C+]")
            expected1.Atoms[1].FormalCharge = -1;
            expected1.Atoms[2].FormalCharge = +1;
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(expected1);
            CDK.LonePairElectronChecker.Saturate(expected1);
            product1  = setOfReactions[1].Products[0];
            queryAtom = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(expected1);
            Assert.IsTrue(uiTester.IsIsomorph(product1, queryAtom));
        }