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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Conformer Searching</title>
<link href="/site.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="search/search.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!--#include file="header.html" -->
<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.shtml"><span>Main Page</span></a></li>
<li><a href="pages.shtml"><span>Related Pages</span></a></li>
<li><a href="modules.shtml"><span>Modules</span></a></li>
<li><a href="namespaces.shtml"><span>Namespaces</span></a></li>
<li><a href="annotated.shtml"><span>Classes</span></a></li>
<li><a href="files.shtml"><span>Files</span></a></li>
<li><a href="examples.shtml"><span>Examples</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">Conformer Searching</div> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBConformerFilter.shtml">OBConformerFilter</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Interface used by <a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml" title="Conformer searching using genetic algorithm. See Conformer Searching.">OBConformerSearch</a> for filtering conformers. <a href="classOpenBabel_1_1OBConformerFilter.shtml#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBConformerFilters.shtml">OBConformerFilters</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Class for combining <a class="el" href="classOpenBabel_1_1OBConformerFilter.shtml" title="Interface used by OBConformerSearch for filtering conformers.">OBConformerFilter</a> objects. <a href="classOpenBabel_1_1OBConformerFilters.shtml#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBStericConformerFilter.shtml">OBStericConformerFilter</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">A steric conformer filter class. <a href="classOpenBabel_1_1OBStericConformerFilter.shtml#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBConformerScore.shtml">OBConformerScore</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Interface used by <a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml" title="Conformer searching using genetic algorithm. See Conformer Searching.">OBConformerSearch</a> for scoring conformers. <a href="classOpenBabel_1_1OBConformerScore.shtml#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBRMSDConformerScore.shtml">OBRMSDConformerScore</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">A RMSD conformer scoring class. <a href="classOpenBabel_1_1OBRMSDConformerScore.shtml#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBEnergyConformerScore.shtml">OBEnergyConformerScore</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">A lowest energy conformer scoring class. <a href="classOpenBabel_1_1OBEnergyConformerScore.shtml#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml">OBConformerSearch</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Conformer searching using genetic algorithm. See <a class="el" href="group__conformer.shtml">Conformer Searching</a>. <a href="classOpenBabel_1_1OBConformerSearch.shtml#details">More...</a><br/></td></tr>
</table>
<div class="textblock"><h2><a class="anchor" id="introduction"></a>
Introduction</h2>
<p>All conformer searching methods in <a class="el" href="namespaceOpenBabel.shtml" title="Global namespace for all Open Babel code.">OpenBabel</a> are based on the concept of rotor keys. A rotor key is simply an array of values specifying the rotations around rotatable bonds. The number of possible values for a rotatable bond depends on the bond type. The classes implementing the rotor key concept are <a class="el" href="classOpenBabel_1_1OBRotor.shtml" title="A single rotatable OBBond as part of rotamer searching.">OBRotor</a>, <a class="el" href="classOpenBabel_1_1OBRotorList.shtml" title="Given an OBMol, set up a list of possibly rotatable torsions,.">OBRotorList</a> and OBRotamer.</p>
<p>Previous <a class="el" href="namespaceOpenBabel.shtml" title="Global namespace for all Open Babel code.">OpenBabel</a> releases contained only methods for finding stable (low energy) conformers by using the force fields. The 2.3 release introduces a new flexible class (<a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml" title="Conformer searching using genetic algorithm. See Conformer Searching.">OBConformerSearch</a>) implementing a genetic algorithm. The scoring or ranking of conformers is done by a seperate class derived from the abstract <a class="el" href="classOpenBabel_1_1OBConformerScore.shtml" title="Interface used by OBConformerSearch for scoring conformers.">OBConformerScore</a> class. Reimplementing this class allows for all sorts of scoring functions (e.g. RMSD, torson, energy, ... based).</p>
<h2><a class="anchor" id="stable"></a>
Finding stable conformers</h2>
<h3><a class="anchor" id="systematic"></a>
Systematic rotor search</h3>
<p>This is the simplest of all conformer searching methods and only suitable when there are only a few rotatable bonds. Since the number of conformers grows exponentially with the number of bonds, enumerating all conformers for reasonably sized molecules quickly results in unacceptable performance. A systematic rotor search can be done with the <a class="el" href="classOpenBabel_1_1OBForceField.shtml#a0cd9e722f0f76012921ee143484e3e0a">OBForceField::SystematicRotorSearch</a> method.</p>
<h3><a class="anchor" id="random"></a>
Random rotor search</h3>
<p>The random rotor search generates random rotor keys and evaluates the energy. The lowest energy conformer is kept. All rotor keys are random and no attempt is made to improve good scoring keys. In most cases the weighted rotor search is a better choice. A random rotor search can be performed with the <a class="el" href="classOpenBabel_1_1OBForceField.shtml#a3c2aba026c883a8c78a8874a2171cea0">OBForceField::RandomRotorSearch</a> method.</p>
<h3><a class="anchor" id="weighted"></a>
Weighted rotor search</h3>
<p>The weighted rotor search uses the score (energy) from a generated and tries to optimize good scoring keys. This allows the global minimum energy conformer to be identified much faster compared to the random rotor search. However, finding the global minimum can be time consuming for large molecules and there is no guarantee that the found minimum is the global minimum. A weighted rotor search is performed with the <a class="el" href="classOpenBabel_1_1OBForceField.shtml#aabf7fa941ffdd2106f5f82f2afefa33f">OBForceField::WeightedRotorSearch</a> method.</p>
<h3><a class="anchor" id="genetic"></a>
Genetic algorithm</h3>
<p>The <a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml" title="Conformer searching using genetic algorithm. See Conformer Searching.">OBConformerSearch</a> class introduced in <a class="el" href="namespaceOpenBabel.shtml" title="Global namespace for all Open Babel code.">OpenBabel</a> 2.3 implements a genetic algorithm for finding conformers. The class is configurable and with the right scoring function (<a class="el" href="classOpenBabel_1_1OBEnergyConformerScore.shtml" title="A lowest energy conformer scoring class.">OBEnergyConformerScore</a>), stable conformers can be found. Read the <a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml" title="Conformer searching using genetic algorithm. See Conformer Searching.">OBConformerSearch</a> section for more details on how the genetic algorithm works.</p>
<h2><a class="anchor" id="diverse"></a>
Finding a diverse set of conformers</h2>
<p>A divers set of conformers can be generated using the <a class="el" href="classOpenBabel_1_1OBConformerSearch.shtml" title="Conformer searching using genetic algorithm. See Conformer Searching.">OBConformerSearch</a> class with a scoring function like <a class="el" href="classOpenBabel_1_1OBRMSDConformerScore.shtml" title="A RMSD conformer scoring class.">OBRMSDConformerScore</a>. A diverse set of conformers is often useful when screening bioactive molecules since the interaction with the target can stabilize a higher conformational energy. See the next section for details.</p>
<h2><a class="anchor" id="OBConformerSearch"></a>
OBConformerSearch</h2>
<p>The genetic algorithm starts by generating the initial population of rotor keys. The initial population contains up to numConformers, duplicate keys are ignored. <a class="el" href="classOpenBabel_1_1OBConformerFilter.shtml" title="Interface used by OBConformerSearch for filtering conformers.">OBConformerFilter</a> objects are used to filter conformers before including them. A typical filter is a steric filter to ignore all conformers with atoms to close together.</p>
<p>For each generation, numChildren children are created by permuting the parent rotor keys. The mutability setting determines how frequent a permutation is made (e.g. 5 means 1/5 bonds are permuted, 10 means 1/10). Again, duplicated and filtered molecules are ignored. The population now contains up to numConformer * (1 + numChildren). All these rotor keys are scored using the specified <a class="el" href="classOpenBabel_1_1OBConformerScore.shtml" title="Interface used by OBConformerSearch for scoring conformers.">OBConformerScore</a> class. Next, all keys are ordered by their score and the best numConformers conformers are selected as parents for the next generation.</p>
<p>New generations are generated until the specified number of generations (i.e. convergence) don't improve the score.</p>
<h3><a class="anchor" id="OBConformerFilter"></a>
OBConformerFilter</h3>
<p>Filters are used to exclude certain generated conformers. For example, the <a class="el" href="classOpenBabel_1_1OBStericConformerFilter.shtml" title="A steric conformer filter class.">OBStericConformerFilter</a> filters out all conformers with atoms to close together. Custom filters can be used to consider additional properties (e.g. electrostatic energy, distance between pharmacophore groups, ...). Filters can easily be combined using the <a class="el" href="classOpenBabel_1_1OBConformerFilters.shtml" title="Class for combining OBConformerFilter objects.">OBConformerFilters</a> class.</p>
<h3><a class="anchor" id="OBConformerScore"></a>
OBConformerScore</h3>
<p><a class="el" href="classOpenBabel_1_1OBConformerScore.shtml" title="Interface used by OBConformerSearch for scoring conformers.">OBConformerScore</a> derived classes compute the score for conformers. The scoring function is probably the most important part of the algorithm since it selects which conformers will be used as parents for the next generation. Derived classes also specify if the scores are descending or ascending and what convergence criteria should be used (i.e. lowest, highest, sum or average). There is no easy way to combine scoring functions since scores are not always additive. However, a custom scoring function could be used that combines several other scoring functions with weights for each score.</p>
<p>The scoring function determines what kind of conformers are selected. For example, the <a class="el" href="classOpenBabel_1_1OBEnergyConformerScore.shtml" title="A lowest energy conformer scoring class.">OBEnergyConformerScore</a> class selects stable, low energy conformers. A simple variation to this would be to only use the non-bonded energy. The result for these two scoring functions should be similar.</p>
<p>The <a class="el" href="classOpenBabel_1_1OBRMSDConformerScore.shtml" title="A RMSD conformer scoring class.">OBRMSDConformerScore</a> scoring function can be used to generate a diverse set of conformers. A diverse set is often useful when screening bioactive molecules since the interaction with the target can stabilize a higher conformational energy. To calculate the RMSD between conformers, Kabsch alignment (<a class="el" href="classOpenBabel_1_1OBAlign.shtml" title="Perform a least-squares alignment of two molecules or two vectors of vector3 objects.">OBAlign</a>) is used. The alignment takes symmetry into account.</p>
<div class="image">
<img src="energyconformerscore.png" alt="energyconformerscore.png"/>
</div>
<div class="image">
<img src="rmsdconformerscore.png" alt="rmsdconformerscore.png"/>
<div class="caption">
30 Conformers for methotrexate. top: OBEnergyConformerScore bottom: OBRMSDConformerScore</div></div>
</div></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Defines</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- end content -->
<!--#include file="footer.html" -->
<div id="footer">
<hr size="1">
<img src="http://openbabel.org/babel256.png" width="136" height="127" alt="" style="float: left;" />
<p>This file is part of the documentation for <a href="http://openbabel.org/wiki/">Open Babel</a>, version 2.3.</p>
<div class="bottom">
Documentation copyright © 1998-2007, the <a href="http://openbabel.org/wiki/THANKS">Open Babel Developers</a>.<br>
Open Babel is hosted by: <a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=40728"
width="88" height="31" border="0" alt="SourceForge Logo"></a><br>
Generated on Thu Oct 13 2011 16:08:08 by <a href="http://www.doxygen.org/"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.7.5.1.
</div>
</body>
</html>
|