Exemplo n.º 1
0
        public static bool pairwiseangle(OBMol mol, ref double pangle)
        {
            VectorVecInt mapping = new VectorVecInt();

            if (findcarboxylates(mol, ref mapping))
            {
                double        sum    = 0;
                List <double> angles = new List <double>();
                if (mapping.Count > 1)
                {
                    OBAtom c1 = mol.GetAtom(mapping[0][1]);
                    OBAtom a1 = mol.GetAtom(mapping[0][3]);
                    OBAtom c2 = mol.GetAtom(mapping[1][1]);
                    OBAtom a2 = mol.GetAtom(mapping[1][3]);

                    pangle = pairwiseangle(c1, a1, c2, a2);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 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);
            };                                                          //Возвращаем результат
        }
Exemplo n.º 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);
        }
Exemplo n.º 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));
        }
 public static void writemaplisttoconsole(VectorVecInt maplist)
 {
     foreach (VectorInt vi in maplist)
     {
         string line = "";
         ///Console.WriteLine("begin");
         foreach (int i in vi)
         {
             //Console.WriteLine(i);
             line = line + " " + i;
         }
         Console.WriteLine(line);
         //Console.WriteLine("end");
     }
 }
Exemplo n.º 6
0
        public static bool averagepairwiseangle(OBMol mol, ref double avgangle)
        {
            VectorVecInt mapping = new VectorVecInt();

            if (findcarboxylates(mol, ref mapping))
            {
                double        sum    = 0;
                List <double> angles = new List <double>();
                if (mapping.Count > 1)
                {
                    OBAtom c1 = mol.GetAtom(mapping[0][1]);
                    OBAtom a1 = mol.GetAtom(mapping[0][3]);
                    OBAtom c2 = mol.GetAtom(mapping[1][1]);
                    OBAtom a2 = mol.GetAtom(mapping[1][3]);

                    double pangle = pairwiseangle(c1, a1, c2, a2);
                    angles.Add(pangle);
                    sum += pangle;
                    OBForceField MMFF94 = OBForceField.FindForceField("MMFF94");
                    MMFF94.Setup(mol);

                    for (int i = 0; i < 300; i++)
                    {
                        MMFF94.MolecularDynamicsTakeNSteps(1, 300, 1.2, 1);
                        MMFF94.GetCoordinates(mol);
                        pangle = pairwiseangle(c1, a1, c2,
                                               a2); //this function is sufficiently fast that it does not need to be optimized, molecular dynamics takes about 15 milliseconds per step, this take practically nothing
                        angles.Add(pangle);
                        sum += pangle;
                    }
                    avgangle = sum / angles.Count;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 7
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);
            };                                                          //Возвращаем результат
        }