/// <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);
        }
Beispiel #2
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);
            };                                                          //Возвращаем результат
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        //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);
            };                                                          //Возвращаем результат
        }