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); }
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); } }
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(); }