Binding energies and other binding related properties can be calculated using the OEBind class. The OEBind class serves two primary purposes: 1) to have an class in place for users to easily calculate binding related data, and 2) to show how binding related data may be calculated. OEBind is not particularly well-suited for extrememly efficient calculations required by simulations. This is because some of the data available from OEBind may be considered uninteresting for the project and there is no need to spend time calculating it, or because OEBind calculates the unbound protein and ligand properties everytime, which is unnecessary if the same protein and ligand appear in multiple calculations. The API section for OEBind is detailed with regard to implementation, so the user can see how to create their own class or set of function calls if needed.
There are two classes that store the results of a binding calculation, OEBindResults and OESimpleBindResults. OEBindResults is a superset of OESimpleBindResults. The following table contains the properties that can be acquired from OESimpleBindResults (and thus OEBindResults as well).
| Property Name | Type | Get Method | |
| Binding Energy | float | GetBindingEnergy | |
| Bound Ligand Area | float | GetBoundLigandArea | |
| Bound Ligand Area Energy | float | GetBoundLigandAreaEnergy | |
| Bound Ligand Zap Energy | float | GetBoundLigandZapEnergy | |
| Bound Protein Area | float | GetBoundProteinArea | |
| Bound Protein Area Energy | float | GetBoundProteinAreaEnergy | |
| Bound Protein Zap Energy | float | GetBoundProteinZapEnergy | |
| Buried Area | float | GetBuriedArea | |
| Buried Area Energy | float | GetBuriedAreaEnergy | |
| Complex Area | float | GetComplexArea | |
| Complex Area Energy | float | GetComplexAreaEnergy | |
| Complex Zap Energy | float | GetComplexZapEnergy | |
| Conf | OEChem::OEConfBase | GetConf | |
| Unbound Ligand Area | float | GetUnboundLigandArea | |
| Unbound Ligand Area Energy | float | GetUnboundLigandAreaEnergy | |
| Unbound Ligand Zap Energy | float | GetUnboundLigandZapEnergy | |
| Unbound Protein Area | float | GetUnboundProteinArea | |
| Unbound Protein Area Energy | float | GetUnboundProteinAreaEnergy | |
| Unbound Protein Zap Energy | float | GetUnboundProteinZapEnergy | |
| Zap Energy | float | GetZapEnergy |
A SimpleBind calculation with an OESimpleBindResults instance does three ZAP electrostatics calculations, one each for the protein, ligand, and complex, as well as an area analysis. A Bind calculation with an OEBindResults instance does three addition ZAP electrostatics calculations with the external dielectric constant set to the internal dielectric constant, one each for the protein, ligand, and complex. These addition calculations allow for the following properites to be acquired from OEBindResults.
| Property Name | Type | Get Method | |
| Analytic Coulombic Binding Energy | float | GetAnalyticBindingEnergy | |
| Bound Ligand Coulomb Energy | float | GetBoundLigandCoulombEnergy | |
| Bound Protein Coulomb Energy | float | GetBoundProteinCoulombEnergy | |
| Complex Coulomb Energy | float | GetComplexCoulombEnergy | |
| Coulomb Energy | float | GetCoulombEnergy | |
| Desolvation Energy | float | GetDesolvationEnergy | |
| Ligand Desolvation Energy | float | GetLigandDesolvationEnergy | |
| Protein Desolvation Energy | float | GetProteinDesolvationEnergy | |
| Unbound Ligand Coulomb Energy | float | GetUnboundLigandCoulombEnergy | |
| Unbound Protein Coulomb Energy | float | GetUnboundProteinCoulombEnergy |
For an in-depth understanding of what is calculated, the electrostatics portion of the algorithm for the SimpleBind function is shown in the API section.
A sample program for using the OEBind class is provided in the distribution and shown below.
1 #!/usr/bin/env python
2 #############################################################################
3 # Copyright (C) 2006, 2007, 2008 OpenEye Scientific Software, Inc.
4 #############################################################################
5 ### bind.py
6 #############################################################################
7
8 import os, sys
9 from openeye.oechem import *
10 from openeye.oezap import *
11
12 def main(argv = [__name__]):
13 if len(argv) != 3:
14 OEThrow.Usage("%s <protein> <ligands>" % argv[0])
15
16 protein = OEMol()
17
18 ifs = oemolistream()
19 if not ifs.open(argv[1]):
20 OEThrow.Fatal("Unable to open %s for reading" % argv[1])
21 OEReadMolecule(ifs, protein)
22
23 OEAssignBondiVdWRadii(protein)
24 OEMMFFAtomTypes(protein)
25 OEMMFF94PartialCharges(protein)
26 print >>sys.stderr, "protein: " + protein.GetTitle()
27
28 epsin = 1.0;
29 bind = OEBind()
30 bind.GetZap().SetInnerDielectric(epsin);
31 bind.SetProtein(protein)
32 results = OEBindResults()
33
34 if not ifs.open(argv[2]):
35 OEThrow.Fatal("Unable to open %s for reading" % argv[2])
36 ifs.SetConfTest(OEIsomericConfTest())
37
38 ligand = OEMol()
39 while OEReadMolecule(ifs, ligand):
40 OEAssignBondiVdWRadii(ligand)
41 OEMMFFAtomTypes(ligand)
42 OEMMFF94PartialCharges(ligand)
43 print >>sys.stderr, "ligand: %s has %d conformers" % \
44 (ligand.GetTitle(), ligand.NumConfs())
45
46 for conf in ligand.GetConfs():
47 bind.Bind(conf, results)
48 print >>sys.stderr, " conf# %d be = %f" % \
49 (conf.GetIdx(), results.GetBindingEnergy())
50 return 0
51
52 if __name__ == "__main__":
53 sys.exit(main(sys.argv))