コード例 #1
0
        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();
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: OpenBabelHelper.cs プロジェクト: xjjius/molfinder
        /// <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));
        }
コード例 #4
0
ファイル: OBMolecule.cs プロジェクト: kim-g/MoleculeDataBase
        /// <summary>
        /// Сериализация в MOL формат
        /// </summary>
        /// <returns></returns>
        public string ToMol()
        {
            OBConversion conv = new OBConversion();

            conv.SetOutFormat("mol2");
            return(conv.WriteString(this));
        }
コード例 #5
0
        public static void moltoCML(OBMol mol, string file)
        {
            OBConversion obconv = new OBConversion();

            obconv.SetOutFormat("cml");
            obconv.WriteFile(mol, file);
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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();
        }
コード例 #9
0
ファイル: OpenBabelHelper.cs プロジェクト: xjjius/molfinder
        /// <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);
        }
コード例 #10
0
ファイル: OpenBabelHelper.cs プロジェクト: xjjius/molfinder
        /// <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);
        }
コード例 #11
0
ファイル: example.cs プロジェクト: baoilleach/obstereo-2-2-x
 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();
 }
コード例 #12
0
        /// <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);
            };                                                          //Возвращаем результат
        }
コード例 #13
0
ファイル: OpenBabelHelper.cs プロジェクト: xjjius/molfinder
        /// <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));
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
ファイル: OBMolecule.cs プロジェクト: kim-g/MoleculeDataBase
        /// <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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
    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);
        }
    }
コード例 #19
0
        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]);
        }
コード例 #20
0
ファイル: MoleculesList.cs プロジェクト: kim-g/MolBase_Client
        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();
        }
コード例 #21
0
        /// <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);
        }
コード例 #22
0
ファイル: OpenBabelHelper.cs プロジェクト: xjjius/molfinder
        /// <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()); //
        }
コード例 #23
0
        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);
        }
コード例 #24
0
        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();
        }
コード例 #25
0
ファイル: Add_Mol.cs プロジェクト: kim-g/MolBase_Client
        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]);
            }
        }
コード例 #26
0
        /// <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);
            };                                                          //Возвращаем результат
        }
コード例 #27
0
        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);
        }
コード例 #28
0
        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());
        }
コード例 #29
0
        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();
        }
コード例 #30
0
        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);
        }
コード例 #31
0
        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);
            }
        }
コード例 #32
0
 /// <summary>
 /// static constructor to initalize the OBConversion
 /// object
 /// </summary>
 static OBConvert()
 {
     converter = new OBConversion();
 }