3.5 Binding Energies

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 /*******************************************************************************
 2  * Copyright (C) 2006, 2008 OpenEye Scientific Software, Inc.
 3  ******************************************************************************/
 4 package openeye.examples.oezap;
 5
 6 import openeye.oechem.*;
 7 import openeye.oezap.*;
 8
 9 public class ZapBind {
10   public static void main(String argv[]) {
11     if (argv.length != 2) {
12       System.err.println("usage: ZapBind <protein> <ligands>");
13       System.exit(1);
14     }
15
16     OEMol protein = new OEMol();
17     oemolistream ifs = new oemolistream();
18     if (!ifs.open(argv[0])) {
19       System.err.println("Unable to open for reading: " + argv[0]);
20       System.exit(1);
21     }
22     oechem.OEReadMolecule(ifs, protein);
23     oechem.OEAssignBondiVdWRadii(protein);
24     oechem.OEMMFFAtomTypes(protein);
25     oechem.OEMMFF94PartialCharges(protein);
26     System.err.println("protein: " + protein.GetTitle());
27     ifs.close();
28
29     OEBind bind = new OEBind();
30     bind.SetProtein(protein);
31     OEBindResults results = new OEBindResults();
32
33     OEMol ligand = new OEMol();
34     if (!ifs.open(argv[1])) {
35       System.err.println("Unable to open for reading: " + argv[1]);
36       System.exit(1);
37     }
38     ifs.SetConfTest(new OEIsomericConfTest());
39     while (oechem.OEReadMolecule(ifs, ligand)) {
40       oechem.OEAssignBondiVdWRadii(ligand);
41       oechem.OEMMFFAtomTypes(ligand);
42       oechem.OEMMFF94PartialCharges(ligand);
43       System.err.println("ligand: " + ligand.GetTitle());
44
45       OEConfBaseIter citer = ligand.GetConfs();
46       while (citer.hasNext()) {
47         OEConfBase conf = citer.next();
48         bind.Bind(conf, results);
49         System.err.println(" conf# " + conf.GetIdx() + " be = "
50             + results.GetBindingEnergy());
51       }
52       System.err.println();
53     }
54   }
55 }

Listing:3.7 ZAP Bind Example