Beispiel #1
0
 /// <summary>
 /// Writes a MoleculeSet to an Stream for the reaction.
 /// </summary>
 /// <param name="som">The MoleculeSet that is written to an Stream</param>
 private void WriteAtomContainerSet(IChemObjectSet <IAtomContainer> som)
 {
     for (int i = 0; i < som.Count; i++)
     {
         IAtomContainer mol = som[i];
         for (int j = 0; j < som.GetMultiplier(i); j++)
         {
             StringWriter sw = new StringWriter();
             writer.Write("$MOL");
             writer.Write('\n');
             MDLV2000Writer mdlwriter = null;
             try
             {
                 mdlwriter = new MDLV2000Writer(sw);
             }
             catch (Exception ex)
             {
                 Trace.TraceError(ex.Message);
                 Debug.WriteLine(ex);
                 throw new CDKException("Exception while creating MDLWriter: " + ex.Message, ex);
             }
             mdlwriter.Write(mol);
             mdlwriter.Close();
             writer.Write(sw.ToString());
         }
     }
 }
        public void TestBug1649526()
        {
            //Read the original
            var filename = "NCDK.Data.MDL.bug-1649526.mol";
            var ins      = ResourceLoader.GetAsStream(filename);
            var reader   = new MDLReader(ins);
            var mol      = reader.Read(builder.NewAtomContainer());

            reader.Close();
            //Write it as cml
            var writer    = new StringWriter();
            var cmlWriter = new CMLWriter(writer);

            cmlWriter.Write(mol);
            cmlWriter.Close();
            //Read this again
            var cmlreader = new CMLReader(new MemoryStream(Encoding.UTF8.GetBytes(writer.ToString())));
            var file      = (IChemFile)cmlreader.Read(builder.NewChemFile());

            cmlreader.Close();
            //And finally write as mol
            var writermdl = new StringWriter();
            var mdlWriter = new MDLV2000Writer(writermdl);

            mdlWriter.Write(file);
            mdlWriter.Close();
            var output = writermdl.ToString().Replace("\r\n", "\n");

            //if there would be 3 instances (as in the bug), the only instance wouldnt't be right at the end
            Assert.AreEqual(2994, output.IndexOf("M  END"));
            //there would need some $$$$ to be in
            Assert.AreEqual(-1, output.IndexOf("$$$$"));
            //check atom/bond count
            Assert.AreEqual(25, output.IndexOf(" 31 33  0  0  0  0"));
        }
Beispiel #3
0
 public static string MolToMolBlock(IAtomContainer mol, bool forceV3000 = false)
 {
     using (var sr = new StringWriter())
     {
         IChemObjectWriter w;
         if (forceV3000 ||
             mol.Atoms.Count > 999 ||
             mol.Bonds.Count > 999)
         {
             w = new MDLV3000Writer(sr);
         }
         else
         {
             w = new MDLV2000Writer(sr);
         }
         try
         {
             w.Write(mol);
         }
         finally
         {
             w.Close();
         }
         return(sr.ToString());
     }
 }
