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"); }
/// <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")); }
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")); }
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")); } }
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); }
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); }
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(); }
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")); } }
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")); } }
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")); } }
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")); } }
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")); } }
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")); } }
/// <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); }
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")); } }
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); } }
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")); } }
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); }
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")); }
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")); }
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")); }
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); }
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")); }
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")); }
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")); }
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); }
public void TestAtomParity() { var ins = ResourceLoader.GetAsStream("NCDK.Data.MDL.mol_testAtomParity.mol"); var reader = new MDLV2000Reader(ins); IAtomContainer molecule = builder.NewAtomContainer(); molecule = reader.Read(molecule); reader.Close(); StringWriter sw = new StringWriter(); MDLV2000Writer writer = new MDLV2000Writer(sw); writer.Write(molecule); writer.Close(); Assert.IsTrue(sw.ToString().Contains( " -1.1749 0.1436 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0")); }
public void AromaticBondTypesEnabled() { IAtomContainer mol = builder.NewAtomContainer(); mol.Atoms.Add(builder.NewAtom("C")); mol.Atoms.Add(builder.NewAtom("C")); IBond bond = builder.NewBond(mol.Atoms[0], mol.Atoms[1], BondOrder.Unset); bond.IsAromatic = true; mol.Bonds.Add(bond); StringWriter sw = new StringWriter(); using (MDLV2000Writer mdlw = new MDLV2000Writer(sw)) { mdlw.SetWriteAromaticBondTypes(true); mdlw.Write(mol); } Assert.IsTrue(sw.ToString().Contains(" 1 2 4 0 0 0 0 \n")); }
public void TestWriteInvalidAtomAtomMapping() { StringWriter writer = new StringWriter(); IAtomContainer molecule = TestMoleculeFactory.MakeAlphaPinene(); molecule.Atoms[0].SetProperty(CDKPropertyName.AtomAtomMapping, "1a"); molecule.Atoms[1].SetProperty(CDKPropertyName.AtomAtomMapping, "15"); MDLV2000Writer mdlWriter = new MDLV2000Writer(writer); mdlWriter.Write(molecule); mdlWriter.Close(); string output = writer.ToString(); Regex p = new Regex(".*V2000.* 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 " + "0 0.* 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 15 0 0.*", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); var m = p.Match(output); Assert.IsTrue(m.Success); }