public void AtomStereo()
        {
            var mol = new QueryAtomContainer(null);

            Assert.IsTrue(Smarts.Parse(mol, "C[C@H](O)CC"));
            Assert.AreEqual("C[C@H1](O)CC", Smarts.Generate(mol));
        }
        public void BondStereoCisTrans()
        {
            var mol = new QueryAtomContainer(null);

            Assert.IsTrue(Smarts.Parse(mol, "C/C=C/,\\C"));
            Assert.AreEqual("C/C=C/,\\C", Smarts.Generate(mol));
        }
        public void TestGetSubgraphMapIAtomContainerIAtomContainer()
        {
            var molfile               = "NCDK.Data.MDL.decalin.mol";
            var queryfile             = "NCDK.Data.MDL.decalin.mol";
            var mol                   = builder.NewAtomContainer();
            var temp                  = builder.NewAtomContainer();
            QueryAtomContainer query1 = null;
            QueryAtomContainer query2 = null;

            var ins    = ResourceLoader.GetAsStream(molfile);
            var reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict);

            reader.Read(mol);
            ins    = ResourceLoader.GetAsStream(queryfile);
            reader = new MDLV2000Reader(ins, ChemObjectReaderMode.Strict);
            reader.Read(temp);
            query1 = QueryAtomContainerCreator.CreateBasicQueryContainer(temp);

            var sp            = CDK.SmilesParser;
            var atomContainer = sp.ParseSmiles("C1CCCCC1");

            query2 = QueryAtomContainerCreator.CreateBasicQueryContainer(atomContainer);

            var list = uiTester.GetSubgraphMap(mol, query1);

            Assert.AreEqual(11, list.Count);

            list = uiTester.GetSubgraphMap(mol, query2);
            Assert.AreEqual(6, list.Count);
        }
        public void BondFalse()
        {
            var mol = new QueryAtomContainer(null);

            Assert.IsTrue(Smarts.Parse(mol, "C!~C"));
            Assert.AreEqual("C!~C", Smarts.Generate(mol));
        }
        public override void TestInitiate_IAtomContainerSet_IAtomContainerSet()
        {
            IReactionProcess type = new RadicalSiteInitiationReaction();
            var setOfReactants    = GetExampleReactants();

            /* initiate */

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

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

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

            IAtomContainer product1 = setOfReactions[0].Products[0];

            /* C=C */
            IAtomContainer molecule1 = GetExpectedProducts()[0];

            QueryAtomContainer queryAtom = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(product1);

            Assert.IsTrue(new UniversalIsomorphismTester().IsIsomorph(molecule1, queryAtom));

            IAtomContainer product2 = setOfReactions[0].Products[1];

            /* [C*] */
            IAtomContainer molecule2 = GetExpectedProducts()[1];

            queryAtom = QueryAtomContainerCreator.CreateSymbolAndChargeQueryContainer(product2);
            Assert.IsTrue(new UniversalIsomorphismTester().IsIsomorph(molecule2, queryAtom));
        }
Exemple #6
0
        static IAtomContainer Sma(string smarts)
        {
            var query = new QueryAtomContainer(null);

            Smarts.Parse(query, smarts);
            return(query);
        }
Exemple #7
0
        public void TestMatchInherited()
        {
            try
            {
                var builder = Silent.ChemObjectBuilder.Instance;
                var c1      = new SymbolQueryAtom(builder.NewAtom("C"));
                var c2      = new SymbolAndChargeQueryAtom(builder.NewAtom("C"));
                var c       = TestMoleculeFactory.MakeAlkane(2);
                var query1  = new QueryAtomContainer();
                query1.Atoms.Add(c1);
                query1.Atoms.Add(c2);
                query1.Bonds.Add(new NCDK.Isomorphisms.Matchers.OrderQueryBond(c1, c2, BondOrder.Single));
                Assert.IsTrue(uiTester.IsSubgraph(c, query1));

                var query = new QueryAtomContainer();
                query.Atoms.Add(c1);
                query.Atoms.Add(c2);
                query.Bonds.Add(new AnyOrderQueryBond(c1, c2, BondOrder.Single));
                Assert.IsTrue(uiTester.IsSubgraph(c, query));
            }
            catch (CDKException exception)
            {
                Assert.Fail(exception.Message);
            }
        }
