Esempio n. 1
0
        void Main()
        {
            IAtomContainer container = null;

            #region
            // Generate factory -  if native code does not load
            InChIGeneratorFactory factory = new InChIGeneratorFactory();
            // Get InChIGenerator
            InChIGenerator gen = factory.GetInChIGenerator(container);

            InChIReturnCode ret = gen.ReturnStatus;
            if (ret == InChIReturnCode.Warning)
            {
                // InChI generated, but with warning message
                Console.WriteLine($"InChI warning: {gen.Message}");
            }
            else if (ret != InChIReturnCode.Ok)
            {
                // InChI generation failed
                throw new CDKException($"InChI failed: {ret.ToString()} [{gen.Message}]");
            }

            string inchi   = gen.InChI;
            string auxinfo = gen.AuxInfo;
            #endregion
        }
Esempio n. 2
0
        public void Guanine_std()
        {
            var            smipar    = new SmilesParser(builder);
            var            smiles    = "NC1=NC2=C(N=CN2)C(=O)N1";
            var            mol       = smipar.ParseSmiles(smiles);
            var            inchiFact = InChIGeneratorFactory.Instance;
            InChIGenerator inchigen  = inchiFact.GetInChIGenerator(mol);

            Assert.AreEqual(InChIReturnCode.Ok, inchigen.ReturnStatus);
            Assert.AreEqual("InChI=1S/C5H5N5O/c6-5-9-3-2(4(11)10-5)7-1-8-3/h1H,(H4,6,7,8,9,10,11)", inchigen.InChI);
        }
Esempio n. 3
0
        public void TestSMILESConversion_TopologicalCentre()
        {
            // (2R,3R,4S,5R,6S)-3,5-dimethylheptane-2,4,6-triol
            var parser    = CDK.SmilesParser;
            var container = parser.ParseSmiles("C[C@@H](O)[C@@H](C)[C@@H](O)[C@H](C)[C@H](C)O");

            InChIGenerator generator = InChIGeneratorFactory.Instance.GetInChIGenerator(container);

            string expected = "InChI=1S/C9H20O3/c1-5(7(3)10)9(12)6(2)8(4)11/h5-12H,1-4H3/t5-,6-,7-,8+,9-/m1/s1";
            string actual   = generator.InChI;

            Assert.AreEqual(expected, actual, "Incorrect InCHI generated for topological centre");
        }
Esempio n. 4
0
        public void TestGetStandardInChIEandZ12Dichloroethene2D()
        {
            // (E)-1,2-dichloroethene
            var acE = builder.NewAtomContainer();
            var a1E = builder.NewAtom("C", new Vector2(2.866, -0.250));
            var a2E = builder.NewAtom("C", new Vector2(3.732, 0.250));
            var a3E = builder.NewAtom("Cl", new Vector2(2.000, 2.500));
            var a4E = builder.NewAtom("Cl", new Vector2(4.598, -0.250));

            a1E.ImplicitHydrogenCount = 1;
            a2E.ImplicitHydrogenCount = 1;
            acE.Atoms.Add(a1E);
            acE.Atoms.Add(a2E);
            acE.Atoms.Add(a3E);
            acE.Atoms.Add(a4E);

            acE.Bonds.Add(builder.NewBond(a1E, a2E, BondOrder.Double));
            acE.Bonds.Add(builder.NewBond(a1E, a2E, BondOrder.Double));
            acE.Bonds.Add(builder.NewBond(a1E, a3E, BondOrder.Single));
            acE.Bonds.Add(builder.NewBond(a2E, a4E, BondOrder.Single));

            var genE = factory.GetInChIGenerator(acE);

            Assert.AreEqual(InChIReturnCode.Ok, genE.ReturnStatus);
            Assert.AreEqual("InChI=1S/C2H2Cl2/c3-1-2-4/h1-2H/b2-1+", genE.InChI);

            // (Z)-1,2-dichloroethene
            var acZ = builder.NewAtomContainer();
            var a1Z = builder.NewAtom("C", new Vector2(2.866, -0.440));
            var a2Z = builder.NewAtom("C", new Vector2(3.732, 0.060));
            var a3Z = builder.NewAtom("Cl", new Vector2(2.000, 0.060));
            var a4Z = builder.NewAtom("Cl", new Vector2(3.732, 1.060));

            a1Z.ImplicitHydrogenCount = 1;
            a2Z.ImplicitHydrogenCount = 1;
            acZ.Atoms.Add(a1Z);
            acZ.Atoms.Add(a2Z);
            acZ.Atoms.Add(a3Z);
            acZ.Atoms.Add(a4Z);

            acZ.Bonds.Add(builder.NewBond(a1Z, a2Z, BondOrder.Double));
            acZ.Bonds.Add(builder.NewBond(a1Z, a2Z, BondOrder.Double));
            acZ.Bonds.Add(builder.NewBond(a1Z, a3Z, BondOrder.Single));
            acZ.Bonds.Add(builder.NewBond(a2Z, a4Z, BondOrder.Single));

            InChIGenerator genZ = factory.GetInChIGenerator(acZ);

            Assert.AreEqual(InChIReturnCode.Ok, genZ.ReturnStatus);
            Assert.AreEqual("InChI=1S/C2H2Cl2/c3-1-2-4/h1-2H/b2-1-", genZ.InChI);
        }
Esempio n. 5
0
        public void TestInChIGenerator_AromaticBonds()
        {
            try
            {
                // create a fairly complex aromatic molecule
                IAtomContainer tetrazole = TestMoleculeFactory.MakeTetrazole();
                foreach (IAtom atom in tetrazole.Atoms)
                {
                    atom.ImplicitHydrogenCount = null;
                }
                AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(tetrazole);
                Aromaticity.CDKLegacy.Apply(tetrazole);

                InChIGeneratorFactory inchiFactory = InChIGeneratorFactory.Instance;
                inchiFactory.IgnoreAromaticBonds = false;

                // include aromatic bonds by default
                InChIGenerator genAromaticity1 = inchiFactory.GetInChIGenerator(tetrazole);

                // exclude aromatic bonds
                Assert.IsFalse(inchiFactory.IgnoreAromaticBonds);
                inchiFactory.IgnoreAromaticBonds = true;
                Assert.IsTrue(inchiFactory.IgnoreAromaticBonds);
                InChIGenerator genNoAromaticity = inchiFactory.GetInChIGenerator(tetrazole);

                // include aromatic bonds again
                inchiFactory.IgnoreAromaticBonds = false;
                Assert.IsFalse(inchiFactory.IgnoreAromaticBonds);
                InChIGenerator genAromaticity2 = inchiFactory.GetInChIGenerator(tetrazole);

                // with the aromatic bonds included, no InChI can be generated
                Assert.AreEqual(InChIReturnCode.Error, genAromaticity1.ReturnStatus, "return status was not in error");
                Assert.AreEqual(InChIReturnCode.Error, genAromaticity2.ReturnStatus, "return status was not in error");
                // excluding the aromatic bonds gives the normal InChI
                Assert.AreEqual(InChIReturnCode.Ok, genNoAromaticity.ReturnStatus, "return status was not okay");
                Assert.AreEqual("InChI=1S/CH2N4/c1-2-4-5-3-1/h1H,(H,2,3,4,5)",
                                genNoAromaticity.InChI, "InChIs did not match");
            }
            finally
            {
                InChIGeneratorFactory.Instance.IgnoreAromaticBonds = true;
            }
        }