Beispiel #4
0
        public void SkipDefaultProps()
        {
            var sw = new StringWriter();

            using (var mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.tetrahedral-parity-withImplH.mol")))
                using (var mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.IOSettings[MDLV2000Writer.OptWriteDefaultProperties].Setting = "false";
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    var output = sw.ToString();
                    Assert.IsTrue(output.Contains(
                                      "\n"
                                      + "  5  4  0  0  1  0  0  0  0  0999 V2000\n"
                                      + "    0.0000    0.0000    0.0000 C   0  0  1  0  0  0\n"
                                      + "    0.0000    0.0000    0.0000 C   0  0\n"
                                      + "    0.0000    0.0000    0.0000 C   0  0\n"
                                      + "    0.0000    0.0000    0.0000 O   0  0\n"
                                      + "    0.0000    0.0000    0.0000 C   0  0\n"
                                      + "  1  2  1  0\n"
                                      + "  2  3  1  0\n"
                                      + "  1  4  1  0\n"
                                      + "  1  5  1  0\n"
                                      + "M  END"));
                }
        }
Beispiel #5
0
        public void TestAromaticBondType4()
        {
            IAtomContainer benzene = TestMoleculeFactory.MakeBenzene();

            foreach (var atom in benzene.Atoms)
            {
                atom.IsAromatic = true;
            }
            foreach (var bond in benzene.Bonds)
            {
                bond.IsAromatic = true;
            }

            StringWriter   writer    = new StringWriter();
            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(benzene);
            mdlWriter.Close();
            Assert.IsTrue(writer.ToString().IndexOf("1  2  1  0  0  0  0") != -1);

            writer    = new StringWriter();
            mdlWriter = new MDLV2000Writer(writer);
            var prop = new NameValueCollection
            {
                ["WriteAromaticBondTypes"] = "true"
            };
            PropertiesListener listener = new PropertiesListener(prop);

            mdlWriter.Listeners.Add(listener);
            mdlWriter.CustomizeJob();
            mdlWriter.Write(benzene);
            mdlWriter.Close();
            Assert.IsTrue(writer.ToString().IndexOf("1  2  4  0  0  0  0") != -1);
        }
Beispiel #6
0
        public void TestAtomValueLine()
        {
            IAtom carbon = builder.NewAtom("C");

            carbon.SetProperty(CDKPropertyName.Comment, "Carbon comment");
            IAtom oxygen = builder.NewAtom("O");

            oxygen.SetProperty(CDKPropertyName.Comment, "Oxygen comment");
            IBond bond = builder.NewBond(carbon, oxygen, BondOrder.Double);

            var molecule = builder.NewAtomContainer();

            molecule.Atoms.Add(oxygen);
            molecule.Atoms.Add(carbon);
            molecule.Bonds.Add(bond);

            StringWriter   writer    = new StringWriter();
            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(molecule);
            mdlWriter.Close();

            Assert.IsTrue(writer.ToString().IndexOf("V    1 Oxygen comment") != -1);
            Assert.IsTrue(writer.ToString().IndexOf("V    2 Carbon comment") != -1);
        }
Beispiel #7
0
        public void TestRGPLine()
        {
            StringWriter   writer   = new StringWriter();
            IAtomContainer molecule = builder.NewAtomContainer();
            IPseudoAtom    atom1    = builder.NewPseudoAtom();

            atom1.Symbol = "R";
            atom1.Label  = "R12";

            IAtom atom2 = builder.NewAtom("C");
            IBond bond  = builder.NewBond(atom1, atom2);

            IPseudoAtom atom3 = builder.NewPseudoAtom();

            atom3.Symbol = "A";
            atom3.Label  = "A";
            IBond bond2 = builder.NewBond(atom3, atom2);

            molecule.Atoms.Add(atom1);
            molecule.Atoms.Add(atom2);
            molecule.Atoms.Add(atom3);
            molecule.Bonds.Add(bond);
            molecule.Bonds.Add(bond2);

            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(molecule);
            mdlWriter.Close();
            string output = writer.ToString();

            Assert.IsTrue(-1 != output.IndexOf("R#"), "Test for R#");
            Assert.IsTrue(-1 != output.IndexOf("M  RGP  1   1  12"), "Test for RGP line");
        }
Beispiel #8
0
        public void TestForce2DCoordinates()
        {
            StringWriter   writer   = new StringWriter();
            IAtomContainer molecule = builder.NewAtomContainer();
            IAtom          atom     = builder.NewAtom("C");

            atom.Point2D = new Vector2(1.0, 2.0);
            atom.Point3D = new Vector3(3.0, 4.0, 5.0);
            molecule.Atoms.Add(atom);

            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);
            var            prop      = new NameValueCollection
            {
                ["ForceWriteAs2DCoordinates"] = "true"
            };
            PropertiesListener listener = new PropertiesListener(prop);

            mdlWriter.Listeners.Add(listener);
            mdlWriter.CustomizeJob();
            mdlWriter.Write(molecule);
            mdlWriter.Close();
            string output = writer.ToString();

            // the current behavior is that if both 2D and 3D coordinates
            // are available, the 3D is outputed, and the 2D not
            Assert.IsTrue(output.Contains("1.0"));
            Assert.IsTrue(output.Contains("2.0"));
        }
Beispiel #9
0
        public void TestAccepts()
        {
            MDLV2000Writer reader = new MDLV2000Writer();

            Assert.IsTrue(reader.Accepts(typeof(IChemFile)));
            Assert.IsTrue(reader.Accepts(typeof(IChemModel)));
            Assert.IsTrue(reader.Accepts(typeof(IAtomContainer)));
        }
Beispiel #10
0
        public void TestUnsupportedBondOrder()
        {
            var molecule = builder.NewAtomContainer();

            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.Bonds.Add(builder.NewBond(molecule.Atoms[0], molecule.Atoms[1], BondOrder.Quadruple));
            MDLV2000Writer mdlWriter = new MDLV2000Writer(new StringWriter());

            mdlWriter.Write(molecule);
            mdlWriter.Close();
        }
Beispiel #11
0
        public void RoundtripAtomParityImplH()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.tetrahedral-parity-withImplH.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("    0.0000    0.0000    0.0000 C   0  0  1  0  0  0  0  0  0  0  0  0" + "\n"));
                }
        }