Exemple #8
0
        /// <summary>
        /// Internal - create a query atom container that exactly matches the molecule provided.
        /// Similar to <see cref="QueryAtomContainerCreator"/>
        /// but we can't access SMARTS query classes from that module (cdk-isomorphism).
        /// </summary>
        /// <param name="mol">molecule</param>
        /// <returns>query container</returns>
        /// <seealso cref="QueryAtomContainerCreator"/>
        private static IQueryAtomContainer MatchExact(IAtomContainer mol)
        {
            var bldr   = mol.Builder;
            var qry    = new QueryAtomContainer();
            var atmmap = new Dictionary <IAtom, IAtom>();

            foreach (var atom in mol.Atoms)
            {
                var qatom = MatchExact(mol, atom);
                if (qatom != null)
                {
                    atmmap[atom] = qatom;
                    qry.Atoms.Add(qatom);
                }
            }

            foreach (var bond in mol.Bonds)
            {
                var beg = atmmap[bond.Begin];
                var end = atmmap[bond.End];

                // attach bond skipped
                if (beg == null || end == null)
                {
                    continue;
                }

                var qbond = new QueryBond(beg, end, ExprType.True);
                qry.Bonds.Add(qbond);
            }

            return(qry);
        }
        public static QueryAtomContainer CreateSymbolChargeIDQueryContainer(IAtomContainer container)
        {
            var queryContainer = new QueryAtomContainer(container.Builder);

            for (int i = 0; i < container.Atoms.Count; i++)
            {
                queryContainer.Atoms.Add(new SymbolChargeIDQueryAtom(container.Atoms[i]));
            }
            foreach (var bond in container.Bonds)
            {
                int index1 = container.Atoms.IndexOf(bond.Begin);
                int index2 = container.Atoms.IndexOf(bond.End);
                if (bond.IsAromatic)
                {
                    QueryBond qbond = new QueryBond(queryContainer.Atoms[index1],
                                                    queryContainer.Atoms[index2],
                                                    ExprType.IsAromatic);
                    queryContainer.Bonds.Add(qbond);
                }
                else
                {
                    QueryBond qbond = new QueryBond(queryContainer.Atoms[index1],
                                                    queryContainer.Atoms[index2],
                                                    ExprType.Order,
                                                    bond.Order.Numeric())
                    {
                        Order = bond.Order // backwards compatibility
                    };
                    queryContainer.Bonds.Add(qbond);
                }
            }
            return(queryContainer);
        }
        public void TestAliphaticSymbols()
        {
            foreach (var e in ChemicalElement.Values)
            {
                switch (e.Symbol)
                {
                case "R":
                    continue;

                default:
                    int len = e.Symbol.Length;
                    if (len == 1 || len == 2)
                    {
                        string smarts = $"[{e.Symbol}]";
                        var    mol    = new QueryAtomContainer();
                        Assert.IsTrue(Smarts.Parse(mol, smarts), smarts);
                        var expr = GetAtomExpr(mol.Atoms[0]);
                        var ee   = new Expr(ExprType.Element, e.AtomicNumber);
                        var ea   = new Expr(AliphaticElement, e.AtomicNumber);
                        Assert.IsTrue(expr.Equals(ee) || expr.Equals(ea));
                    }
                    break;
                }
            }
        }
Exemple #11
0
        public void BondInRing()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C@C"));
            Assert.AreEqual("C@C", Smarts.Generate(mol));
        }
 /// <summary>
 /// Creates a QueryAtomContainer with the following settings:
 /// <c>QueryAtomContainer.Create(container,
 ///     ExprType.ELEMENT,
 ///     ExprType.IS_AROMATIC,
 ///     ExprType.ALIPHATIC_ORDER);
 /// </c>>
 /// </summary>
 /// <param name="container">The AtomContainer that stands as model</param>
 /// <returns>The new QueryAtomContainer created from container.</returns>
 public static QueryAtomContainer CreateAnyAtomForPseudoAtomQueryContainer(IAtomContainer container)
 {
     return(QueryAtomContainer.Create(container,
                                      ExprType.Element,
                                      ExprType.IsAromatic,
                                      ExprType.AliphaticOrder));
 }
Exemple #13
0
        public void BondStereoCisThenTransWithNbr()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C/C=C(C)\\C=C\\C"));
            Assert.AreEqual("C/C=C(C)\\C=C\\C", Smarts.Generate(mol));
        }
Exemple #14
0
        public void BondStereoCisThenTransUnspecWithNbrComplex()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C/?C=C(C)\\C=C\\O"));
            Assert.AreEqual("C/?C=C(C)/C=C/O", Smarts.Generate(mol));
        }
Exemple #15
0
        public void AtomStereoOrUnspec()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C[C@?H](O)CC"));
            Assert.AreEqual("C[CH1@?](O)CC", Smarts.Generate(mol));
        }
