/// <summary> /// Computes the number of fragments in molecule given a SMARTS pattern /// </summary> /// <param name="mol"></param> /// <param name="pattern">SMARTS pattern (string)</param> /// <returns></returns> public static int SmartPatternCount(this OBMol mol, string pattern) { var sp = new OBSmartsPattern(); sp.Init(pattern); sp.Match(mol); return(sp.GetUMapList().Count); }
/// <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 static VectorVecInt findcarboxylates(OBMol mol) { //finds carboxylates and returns a mapping, mapping must be initialized OBSmartsPattern findcbxl = new OBSmartsPattern(); findcbxl.Init("[#8]=[#6](-[#8])-*"); //find the carboxylate var mapping = new VectorVecInt(); findcbxl.Match(mol, mapping, OBSmartsPattern.MatchType.AllUnique); return(mapping); }
//functions for evaluating public static bool findcarboxylates(OBMol mol, ref VectorVecInt mapping) { //finds carboxylates and returns a mapping, mapping must be initialized OBSmartsPattern findcbxl = new OBSmartsPattern(); //initialization is sufficiently fast that we do not need to worry about initializing an obsmartspattern and keeping it around findcbxl.Init("[#8]=[#6](-[#8])-*"); //find the carboxylate return(findcbxl.Match(mol, mapping, OBSmartsPattern.MatchType.AllUnique)); }
/// <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); }; //Возвращаем результат }