public Molecule(int _id, string _smiles, string _name) { ID = _id; SMILES = _smiles; OBConversion obconv = new OBConversion(); obconv.SetInFormat("smi"); Structure = new OBMolecule(); name = _name; obconv.ReadString(Structure, SMILES); Structure.SetTitle(name); using (FileStream FS = new FileStream("temp.bin", FileMode.Create)) { byte[] BinMol = Encoding.UTF8.GetBytes(Structure.ToMol()); FS.Write(BinMol, 0, BinMol.Length); FS.Close(); } obconv.SetOutFormat("_png2"); string TempPic = Functions.TempFile(); obconv.WriteFile(Structure, TempPic); // Пишем картинку в temp // Это такое колдунство // Мне стыдно, но по-другому не выходит obconv.CloseOutFile(); Picture = Image.FromFile(TempPic); Weight = Structure.GetMolWt(); Brutto = Structure.GetFormula(); }
/// <summary> /// 读取SDF文件中的内容,并赋值给List<SDFSection>对象。该功能通过Openbabel开源项目实现 /// </summary> /// <param name="fileName">SDF文件名</param> /// <returns></returns> public static List <SDFSection> ReadSDF(string fileName) { List <SDFSection> result = new List <SDFSection>(); OBConversion conv = new OBConversion(); OBMol mol = new OBMol(); conv.SetInFormat("sdf"); conv.ReadFile(mol, fileName); do //遍历SDF文件并赋值 { SDFSection section = new SDFSection(); conv.SetOutFormat("mol"); section.MolFile = conv.WriteString(mol); var data = mol.GetAllData(1); foreach (var d in data) { if (d.GetOrigin().ToString() == "fileformatInput") { section.Properties.Add(new SDFProperty { Name = d.GetAttribute(), Value = d.GetValue(), }); } } result.Add(section); } while (conv.Read(mol)); return(result); }
/// <summary> /// 从2D生成3D坐标,支持SMILES和Mol文件格式 /// </summary> /// <param name="molString">Mol文件或者SMILES</param> /// <returns>含有3D坐标的Mol文件</returns> public static string Generate3D(string molString) { OBConversion conversion = new OBConversion(); OBMol mol = new OBMol(); if (molString.TrimEnd().EndsWith("M END")) { conversion.SetInFormat("mol"); } else if (!molString.Trim().Contains(" ")) { conversion.SetInFormat("smi"); } else { throw new Exception("Wrong chemical file format !!"); } conversion.SetOutFormat("mol"); conversion.ReadString(mol, molString); OBBuilder builder = new OBBuilder(); builder.Build(mol); return(conversion.WriteString(mol)); }
/// <summary> /// Сериализация в MOL формат /// </summary> /// <returns></returns> public string ToMol() { OBConversion conv = new OBConversion(); conv.SetOutFormat("mol2"); return(conv.WriteString(this)); }
public static void moltoCML(OBMol mol, string file) { OBConversion obconv = new OBConversion(); obconv.SetOutFormat("cml"); obconv.WriteFile(mol, file); }
public void DistanceMatrixTest() { var converter = new OBConversion(); converter.SetInFormat("smi"); var mol = new OBMol(); converter.ReadString(mol, "CC=C"); var dMat = new FloydWarshall(mol, false, false).DistanceMatrix; Assert.AreEqual(0d, dMat.Get(0, 0)); Assert.AreEqual(1d, dMat.Get(0, 1)); Assert.AreEqual(2d, dMat.Get(0, 2)); Assert.AreEqual(1d, dMat.Get(1, 0)); Assert.AreEqual(0d, dMat.Get(1, 1)); Assert.AreEqual(1d, dMat.Get(1, 2)); Assert.AreEqual(2d, dMat.Get(2, 0)); Assert.AreEqual(1d, dMat.Get(2, 1)); Assert.AreEqual(0d, dMat.Get(2, 2)); dMat = new FloydWarshall(mol, true, false).DistanceMatrix; Assert.AreEqual(0d, dMat.Get(0, 0)); Assert.AreEqual(1d, dMat.Get(0, 1)); Assert.AreEqual(1.5, dMat.Get(0, 2)); Assert.AreEqual(1d, dMat.Get(1, 0)); Assert.AreEqual(0d, dMat.Get(1, 1)); Assert.AreEqual(0.5, dMat.Get(1, 2)); Assert.AreEqual(1.5, dMat.Get(2, 0)); Assert.AreEqual(0.5, dMat.Get(2, 1)); Assert.AreEqual(0d, dMat.Get(2, 2)); }
public static List <double> calculateSurfaceAreas(ref List <string[]> allFrames, string dir, int startFrame, int numFrames, string nameMask, string arguments, string zeoexecdir, List <int> esequence, ref OBConversion obconv) { //start frame is frame to start at and numframes is how many frames we read in after that //takes in selected frames and finds their surface areas string tag = "ASA_m^2/g"; if (startFrame < 0) // if start frame is out of range, then there is no data, which is bad { return(null); } List <double> beginSurfaceAreas = new List <double>(); for (int i = startFrame; i < numFrames + startFrame; i++) { string frame = allFrames[0][i]; string begCIF = Path.Combine(dir, nameMask + i + ".cif"); string begZeo = Path.Combine(dir, nameMask + "Zeo" + i + ".out"); trajectoryFrameToCIF(frame, begCIF, esequence, obconv); zeo(begCIF, arguments, zeoexecdir, dir, begZeo); Dictionary <string, string> zeoOutput = readZeoOutput(begZeo); double begSurf = Convert.ToDouble(zeoOutput[tag]); beginSurfaceAreas.Add(begSurf); } return(beginSurfaceAreas); }
private void OpenStructure(string StName) { // Создаём OpenBabel объекты OBConversion obconv = new OBConversion(); OBMol mol = Functions.ReadMoleculeFromFile(StName); obconv.SetOutFormat("_png2"); obconv.AddOption("w", OBConversion.Option_type.OUTOPTIONS, panel1.Width.ToString()); obconv.AddOption("h", OBConversion.Option_type.OUTOPTIONS, panel1.Height.ToString()); string TempPic = Functions.TempFile(); obconv.WriteFile(mol, TempPic); // Пишем картинку в temp // Это такое колдунство // Мне стыдно, но по-другому не выходит obconv.CloseOutFile(); Bitmap bmp = new Bitmap(panel1.Width, panel1.Height); // Рисуем на панели panel1.BackgroundImage = bmp; Image IM = Image.FromFile(TempPic); Graphics g = Graphics.FromImage(panel1.BackgroundImage); g.DrawImage(IM, 0, 0); IM.Dispose(); g.Dispose(); panel1.Invalidate(); // Высчитываем параметры label3.Text = "Молярная масса: " + Math.Round(mol.GetExactMass(), 4); label4.Text = "Брутто-формула: " + mol.GetFormula(); }
/// <summary> /// 从SMILES格式生成Openbabel的OBMol对象 /// </summary> /// <param name="smiles">SMILES格式的字符串</param> /// <returns>OBMol对象</returns> public static OBMol LoadMolFromSmiles(string smiles) { OBConversion conversion = new OBConversion(); OBMol mol = new OBMol(); conversion.SetInFormat("smi"); conversion.ReadString(mol, smiles); return(mol); }
/// <summary> /// 从MolFile格式生成Openbabel的OBMol对象 /// </summary> /// <param name="molfile">Mol文件格式的字符串</param> /// <returns>OBMol对象</returns> public static OBMol LoadMolFromMolfile(string molfile) { OBConversion conversion = new OBConversion(); OBMol mol = new OBMol(); conversion.SetInFormat("mol"); conversion.ReadString(mol, molfile); return(mol); }
static void Main(string[] args) { OBConversion obconv = new OBConversion(); obconv.SetInFormat("smi"); OBMol mol = new OBMol(); obconv.ReadString(mol, "CCC"); System.Console.WriteLine(mol.GetMolWt()); //System.Console.ReadKey(); }
/// <summary> /// Проверка соответствия молекулы паттерну. /// </summary> /// <param name="Mol"></param> /// <param name="DB_Mol"></param> /// <returns></returns> private bool CheckMol(string Mol, string DB_Mol) { DataBase.Log($"Получены молекула {DB_Mol} и паттерн {Mol}"); DataBase.Log($"Формирование объектов для сравнения"); // Создаём объекты OpenBabel OBSmartsPattern SP = null; OBConversion obconv = null; OBMol mol = null; try { SP = new OBSmartsPattern(); obconv = new OBConversion(); obconv.SetInFormat("smi"); mol = new OBMol(); obconv.ReadString(mol, Mol); obconv.SetOutFormat("smi"); DataBase.Log($"Объекты сформированы"); } catch (Exception e) { DataBase.Log($"Объекты не сформированы: причина {e.Message}"); } string Temp = obconv.WriteString(mol); DataBase.Log($"Обработанный паттерн {Temp}"); if (!mol.DeleteHydrogens()) { Console.WriteLine("DeleteHidrogens() failed!"); } ; //Убираем все водороды DataBase.Log($"Водороды убраны"); string SubMol = System.Text.RegularExpressions.Regex.Replace(obconv.WriteString(mol), "[Hh ]", ""); //Убираем все водороды SP.Init(SubMol); //Задаём структуру поиска в SMARTS DataBase.Log($"Инициализация поиска по паттерну {SubMol}"); obconv.SetInFormat("smi"); obconv.ReadString(mol, DB_Mol); //Добавляем структуру из БД SP.Match(mol); //Сравниваем DataBase.Log($"Сравнение прошло"); VectorVecInt Vec = SP.GetUMapList(); DataBase.Log($"Число совпадений {Vec.Count}"); if (Vec.Count > 0) { return(true); } else { return(false); }; //Возвращаем результат }
/// <summary> /// Mol文件格式转换成SMILES格式 /// </summary> /// <param name="molFile">Mol</param> /// <returns>SMILES</returns> public static string ConvertMolFileToSmiles(string molFile) { OBConversion conversion = new OBConversion(); OBMol mol = new OBMol(); conversion.SetInFormat("mol"); conversion.ReadString(mol, molFile); conversion.SetOutFormat("smi"); return(conversion.WriteString(mol)); }
public void designgraphtoCML(designGraph host, string filename) { OBConversion obconv = new OBConversion(); obconv.SetOutFormat("cml"); OBMol mol = new OBMol(); OBFunctions.designgraphtomol(host, ref mol); obconv.WriteFile(mol, filename); }
public static string moltoSMILES(OBMol mol) { OBConversion obconv = new OBConversion(); obconv.SetOutFormat("can"); string smi = obconv.WriteString(mol); smi = smi.Replace("\t", ""); smi = smi.Replace("\n", ""); return(smi); }
/// <summary> /// Десериализация из MOL формата /// </summary> /// <param name="ms"></param> /// <returns></returns> public static OBMolecule FromMol(string Molecule) { OBMolecule mol = new OBMolecule(); OBConversion conv = new OBConversion(); conv.SetInFormat("mol2"); conv.ReadString(mol, Molecule); return(mol); }
public static OBMol readmoleculefile(string file) { OBMol mol = new OBMol(); string extension = Path.GetExtension(file); extension = extension.Trim(new char[] { '.' }); OBConversion obconv = new OBConversion(); obconv.SetInFormat(extension); bool foo = obconv.ReadFile(mol, file); return(mol); }
public void readMol(string file) { bool hideHydrogens = PlayerPrefs.GetString("hideHydrogens") == "True"; bool polarHydrogens = PlayerPrefs.GetString("polarHydrogens") == "True"; string ff = PlayerPrefs.GetString("forceField"); OpenBabel.OBConversion obconv = new OBConversion(); extension = file.Split('.')[1]; if (extension == "pdb") { obconv.SetInFormat("PDB"); } else if (extension == "sdf") { obconv.SetInFormat("SDF"); } else if (extension == "mol2") { obconv.SetInFormat("MOL2"); } mol = new OBMol(); obconv.ReadFile(mol, file); if (hideHydrogens) { mol.DeleteHydrogens(); } else { mol.AddHydrogens(); } if (polarHydrogens) { mol.DeleteNonPolarHydrogens(); } if (ff != "") //a force field is selected // Ghemical, MMFF94, UFF { OBForceField forceField = OBForceField.FindForceField(ff); forceField.Setup(mol); forceField.ConjugateGradients(1000); } }
public void CharacteristicPolynomialTest() { var converter = new OBConversion(); converter.SetInFormat("smi"); var mol = new OBMol(); converter.ReadString(mol, "CCC"); var adjMat = new OBMolExtended(mol).AdjacencyMatrix; var cPoly = mol.CharacteristicPolynomial(adjMat); Assert.AreEqual(1d, cPoly[0]); Assert.AreEqual(0d, cPoly[1]); Assert.AreEqual(-2d, cPoly[2]); Assert.AreEqual(0d, cPoly[3]); }
private PicElement DrawMoleculeElement(Molecule Mol) { // Настраиваем конвертер OBConversion obconv = new OBConversion(); obconv.SetOutFormat("_png2"); Mol.Structure.SetTitle(""); obconv.AddOption("w", OBConversion.Option_type.OUTOPTIONS, BMP_Width.ToString()); obconv.AddOption("h", OBConversion.Option_type.OUTOPTIONS, (BMP_Height - TextPanel).ToString()); // Получаем файл с картинкой string TempPic = Functions.TempFile(); obconv.WriteFile(Mol.Structure, TempPic); obconv.CloseOutFile(); // Рисуем структуру Image IM = Image.FromFile(TempPic); //Img Bitmap bmp = new Bitmap(BMP_Width, BMP_Height); Graphics g = Graphics.FromImage(bmp); g.Clear(Color.White); g.DrawImage(IM, 0, 0); g.DrawString(Mol.name, new Font("Arial", 14, FontStyle.Bold), new SolidBrush(Color.Black), new PointF(5, BMP_Height - TextPanel + 5)); g.DrawString(Mol.Status, new Font("Arial", 12, FontStyle.Regular), new SolidBrush(Color.Black), new PointF(5, BMP_Height - TextPanel + 5 + new Font("Arial", 14, FontStyle.Bold).GetHeight())); g.Dispose(); Mol.Structure.SetTitle(Mol.name); PicElement El = new PicElement(); El.Image = bmp; El.ID = Mol.ID; return(El); //Всё подчищаем // bmp.Dispose(); // IM.Dispose(); }
/// <summary> /// Читает молекулу из файла /// </summary> /// <param name="FileName">Имя файла</param> /// <returns></returns> public static OBMol ReadMoleculeFromFile(string FileName) { OBConversion obconv = new OBConversion(); OBFormat OBF = OBConversion.FormatFromExt(FileName); if (OBF == null) { MessageBox.Show("Неподдерживаемый формат данных", "Ошибка открытия файла"); return(null); } obconv.SetInFormat(OBF); //Читаем ChemDraw файл (Потом расширить список) OBMol mol = new OBMol(); obconv.ReadFile(mol, FileName); //Читаем из файла mol.SetTitle(""); mol.DeleteHydrogens(); return(mol); }
/// <summary> /// 从选定官能团的位置数组转换成FP4. /// selectedFGs数组中的每个数字代表该分子含有官能团表中这个数字所代表的官能团 /// </summary> /// <param name="selectedFGs">含有的官能团编号,是个整数数组</param> /// <returns>Openbabel数据库格式的整数数组[16]</returns> public static List <long> GenerateFp4(List <int> selectedFGs) { OBConversion conv = new OBConversion(); //一定要有这句才不会报错 OBFingerprint fingerprint = OBFingerprint.FindFingerprint("FP4"); VectorUInt fp4 = new VectorUInt(16); //初始化_fp4 for (var i = 0; i < 16; i++) { fp4.Add(0); } foreach (var bit in selectedFGs) { fingerprint.SetBit(fp4, (uint)bit); //设置FP4 } return(fp4.Select(u => (long)u).ToList()); // }
public List <int> moltoUFF(OBMol mol, string coefficientfilename, string datafilename, bool contingency, double padding) { LAMMPSNow lammpssetup = new LAMMPSNow(parameters, atomtypes, periodictable); if (contingency) { //if lammps fails to minimize, try minimization using openbabel as a starting point OBForceField uff = OBForceField.FindForceField("UFF"); mol = lammpssetup.perturbator(mol, 2); //lammps crashes when atoms are on top of each other OBConversion obconv = new OBConversion(); obconv.SetOutFormat("cml"); obconv.WriteFile(mol, "badrun.cml"); uff.Setup(mol); uff.SteepestDescent(1000); } lammpssetup.setupUFF(mol, coefficientfilename, datafilename, padding); List <int> esequence = lammpssetup.getesequence(); return(esequence); }
public void designgraphtoUFF(designGraph host, string coefficientfilename, string datafilename, bool contingency) { OBMol mol = new OBMol(); OBFunctions.designgraphtomol(host, ref mol); LAMMPSNow lammpssetup = new LAMMPSNow(parameters, atomtypes, periodictable); if (contingency) { //if lammps fails to minimize, try minimization using openbabel as a starting point OBForceField uff = OBForceField.FindForceField("UFF"); mol = lammpssetup.perturbator(mol, 2); //lammps crashes when atoms are on top of each other OBConversion obconv = new OBConversion(); obconv.SetOutFormat("cml"); obconv.WriteFile(mol, "badrun.cml"); uff.Setup(mol); uff.SteepestDescent(1000); } lammpssetup.setupUFF(mol, coefficientfilename, datafilename, 50); //lammpssetup.setupUFFtest(mol); //lammpssetup.reset(); }
private void button2_Click(object sender, EventArgs e) { OBConversion obconv = new OBConversion(); obconv.SetOutFormat("smi"); if (!CheckInputData()) { return; } List <string> message = new List <string>(); message.Add("code " + S_Name.Text); // Шифр message.Add("laboratory 1"); // Лаборатория message.Add("person 1"); // Персона message.Add("structure " + obconv.WriteString(mol).Trim("\n"[0])); // Структура message.Add("phys_state " + PhysState.Text); // Физ. состояние message.Add("melting_point " + Melt.Text); // Т. плавления message.Add("conditions " + Conditions.Text); // Условия хранения message.Add("properties " + Properties.Text); // Особые свойства message.Add("mass " + Mass.Text); // Масса образца message.Add("solution " + Solution.Text); // Растворимость образца List <string> Answer = ServerCommunication.Send_Get_Msg_To_Server( ServerCommunication.Commands.Add_Mol, ListOfStringToString(message)); if (Answer[1] == "Add_Molecule: done") { Close(); } else { MessageBox.Show(Answer[1], Answer[2]); } }
/// <summary> /// Проверка соответствия молекулы паттерну. /// </summary> /// <param name="Mol"></param> /// <param name="DB_Mol"></param> /// <returns></returns> private bool CheckMol(string Mol, string DB_Mol) { // Создаём объекты OpenBabel OBSmartsPattern SP = new OBSmartsPattern(); OBConversion obconv = new OBConversion(); obconv.SetInFormat("smi"); OBMol mol = new OBMol(); obconv.ReadString(mol, Mol); obconv.SetOutFormat("smi"); string Temp = obconv.WriteString(mol); if (!mol.DeleteHydrogens()) { Console.WriteLine("DeleteHidrogens() failed!"); } ; //Убираем все водороды string SubMol = System.Text.RegularExpressions.Regex.Replace(obconv.WriteString(mol), "[Hh ]", ""); //Убираем все водороды SP.Init(SubMol); //Задаём структуру поиска в SMARTS obconv.SetInFormat("smi"); obconv.ReadString(mol, DB_Mol); //Добавляем структуру из БД SP.Match(mol); //Сравниваем VectorVecInt Vec = SP.GetUMapList(); if (Vec.Count > 0) { return(true); } else { return(false); }; //Возвращаем результат }
public static OBMol InterStepMinimize(OBMol mol) { var conv = new OBConversion(); conv.SetInAndOutFormats("pdb", "mol"); conv.WriteFile(mol, Path.Combine(GetRamDir(), "minimize.mol")); string minimizeOutput; using (Process proc = new Process()) { proc.StartInfo.FileName = "C:\\Program Files\\OpenBabel-3.0.0\\obminimize.exe"; proc.StartInfo.Arguments = "minimize.mol"; proc.StartInfo.WorkingDirectory = GetRamDir(); proc.StartInfo.RedirectStandardError = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardInput = false; proc.Start(); proc.WaitForExit(); minimizeOutput = proc.StandardOutput.ReadToEnd(); } conv.ReadString(mol, minimizeOutput); return(mol); }
public void PathsOfLengthNTest() { var converter = new OBConversion(); converter.SetInFormat("smi"); var mol = new OBMol(); converter.ReadString(mol, "CCC"); var paths = mol.PathsOfLengthN(2, false); Assert.AreEqual(1, paths.Count()); paths = mol.PathsOfLengthN(4, false); Assert.AreEqual(0, paths.Count()); converter.ReadString(mol, "CC(C)C"); paths = mol.PathsOfLengthN(2, false); Assert.AreEqual(3, paths.Count()); converter.ReadString(mol, "c1ccccc1"); paths = mol.PathsOfLengthN(3, false); Assert.AreEqual(6, paths.Count()); }
private void button2_Click(object sender, EventArgs e) //Поиск { // Настраиваем конвертер OBConversion obconv = new OBConversion(); obconv.SetInFormat("cdx"); OBMol molec = new OBMol(); obconv.SetOutFormat("smi"); obconv.ReadFile(molec, textBox1.Text); // Запрашиваем сервер и получаем ответ List <string> Answer = ServerCommunication.Send_Get_Msg_To_Server( ServerCommunication.Commands.Search_Mol, "structure " + obconv.WriteString(molec) + " "); Mols = Functions.GetMolListFromServerAnswer(Answer); MoleculesList ML = new MoleculesList(); ML.DrawList(Mols); Close(); ML.ShowDialog(); }
public static Tuple <List <double>, List <double>, List <double>, List <double> > azoMOFEvaluation(string nameMask, string file, string dir, string zeoArguments, string zeoExecDir, int avgFrame, int runInterval, List <int> esequence, ref OBConversion obconv) { //so now we get the frames List <string[]> allFrames = parseFramesFromTrajectory(file); ///string zeoExecDir ="/home/manion/Documents/zeo++-0.2.2/"; //we should take this in as an argument, but not today //nitrogen kinetic diameter //string zeoArguments="-ha -sa 1.657 1.657 2000"; //int avgFrame = 5; //number of frames we average over //int runInterval = 500; //the number of frames in a run ///List<int> esequence = new List<int> (); //esequence.Add (6); //esequence.Add (8); //esequence.Add (30); //esequence.Add (1); //esequence.Add (8); //esequence.Add (7); int startFrame = (runInterval + 1) - avgFrame; List <double> surfAreas0 = calculateSurfaceAreas(ref allFrames, dir, startFrame, avgFrame, nameMask + "-0trans-", zeoArguments, zeoExecDir, esequence, ref obconv); startFrame = (2 * runInterval + 1) - avgFrame; List <double> surfAreas1 = calculateSurfaceAreas(ref allFrames, dir, startFrame, avgFrame, nameMask + "-1cis-", zeoArguments, zeoExecDir, esequence, ref obconv); startFrame = (3 * runInterval + 1) - avgFrame; List <double> surfAreas2 = calculateSurfaceAreas(ref allFrames, dir, startFrame, avgFrame, nameMask + "-2trans-", zeoArguments, zeoExecDir, esequence, ref obconv); startFrame = (4 * runInterval + 1) - avgFrame; List <double> surfAreas3 = calculateSurfaceAreas(ref allFrames, dir, startFrame, avgFrame, nameMask + "-3cis-", zeoArguments, zeoExecDir, esequence, ref obconv); Tuple <List <double>, List <double>, List <double>, List <double> > allTheSurfaceAreas = new Tuple <List <double>, List <double>, List <double>, List <double> >(surfAreas0, surfAreas1, surfAreas2, surfAreas3); //return all the surface areas return(allTheSurfaceAreas); }
public static Tuple <List <double>, List <double> > calculateSurfaceAreas(string dir, string trajFileName, int numFrames, string arguments, string zeoexecdir, List <int> esequence, OBConversion obconv) { //calculate surface areas for the last numFrames of two different runs and return them //dir working directory //trajFileName name of the trajectory in the working directo //numFrames number of frames to average over //parse the frames string tag = "ASA_m^2/g"; List <string[]> allFrames = parseFramesFromTrajectory(Path.Combine(dir, trajFileName)); //are there actually frames if (allFrames.Count > 1) { //determine the frame at which we start to calculate surface areas for begin int startFrame = allFrames[0].Length - numFrames; if (startFrame < 0) // if start frame is out of range, then there is no data, which is bad { return(null); } List <double> beginSurfaceAreas = new List <double>(); for (int i = startFrame; i < allFrames[0].Length; i++) { string frame = allFrames[0][i]; string begCIF = Path.Combine(dir, "beg" + i + ".cif"); string begZeo = Path.Combine(dir, "begZeo" + i + ".out"); trajectoryFrameToCIF(frame, begCIF, esequence, obconv); //run zeo zeo(begCIF, arguments, zeoexecdir, dir, begZeo); Dictionary <string, string> zeoOutput = readZeoOutput(begZeo); double begSurf = Convert.ToDouble(zeoOutput[tag]); beginSurfaceAreas.Add(begSurf); } //now do it for the startFrame = allFrames[1].Length - numFrames; if (startFrame < 0) // if start frame is out of range, then there is no data, which is bad { return(null); } List <double> endSurfaceAreas = new List <double>(); for (int i = startFrame; i < allFrames[1].Length; i++) { string frame = allFrames[1][i]; string endCIF = Path.Combine(dir, "end" + i + ".cif"); string endZeo = Path.Combine(dir, "endZeo" + i + ".out"); trajectoryFrameToCIF(frame, endCIF, esequence, obconv); //run zeo zeo(endCIF, arguments, zeoexecdir, dir, endZeo); Dictionary <string, string> zeoOutput = readZeoOutput(endZeo); double endSurf = Convert.ToDouble(zeoOutput[tag]); endSurfaceAreas.Add(endSurf); } Tuple <List <double>, List <double> > beginAndEnd = new Tuple <List <double>, List <double> >(beginSurfaceAreas, endSurfaceAreas); return(beginAndEnd); } else { return(null); } }
/// <summary> /// static constructor to initalize the OBConversion /// object /// </summary> static OBConvert() { converter = new OBConversion(); }