Exemple #16
0
        public void BondStereoUnspec()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C/C=C/?\\?C"));
            Assert.AreEqual("C/C=C!/!\\C", Smarts.Generate(mol));
        }
Exemple #17
0
        public void RoundTripStereo()
        {
            var mol = new QueryAtomContainer();

            Smarts.Parse(mol, "O1.[S@]=1(C)CC");
            Assert.AreEqual("O=[S@@](C)CC", Smarts.Generate(mol));
        }
Exemple #18
0
        public void CompGroupingOnAgent()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, ">(c1ccccc1[O-].[Na+])>"));
            Assert.AreEqual(">(c1c(cccc1)[O-].[Na+])>", Smarts.Generate(mol));
        }
Exemple #19
0
        public void Reaction()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "c1ccccc1[NH2]>>c1ccccc1N(~O)~O"));
            Assert.AreEqual("c1c(cccc1)[NH2]>>c1c(cccc1)N(~O)~O", Smarts.Generate(mol));
        }
Exemple #20
0
        public void ReactionWithMaps()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "c1cccc[c:1]1[NH2:2]>>c1cccc[c:1]1[N:2](~O)~O"));
            Assert.AreEqual("c1[c:1](cccc1)[NH2:2]>>c1[c:1](cccc1)[N:2](~O)~O", Smarts.Generate(mol));
        }
Exemple #21
0
        public void AromaticBond()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "[#6]:[#6]"));
            Assert.AreEqual("[#6]:[#6]", Smarts.Generate(mol));
        }
Exemple #22
0
        public void RingClosureExprs3()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C1-,=CCCC1"));
            Assert.AreEqual("C1CCCC-,=1", Smarts.Generate(mol));
        }
Exemple #23
0
        public void NotTripleBond()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C!#C"));
            Assert.AreEqual("C!#C", Smarts.Generate(mol));
        }
Exemple #24
0
        public void BondTrue()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C~C~N(~O)~O"));
            Assert.AreEqual("C~C~N(~O)~O", Smarts.Generate(mol));
        }
Exemple #25
0
        public void CompGrouping()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "([Na+].[Cl-]).c1ccccc1"));
            Assert.AreEqual("c1ccccc1.([Na+].[Cl-])", Smarts.Generate(mol));
        }
 /// <summary>
 /// Creates a <see cref="QueryAtomContainer"/> with the following settings:
 /// <c>QueryAtomContainer.Create(container,
 ///     ExprType.ELEMENT,
 ///     ExprType.FORMAL_CHARGE,
 ///     ExprType.IS_AROMATIC,
 ///     ExprType.ORDER);</c>
 /// </summary>
 /// <param name="container">The <see cref="IAtomContainer"/> that stands as model</param>
 /// <returns>The new <see cref="QueryAtomContainer"/> created from container.</returns>
 public static QueryAtomContainer CreateSymbolAndChargeQueryContainer(IAtomContainer container)
 {
     return(QueryAtomContainer.Create(container,
                                      ExprType.Element,
                                      ExprType.FormalCharge,
                                      ExprType.IsAromatic,
                                      ExprType.Order));
 }
Exemple #27
0
        public void MultipleReads()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "C/C=C/C"));
            Assert.IsTrue(Smarts.Parse(mol, "C/C=C\\C"));
            Assert.AreEqual("C/C=C/C.C/C=C\\C", Smarts.Generate(mol));
        }
        public void AtomMaps()
        {
            var mol = new QueryAtomContainer();

            Assert.IsFalse(Smarts.Parse(mol, "[:10]"));
            Assert.IsTrue(Smarts.Parse(mol, "[*:10]"));
            Assert.AreEqual(10, mol.Atoms[0].GetProperty <int>(CDKPropertyName.AtomAtomMapping));
        }
Exemple #29
0
 private void InitializeQuery()
 {
     mappings = null;
     if (!cache.TryGetValue(smarts, out query))
     {
         query         = SMARTSParser.Parse(smarts);
         cache[smarts] = query;
     }
 }
Exemple #30
0
        public void IndoleWithExprRoundTrip()
        {
            var mol = new QueryAtomContainer();

            Assert.IsTrue(Smarts.Parse(mol, "[n;$(*C),$(*OC)]1ccc2c1cccc2"));
            // CDK choice of data structures lose local arrangement but
            // output is still indole
            Assert.AreEqual("[n;$(*C),$(*OC)]1c2c(cc1)cccc2", Smarts.Generate(mol));
        }