public static OBMol obminimizeUFF(OBMol mol, double crit, int steps)
        {
            bool   sd        = false;
            bool   cut       = false;
            bool   newton    = false;
            bool   hydrogens = true;
            double rvdw      = 6.0;
            double rele      = 10.0;
            int    freq      = 10;
            //var watch = Stopwatch.StartNew();
            OBForceField ff = OBForceField.FindForceField("UFF");

            //watch.Stop();
            //watch.Start();
            ff.Setup(mol);
            ff.SetVDWCutOff(rvdw);
            ff.SetElectrostaticCutOff(rele);
            ff.SetUpdateFrequency(freq);
            ff.EnableCutOff(cut);
            ff.ConjugateGradientsInitialize(steps, crit);
            bool done = true;

            while (done)
            {
                done = ff.ConjugateGradientsTakeNSteps(1);
                //ff.GetCoordinates(mol);
            }

            ff.GetCoordinates(mol);
            //watch.Stop();//doesn't look like there is much I can do to optimize this, energy minimization just takes time
            return(mol);
        }
        public static OBMol contingencyminimization(OBMol mol)
        {
            OBForceField uff = OBForceField.FindForceField("UFF");

            //uff.ParseParamFile();
            uff.SetLogLevel(1);
            uff.Setup(mol);
            uff.ConjugateGradients(10);
            return(mol);
        }
Exemple #3
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);
        }
    }
Exemple #4
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);
            }
        }
        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);
        }
        public static OBMol conformersearch(OBMol mol, int steps)
        {
            bool   cut       = false;
            bool   newton    = false;
            bool   hydrogens = true;
            double rvdw      = 6.0;
            double rele      = 10.0;
            int    freq      = 10;

            OBForceField rotsearch = OBForceField.FindForceField("MMFF94");

            rotsearch.Setup(mol);
            rotsearch.SetVDWCutOff(rvdw);
            rotsearch.SetElectrostaticCutOff(rele);
            rotsearch.SetUpdateFrequency(freq);
            rotsearch.EnableCutOff(cut);
            rotsearch.RandomRotorSearch((uint)steps);
            //rotsearch.WeightedRotorSearch(3,10);//this is very computationally expensive
            rotsearch.GetCoordinates(mol);
            return(mol);
        }
        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();
        }