public MolDescriptor(OBMol mol) { var newMol = new OBMol(mol); newMol.DeleteHydrogens(); this._mol = new OBMolExtended(newMol); }
/// <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); }; //Возвращаем результат }
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); } }
/// <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> /// Проверка соответствия молекулы паттерну. /// </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); }; //Возвращаем результат }