Beispiel #12
0
        public void SgroupBracketStylesRoundTrip()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.sgroup-sru-bracketstyles.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("M  STY  2   1 SRU   2 SRU"));
                    Assert.IsTrue(output.Contains("M  SBT  1   1   1"));
                }
        }
Beispiel #13
0
        public void SgroupUnorderedMixtureRoundTrip()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.sgroup-unord-mixture.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("M  STY  3   1 COM   2 COM   3 MIX"));
                    Assert.IsTrue(output.Contains("M  SPL  1   1   3"));
                }
        }
Beispiel #14
0
        public void SgroupCopolymerRoundTrip()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.sgroup-ran-copolymer.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("M  SST  1   1 RAN"));
                    Assert.IsTrue(output.Contains("M  STY  3   1 COP   2 SRU   3 SRU"));
                }
        }
Beispiel #15
0
        public void SgroupExpandedAbbreviationRoundTrip()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.triphenyl-phosphate-expanded.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("M  STY  3   1 SUP   2 SUP   3 SUP" + "\n"));
                    Assert.IsTrue(output.Contains("M  SDS EXP  1   1"));
                }
        }
Beispiel #16
0
        public void SgroupParentAtomListRoundTrip()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.ChEBI_81539.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("M  STY  5   1 MUL   2 SRU"));
                    Assert.IsTrue(output.Contains("M  SPA   1 12"));
                }
        }
Beispiel #17
0
        /// <summary>
        /// Convert mol to V2000 Molfile
        /// </summary>
        /// <param name="mol"></param>
        /// <returns></returns>

        public static string AtomContainerToMolfile(IAtomContainer mol)
        {
            java.io.StringWriter sw = new java.io.StringWriter();

            MDLV2000Writer writer = new MDLV2000Writer(sw);

            writer.write(mol);
            writer.close();
            sw.close();

            string molFile = sw.toString();

            return(molFile);
        }
Beispiel #18
0
        /// <summary>
        /// Convert mol to V2000 Molfile
        /// </summary>
        /// <param name="mol"></param>
        /// <returns></returns>

        public static string AtomContainerToMolfile(IAtomContainer mol)
        {
            StringWriter sw = new StringWriter();

            MDLV2000Writer writer = new MDLV2000Writer(sw);

            writer.Write(mol);
            writer.Close();
            sw.Close();

            string molFile = sw.ToString();

            return(molFile);
        }
Beispiel #19
0
        public void SgroupRepeatUnitRoundTrip()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.sgroup-sru.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    mdlw.Write(mdlr.Read(builder.NewAtomContainer()));
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("M  STY  1   1 SRU"));
                    Assert.IsTrue(output.Contains("M  SMT   1 n"));
                    Assert.IsTrue(output.Contains("M  SCN  1   1 HT"));
                }
        }
Beispiel #20
0
        public void AromaticBondTypes()
        {
            var mol = builder.NewAtomContainer();

            mol.Atoms.Add(builder.NewAtom("C"));
            mol.Atoms.Add(builder.NewAtom("C"));
            var bond = builder.NewBond(mol.Atoms[0], mol.Atoms[1], BondOrder.Unset);

            bond.IsAromatic = true;
            mol.Bonds.Add(bond);
            using (MDLV2000Writer mdlw = new MDLV2000Writer(new StringWriter()))
            {
                mdlw.Write(mol);
            }
        }
Beispiel #21
0
        public void RoundtripAtomParityImplModified()
        {
            StringWriter sw = new StringWriter();

            using (MDLV2000Reader mdlr = new MDLV2000Reader(ResourceLoader.GetAsStream("NCDK.Data.MDL.tetrahedral-parity-withImplH.mol")))
                using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
                {
                    var mol = mdlr.Read(builder.NewAtomContainer());
                    var tc  = (ITetrahedralChirality)mol.StereoElements.First();
                    tc.Stereo = tc.Stereo.Invert();
                    mdlw.Write(mol);
                    string output = sw.ToString();
                    Assert.IsTrue(output.Contains("    0.0000    0.0000    0.0000 C   0  0  2  0  0  0  0  0  0  0  0  0" + "\n"));
                }
        }
Beispiel #22
0
        public void TestBug890456()
        {
            StringWriter writer   = new StringWriter();
            var          molecule = builder.NewAtomContainer();

            molecule.Atoms.Add(builder.NewPseudoAtom("*"));
            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.Atoms.Add(builder.NewAtom("C"));

            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(molecule);
            mdlWriter.Close();
            Assert.IsTrue(writer.ToString().IndexOf("M  END") != -1);
        }
