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 }
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); }
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"); }
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); }
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; } }