-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathobutil.py
More file actions
49 lines (42 loc) · 1.33 KB
/
obutil.py
File metadata and controls
49 lines (42 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#
import openbabel
# quench tedious output of non-conforming pdb-format
openbabel.obErrorLog.SetOutputLevel(-1)
def OBMolFromFilename(filename):
obmol = openbabel.OBMol()
obconv = openbabel.OBConversion()
obconv.SetInFormat("pdb")
obconv.ReadFile(obmol, filename)
return obmol
def OBMolToFilename(obmol, filename):
obconv = openbabel.OBConversion()
obconv.SetOutFormat("pdb")
obconv.WriteFile(obmol, filename)
def OBAtomFromIndex(mol, index):
return mol.GetAtom(index)
def OBSmartMatches(mol, pattern):
"""This function matches a SMARTS pattern to a molecule
"""
obpat = openbabel.OBSmartsPattern()
obpat.Init(pattern)
obpat.Match(mol)
return [m for m in obpat.GetUMapList()]
def OBMolMinimize(mol):
"""Minimize a molecule
"""
ff = openbabel.OBForceField.FindForceField("MMFF94")
ff.Setup(mol)
ff.ConjugateGradients(100, 1.0e-5)
return mol
def OBStructureFromSmiles(smilesstring, filename=None):
mol = openbabel.OBMol()
obConversion = openbabel.OBConversion()
obConversion.SetInAndOutFormats("smi", "pdb")
obConversion.ReadString(mol, smilesstring)
mol.AddHydrogens() #False, True, 7.4)
builder = openbabel.OBBuilder()
builder.Build(mol)
mol = OBMolMinimize(mol)
if filename is None: return mol
# save structures in subfolder molecules
obConversion.WriteFile(mol, "molecules/%s.pdb" % filename)