Beispiel #23
0
        public void WriteCarbon13AtomProps()
        {
            var mol  = builder.NewAtomContainer();
            var atom = builder.NewAtom();

            atom.Symbol     = "C";
            atom.MassNumber = 13;
            mol.Atoms.Add(atom);
            var sw = new StringWriter();

            using (var mdlw = new MDLV2000Writer(sw))
            {
                mdlw.Write(mol);
            }
            Assert.IsTrue(sw.ToString().Contains("C   1"));
        }
Beispiel #24
0
        public void WriteChargeAtomProps()
        {
            var mol  = builder.NewAtomContainer();
            var atom = builder.NewAtom();

            atom.Symbol       = "C";
            atom.FormalCharge = +1;
            mol.Atoms.Add(atom);
            var sw = new StringWriter();

            using (var mdlw = new MDLV2000Writer(sw))
            {
                mdlw.Write(mol);
            }
            Assert.IsTrue(sw.ToString().Contains("C   0  3"));
        }
Beispiel #25
0
        public void TestWriteStringAtomAtomMapping()
        {
            StringWriter   writer   = new StringWriter();
            IAtomContainer molecule = TestMoleculeFactory.MakeAlphaPinene();

            molecule.Atoms[0].SetProperty(CDKPropertyName.AtomAtomMapping, "1");
            molecule.Atoms[1].SetProperty(CDKPropertyName.AtomAtomMapping, "15");
            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(molecule);
            mdlWriter.Close();
            string output = writer.ToString();

            Assert.IsTrue(output.Contains("0  0  0  0  0  0  0  0  0  1  0  0"));
            Assert.IsTrue(output.Contains("0  0  0  0  0  0  0  0  0 15  0  0"));
        }
Beispiel #26
0
        public void TestUndefinedStereo()
        {
            IAtomContainer mol = TestMoleculeFactory.MakeAlphaPinene();

            mol.Bonds[0].Stereo = BondStereo.UpOrDown;
            mol.Bonds[1].Stereo = BondStereo.EOrZ;
            StringWriter   writer    = new StringWriter();
            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(mol);
            mdlWriter.Close();
            string output = writer.ToString();

            Assert.IsTrue(output.IndexOf("1  2  2  4  0  0  0") > -1);
            Assert.IsTrue(output.IndexOf("2  3  1  3  0  0  0") > -1);
        }
Beispiel #27
0
        public void WriteDimensionField3D()
        {
            IAtomContainer mol  = builder.NewAtomContainer();
            IAtom          atom = builder.NewAtom();

            atom.Symbol = "C";
            atom.ImplicitHydrogenCount = 4;
            atom.Point3D = new Vector3(0.5, 0.5, 0.1);
            mol.Atoms.Add(atom);
            StringWriter sw = new StringWriter();

            using (MDLV2000Writer mdlw = new MDLV2000Writer(sw))
            {
                mdlw.Write(mol);
            }
            Assert.IsTrue(sw.ToString().Contains("3D"));
        }
Beispiel #28
0
        public void IgnoreCarbon12()
        {
            var mol  = builder.NewAtomContainer();
            var atom = builder.NewAtom();

            atom.Symbol     = "C";
            atom.MassNumber = 12;
            mol.Atoms.Add(atom);
            var sw = new StringWriter();

            using (var mdlw = new MDLV2000Writer(sw))
            {
                mdlw.IOSettings[MDLV2000Writer.OptWriteMajorIsotopes].Setting = "false";
                mdlw.Write(mol);
            }
            Assert.IsFalse(sw.ToString().Contains("M  ISO  1   1  12"));
        }
Beispiel #29
0
        public void NonDefaultValenceFe3()
        {
            var container = builder.NewAtomContainer();
            var fe1       = builder.NewAtom("Fe");

            fe1.ImplicitHydrogenCount = 3;
            container.Atoms.Add(fe1);
            string output;

            using (var writer = new StringWriter())
                using (var mdlWriter = new MDLV2000Writer(writer))
                {
                    mdlWriter.Write(container);
                    output = writer.ToString();
                }
            Assert.IsTrue(output.Contains("Fe  0  0  0  0  0  3  0  0  0  0  0  0"));
        }
Beispiel #30
0
        public void TestBug1212219()
        {
            StringWriter writer   = new StringWriter();
            var          molecule = builder.NewAtomContainer();
            var          atom     = builder.NewAtom("C");

            atom.MassNumber = 14;
            molecule.Atoms.Add(atom);

            MDLV2000Writer mdlWriter = new MDLV2000Writer(writer);

            mdlWriter.Write(molecule);
            mdlWriter.Close();
            string output = writer.ToString();

            //Debug.WriteLine($"MDL output for testBug1212219: {output}");
            Assert.IsTrue(output.IndexOf("M  ISO  1   1  14") != -1);
        }