static void Main(string[] args) { StructureData m = new StructureData(); m.ReadData("Benzene"); m.List(); Console.ReadLine(); }
static void Main(string[] args) { CambridgeSoft.ChemScript14.Environment.SetVerbosity(true); CambridgeSoft.ChemScript14.Environment.SetThrowExceptions(true); Console.WriteLine(CambridgeSoft.ChemScript14.Environment.Version()); Console.WriteLine("This .NET session will demonstrate many of the features in ChemScript.\n\n"); string oldDir = SetCurrentDirectory(); if (!IsInputFilesReady()) { Console.WriteLine("Press <Enter> to quit ..."); Console.ReadLine(); return; } try { Console.WriteLine(" 0. Loading the ChemScript module"); Console.WriteLine(" 1. Creating a StructureData object"); Console.WriteLine(" 2. Writing a StructureData object to a string or a file"); Console.WriteLine(" 3. Working with Atom and Bond objects"); Console.WriteLine(" 4. Converting names to structures and structures to names"); Console.WriteLine(" 5. Converting 2D structures to 3D"); Console.WriteLine(" 6. Minimizing MM2 and energy calculations for 3D structures"); Console.WriteLine(" 7. Salt stripping"); Console.WriteLine(" 8. Searching structures atom by atom"); Console.WriteLine(" 9. Finding the largest common substructure"); Console.WriteLine("10. Overlaying structures"); Console.WriteLine("11. Computing molecular topological properties"); Console.WriteLine("12. Working with ReactionData objects"); Console.WriteLine("13. Reading and writing SD files"); Console.WriteLine("\n"); Console.WriteLine("Press <Enter> to continue ..."); Console.ReadLine(); Console.WriteLine("\n\n\n 0. Loading the ChemScript module\n--------------------------------------"); Console.WriteLine("\nBefore starting, you must load the ChemScript module by typing the following:\n(Note: This is case-sensitive)"); Console.WriteLine("\nusing CambridgeSoft.ChemScript14;"); Console.WriteLine("\n\nIt will now load ChemScript14"); Console.WriteLine("\n\n\n 1. Creating a StructureData object\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nCreating a StructureData object from a SMILES string."); Console.ReadLine(); Console.WriteLine("StructureData m = StructureData.LoadData(\"C=CCO\");"); StructureData m = StructureData.LoadData("C=CCO"); Console.WriteLine("\nLet's take a look at what's in this StructureData object:"); Console.ReadLine(); Console.WriteLine("m.List();"); m.List(); Console.WriteLine("\nCreating a StructureData object from a file."); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadFile(\"demo.cdx\");"); m = StructureData.LoadFile("demo.cdx"); Console.WriteLine("\nYou can create a StructureData object first, and then load data into it."); Console.ReadLine(); Console.WriteLine("m = new StructureData();"); m = new StructureData(); Console.WriteLine("m.ReadFile(\"demo.cdx\");"); m.ReadFile("demo.cdx"); Console.WriteLine("\nWhen loading data or files, you can specify a mimetype. This will speed the loading because ChemScript will not need to determine the data type from the file contents."); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"C=CCO\", \"smiles\");"); m = StructureData.LoadData("C=CCO", "smiles"); Console.WriteLine("\nIt is also possible to use the full mimetype name:"); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"C=CCO\", \"chemical/smiles\");"); m = StructureData.LoadData("C=CCO", "chemical/smiles"); try { Console.WriteLine("\nBut if the given mimetype does not match, the loading will fail."); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"C=CCO\", \"cdx\");"); m = StructureData.LoadData("C=CCO", "cdx"); Console.WriteLine("Console.WriteLine(m)"); Console.WriteLine(m); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("\nYou have to use \"smiles\" instead of \"cdx\"."); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"C=CCO\", \"smiles\");"); m = StructureData.LoadData("C=CCO", "smiles"); Console.WriteLine("\nHere are all of the mimetypes you can use."); Console.ReadLine(); Console.WriteLine("foreach (String types in StructureData.MimeTypes())"); Console.WriteLine(" Console.WriteLine(types);"); foreach (String types in StructureData.MimeTypes()) { Console.WriteLine(types); } Console.WriteLine("\n\n\n 2. Writing a StructureData object to a string or a file\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nWrite the StructureData object into a base64 encoded CDX string."); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.WriteData(\"cdx\", true));"); Console.WriteLine(m.WriteData("cdx", true)); Console.WriteLine("\nGet a SMILES string representation of the StructureData object."); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.WriteData(\"smiles\"));"); Console.WriteLine(m.WriteData("smiles")); Console.WriteLine("\nGet an InChI string representation of the StructureData object."); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.WriteData(\"inchi\"));"); Console.WriteLine(m.WriteData("inchi")); Console.WriteLine("\nWrite a file."); Console.ReadLine(); Console.WriteLine("m.WriteFile(\"output.cdx\", \"cdx\");"); m.WriteFile("output.cdx", "cdx"); Console.WriteLine("\nIf no mimetype is specified, the file extension is used to determine the file format."); Console.ReadLine(); Console.WriteLine("m.WriteFile(\"output.cdx\");"); m.WriteFile("output.cdx"); Console.WriteLine("\n\n\n 3. Working with Atom and Bond objects\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nIterate over all atoms"); Console.ReadLine(); Console.WriteLine("foreach (Atom a in m.Atoms);"); Console.WriteLine(" Console.WriteLine(a.Name + \", \" + a.GetCartesian().ToString());"); foreach (Atom a in m.Atoms) { Console.WriteLine(a.Name + ", " + a.GetCartesian().ToString()); } Console.WriteLine("\nIterate over all bonds"); Console.ReadLine(); Console.WriteLine("foreach (Bond b in m.Bonds);"); Console.WriteLine(" Console.WriteLine(b.Atom1.Name + \", \" + b.Atom2.Name + \", \" + b.Order.Name)"); foreach (Bond b in m.Bonds) { Console.WriteLine(b.Atom1.Name + "," + b.Atom2.Name + "," + b.Order.Name); } Console.WriteLine("\nAdd an atom"); Console.ReadLine(); Console.WriteLine("Atom a1 = m.CreateAtom(\"O\");"); Atom a1 = m.CreateAtom("O"); Console.WriteLine("\nAdd a bond"); Console.ReadLine(); Console.WriteLine("Bond b1 = m.CreateBond(a1, m.Atoms[0], null);"); Bond b1 = m.CreateBond(a1, m.Atoms[0], null); Console.WriteLine("\nRemove an atom"); Console.ReadLine(); Console.WriteLine("m.RemoveAtom(m.Atoms[0]);"); m.RemoveAtom(m.Atoms[0]); Console.WriteLine("\nRemove a bond"); Console.ReadLine(); Console.WriteLine("m.RemoveBond(m.Bonds[0]);"); m.RemoveBond(m.Bonds[0]); Console.WriteLine("\nRemove a bond and its bonded atoms"); Console.ReadLine(); Console.WriteLine("m.RemoveBond(m.bonds[0], true);"); m.RemoveBond(m.Bonds[0], true); Console.WriteLine("\n\n\n 4. Converting names to structures and structures to names\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nConvert a chemical name into a structure."); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"benzene\", \"name\");"); m = StructureData.LoadData("benzene", "name"); Console.WriteLine("\nGet the chemical name of a structure."); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.WriteData(\"name\"));"); Console.WriteLine(m.WriteData("name")); Console.WriteLine("\nAnother way to get the chemical name."); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.ChemicalName());"); Console.WriteLine(m.ChemicalName()); Console.WriteLine("\n\n\n 5. Converting 2D structures to 3D\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nFirst we will create a 2D structure."); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"C=CCO\");"); m = StructureData.LoadData("C=CCO"); Console.WriteLine("m.List(true, true, true)"); m.List(true, true, true); Console.WriteLine("\nConvert 2D to 3D."); Console.ReadLine(); Console.WriteLine("m.ConvertTo3DStructure();"); m.ConvertTo3DStructure(); Console.WriteLine("m.List(true, true, true);"); m.List(true, true, true); Console.WriteLine("\nRemove Z coordinates."); Console.ReadLine(); Console.WriteLine("m.ClearZCoordinates();"); m.ClearZCoordinates(); Console.WriteLine("\nConvert a structure to a 2D structure and clean it up"); Console.ReadLine(); Console.WriteLine("m.CleanupStructure();"); m.CleanupStructure(); Console.WriteLine("\n\n\n 6. Minimizing MM2 and energy calculations for 3D structures\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nMM2 minimization"); Console.ReadLine(); Console.WriteLine("m.Mm2OptimizeGeometry();"); m.Mm2OptimizeGeometry(); Console.WriteLine("\nCompute MM2 energy"); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.Mm2Energy());"); Console.WriteLine(m.Mm2Energy()); Console.WriteLine("\n\n\n 7. Salt stripping\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nLet's load a StructureData object with a salt"); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadData(\"CCCCCN.[Na+].[Na+].c1ccccc1.[O]\");"); m = StructureData.LoadData("CCCCCN.[Na+].[Na+].c1ccccc1.[O]"); Console.WriteLine("\nSplit salt"); Console.ReadLine(); Console.WriteLine("SaltTable st = new SaltTable();"); SaltTable st = new SaltTable(); Console.ReadLine(); Console.WriteLine("st.RegisterWithSmiles(\"[Na+]\", false);"); st.RegisterWithSmiles("[Na+]", false); Console.ReadLine(); Console.WriteLine("st.RegisterWithSmiles(\"c1ccccc1\", true);"); st.RegisterWithSmiles("c1ccccc1", true); Console.ReadLine(); Console.WriteLine("st.RegisterWithSmiles(\"[O]\", true);"); st.RegisterWithSmiles("[O]", true); Console.ReadLine(); Console.WriteLine("VectorOfStructVector list = st.SplitSaltsAndSolvents(m);"); VectorOfStructVector list = st.SplitSaltsAndSolvents(m); Console.ReadLine(); Console.WriteLine("StructureDataList mainStructureData = list[0];"); StructureDataList mainStructureData = list[0]; Console.ReadLine(); Console.WriteLine("StructureDataList saltPart = list[1];"); StructureDataList saltPart = list[1]; Console.ReadLine(); Console.WriteLine("Console.WriteLine(\"main StructureData:\" + mainStructureData[0].Smiles + \", salt:\" + saltPart[0].Smiles)"); Console.WriteLine("main StructureData:" + mainStructureData[0].Smiles + ", salt:" + saltPart[0].Smiles); Console.WriteLine("\n\n\n 8. Searching structures atom by atom\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nLet's load two molecules"); Console.ReadLine(); Console.WriteLine("StructureData target = StructureData.LoadData(\"C1CCCCC1C\");"); StructureData target = StructureData.LoadData("C1CCCCC1C"); Console.WriteLine("StructureData query = StructureData.LoadData(\"C1CCCCC1\");"); StructureData query = StructureData.LoadData("C1CCCCC1"); Console.WriteLine("\nNow start the atom-by-atom searching. This results in a map from the target to query"); Console.ReadLine(); Console.WriteLine("AtomsMapVector maps = query.AtomByAtomSearch(target);"); AtomsMapVector maps = query.AtomByAtomSearch(target); Console.WriteLine("foreach(AtomAtomMap dict in maps){"); Console.WriteLine(" Console.WriteLine(\"one dict:\");"); Console.WriteLine(" foreach(Atom aa in dict.Keys){"); Console.WriteLine(" String r = aa.Name + \" -> \" + dict[aa].Name;"); Console.WriteLine(" Console.WriteLine(r);"); Console.WriteLine(" }"); Console.WriteLine("}"); foreach (AtomAtomMap dict in maps) { Console.WriteLine("one dict:"); foreach (Atom aa in dict.Keys) { String r0 = aa.Name + " -> " + dict[aa].Name; Console.WriteLine(r0); } } Console.WriteLine("\nIf you don't care about these atom maps and just want the substructure search result, you can use \"ContainsSubstructure\"."); Console.ReadLine(); Console.WriteLine("Console.WriteLine(target.ContainsSubstructure(query));"); Console.WriteLine(target.ContainsSubstructure(query)); Console.WriteLine("\n\n\n 9. Finding the largest common substructure\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nLet's load two molecules"); Console.ReadLine(); Console.WriteLine("StructureData structure1 = StructureData.LoadData(\"C1(C)CCCC1CCO\");"); StructureData structure1 = StructureData.LoadData("C1(C)CCCC1CCO"); Console.WriteLine("StructureData structure2 = StructureData.LoadData(\"C1CCCC1C\");"); StructureData structure2 = StructureData.LoadData("C1CCCC1C"); Console.WriteLine("Use class LargestCommonSubstructure to compute the most common structure\n"); Console.ReadLine(); Console.WriteLine("LargestCommonSubstructure common = LargestCommonSubstructure.Compute(structure1, structure2)"); LargestCommonSubstructure common = LargestCommonSubstructure.Compute(structure1, structure2); Console.WriteLine("AtomAtomMap atommap1 = common.AtomMapM1()"); Console.WriteLine("AtomAtomMap bondmap1 = common.BondMapM1()"); Console.WriteLine("AtomAtomMap atommap2 = common.AtomMapM2()"); Console.WriteLine("AtomAtomMap bondmap2 = common.BondMapM2()"); AtomAtomMap atommap1 = common.AtomMapM1(); BondBondMap bondmap1 = common.BondMapM1(); AtomAtomMap atommap2 = common.AtomMapM2(); BondBondMap bondmap2 = common.BondMapM2(); Console.WriteLine("foreach(Atom a in atommap1.Keys){"); Console.WriteLine(" r0 = a.Name + \"->\" + atommap1[a].Name + \"->\" + atommap2[a].Name;"); Console.WriteLine(" Console.WriteLine(r0);"); Console.WriteLine("}"); foreach (Atom a in atommap1.Keys) { String r0 = a.Name + "->" + atommap1[a].Name + "->" + atommap2[a].Name; Console.WriteLine(r0); } Console.WriteLine("\n\n\n 10. Overlaying structures\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\n(1). 2D alignment"); Console.ReadLine(); Console.WriteLine("\nFirst let's load two cdx (2D)"); Console.ReadLine(); Console.WriteLine("m = StructureData.LoadFile(\"m.cdx\");"); m = StructureData.LoadFile("m.cdx"); Console.WriteLine("target = StructureData.LoadFile(\"target.cdx\");"); target = StructureData.LoadFile("target.cdx"); Console.WriteLine("\nMake 2D alignment"); Console.ReadLine(); Console.WriteLine("Console.WriteLine(m.Overlay(target));"); Console.WriteLine(m.Overlay(target)); Console.WriteLine("\nWrite the output into a file"); Console.ReadLine(); Console.WriteLine("m.WriteFile(\"m_output.cdx\");"); m.WriteFile("m_output.cdx"); Console.WriteLine("\n(2). 3D Overlay"); Console.WriteLine("\nIf the input consists of 3D structures, the overlay will operate on the 3D coordinates"); Console.ReadLine(); Console.WriteLine("\n\n\n 11. Computing molecular topological properties\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nFirst create a Topology object"); Console.ReadLine(); Console.WriteLine("Topology top = m.Topology();"); Topology top = m.Topology(); Console.WriteLine("\nThen you are able to get many topology properties"); Console.ReadLine(); Console.WriteLine("Console.WriteLine(top.WienerIndex);"); Console.WriteLine(top.WienerIndex); Console.WriteLine("Console.WriteLine(top.BalabanIndex);"); Console.WriteLine(top.BalabanIndex); Console.WriteLine("Console.WriteLine(top.ShapeCoefficient);"); Console.WriteLine(top.ShapeCoefficient); Console.WriteLine("\n\n and more ..."); Console.WriteLine("\n\n\n 12. Working with ReactionData objects\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nCreate a reaction from a SMILES string"); Console.ReadLine(); Console.WriteLine("ReactionData r = ReactionData.LoadData(\"C1CCC=CC1>>CCCCCC\", \"smiles\");"); ReactionData r = ReactionData.LoadData("C1CCC=CC1>>CCCCCC", "smiles"); Console.WriteLine("\nLoad a reaction from a file"); Console.ReadLine(); Console.WriteLine("r = ReactionData.LoadFile(\"reaction.cdx\");"); r = ReactionData.LoadFile("reaction.cdx"); Console.WriteLine("Console.WriteLine(r.Formula());"); Console.WriteLine(r.Formula()); Console.WriteLine("\nGet reactants as a StructureData list"); Console.ReadLine(); Console.WriteLine("foreach (StructureData rtn in r.Reactants)"); Console.WriteLine(" Console.WriteLine(rtn.ToString())"); foreach (StructureData rtn in r.Reactants) { Console.WriteLine(rtn.ToString()); } Console.WriteLine("\nGet products as a StructureData list"); Console.ReadLine(); Console.WriteLine("foreach(StructureData prod in r.Products)"); Console.WriteLine(" Console.WriteLine(prod.ToString())"); foreach (StructureData prod in r.Products) { Console.WriteLine(prod.ToString()); } Console.WriteLine("\n\n\n 13. Reading and writing SD files\n--------------------------------------"); Console.ReadLine(); Console.WriteLine("\nRead StructureData from an SD file"); Console.ReadLine(); Console.WriteLine("SDFileReader sd = SDFileReader.OpenFile(\"input.sdf\");"); SDFileReader sd = SDFileReader.OpenFile("input.sdf"); Console.WriteLine("m = sd.ReadNext()"); Console.WriteLine("while (m != null){"); Console.WriteLine(" Console.WriteLine(m.Formula());"); Console.WriteLine(" Dictionary_String_String items = m.GetDataItems();"); Console.WriteLine(" foreach(String item in items.Keys){"); Console.WriteLine(" r0 = item + \"->\" + items[item];"); Console.WriteLine(" Console.WriteLine(r0)"); Console.WriteLine(" }"); Console.WriteLine(" m = sd.ReadNext();"); Console.WriteLine("}"); m = sd.ReadNext(); while (m != null) { Console.WriteLine(m.Formula()); Dictionary_String_String items = m.GetDataItems(); foreach (String item in items.Keys) { String r0 = item + "->" + items[item]; Console.WriteLine(r0); } m = sd.ReadNext(); } Console.WriteLine("\nWrite StructureData into an SD file"); Console.ReadLine(); Console.WriteLine("SDFileWriter sw = SDFileWriter.OpenFile(\"out.sdf\", FileOpenMode.OverWrite);"); Console.WriteLine("StructureData m = StructureData.LoadData(\"CCC\");"); Console.WriteLine("m.SetDataItem(\"atomcount\", \"3\");"); Console.WriteLine("sd.WriteStructure(m)"); Console.WriteLine("m = StructureData.LoadData(\"C1CCCCC1\");"); Console.WriteLine("m.SetDataItem(\"atomcount\", \"6\");"); Console.WriteLine("sd.WriteStructure(m)"); SDFileWriter sw = SDFileWriter.OpenFile("out.sdf", FileOpenMode.OverWrite); m = StructureData.LoadData("CCC"); m.SetDataItem("atomcount", "3"); sw.WriteStructure(m); m = StructureData.LoadData("C1CCCCC1"); m.SetDataItem("atomcount", "6"); sw.WriteStructure(m); Console.WriteLine("\nWelcome to ChemScript!"); } catch (System.Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Press <Enter> to quit ..."); Console.ReadLine(); RestoreCurrentDirectory(oldDir); }