<?xml version='1.0'?>
<!DOCTYPE art SYSTEM 'http://www.biomedcentral.com/xml/article.dtd'>
<art>
   <ui>1471-2105-6-159</ui>
   <ji>1471-2105</ji>
   <fm>
      <dochead>Methodology article</dochead>
      <bibl>
         <title>
            <p>Full cyclic coordinate descent: solving the protein loop closure problem in C<it>&#945; </it>space</p>
         </title>
         <aug>
            <au id="A1">
               <snm>Boomsma</snm>
               <fnm>Wouter</fnm>
               <insr iid="I1"/>
               <email>wb@binf.ku.dk</email>
            </au>
            <au id="A2" ca="yes">
               <snm>Hamelryck</snm>
               <fnm>Thomas</fnm>
               <insr iid="I1"/>
               <email>thamelry@binf.ku.dk</email>
            </au>
         </aug>
         <insg>
            <ins id="I1">
               <p>Bioinformatics center, Institute of Molecular Biology and Physiology, University of Copenhagen, Universitetsparken 15, Building 10, DK-2100 Copenhagen, Denmark</p>
            </ins>
         </insg>
         <source>BMC Bioinformatics</source>
         <issn>1471-2105</issn>
         <pubdate>2005</pubdate>
         <volume>6</volume>
         <issue>1</issue>
         <fpage>159</fpage>
         <url>http://www.biomedcentral.com/1471-2105/6/159</url>
         <xrefbib>
            <pubidlist>
               <pubid idtype="pmpid">15985178</pubid>
               <pubid idtype="doi">10.1186/1471-2105-6-159</pubid>
            </pubidlist>
         </xrefbib>
      </bibl>
      <history>
         <rec>
            <date>
               <day>25</day>
               <month>4</month>
               <year>2005</year>
            </date>
         </rec>
         <acc>
            <date>
               <day>28</day>
               <month>6</month>
               <year>2005</year>
            </date>
         </acc>
         <pub>
            <date>
               <day>28</day>
               <month>6</month>
               <year>2005</year>
            </date>
         </pub>
      </history>
      <cpyrt>
         <year>2005</year>
         <collab>Boomsma and Hamelryck; licensee BioMed Central Ltd.</collab>
         <note>This is an Open Access article distributed under the terms of the Creative Commons Attribution License (<url>http://creativecommons.org/licenses/by/2.0</url>), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</note>
      </cpyrt>
      <abs>
         <sec>
            <st>
               <p>Abstract</p>
            </st>
            <sec>
               <st>
                  <p>Background</p>
               </st>
               <p>Various forms of the so-called <it>loop closure problem </it>are crucial to protein structure prediction methods. Given an N- and a C-terminal end, the problem consists of finding a suitable segment of a certain length that bridges the ends seamlessly.</p>
               <p>In homology modelling, the problem arises in predicting loop regions. In <it>de novo </it>protein structure prediction, the problem is encountered when implementing local moves for Markov Chain Monte Carlo simulations.</p>
               <p>Most loop closure algorithms keep the bond angles fixed or semi-fixed, and only vary the dihedral angles. This is appropriate for a full-atom protein backbone, since the bond angles can be considered as fixed, while the (<it>&#966;</it>, <it>&#968;</it>) dihedral angles are variable. However, many <it>de novo </it>structure prediction methods use protein models that only consist of C<it>&#945; </it>atoms, or otherwise do not make use of all backbone atoms. These methods require a method that alters both bond and dihedral angles, since the pseudo bond angle between three consecutive C<it>&#945; </it>atoms also varies considerably.</p>
            </sec>
            <sec>
               <st>
                  <p>Results</p>
               </st>
               <p>Here we present a method that solves the loop closure problem for C<it>&#945; </it>only protein models. We developed a variant of Cyclic Coordinate Descent (CCD), an inverse kinematics method from the field of robotics, which was recently applied to the loop closure problem. Since the method alters both bond and dihedral angles, which is equivalent to applying a full rotation matrix, we call our method Full CCD (FCDD). FCCD replaces CCD's vector-based optimization of a rotation around an axis with a singular value decomposition-based optimization of a general rotation matrix. The method is easy to implement and numerically stable.</p>
            </sec>
            <sec>
               <st>
                  <p>Conclusion</p>
               </st>
               <p>We tested the method's performance on sets of random protein C<it>&#945; </it>segments between 5 and 30 amino acids long, and a number of loops of length 4, 8 and 12. FCCD is fast, has a high success rate and readily generates conformations close to those of real loops. The presence of constraints on the angles only has a small effect on the performance. A reference implementation of FCCD in Python is available as supplementary information.</p>
            </sec>
         </sec>
      </abs>
   </fm>
   <bdy>
      <sec>
         <st>
            <p>Background</p>
         </st>
         <p>Many protein structure prediction methods require an algorithm that is capable of constructing a new conformation for a short segment of the protein, without affecting the rest of the molecule. In other words, a protein fragment needs to be generated that seamlessly closes the gap between two given, fixed end points. This problem is generally called the <it>loop closure problem</it>, and was introduced in a classic paper by Go and Scheraga more than 30 years ago <abbrgrp><abbr bid="B1">1</abbr></abbrgrp>. It has been the continued subject of intensive research over many years due to its high practical importance in structure prediction.</p>
         <p>The loop closure problem arises in at least two different structure prediction contexts. In homology modelling, it is often necessary to rebuild certain loops that differ between the protein being modelled and the template protein <abbrgrp><abbr bid="B2">2</abbr></abbrgrp>. The modelled loop needs to bridge the gap between the end points of the template's loop.</p>
         <p>In <it>de novo </it>prediction, <it>local resampling </it>or <it>local moves </it>can be considered as a variant of the loop closure problem. Typically, the conformation of a protein segment needs to be changed without affecting the rest of the protein as a sampling step in a Markov Chain Monte Carlo (MCMC) procedure <abbrgrp><abbr bid="B3">3</abbr></abbrgrp>. In both homology and <it>de novo </it>structure prediction, the problem is however essentially the same.</p>
         <p>The classic article by Go and Scheraga <abbrgrp><abbr bid="B1">1</abbr></abbrgrp> describes an analytical solution to finding all possible solutions for a protein backbone of three residues. In this case, the degrees of freedom (DOF) comprise six dihedral angles, ie. the backbone's (<it>&#966;</it>, <it>&#968;</it>) angles. Another approach is to use a fragment library derived from the set of solved protein structures, and look for fragments or combinations of fragments that bridge the given fixed ends <abbrgrp><abbr bid="B4">4</abbr><abbr bid="B5">5</abbr><abbr bid="B6">6</abbr></abbrgrp>. More recently, the loop closure problem has been tackled using algorithms borrowed from the field of robotics, in particular inverse kinematics methods <abbrgrp><abbr bid="B7">7</abbr><abbr bid="B8">8</abbr><abbr bid="B9">9</abbr></abbrgrp>. Still other methods use various Monte Carlo chain perturbation approaches, often combined with analytical methods <abbrgrp><abbr bid="B10">10</abbr><abbr bid="B11">11</abbr><abbr bid="B3">3</abbr><abbr bid="B12">12</abbr></abbrgrp>. A good overview of loop closure methods and references can be found in Kolodny <it>et al. </it>(2005) <abbrgrp><abbr bid="B6">6</abbr></abbrgrp>.</p>
         <p>Most methods assume that one is working with a full-atom protein backbone with fixed bond angles and bond lengths, so the DOF consist solely of the backbone's (<it>&#966;</it>, <it>&#968;</it>) angles. However, in many cases not all the atoms of the protein backbone are present in the model. In particular, a large class of structure prediction, design and <it>in silico </it>folding methods makes use of drastically simplified models of protein structure <abbrgrp><abbr bid="B13">13</abbr><abbr bid="B14">14</abbr></abbrgrp>.</p>
         <p>A protein structure might for example be represented by a chain of C<it>&#945; </it>atoms or a chain of virtual atoms at the centers of mass of the side chain atoms <abbrgrp><abbr bid="B15">15</abbr></abbrgrp>. In these models, there is obviously no full-atom model of the protein's backbone available.</p>
         <p>In the case of C<it>&#945;</it>-only models, the structure can be described as a sequence of pseudo bonds, pseudo angles <it>&#952; </it>and pseudo dihedral angles <it>&#964; </it><abbrgrp><abbr bid="B16">16</abbr></abbrgrp>. Here, the term 'pseudo' indicates that the consecutive C<it>&#945;</it>'s are not actually connected by chemical bonds. As in the case of the protein's backbone, the pseudo bond lengths can be considered fixed (typically 3.8 &#197;). In contrast, the pseudo bond angles between three consecutive C<it>&#945; </it>atoms are most definitely not fixed, but vary between 1.4 and 2.7 radians. Hence, a C<it>&#945;</it>-only model of <it>N </it>residues can be represented by a sequence of <it>N </it>- 2 pseudo bond angles <it>&#952; </it>and <it>N </it>- 3 pseudo dihedral angles <it>&#964; </it>(Figure <figr fid="F1">1</figr>).</p>
         <fig id="F1">
            <title>
               <p>Figure 1</p>
            </title>
            <caption>
               <p>A protein segment's C<it>&#945; </it>trace</p>
            </caption>
            <text>
               <p>A protein segment's C<it>&#945; </it>trace. The C<it>&#945; </it>positions are numbered, and the pseudo bond angles <it>&#952; </it>and pseudo dihedrals <it>&#964; </it>are indicated. The segment has length 5, and is thus fully described by two pseudo dihedral and three pseudo bond angles.</p>
            </text>
            <graphic file="1471-2105-6-159-1"/>
         </fig>
         <p>Most inverse kinematics approaches assume that the DOF consist only of dihedral angles, and keep the bond angles fixed or semi-fixed. Hence, they cannot be readily applied to the C<it>&#945;</it>-only case without restricting the search space unnecessarily. In principle, fragment library based methods would apply, but here the problem of data sparsity arises <abbrgrp><abbr bid="B17">17</abbr><abbr bid="B18">18</abbr></abbrgrp>. Often, no suitable fragments can be found if the number of residues between the fixed ends becomes too high.</p>
         <p>In order to solve the loop closure problem in C<it>&#945; </it>space, we extend a particularly attractive approach that was recently introduced by Canutescu &amp; Dunbrack <abbrgrp><abbr bid="B8">8</abbr></abbrgrp>. The algorithm is called Cyclic Coordinate Descent (CCD), and like many other loop closure algorithms it derives from the field of robotics <abbrgrp><abbr bid="B19">19</abbr></abbrgrp>. As pointed out by Canutescu &amp; Dunbrack, the CCD algorithm is meant as a black box method that generates plausible protein segments that bridge two given, fixed endpoints. The final choice is typically made based upon the occurrence of steric clashes, applicable constraints (for example side chain conformations) and evaluation of the energy.</p>
         <p>The CCD algorithm does not directly generate conformations that bridge a given gap, but alters the dihedral angles of a given starting segment that already overlaps at the N-terminus such that it also closes at the C-terminus. The starting segment can be generated in many ways, for example by using a fragment library derived from real structures or by constructing random artificial fragments with reasonable conformations. Surprisingly, most protein loops can be closed efficiently by CCD starting from artificial loops constructed with random (<it>&#966;</it>, <it>&#968;</it>) dihedral angles <abbrgrp><abbr bid="B8">8</abbr></abbrgrp>.</p>
         <p>The CCD algorithm alters the (<it>&#966;</it>, <it>&#968;</it>) dihedral angles for every residue in the segment in an iterative way. In each step, the RMSD between the chain end and the overlap is minimized by optimizing one dihedral angle. Because only one dihedral angle is optimized at a time, the optimal rotation can be calculated efficiently using simple vector arithmetic.</p>
         <p>The list of advantages of CCD is impressive: it is conceptually simple and easy to implement, computationally fast, very flexible (ie. capable of incorporating various restraints and/or constraints) and numerically stable. Therefore, we decided to adopt the CCD algorithm for use with C<it>&#945;</it>-only models. Here, we describe a new version of CCD that optimizes both dihedral angles and bond angles, while maintaining all the advantages of the CCD method. We call our method Full Cyclic Coordinate Descent (FCCD), where "Full" indicates that both dihedral angles and bond angles are optimized, while only the bond lengths remain fixed. At the heart of the FCCD method lies a procedure to superimpose point sets with minimal Root Mean Square Deviation (RMSD), based on singular value decomposition. As is the case for the CCD algorithm, FCCD is not a modelling method in itself. Rather, it can be used as a method to generate possible conformations that can be evaluted using some kind of energy function.</p>
         <p>To test the algorithm, we selected random segments from a protein structure database, and evaluated the efficiency of closing the corresponding gaps starting from artificial segments with protein-like (<it>&#952;</it>, <it>&#964;</it>) angles. We show that FCCD is both fast and successful in solving the loop closure problem, even in the presence of angle constraints. Conformations close to those of real protein loops are readily generated. Finally, we discuss possible applications of the FCCD algorithm, and mention some possible disadvantages.</p>
      </sec>
      <sec>
         <st>
            <p>Results and discussion</p>
         </st>
         <sec>
            <st>
               <p>Overview of the FCCD algorithm</p>
            </st>
            <p>Figure <figr fid="F2">2</figr> illustrates the essence of the FCCD algorithm, and Table <tblr tid="T3">3</tblr> provides detailed pseudo code. Here we define some of the terms that will be used throughout the article, and provide a high level overview of the FCCD algorithm.</p>
            <fig id="F2">
               <title>
                  <p>Figure 2</p>
               </title>
               <caption>
                  <p>The action of the FCCD algorithm in C<it>&#945; </it>space</p>
               </caption>
               <text>
                  <p>The action of the FCCD algorithm in C<it>&#945; </it>space. The C<it>&#945; </it>traces of the moving, fixed and closed segments are shown in red, green and blue, respectively. The C<it>&#945; </it>atoms are represented as spheres. The labels <it>f</it><sub>0</sub>, <it>f</it><sub>1 </sub>and <it>f</it><sub>2 </sub>indicate the three fixed vectors at the N-terminus that are initially common between the fixed and moving segments. The loop is closed when the three C-terminal vectors of the moving segment (labelled <it>m</it><sub><it>N</it>-3</sub>, <it>m</it><sub><it>N</it>-2</sub>, <it>m</it><sub><it>N</it>-1</sub>) superimpose with an RMSD below the given threshold on the three C-terminal vectors of the fixed segment (labelled (<it>f</it><sub><it>N</it>-3</sub>, <it>f</it><sub><it>N</it>-2</sub>, <it>f</it><sub><it>N</it>-1</sub>). This figure and Figure 3 were made with PyMol <url>http://www.pymol.org</url>.</p>
               </text>
               <graphic file="1471-2105-6-159-2"/>
            </fig>
            <p>The <it>fixed segment </it>is a list of C<it>&#945; </it>vector positions that specifies the gap that needs to be bridged. Only the first and last three C<it>&#945; </it>positions, with corresponding vectors (<it>f</it><sub>0</sub>, <it>f</it><sub>1</sub>, <it>f</it><sub>2</sub>) and (<it>f</it><sub><it>N</it>-3</sub>, <it>f</it><sub><it>N</it>-2</sub>, <it>f</it><sub><it>N</it>-1</sub>) are relevant. We will call these two sets of vectors the <it>N- and C-terminal overlaps</it>, respectively. The <it>moving segment </it>is a list of C<it>&#945; </it>position vectors that will be manipulated by the FCCD algorithm to bridge the gap. The <it>closed segment </it>is the moving segment after its pseudo bond angles and pseudo dihedral angles were adjusted to bridge the N- and C-terminal overlaps of the fixed segment. The vectors describing the positions of the C<it>&#945; </it>atoms in a segment of <it>N </it>residues are labelled from 0 to <it>N </it>- 1.</p>
            <p>Initially, the first three vectors of the moving loop coincide with the first three vectors of the fixed segment, while the last three vectors are conceivably reasonably close to the last three vectors of the fixed loop. This last condition is however not very critical. The moving segment can be obtained using any algorithm that generates plausible C<it>&#945; </it>fragments, including deriving them from real protein structures. The fixed segment is typically derived from a real protein of interest, or a model in an MCMC simulation.</p>
            <p>The FCCD algorithm changes the pseudo bond angles and pseudo dihedral angles of the moving loop in such a way that the RMSD between the last three vectors of the moving loop (<it>m</it><sub><it>N</it>-3</sub>, <it>m</it><sub><it>N</it>-2</sub>, <it>m</it><sub><it>N</it>-1</sub>) and the last three vectors of the fixed loop (<it>f</it><sub><it>N</it>-3</sub>, <it>f</it><sub><it>N</it>-2</sub>, <it>f</it><sub><it>N</it>-1</sub>) is minimized, thereby seamlessly closing the gap.</p>
            <p>Note that we assume that the last three vectors of the moving and fixed segments can be superimposed with an RMSD of 0.0 &#197; (see Figure <figr fid="F2">2</figr>). In other words, the first and last pseudo bond angles in both segments are equal. It is however perfectly possible to use segments with different pseudo bond angles at these positions. Since the final possible minimum RMSD will be obviously greater than 0 in this case, the RMSD threshold needs to be adjusted accordingly.</p>
            <p>The algorithm proceeds in an iterative way. In each iteration, a vector <it>m</it><sub><it>i </it></sub>in the moving segment is chosen that will serve as a center of rotation. This chosen center of rotation will be called the pivot throughout this article. Then, the rotation matrix that rotates (<it>m</it><sub><it>N</it>-3</sub>, <it>m</it><sub><it>N</it>-2</sub>, <it>m</it><sub><it>N</it>-1</sub>) on (<it>f</it><sub><it>N</it>-3</sub>, <it>f</it><sub><it>N</it>-2</sub>, <it>f</it><sub><it>N</it>-1</sub>) around the pivot and resulting in minimum RMSD is determined, and applied to all the vectors <it>m</it><sub><it>j </it></sub>downstream <it>i </it>(with <it>i </it>&lt;<it>j </it>&lt;<it>N</it>). In the next iteration, a new pivot is chosen, and the procedure is repeated. The vectors in the chain can be traversed linearly, or they can be chosen at random in each iteration. The difference between FCCD and CCD is that the latter applies a general rotation to the chain using an atom in the chain as a pivot, while the former only applies a rotation around a single axis. The process is stopped when the RMSD falls below a given threshold.</p>
            <p>Finding the optimal (with respect to the RMSD) rotation matrix corresponds to finding one optimal pseudo bond angle and pseudo dihedral angle pair. We define <it>&#952;</it><sub><it>i </it></sub>as the bond angle of the vectors <it>m</it><sub><it>i</it>-1</sub>, <it>m</it><sub><it>i</it></sub>, <it>m</it><sub><it>i</it>+1 </sub>and <it>&#964;</it><sub><it>i </it></sub>as the dihedral angle of the vectors <it>m</it><sub><it>i</it>-2</sub>, <it>m</it><sub><it>i</it>-1</sub>, <it>m</it><sub><it>i</it></sub>, <it>m</it><sub><it>i</it>+1 </sub>(see Figure <figr fid="F1">1</figr> and <abbrgrp><abbr bid="B16">16</abbr></abbrgrp>). These definitions have the intuitive interpretation that altering (<it>&#952;</it><sub><it>i</it></sub>, <it>&#964;</it><sub><it>i</it></sub>) changes the positions of all C<it>&#945;</it>'s downstream from position <it>i</it>. Conversely, using pivot <it>m</it><sub><it>i </it></sub>and applying a rotation matrix to all the positions downstream from position <it>i </it>corresponds to changing pseudo bond angle <it>&#952;</it><sub><it>i</it></sub> and pseudo dihedral angle <it>&#964;</it><sub><it>i</it></sub>.</p>
            <p>For a segment of <it>N </it>C<it>&#945;</it>'s (with <it>N </it>> 3), the pseudo angles range from <it>&#952;</it><sub>1 </sub>to <it>&#952;</it><sub><it>N</it>-2 </sub>and the pseudo dihedrals range from <it>&#964;</it><sub>2 </sub>to <it>&#964;</it><sub><it>N</it>-2</sub>. Since the first and last bond angles of the moving segment are fixed, the pivot points range from position 2 to position <it>N </it>- 3 (with <it>N </it>> 4). The pseudo bond angle and pseudo dihedral angle pairs thus range from (<it>&#952;</it><sub>2</sub>, <it>&#964;</it><sub>2</sub>) to (<it>&#952;</it><sub><it>N</it>-3</sub>, <it>&#964;</it><sub><it>N</it>-3</sub>).</p>
            <p>Finding the optimal rotation matrix with respect to the RMSD of the C-terminal overlaps can be efficiently solved using singular value decomposition, as described in detail in the following section.</p>
         </sec>
         <sec>
            <st>
               <p>Finding the optimal rotation</p>
            </st>
            <p>In this section we discuss solving the following subproblem arising in the FCCD algorithm: given a chosen pivot point <it>i </it>in the moving segment, find the optimal (<it>&#952;</it><sub><it>i</it></sub>, <it>&#964;</it><sub><it>i</it></sub>) pair that minimizes the RMSD between the last three C<it>&#945; </it>vectors in the moving segment and the last three C<it>&#945; </it>vectors in the fixed segment. Recall that the (<it>&#952;</it><sub><it>i</it></sub>, <it>&#964;</it><sub><it>i</it></sub>) pair at position <it>i </it>corresponds to the pseudo bond angles and pseudo dihedral angles defined by vectors <it>m</it><sub><it>i</it>-1</sub>, <it>m</it><sub><it>i</it></sub>, <it>m</it><sub><it>i</it>+1 </sub>and <it>m</it><sub><it>i</it>-2</sub>, <it>m</it><sub><it>i</it>-1</sub>, <it>m</it><sub><it>i</it></sub>, <it>m</it><sub><it>i</it>+1 </sub>respectively.</p>
            <p>Finding the optimal (<it>&#952;</it><sub><it>i</it></sub>, <it>&#964;</it><sub><it>i</it></sub>) pair simply corresponds to finding the optimal rotation matrix using C<it>&#945; </it>position <it>i </it>as the center of rotation (see Figure <figr fid="F2">2</figr>). This reformulated problem can be solved by a variant of a well known algorithm to superimpose two point sets with minimum RMSD which makes use of singular value decomposition <abbrgrp><abbr bid="B20">20</abbr><abbr bid="B21">21</abbr></abbrgrp>. Below, we describe this adapted version of the algorithm.</p>
            <p>First, the C-terminal overlaps of the moving and the fixed segment need to be translated to the new origin that will be used as pivot for the optimal rotation. This new origin is the pivot vector <it>m</it><sub><it>i</it></sub> at C<it>&#945; </it>position <it>i </it>in the moving segment. The new vector coordinates of the moving and the fixed segments are put in two matrices (respectively <it>M </it>and <it>F</it>), with the coordinates of the vectors positioned column wise:</p>
            <p><it>M </it>= [<it>m</it><sub><it>N</it>-3 </sub>- <it>m</it><sub><it>i </it></sub>| <it>m</it><sub><it>N</it>-2 </sub>- <it>m</it><sub><it>i </it></sub>| <it>m</it><sub><it>N</it>-1 </sub>- <it>m</it><sub><it>i</it></sub>]</p>
            <p><it>F </it>= [<it>f</it><sub><it>N</it>-3 </sub>- <it>m</it><sub><it>i </it></sub>| <it>f</it><sub><it>N</it>-2 </sub>- <it>m</it><sub><it>i </it></sub>| <it>f</it><sub><it>N</it>-1 </sub>- <it>m</it><sub><it>i</it></sub>]</p>
            <p>Then, the correlation matrix &#931; is calculated using <it>M </it>and <it>F </it>:</p>
            <p>&#931; = <it>FM</it><sup><it>T</it></sup></p>
            <p>Any real <it>n </it>&#215; <it>m </it>matrix <it>A </it>can be written as the product of an orthogonal <it>n </it>&#215; <it>n </it>matrix <it>U</it>, a diagonal <it>n </it>&#215; <it>m </it>matrix <it>D </it>and an orthogonal <it>m </it>&#215; <it>m </it>matrix <it>V</it><sup><it>T </it></sup><abbrgrp><abbr bid="B22">22</abbr></abbrgrp>. Such a factorization is called a s<it>ingular value decomposition </it>of <it>A</it>. The positive diagonal elements of <it>D </it>are called the <it>singular values</it>. Hence, &#931; can be written as:</p>
            <p>&#931; = <it>UDV</it><sup><it>T</it></sup></p>
            <p>The optimal rotation &#915; is then calculated as follows:</p>
            <p>&#915; = <it>USV</it><sup><it>T</it></sup></p>
            <p>The value of the diagonal 3 &#215; 3 matrix <it>S </it>is determined by the product det(<it>U</it>)det(<it>V</it><sup><it>T</it></sup>), which is either 1 or -1. If this product is -1 then <it>S </it>= diag(1, 1, -1), else <it>S </it>is the 3 &#215; 3 unit matrix. The matrix <it>S </it>ensures that &#915; is always a pure rotation, and not a rotation-inversion <abbrgrp><abbr bid="B21">21</abbr></abbrgrp>.</p>
            <p>In order to apply to all the vectors that are downstream from the pivot point i, these vectors are first translated to the origin of the rotation (ie. pivot point <it>m</it><sub><it>i</it></sub>), left multiplied by &#915; and finally translated back to the original origin:</p>
            <p>
               <graphic file="1471-2105-6-159-i1.gif"/>
            </p>
            <p>where <it>i </it>&lt;<it>j </it>&lt;<it>N</it>.</p>
         </sec>
         <sec>
            <st>
               <p>Adding angle constraints to FCCD</p>
            </st>
            <p>It is straightforward to constrain the (<it>&#952;</it>, <it>&#964;</it>) angles to a given probability distribution. For each rotation matrix &#915;, the resulting new pseudo bond angles and dihedral angles can easily be calculated. The new angles can for example be accepted or rejected using a simple rejection sampling Monte Carlo scheme, comparing the probabilities of the previous pair (<it>&#952;</it><sup><it>prev</it></sup>, <it>&#964;</it><sup><it>prev</it></sup>) with that of the next pair (<it>&#952;</it><sup><it>next</it></sup>, <it>&#964;</it><sup><it>next</it></sup>). If <it>P </it>(<it>&#952;</it><sup><it>next</it></sup>, <it>&#964;</it><sup><it>next</it></sup>) > <it>P </it>(<it>&#952;</it><sup><it>prev</it></sup>, <it>&#964;</it><sup><it>prev</it></sup>) the change is accepted, otherwise it is accepted with a chance proportional to <it>P </it>(<it>&#952;</it><sup><it>next</it></sup>, <it>&#964;</it><sup><it>next</it></sup>) / <it>P </it>(<it>&#952;</it><sup><it>prev</it></sup>, <it>&#964;</it><sup><it>prev</it></sup>). A similar approach was used by Canutescu &amp; Dunbrack <abbrgrp><abbr bid="B8">8</abbr></abbrgrp>, and we describe its performance in combination with FCCD in the following section.</p>
            <p>More advanced methods could take the probability of the sequence of angles into account as well, for example using a Hidden Markov Model of the backbone <abbrgrp><abbr bid="B23">23</abbr></abbrgrp>. The pseudo code in Table <tblr tid="T3">3</tblr> illustrates accepting/rejecting rotations using an unspecified 'accept' function, whose details will depend on the application.</p>
         </sec>
         <sec>
            <st>
               <p>FCCD's performance</p>
            </st>
            <p>In order to evaluate the general efficiency of the method, we selected random fragments of various sizes from a representative database of protein structures, and used these fragments as fixed segments. Hence, the evaluation described below is not limited to loops, but extends to random protein segments. This is a relevant test, since local moves in a typical MCMC simulation are indeed performed on random segments.</p>
            <p>The fixed segments were sampled from a dataset of fold representatives (see Methods). First we selected a random fold representative, and subsequently extracted a random continuous fragment of suitable length. The lengths varied from 10 to 30 with a step size of 5. It should be noted that the length of the segment here refers to the number of C<it>&#945; </it>atoms between the ends that need to be bridged.</p>
            <p>The moving segments were generated using random dihedral and bond angles in regions accessible to proteins (see previous section). This was done by sampling the (<it>&#952;</it><sub><it>i</it></sub>, <it>&#964;</it><sub><it>i</it></sub>) pairs according to a probability distribution derived from a set of representative protein structures (see Methods). The bond length was fixed at 3.8 &#197;, in tune with the consensus C<it>&#945;</it>-C<it>&#945; </it>distance in protein structures. The last bond angle in the moving segment was chosen equal to the last bond angle in the fixed loop to make a final RMSD of 0.0 &#197; possible. The RMSD threshold was 0.1 &#197;. The maximum number of iterations was set to 1000, where one iteration is a sweep over all positions. We ran the FCCD program on 1000 different fixed segments. Table <tblr tid="T1">1</tblr> summarizes the results.</p>
            <tbl id="T1">
               <title>
                  <p>Table 1</p>
               </title>
               <caption>
                  <p>Performance of the FCCD algorithm for various segment lengths. The first and second number in columns 2&#8211;4 refer to unconstrained and constrained FCCD, respectively. Columns 2 and 3 respectively show the average time and number of iterations needed for closing a single segment successfully. The percentage of loops successfully closed in under 1000 iterations is shown in the last column.</p>
               </caption>
               <tblbdy cols="4">
                  <r>
                     <c ca="center">
                        <p>Segment length</p>
                     </c>
                     <c ca="center">
                        <p>Average time (ms)</p>
                     </c>
                     <c ca="center">
                        <p>Average iterations</p>
                     </c>
                     <c ca="center">
                        <p>% Closed</p>
                     </c>
                  </r>
                  <r>
                     <c cspan="4">
                        <hr/>
                     </c>
                  </r>
                  <r>
                     <c ca="center">
                        <p>5</p>
                     </c>
                     <c ca="center">
                        <p>4.5/51.7</p>
                     </c>
                     <c ca="center">
                        <p>14.0/27.0</p>
                     </c>
                     <c ca="center">
                        <p>99.90/86.50</p>
                     </c>
                  </r>
                  <r>
                     <c ca="center">
                        <p>10</p>
                     </c>
                     <c ca="center">
                        <p>5.2/28.3</p>
                     </c>
                     <c ca="center">
                        <p>10.5/16.8</p>
                     </c>
                     <c ca="center">
                        <p>99.40/98.20</p>
                     </c>
                  </r>
                  <r>
                     <c ca="center">
                        <p>15</p>
                     </c>
                     <c ca="center">
                        <p>5.6/28.6</p>
                     </c>
                     <c ca="center">
                        <p>7.8/12.1</p>
                     </c>
                     <c ca="center">
                        <p>99.60/99.40</p>
                     </c>
                  </r>
                  <r>
                     <c ca="center">
                        <p>20</p>
                     </c>
                     <c ca="center">
                        <p>6.2/27.1</p>
                     </c>
                     <c ca="center">
                        <p>6.3/9.0</p>
                     </c>
                     <c ca="center">
                        <p>99.80/99.40</p>
                     </c>
                  </r>
                  <r>
                     <c ca="center">
                        <p>25</p>
                     </c>
                     <c ca="center">
                        <p>7.6/31.7</p>
                     </c>
                     <c ca="center">
                        <p>5.5/7.6</p>
                     </c>
                     <c ca="center">
                        <p>99.00/99.90</p>
                     </c>
                  </r>
                  <r>
                     <c ca="center">
                        <p>30</p>
                     </c>
                     <c ca="center">
                        <p>7.1/31.0</p>
                     </c>
                     <c ca="center">
                        <p>4.4/6.3</p>
                     </c>
                     <c ca="center">
                        <p>99.70/99.40</p>
                     </c>
                  </r>
               </tblbdy>
            </tbl>
            <p>A first observation is the effect of the angle constraints. These slow down FCCD with a factor of 10 for small segments (5 residues) and roughly a factor of 5 for larger segments (10 residues or more). Nonetheless FCCD including constraints remains quite speed efficient: small five residue segments are on average closed in about 50 ms, while larger segments (from 10 to 30 residues) are closed considerably faster (on average in about 30 ms). The explanation for this is of course that it is easier to close large segments because they have more DOF. Hence, FCCD, like CCD, is fast and easily handles large segments efficiently.</p>
            <p>Overall, the success rate of FCCD is excellent, and very little affected by constraints. For 5 residue segments, adding constraints diminishes the number of successfully closed segments from 99.9% to 86.5%. This effect is however much less pronounced for larger segments: more than 98% percent of the moving/fixed segment pairs can be successfully closed. In short, FCCD is both speed efficient and has a high success rate, even in the presence of constraints.</p>
         </sec>
         <sec>
            <st>
               <p>Evaluation of FCCD's sampling space</p>
            </st>
            <p>Does FCCD potentially generate realistic protein conformations? FCCD could be used to propose possible conformations that are subsequently evaluated by an energy function. In this context, it is of course imperative to generate realistic conformations. To answer this question, we evaluate FCCD's ability to generate closed segments that are close to real protein loops. We used 30 real loops with lengths of 4, 8 and 12 residues as fixed segments. The loop length refers to the number of residues between the N- and C-terminal overlaps.</p>
            <p>FCCD was applied using (<it>&#952;</it>, <it>&#964;</it>) constraints and an RMSD threshold of 0.1 &#197;. The maximum number of iterations was set to 1000. For each loop, we attempted to generate closed segments from 1000 random moving segments within the allowed number of iterations. The moving segments were generated as described in the previous section. For all 30 loop cases, we then identified the closed segment that resembled the input loop best as judged by the RMSD. For the calculation of the RMSD, we included the N-and C-terminal overlaps. The results are shown in Table <tblr tid="T2">2</tblr>, and the best fitting loops for each loop size are shown in Figure <figr fid="F3">3</figr>.</p>
            <tbl id="T2">
               <title>
                  <p>Table 2</p>
               </title>
               <caption>
                  <p>Minimum RMSD (out of 1000 tries) between a fixed segment derived from a protein structure and a closed segment generated by FCCD. The length of the loops is shown between parentheses in the upper row.</p>
               </caption>
               <tblbdy cols="6">
                  <r>
                     <c ca="left">
                        <p>Loop (4)</p>
                     </c>
                     <c ca="left">
                        <p>RMSD</p>
                     </c>
                     <c ca="left">
                        <p>Loop (8)</p>
                     </c>
                     <c ca="left">
                        <p>RMSD</p>
                     </c>
                     <c ca="left">
                        <p>Loop (12)</p>
                     </c>
                     <c ca="left">
                        <p>RMSD</p>
                     </c>
                  </r>
                  <r>
                     <c cspan="6">
                        <hr/>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1dvj, A, 20&#8211;23</p>
                     </c>
                     <c ca="left">
                        <p>0.59</p>
                     </c>
                     <c ca="left">
                        <p>1cru, A, 85&#8211;92</p>
                     </c>
                     <c ca="left">
                        <p>2.31</p>
                     </c>
                     <c ca="left">
                        <p>1cru, A, 358&#8211;369</p>
                     </c>
                     <c ca="left">
                        <p>3.37</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1dys, A, 47&#8211;50</p>
                     </c>
                     <c ca="left">
                        <p>0.67</p>
                     </c>
                     <c ca="left">
                        <p>1ctq, A, 144&#8211;151</p>
                     </c>
                     <c ca="left">
                        <p>2.22</p>
                     </c>
                     <c ca="left">
                        <p>1ctq, A, 26&#8211;37</p>
                     </c>
                     <c ca="left">
                        <p>2.40</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1egu, A, 404&#8211;407</p>
                     </c>
                     <c ca="left">
                        <p>0.61</p>
                     </c>
                     <c ca="left">
                        <p>1d8w, A, 334&#8211;341</p>
                     </c>
                     <c ca="left">
                        <p>2.04</p>
                     </c>
                     <c ca="left">
                        <p>1d4o, A, 88&#8211;99</p>
                     </c>
                     <c ca="left">
                        <p>3.20</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1ej0, A, 74&#8211;77</p>
                     </c>
                     <c ca="left">
                        <p>0.61</p>
                     </c>
                     <c ca="left">
                        <p>1ds1, A, 20&#8211;27</p>
                     </c>
                     <c ca="left">
                        <p>2.20</p>
                     </c>
                     <c ca="left">
                        <p>1d8w, A, 43&#8211;54</p>
                     </c>
                     <c ca="left">
                        <p>2.74</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1i0h, A, 123&#8211;126</p>
                     </c>
                     <c ca="left">
                        <p>0.73</p>
                     </c>
                     <c ca="left">
                        <p>1gk8, A, 122&#8211;129</p>
                     </c>
                     <c ca="left">
                        <p>2.20</p>
                     </c>
                     <c ca="left">
                        <p>1ds1, A, 282&#8211;293</p>
                     </c>
                     <c ca="left">
                        <p>3.16</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1id0, A, 405&#8211;408</p>
                     </c>
                     <c ca="left">
                        <p>0.66</p>
                     </c>
                     <c ca="left">
                        <p>1i0h, A, 145&#8211;152</p>
                     </c>
                     <c ca="left">
                        <p>2.42</p>
                     </c>
                     <c ca="left">
                        <p>1dys, A, 291&#8211;302</p>
                     </c>
                     <c ca="left">
                        <p>2.90</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1qnr, A, 195&#8211;198</p>
                     </c>
                     <c ca="left">
                        <p>0.54</p>
                     </c>
                     <c ca="left">
                        <p>1ixh, 106&#8211;113</p>
                     </c>
                     <c ca="left">
                        <p>1.98</p>
                     </c>
                     <c ca="left">
                        <p>1egu, A, 508&#8211;519</p>
                     </c>
                     <c ca="left">
                        <p>3.06</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1qop, A, 44&#8211;47</p>
                     </c>
                     <c ca="left">
                        <p>0.58</p>
                     </c>
                     <c ca="left">
                        <p>1lam, 420&#8211;427</p>
                     </c>
                     <c ca="left">
                        <p>2.16</p>
                     </c>
                     <c ca="left">
                        <p>1f74, A, 11&#8211;22</p>
                     </c>
                     <c ca="left">
                        <p>3.12</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1tca, 95&#8211;98</p>
                     </c>
                     <c ca="left">
                        <p>0.76</p>
                     </c>
                     <c ca="left">
                        <p>1qop, B, 14&#8211;21</p>
                     </c>
                     <c ca="left">
                        <p>2.17</p>
                     </c>
                     <c ca="left">
                        <p>1q1w, A, 31&#8211;42</p>
                     </c>
                     <c ca="left">
                        <p>3.04</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1thf, D, 121&#8211;124</p>
                     </c>
                     <c ca="left">
                        <p>0.56</p>
                     </c>
                     <c ca="left">
                        <p>3chb, D, 51&#8211;58</p>
                     </c>
                     <c ca="left">
                        <p>1.97</p>
                     </c>
                     <c ca="left">
                        <p>1qop, A, 175&#8211;186</p>
                     </c>
                     <c ca="left">
                        <p>2.97</p>
                     </c>
                  </r>
                  <r>
                     <c cspan="6">
                        <hr/>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>Average RMSD</p>
                     </c>
                     <c ca="left">
                        <p>0.63</p>
                     </c>
                     <c ca="left">
                        <p>Average RMSD</p>
                     </c>
                     <c ca="left">
                        <p>2.17</p>
                     </c>
                     <c ca="left">
                        <p>Average RMSD</p>
                     </c>
                     <c ca="left">
                        <p>3.00</p>
                     </c>
                  </r>
               </tblbdy>
            </tbl>
            <tbl id="T3">
               <title>
                  <p>Table 3</p>
               </title>
               <tblbdy cols="1">
                  <r>
                     <c ca="left">
                        <p><it>maxit </it>= maximum number of iterations</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>moving </it>= <it>N </it>&#215; 3 matrix of C<it>&#945; </it>positions in moving segment</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>fixed </it>= <it>N </it>&#215; 3 matrix of C<it>&#945; </it>positions in fixed segment</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>threshold </it>= desired minimum RMSD</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>N </it>= length of the segments</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>M </it>= 3 &#215; 3 matrix (centered coordinates along columns)</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>F </it>= 3 &#215; 3 matrix (centered coordinates along columns)</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><it>S </it>= diag(1, 1, -1)</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><b>repeat </b><it>maxit</it>:</p>
                     </c>
                  </r>
                  <r>
                     <c indent="1" ca="left">
                        <p># Start iteration over pivots</p>
                     </c>
                  </r>
                  <r>
                     <c indent="1" ca="left">
                        <p><b>for </b><it>i </it><b>from </b>2 <b>to </b><it>N</it>-3:</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><it>pivot </it>= <it>moving</it>[<it>i</it>,:]</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b># </b>Make pivot point origin</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b>for </b><it>j </it><b>from </b>0 <b>to </b>2:</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><it>M </it>[:,<it>j</it>] = <it>moving </it>[<it>N</it>-3+<it>j</it>,:]-<it>pivot</it></p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><it>F </it>[:,<it>j</it>] = <it>fixed </it>[<it>N</it>-3+<it>j</it>,:]-<it>pivot</it></p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b># </b>Find the rotation &#915; that minimizes RMSD</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p>&#931; = <it>FM</it><sup><it>T</it></sup></p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><it>U</it>, <it>D</it>, <it>V</it><sup><it>T </it></sup>= <b>svd</b>(&#931;)</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b># </b>Check for reflection</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b>if </b>det(<it>U</it>)det(<it>V</it><sup><it>T</it></sup>)&lt;0:</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><it>U </it>= <it>US</it></p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p>&#915; = <it>UV</it><sup><it>T</it></sup></p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b># </b>Evaluate and apply rotation</p>
                     </c>
                  </r>
                  <r>
                     <c indent="2" ca="left">
                        <p><b>if </b>accept(&#915;):</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><b># </b>Apply the rotation to the moving segment</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><b>for </b><it>j </it><b>from </b><it>i</it>+1 to <it>N</it>-1:</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><it>&#160;&#160;&#160;moving </it>[<it>j</it>,:] = &#915; (<it>moving </it>[<it>j</it>,:]-<it>pivot</it>)+<it>pivot</it></p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><it>rmsd </it>= calc_rmsd(<it>moving </it>[<it>N</it>-3,:], <it>fixed </it>[<it>N</it>-3,:])</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><b># </b>Stop if RMSD below threshold</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><b>if </b><it>rmsd</it>&lt;<it>threshold</it>:</p>
                     </c>
                  </r>
                  <r>
                     <c indent="3" ca="left">
                        <p><b>&#160;&#160;&#160;return </b><it>moving</it>, <it>rmsd</it></p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p># Failed: RMSD threshold not reached before maxit</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p><b>return </b>0</p>
                     </c>
                  </r>
               </tblbdy>
               <tblfn>
                  <p>The accept function rejects or accepts the proposed rotation, based on the resulting (<it>&#952;</it>, <it>&#964;</it>) pair. The svd function performs singular value decomposition, and calc_rmsd calculates the RMSD between two lists of vectors.</p>
               </tblfn>
            </tbl>
            <tbl id="T4">
               <title>
                  <p>Table 4</p>
               </title>
               <caption>
                  <p>SABMark identifiers of the 236 structures used as fold representatives</p>
               </caption>
               <tblbdy cols="10">
                  <r>
                     <c ca="left">
                        <p>1ew6a_</p>
                     </c>
                     <c ca="left">
                        <p>1ail__</p>
                     </c>
                     <c ca="left">
                        <p>1l1la_</p>
                     </c>
                     <c ca="left">
                        <p>1kid__</p>
                     </c>
                     <c ca="left">
                        <p>1n8yc1</p>
                     </c>
                     <c ca="left">
                        <p>1gzhb1</p>
                     </c>
                     <c ca="left">
                        <p>1e5da1</p>
                     </c>
                     <c ca="left">
                        <p>1ep3b2</p>
                     </c>
                     <c ca="left">
                        <p>1ihoa_</p>
                     </c>
                     <c ca="left">
                        <p>1m0wa1</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1dhs__</p>
                     </c>
                     <c ca="left">
                        <p>1gpua2</p>
                     </c>
                     <c ca="left">
                        <p>2lefa_</p>
                     </c>
                     <c ca="left">
                        <p>1nsta_</p>
                     </c>
                     <c ca="left">
                        <p>1eaf__</p>
                     </c>
                     <c ca="left">
                        <p>1iiba_</p>
                     </c>
                     <c ca="left">
                        <p>1d5ra2</p>
                     </c>
                     <c ca="left">
                        <p>1foha3</p>
                     </c>
                     <c ca="left">
                        <p>1gpua3</p>
                     </c>
                     <c ca="left">
                        <p>1crza2</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>3pvia_</p>
                     </c>
                     <c ca="left">
                        <p>1i6pa_</p>
                     </c>
                     <c ca="left">
                        <p>1e4ft1</p>
                     </c>
                     <c ca="left">
                        <p>1kx5d_</p>
                     </c>
                     <c ca="left">
                        <p>2pth__</p>
                     </c>
                     <c ca="left">
                        <p>1lu9a2</p>
                     </c>
                     <c ca="left">
                        <p>1dkla_</p>
                     </c>
                     <c ca="left">
                        <p>1fsga_</p>
                     </c>
                     <c ca="left">
                        <p>1m2oa3</p>
                     </c>
                     <c ca="left">
                        <p>2dpma_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1ajsa_</p>
                     </c>
                     <c ca="left">
                        <p>1fxoa_</p>
                     </c>
                     <c ca="left">
                        <p>3tgl__</p>
                     </c>
                     <c ca="left">
                        <p>1bx4a_</p>
                     </c>
                     <c ca="left">
                        <p>1mtyg_</p>
                     </c>
                     <c ca="left">
                        <p>1duvg2</p>
                     </c>
                     <c ca="left">
                        <p>1qopb_</p>
                     </c>
                     <c ca="left">
                        <p>1iata_</p>
                     </c>
                     <c ca="left">
                        <p>1k2yx2</p>
                     </c>
                     <c ca="left">
                        <p>1f0ka_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1ayl_1</p>
                     </c>
                     <c ca="left">
                        <p>1toaa_</p>
                     </c>
                     <c ca="left">
                        <p>8abp__</p>
                     </c>
                     <c ca="left">
                        <p>1nh8a1</p>
                     </c>
                     <c ca="left">
                        <p>1bi5a2</p>
                     </c>
                     <c ca="left">
                        <p>2mhr__</p>
                     </c>
                     <c ca="left">
                        <p>1a2pa_</p>
                     </c>
                     <c ca="left">
                        <p>3lzt__</p>
                     </c>
                     <c ca="left">
                        <p>1dkia_</p>
                     </c>
                     <c ca="left">
                        <p>1e7la2</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1bf4a_</p>
                     </c>
                     <c ca="left">
                        <p>1bb8__</p>
                     </c>
                     <c ca="left">
                        <p>1kpf__</p>
                     </c>
                     <c ca="left">
                        <p>1mu5a2</p>
                     </c>
                     <c ca="left">
                        <p>1lfda_</p>
                     </c>
                     <c ca="left">
                        <p>1gpea2</p>
                     </c>
                     <c ca="left">
                        <p>1jqca_</p>
                     </c>
                     <c ca="left">
                        <p>1a2va2</p>
                     </c>
                     <c ca="left">
                        <p>1jfma_</p>
                     </c>
                     <c ca="left">
                        <p>1ll7a2</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1cjxa1</p>
                     </c>
                     <c ca="left">
                        <p>1lo7a_</p>
                     </c>
                     <c ca="left">
                        <p>1fm0e_</p>
                     </c>
                     <c ca="left">
                        <p>1fs1b2</p>
                     </c>
                     <c ca="left">
                        <p>1o0wa2</p>
                     </c>
                     <c ca="left">
                        <p>1dtja_</p>
                     </c>
                     <c ca="left">
                        <p>1k0ra3</p>
                     </c>
                     <c ca="left">
                        <p>1evsa_</p>
                     </c>
                     <c ca="left">
                        <p>1jpdx2</p>
                     </c>
                     <c ca="left">
                        <p>1qd1a1</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1d5ya3</p>
                     </c>
                     <c ca="left">
                        <p>1h3fa2</p>
                     </c>
                     <c ca="left">
                        <p>1iq0a3</p>
                     </c>
                     <c ca="left">
                        <p>1tig__</p>
                     </c>
                     <c ca="left">
                        <p>1xxaa_</p>
                     </c>
                     <c ca="left">
                        <p>1ck9a_</p>
                     </c>
                     <c ca="left">
                        <p>1gyxa_</p>
                     </c>
                     <c ca="left">
                        <p>1e5qa2</p>
                     </c>
                     <c ca="left">
                        <p>1ivsa2</p>
                     </c>
                     <c ca="left">
                        <p>1qbea_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>3grs_3</p>
                     </c>
                     <c ca="left">
                        <p>1f08a_</p>
                     </c>
                     <c ca="left">
                        <p>1c7ka_</p>
                     </c>
                     <c ca="left">
                        <p>1lkka_</p>
                     </c>
                     <c ca="left">
                        <p>1dq3a3</p>
                     </c>
                     <c ca="left">
                        <p>1uox_1</p>
                     </c>
                     <c ca="left">
                        <p>12asa_</p>
                     </c>
                     <c ca="left">
                        <p>1bob__</p>
                     </c>
                     <c ca="left">
                        <p>1m4ja_</p>
                     </c>
                     <c ca="left">
                        <p>1dv5a_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1f5ma_</p>
                     </c>
                     <c ca="left">
                        <p>1k2ea_</p>
                     </c>
                     <c ca="left">
                        <p>1ei1a2</p>
                     </c>
                     <c ca="left">
                        <p>1jdw__</p>
                     </c>
                     <c ca="left">
                        <p>1ln1a_</p>
                     </c>
                     <c ca="left">
                        <p>2pola2</p>
                     </c>
                     <c ca="left">
                        <p>1f0ia1</p>
                     </c>
                     <c ca="left">
                        <p>1rl6a1</p>
                     </c>
                     <c ca="left">
                        <p>1fvia2</p>
                     </c>
                     <c ca="left">
                        <p>1j7la_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1is2a1</p>
                     </c>
                     <c ca="left">
                        <p>1e8ga2</p>
                     </c>
                     <c ca="left">
                        <p>1qr0a1</p>
                     </c>
                     <c ca="left">
                        <p>2dnja_</p>
                     </c>
                     <c ca="left">
                        <p>1kuua_</p>
                     </c>
                     <c ca="left">
                        <p>1qh5a_</p>
                     </c>
                     <c ca="left">
                        <p>1ii7a_</p>
                     </c>
                     <c ca="left">
                        <p>1b8pa2</p>
                     </c>
                     <c ca="left">
                        <p>1j7na3</p>
                     </c>
                     <c ca="left">
                        <p>1chua3</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1f00i3</p>
                     </c>
                     <c ca="left">
                        <p>1grj_1</p>
                     </c>
                     <c ca="left">
                        <p>1nkd__</p>
                     </c>
                     <c ca="left">
                        <p>1mwxa3</p>
                     </c>
                     <c ca="left">
                        <p>1jp4a_</p>
                     </c>
                     <c ca="left">
                        <p>1ih7a2</p>
                     </c>
                     <c ca="left">
                        <p>1eula2</p>
                     </c>
                     <c ca="left">
                        <p>1gnla_</p>
                     </c>
                     <c ca="left">
                        <p>1maz__</p>
                     </c>
                     <c ca="left">
                        <p>2por__</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>4htci_</p>
                     </c>
                     <c ca="left">
                        <p>1es7b_</p>
                     </c>
                     <c ca="left">
                        <p>1tocr1</p>
                     </c>
                     <c ca="left">
                        <p>1d1la_</p>
                     </c>
                     <c ca="left">
                        <p>1fd3a_</p>
                     </c>
                     <c ca="left">
                        <p>1i8na_</p>
                     </c>
                     <c ca="left">
                        <p>1h8pa1</p>
                     </c>
                     <c ca="left">
                        <p>4sgbi_</p>
                     </c>
                     <c ca="left">
                        <p>1fltv_</p>
                     </c>
                     <c ca="left">
                        <p>1quba1</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1d4va3</p>
                     </c>
                     <c ca="left">
                        <p>1tpg_2</p>
                     </c>
                     <c ca="left">
                        <p>1iuaa_</p>
                     </c>
                     <c ca="left">
                        <p>1fv5a_</p>
                     </c>
                     <c ca="left">
                        <p>1mdya_</p>
                     </c>
                     <c ca="left">
                        <p>1zmec1</p>
                     </c>
                     <c ca="left">
                        <p>1fjgn_</p>
                     </c>
                     <c ca="left">
                        <p>1eska_</p>
                     </c>
                     <c ca="left">
                        <p>1i50i2</p>
                     </c>
                     <c ca="left">
                        <p>1fbva4</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1dmc__</p>
                     </c>
                     <c ca="left">
                        <p>1e53a_</p>
                     </c>
                     <c ca="left">
                        <p>1ezvb1</p>
                     </c>
                     <c ca="left">
                        <p>1jeqa1</p>
                     </c>
                     <c ca="left">
                        <p>1k3ea_</p>
                     </c>
                     <c ca="left">
                        <p>1rec__</p>
                     </c>
                     <c ca="left">
                        <p>1lm5a_</p>
                     </c>
                     <c ca="left">
                        <p>1k82a1</p>
                     </c>
                     <c ca="left">
                        <p>1jaja_</p>
                     </c>
                     <c ca="left">
                        <p>1m0ka_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1c0va_</p>
                     </c>
                     <c ca="left">
                        <p>1kqfc_</p>
                     </c>
                     <c ca="left">
                        <p>1ocrk_</p>
                     </c>
                     <c ca="left">
                        <p>1h67a_</p>
                     </c>
                     <c ca="left">
                        <p>2cpga_</p>
                     </c>
                     <c ca="left">
                        <p>1ljra1</p>
                     </c>
                     <c ca="left">
                        <p>1brwa1</p>
                     </c>
                     <c ca="left">
                        <p>1hs7a_</p>
                     </c>
                     <c ca="left">
                        <p>2cbla2</p>
                     </c>
                     <c ca="left">
                        <p>1jmxa2</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1hyp__</p>
                     </c>
                     <c ca="left">
                        <p>1cuk_2</p>
                     </c>
                     <c ca="left">
                        <p>1ecwa_</p>
                     </c>
                     <c ca="left">
                        <p>1l9la_</p>
                     </c>
                     <c ca="left">
                        <p>1g7da_</p>
                     </c>
                     <c ca="left">
                        <p>1jkw_1</p>
                     </c>
                     <c ca="left">
                        <p>1dgna_</p>
                     </c>
                     <c ca="left">
                        <p>1iqpa1</p>
                     </c>
                     <c ca="left">
                        <p>1pa2a_</p>
                     </c>
                     <c ca="left">
                        <p>1ko9a1</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1f1za1</p>
                     </c>
                     <c ca="left">
                        <p>1ks9a1</p>
                     </c>
                     <c ca="left">
                        <p>2sqca2</p>
                     </c>
                     <c ca="left">
                        <p>1d2ta_</p>
                     </c>
                     <c ca="left">
                        <p>1h3la_</p>
                     </c>
                     <c ca="left">
                        <p>1wer__</p>
                     </c>
                     <c ca="left">
                        <p>1b3ua_</p>
                     </c>
                     <c ca="left">
                        <p>1n1ba2</p>
                     </c>
                     <c ca="left">
                        <p>1poc__</p>
                     </c>
                     <c ca="left">
                        <p>1e79i_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1m1qa_</p>
                     </c>
                     <c ca="left">
                        <p>1enwa_</p>
                     </c>
                     <c ca="left">
                        <p>1g4ma1</p>
                     </c>
                     <c ca="left">
                        <p>1e5ba_</p>
                     </c>
                     <c ca="left">
                        <p>1qhoa2</p>
                     </c>
                     <c ca="left">
                        <p>1kv7a2</p>
                     </c>
                     <c ca="left">
                        <p>1l4ia2</p>
                     </c>
                     <c ca="left">
                        <p>1c8da_</p>
                     </c>
                     <c ca="left">
                        <p>1amm_1</p>
                     </c>
                     <c ca="left">
                        <p>1ca1_2</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1phm_2</p>
                     </c>
                     <c ca="left">
                        <p>1d7pm_</p>
                     </c>
                     <c ca="left">
                        <p>1jjcb2</p>
                     </c>
                     <c ca="left">
                        <p>1flca1</p>
                     </c>
                     <c ca="left">
                        <p>1gr3a_</p>
                     </c>
                     <c ca="left">
                        <p>1mjsa_</p>
                     </c>
                     <c ca="left">
                        <p>1a8d_1</p>
                     </c>
                     <c ca="left">
                        <p>1lf6a2</p>
                     </c>
                     <c ca="left">
                        <p>1fqta_</p>
                     </c>
                     <c ca="left">
                        <p>1jb0e_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1jh2a_</p>
                     </c>
                     <c ca="left">
                        <p>1lcya1</p>
                     </c>
                     <c ca="left">
                        <p>1mgqa_</p>
                     </c>
                     <c ca="left">
                        <p>1hcia1</p>
                     </c>
                     <c ca="left">
                        <p>1b3qa2</p>
                     </c>
                     <c ca="left">
                        <p>1jlxa1</p>
                     </c>
                     <c ca="left">
                        <p>1dar_1</p>
                     </c>
                     <c ca="left">
                        <p>1exma2</p>
                     </c>
                     <c ca="left">
                        <p>1ejea_</p>
                     </c>
                     <c ca="left">
                        <p>1agja_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1e79d2</p>
                     </c>
                     <c ca="left">
                        <p>2rspa_</p>
                     </c>
                     <c ca="left">
                        <p>1h0ha1</p>
                     </c>
                     <c ca="left">
                        <p>1gtra1</p>
                     </c>
                     <c ca="left">
                        <p>2erl__</p>
                     </c>
                     <c ca="left">
                        <p>1btn__</p>
                     </c>
                     <c ca="left">
                        <p>1lf7a_</p>
                     </c>
                     <c ca="left">
                        <p>1jmxa5</p>
                     </c>
                     <c ca="left">
                        <p>1crua_</p>
                     </c>
                     <c ca="left">
                        <p>1m1xa4</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1hx0a1</p>
                     </c>
                     <c ca="left">
                        <p>1goia1</p>
                     </c>
                     <c ca="left">
                        <p>1ciy_2</p>
                     </c>
                     <c ca="left">
                        <p>1daba_</p>
                     </c>
                     <c ca="left">
                        <p>3tdt__</p>
                     </c>
                     <c ca="left">
                        <p>1gg3a1</p>
                     </c>
                     <c ca="left">
                        <p>1pmi__</p>
                     </c>
                     <c ca="left">
                        <p>1bdo__</p>
                     </c>
                     <c ca="left">
                        <p>1h3ia2</p>
                     </c>
                     <c ca="left">
                        <p>1gppa_</p>
                     </c>
                  </r>
                  <r>
                     <c ca="left">
                        <p>1f39a_</p>
                     </c>
                     <c ca="left">
                        <p>1k6wa1</p>
                     </c>
                     <c ca="left">
                        <p>1jqna_</p>
                     </c>
                     <c ca="left">
                        <p>1lu9a1</p>
                     </c>
                     <c ca="left">
                        <p>1m6ia1</p>
                     </c>
                     <c ca="left">
                        <p>1o94a3</p>
                     </c>
                     <c>
                        <p/>
                     </c>
                     <c>
                        <p/>
                     </c>
                     <c>
                        <p/>
                     </c>
                     <c>
                        <p/>
                     </c>
                  </r>
               </tblbdy>
            </tbl>
            <fig id="F3">
               <title>
                  <p>Figure 3</p>
               </title>
               <caption>
                  <p>Loops generated by FCCD (blue) that are close to real protein loops (green)</p>
               </caption>
               <text>
                  <p>Loops generated by FCCD (blue) that are close to real protein loops (green). The loops with lowest RMSD to a given loop of length 4 (top), 8 and 12 (bottom) are shown (loops 1qnr, A, 195&#8211;198, 3chb, D, 51&#8211;58 and 1ctq, A, 26&#8211;37). The N- terminus is at the left hand side.</p>
               </text>
               <graphic file="1471-2105-6-159-3"/>
            </fig>
            <p>It is clear that FCCD readily generates closed segments that are reasonably close to the real loops, with an average RMSD of about 0.6, 2.2 and 3.0 &#197; for loops of 4, 8 and 12 residues, respectively. The highest minimum RMSD values for these loop lengths are 0.76, 2.42 and 3.37 &#197;, respectively, indicating that FCCD in general can come up with a reasonably close conformation. Using more initial moving segments will obviously increase the chance of encountering a close conformation. Additionally, one can also expect an even better performance with a more refined way to constrain the (<it>&#952;</it>, <it>&#964;</it>) angles.</p>
            <suppl id="S1">
               <title>
                  <p>Additional File 1</p>
               </title>
               <text>
                  <p>The file FCCD.py contains an implementation of the FCCD algorithm. The program was implemented in the interpreted, object oriented language Python <url>http://www.python.org</url>. The Numeric Python package <url>http://numeric.scipy.org/</url>, a Python module that implements many advanced mathematical operations efficiently in C and FORTRAN, provided implementations of singular value decomposition and various matrix operations. In addition, the Biopython toolkit, a set of Bioinformatics modules implemented in Python, was used to represent atomic coordinates as vector objects <abbrgrp><abbr bid="B25">25</abbr></abbrgrp>. The core of the FCCD implementation comprises only 50 lines of Python code. Numeric Python and Biopython (version 1.4b) are needed to execute the sample code.</p>
               </text>
               <file name="1471-2105-6-159-S1.py">
                  <p>Click here for file</p>
               </file>
            </suppl>
         </sec>
      </sec>
      <sec>
         <st>
            <p>Conclusion</p>
         </st>
         <p>In this article, we introduce an algorithm that solves the loop closure problem for C<it>&#945; </it>only protein models. The method is conceptually similar to the CCD loop closure method introduced by Canutescu and Dunbrack <abbrgrp><abbr bid="B8">8</abbr></abbrgrp>, but optimizes dihedral and bond angles simultaneously, while the former method only optimizes one angle at a time. At the heart of the method lies a modified algorithm to superimpose point sets with minimum RMSD, based on singular value decomposition <abbrgrp><abbr bid="B20">20</abbr><abbr bid="B21">21</abbr></abbrgrp>.</p>
         <p>The algorithm is fast, numerically stable and leads to a solution for the great majority of loop closure problems studied here. Importantly, the method remains efficient even in the presence of constraints on the dihedral and bond angles. FCCD readily handles large gaps, and potentially generates realistic conformations. Compared to other loop closure methods, FCCD is surprisingly easy to implement provided a function is available to calculate the singular value decomposition of a matrix.</p>
         <p>A possible disadvantage is that FCCD has a tendency to induce large changes to the pseudo angles at the start of the moving segment while angles near the end are less affected, which is also the case for CCD <abbrgrp><abbr bid="B8">8</abbr></abbrgrp>. This can for example be avoided by selecting the pivot points in a random fashion, or by limiting the allowed change in the angles per iteration. Occasionally the method gets stuck, which can be avoided by incorporating stochastic changes away from the encountered local minimum. One can also simply try again with a new random moving segment. We believe that CCD and FCCD despite these disadvantages are among the most efficient loop closure algorithms currently available.</p>
         <p>The FCCD algorithm proposed here has great potential for use in structure prediction methods that only make use of C<it>&#945; </it>atoms, or that otherwise do not include all backbone atoms <abbrgrp><abbr bid="B15">15</abbr><abbr bid="B13">13</abbr><abbr bid="B14">14</abbr></abbrgrp>. FCCD could be used for example to implement local moves in a MCMC procedure. The moving segments could be derived from a fragment database or generated from a probabilistic model of the protein backbone. The latter model could range from a primitive probability distribution over allowed (<it>&#952;</it>, <it>&#964;</it>) angle pairs like we used here to a Hidden Markov Model that also models the sequence of (<it>&#952;</it>, <it>&#964;</it>) angle pairs.</p>
         <p>We are planning to use the FCCD algorithm in combination with a sophisticated probabilistic model of the protein's backbone, which will steer both the generation of the initial moving loop and the acceptance/rejection of the angles. The performance of FCCD in this context will be the subject of a future publication.</p>
      </sec>
      <sec>
         <st>
            <p>Methods</p>
         </st>
         <sec>
            <st>
               <p>Implementation</p>
            </st>
            <p>The FCCD algorithm was implemented in C, using the LAPACK <abbrgrp><abbr bid="B24">24</abbr></abbrgrp> function dgesvd for the calculation of the singular value decomposition. Handling PDB files and calculating the (<it>&#952;</it>, <it>&#964;</it>) angles <abbrgrp><abbr bid="B16">16</abbr></abbrgrp> was done using Biopython's Bio.PDB module <abbrgrp><abbr bid="B25">25</abbr></abbrgrp>. We used a 2.5 GHz Pentium processor to calculate the benchmarks. A reference implementation of FCCD in Python is available as supplementary information.</p>
         </sec>
         <sec>
            <st>
               <p>Structure databases</p>
            </st>
            <p>For the calculation of the (<it>&#952;</it>, <it>&#964;</it>) probability distribution and the generation of random protein fragments, we used the SABMark 1.63 Twilight Zone database <abbrgrp><abbr bid="B26">26</abbr></abbrgrp>. SABMark Twilight Zone contains 2230 high quality protein structures, divided over 236 different folds. All protein pairs have a BLAST E-value below 1, and thus presumably belong to different superfamilies. A dataset of fold representatives was generated by selecting a single structure at random for each fold (see Table <tblr tid="T4">4</tblr>).</p>
            <p>The loops used to evaluate FCCD's sampling space were derived from Canutescu &amp; Dunbrack <abbrgrp><abbr bid="B8">8</abbr></abbrgrp>. We shifted two loops (1d8w, A, 46&#8211;57 and 1qop, A, 178&#8211;189) by three residues to ensure that all loops had three flanking residues on each side.</p>
         </sec>
         <sec>
            <st>
               <p>Calculation of the (<it>&#952;</it>, <it>&#964;</it>) probability distribution</p>
            </st>
            <p>The bond angle <it>&#952; </it>was subdivided in 18 bins and the dihedral angle <it>&#964; </it>in 36 bins, in both cases starting at 0 degrees and with a bin width of 10 degrees. All (<it>&#952;</it>, <it>&#964;</it>) angles were extracted from all structures in the SABMark Twilight Zone database that consisted of a polypeptide chain without breaks. In total, 257534 angle pairs were extracted. Each such (<it>&#952;</it>, <it>&#964;</it>) angle pair was assigned to a bin pair, and the number of angle pairs assigned to each bin pair was stored in a 18 &#215; 36 count matrix. Finally, the normalized count matrix was used to assign a probability to any given (<it>&#952;</it>, <it>&#964;</it>) angle pair.</p>
         </sec>
      </sec>
      <sec>
         <st>
            <p>List of abbreviations</p>
         </st>
         <p>&#8226; CCD: Cyclic Coordinate Descent</p>
         <p>&#8226; DOF: Degrees Of Freedom</p>
         <p>&#8226; FCCD: Full Cyclic Coordinate Descent</p>
         <p>&#8226; MCMC: Markov Chain Monte Carlo</p>
         <p>&#8226; RMSD: Root Mean Square Deviation</p>
      </sec>
      <sec>
         <st>
            <p>Authors' contributions</p>
         </st>
         <p>TH conceived the FCCD algorithm. WB implemented FCCD in the C language, and introduced various refinements and optimizations. Both authors read and approved the article.</p>
      </sec>
   </bdy>
   <bm>
      <ack>
         <sec>
            <st>
               <p>Acknowledgements</p>
            </st>
            <p>Wouter Boomsma is supported by the Lundbeckfond <url>http://www.lundbeckfonden.dk/</url>. Thomas Hamelryck is supported by a Marie Curie Intra-European Fellowship within the 6th European Community Framework Programme. We acknowledge encouragement and support from Prof. Anders Krogh, Bioinformatics Center, Institute of Molecular Biology and Physiology, University of Copenhagen.</p>
         </sec>
      </ack>
      <refgrp>
         <bibl id="B1">
            <title>
               <p>Ring closure and local conformational deformations of chain molecules</p>
            </title>
            <aug>
               <au>
                  <snm>Go</snm>
                  <fnm>N</fnm>
               </au>
               <au>
                  <snm>Scheraga</snm>
                  <fnm>H</fnm>
               </au>
            </aug>
            <source>Macromolecules</source>
            <pubdate>1970</pubdate>
            <volume>3</volume>
            <fpage>178</fpage>
            <lpage>187</lpage>
            <xrefbib>
               <pubid idtype="doi">10.1021/ma60014a012</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B2">
            <title>
               <p>A self consistent mean field approach to simultaneous gap closure and side-chain positioning in homology modelling</p>
            </title>
            <aug>
               <au>
                  <snm>Koehl</snm>
                  <fnm>P</fnm>
               </au>
               <au>
                  <snm>Delarue</snm>
                  <fnm>M</fnm>
               </au>
            </aug>
            <source>Nat Struct Biol</source>
            <pubdate>1995</pubdate>
            <volume>2</volume>
            <fpage>163</fpage>
            <lpage>70</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1038/nsb0295-163</pubid>
                  <pubid idtype="pmpid">7538429</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B3">
            <title>
               <p>LMProt: an efficient algorithm for Monte Carlo sampling of protein conformational space</p>
            </title>
            <aug>
               <au>
                  <snm>da Silva</snm>
                  <fnm>R</fnm>
               </au>
               <au>
                  <snm>Degreve</snm>
                  <fnm>L</fnm>
               </au>
               <au>
                  <snm>Caliri</snm>
                  <fnm>A</fnm>
               </au>
            </aug>
            <source>Biophys J</source>
            <pubdate>2004</pubdate>
            <volume>87</volume>
            <fpage>1567</fpage>
            <lpage>77</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1529/biophysj.104.041541</pubid>
                  <pubid idtype="pmpid" link="fulltext">15345537</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B4">
            <title>
               <p>Using known substructures in protein model building and crystallography</p>
            </title>
            <aug>
               <au>
                  <snm>Jones</snm>
                  <fnm>T</fnm>
               </au>
               <au>
                  <snm>Thirup</snm>
                  <fnm>S</fnm>
               </au>
            </aug>
            <source>EMBO J</source>
            <pubdate>1986</pubdate>
            <volume>5</volume>
            <fpage>819</fpage>
            <lpage>22</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="pmcid">1166864</pubid>
                  <pubid idtype="pmpid">3709525</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B5">
            <title>
               <p>Modeling structurally variable regions in homologous proteins with rosetta</p>
            </title>
            <aug>
               <au>
                  <snm>Rohl</snm>
                  <fnm>C</fnm>
               </au>
               <au>
                  <snm>Strauss</snm>
                  <fnm>C</fnm>
               </au>
               <au>
                  <snm>Chivian</snm>
                  <fnm>D</fnm>
               </au>
               <au>
                  <snm>Baker</snm>
                  <fnm>D</fnm>
               </au>
            </aug>
            <source>Proteins</source>
            <pubdate>2004</pubdate>
            <volume>55</volume>
            <fpage>656</fpage>
            <lpage>77</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1002/prot.10629</pubid>
                  <pubid idtype="pmpid" link="fulltext">15103629</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B6">
            <title>
               <p>Inverse kinematics in biology: The protein loop closure problem</p>
            </title>
            <aug>
               <au>
                  <snm>Kolodny</snm>
                  <fnm>R</fnm>
               </au>
               <au>
                  <snm>Guibas</snm>
                  <fnm>L</fnm>
               </au>
               <au>
                  <snm>Levitt</snm>
                  <fnm>M</fnm>
               </au>
               <au>
                  <snm>Koehl</snm>
                  <fnm>P</fnm>
               </au>
            </aug>
            <source>Int J Robotics Research</source>
            <pubdate>2005</pubdate>
            <volume>24</volume>
            <fpage>151</fpage>
            <lpage>163</lpage>
            <xrefbib>
               <pubid idtype="doi">10.1177/0278364905050352</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B7">
            <title>
               <p>Efficient inverse kinematics for general 6R manipulators</p>
            </title>
            <aug>
               <au>
                  <snm>Manocha</snm>
                  <fnm>D</fnm>
               </au>
               <au>
                  <snm>Canny</snm>
                  <fnm>J</fnm>
               </au>
            </aug>
            <source>IEEE Trans Rob Aut</source>
            <pubdate>1994</pubdate>
            <volume>10</volume>
            <fpage>648</fpage>
            <lpage>657</lpage>
            <xrefbib>
               <pubid idtype="doi">10.1109/70.326569</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B8">
            <title>
               <p>Cyclic coordinate descent: A robotics algorithm for protein loop closure</p>
            </title>
            <aug>
               <au>
                  <snm>Canutescu</snm>
                  <fnm>A</fnm>
               </au>
               <au>
                  <snm>Dunbrack</snm>
                  <fnm>R</fnm>
                  <suf>Jr</suf>
               </au>
            </aug>
            <source>Protein Sci</source>
            <pubdate>2003</pubdate>
            <volume>12</volume>
            <fpage>963</fpage>
            <lpage>72</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1110/ps.0242703</pubid>
                  <pubid idtype="pmpid" link="fulltext">12717019</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B9">
            <title>
               <p>A kinematic view of loop closure</p>
            </title>
            <aug>
               <au>
                  <snm>Coutsias</snm>
                  <fnm>E</fnm>
               </au>
               <au>
                  <snm>Seok</snm>
                  <fnm>C</fnm>
               </au>
               <au>
                  <snm>Jacobson</snm>
                  <fnm>M</fnm>
               </au>
               <au>
                  <snm>Dill</snm>
                  <fnm>K</fnm>
               </au>
            </aug>
            <source>J Comput Chem</source>
            <pubdate>2004</pubdate>
            <volume>25</volume>
            <fpage>510</fpage>
            <lpage>28</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1002/jcc.10416</pubid>
                  <pubid idtype="pmpid" link="fulltext">14735570</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B10">
            <title>
               <p>Monte carlo update for chain molecules: Biased Gaussian steps in torsional space</p>
            </title>
            <aug>
               <au>
                  <snm>Favrin</snm>
                  <fnm>G</fnm>
               </au>
               <au>
                  <snm>Irb&#228;ck</snm>
                  <fnm>A</fnm>
               </au>
               <au>
                  <snm>Sjunnesson</snm>
                  <fnm>F</fnm>
               </au>
            </aug>
            <source>J Chem Phys</source>
            <pubdate>2001</pubdate>
            <volume>114</volume>
            <fpage>8154</fpage>
            <lpage>8158</lpage>
            <xrefbib>
               <pubid idtype="doi">10.1063/1.1364637</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B11">
            <title>
               <p>Proteins wriggle</p>
            </title>
            <aug>
               <au>
                  <snm>Cahill</snm>
                  <fnm>M</fnm>
               </au>
               <au>
                  <snm>Cahill</snm>
                  <fnm>S</fnm>
               </au>
               <au>
                  <snm>Cahill</snm>
                  <fnm>K</fnm>
               </au>
            </aug>
            <source>Biophys J</source>
            <pubdate>2002</pubdate>
            <volume>82</volume>
            <fpage>2665</fpage>
            <lpage>70</lpage>
            <xrefbib>
               <pubid idtype="pmpid" link="fulltext">11964253</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B12">
            <title>
               <p>Chaintweak: sampling from the neighbourhood of a protein conformation</p>
            </title>
            <aug>
               <au>
                  <snm>Singh</snm>
                  <fnm>R</fnm>
               </au>
               <au>
                  <snm>Bergert</snm>
                  <fnm>B</fnm>
               </au>
            </aug>
            <source>Pac Symp Biocomput</source>
            <pubdate>2005</pubdate>
            <url>http://helix-web.stanford.edu/ps605/singh.pdf</url>
         </bibl>
         <bibl id="B13">
            <title>
               <p>Development of novel statistical potentials for protein fold recognition</p>
            </title>
            <aug>
               <au>
                  <snm>Buchete</snm>
                  <fnm>N</fnm>
               </au>
               <au>
                  <snm>Straub</snm>
                  <fnm>J</fnm>
               </au>
               <au>
                  <snm>Thirumalai</snm>
                  <fnm>D</fnm>
               </au>
            </aug>
            <source>Curr Opin Struct Biol</source>
            <pubdate>2004</pubdate>
            <volume>14</volume>
            <fpage>225</fpage>
            <lpage>32</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1016/j.sbi.2004.03.002</pubid>
                  <pubid idtype="pmpid" link="fulltext">15093838</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B14">
            <title>
               <p>Coarse-grained models for proteins</p>
            </title>
            <aug>
               <au>
                  <snm>Tozzini</snm>
                  <fnm>V</fnm>
               </au>
            </aug>
            <source>Curr Opin Struct Biol</source>
            <pubdate>2005</pubdate>
            <volume>15</volume>
            <fpage>144</fpage>
            <lpage>50</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1016/j.sbi.2005.02.005</pubid>
                  <pubid idtype="pmpid" link="fulltext">15837171</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B15">
            <title>
               <p>TOUCHSTONE: an ab initio protein structure prediction method that uses threading-based tertiary restraints</p>
            </title>
            <aug>
               <au>
                  <snm>Kihara</snm>
                  <fnm>D</fnm>
               </au>
               <au>
                  <snm>Lu</snm>
                  <fnm>H</fnm>
               </au>
               <au>
                  <snm>Kolinski</snm>
                  <fnm>A</fnm>
               </au>
               <au>
                  <snm>Skolnick</snm>
                  <fnm>J</fnm>
               </au>
            </aug>
            <source>Proc Natl Acad Sci USA</source>
            <pubdate>2001</pubdate>
            <volume>98</volume>
            <fpage>10125</fpage>
            <lpage>30</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="pmcid">56926</pubid>
                  <pubid idtype="pmpid" link="fulltext">11504922</pubid>
                  <pubid idtype="doi">10.1073/pnas.181328398</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B16">
            <title>
               <p>Analysis of C alpha geometry in protein structures</p>
            </title>
            <aug>
               <au>
                  <snm>Oldfield</snm>
                  <fnm>T</fnm>
               </au>
               <au>
                  <snm>Hubbard</snm>
                  <fnm>R</fnm>
               </au>
            </aug>
            <source>Proteins</source>
            <pubdate>1994</pubdate>
            <volume>18</volume>
            <fpage>324</fpage>
            <lpage>37</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1002/prot.340180404</pubid>
                  <pubid idtype="pmpid">8208725</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B17">
            <title>
               <p>Comparison of systematic search and database methods for constructing segments of protein structure</p>
            </title>
            <aug>
               <au>
                  <snm>Fidelis</snm>
                  <fnm>K</fnm>
               </au>
               <au>
                  <snm>Stern</snm>
                  <fnm>P</fnm>
               </au>
               <au>
                  <snm>Bacon</snm>
                  <fnm>D</fnm>
               </au>
               <au>
                  <snm>Moult</snm>
                  <fnm>J</fnm>
               </au>
            </aug>
            <source>Protein Eng</source>
            <pubdate>1994</pubdate>
            <volume>7</volume>
            <fpage>953</fpage>
            <lpage>60</lpage>
            <xrefbib>
               <pubid idtype="pmpid">7809034</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B18">
            <title>
               <p>PDB-based protein loop prediction: parameters for selection and methods for optimization</p>
            </title>
            <aug>
               <au>
                  <snm>van Vlijmen</snm>
                  <fnm>H</fnm>
               </au>
               <au>
                  <snm>Karplus</snm>
                  <fnm>M</fnm>
               </au>
            </aug>
            <source>J Mol Biol</source>
            <pubdate>1997</pubdate>
            <volume>267</volume>
            <fpage>975</fpage>
            <lpage>1001</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1006/jmbi.1996.0857</pubid>
                  <pubid idtype="pmpid" link="fulltext">9135125</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B19">
            <title>
               <p>A combined optimization method for solving the inverse kinematics problem of mechanical manipulators</p>
            </title>
            <aug>
               <au>
                  <snm>Wang</snm>
                  <fnm>L</fnm>
               </au>
               <au>
                  <snm>Chen</snm>
                  <fnm>C</fnm>
               </au>
            </aug>
            <source>IEEE Trans Rob Aut</source>
            <pubdate>1991</pubdate>
            <volume>7</volume>
            <fpage>489</fpage>
            <lpage>499</lpage>
            <xrefbib>
               <pubid idtype="doi">10.1109/70.86079</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B20">
            <title>
               <p>A discussion of the solution for the best rotation to relate two sets of vectors</p>
            </title>
            <aug>
               <au>
                  <snm>Kabsch</snm>
                  <fnm>W</fnm>
               </au>
            </aug>
            <source>Acta Cryst</source>
            <pubdate>1978</pubdate>
            <volume>A34</volume>
            <fpage>827</fpage>
            <lpage>828</lpage>
         </bibl>
         <bibl id="B21">
            <title>
               <p>Least squares estimation of transformation parameters between two point patterns</p>
            </title>
            <aug>
               <au>
                  <snm>Umeyama</snm>
                  <fnm>S</fnm>
               </au>
            </aug>
            <source>IEEE Trans Pattern Anal Mach Intell</source>
            <pubdate>1991</pubdate>
            <volume>13</volume>
            <fpage>376</fpage>
            <lpage>80</lpage>
            <xrefbib>
               <pubid idtype="doi">10.1109/34.88573</pubid>
            </xrefbib>
         </bibl>
         <bibl id="B22">
            <aug>
               <au>
                  <snm>Golub</snm>
                  <fnm>GH</fnm>
               </au>
               <au>
                  <snm>Loan</snm>
                  <fnm>CFV</fnm>
               </au>
            </aug>
            <source>Matrix Computations</source>
            <publisher>Baltimore, Maryland: Johns Hopkins University Press</publisher>
            <edition>3</edition>
            <pubdate>1996</pubdate>
         </bibl>
         <bibl id="B23">
            <title>
               <p>HMMSTR: a hidden Markov model for local sequence-structure correlations in proteins</p>
            </title>
            <aug>
               <au>
                  <snm>Bystroff</snm>
                  <fnm>C</fnm>
               </au>
               <au>
                  <snm>Thorsson</snm>
                  <fnm>V</fnm>
               </au>
               <au>
                  <snm>Baker</snm>
                  <fnm>D</fnm>
               </au>
            </aug>
            <source>J Mol Biol</source>
            <pubdate>2000</pubdate>
            <volume>301</volume>
            <fpage>173</fpage>
            <lpage>90</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1006/jmbi.2000.3837</pubid>
                  <pubid idtype="pmpid" link="fulltext">10926500</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B24">
            <aug>
               <au>
                  <snm>Anderson</snm>
                  <fnm>E</fnm>
               </au>
               <au>
                  <snm>Bai</snm>
                  <fnm>Z</fnm>
               </au>
               <au>
                  <snm>Bischof</snm>
                  <fnm>C</fnm>
               </au>
               <au>
                  <snm>Demmel</snm>
                  <fnm>J</fnm>
               </au>
               <au>
                  <snm>Dongarra</snm>
                  <fnm>J</fnm>
               </au>
               <au>
                  <snm>Croz</snm>
                  <fnm>JD</fnm>
               </au>
               <au>
                  <snm>Greenbaum</snm>
                  <fnm>A</fnm>
               </au>
               <au>
                  <snm>Hammarling</snm>
                  <fnm>S</fnm>
               </au>
               <au>
                  <snm>McKenney</snm>
                  <fnm>A</fnm>
               </au>
               <au>
                  <snm>Ostrouchov</snm>
                  <fnm>S</fnm>
               </au>
               <au>
                  <snm>Sorensen</snm>
                  <fnm>D</fnm>
               </au>
            </aug>
            <source>LAPACK's user's guide</source>
            <publisher>Philadelphia, PA, USA: Society for Industrial and Applied Mathematics</publisher>
            <pubdate>1992</pubdate>
            <url>http://www.netlib.org/lapack/lug/</url>
         </bibl>
         <bibl id="B25">
            <title>
               <p>PDB file parser and structure class implemented in Python</p>
            </title>
            <aug>
               <au>
                  <snm>Hamelryck</snm>
                  <fnm>T</fnm>
               </au>
               <au>
                  <snm>Manderick</snm>
                  <fnm>B</fnm>
               </au>
            </aug>
            <source>Bioinformatics</source>
            <pubdate>2003</pubdate>
            <volume>19</volume>
            <fpage>2308</fpage>
            <lpage>10</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1093/bioinformatics/btg299</pubid>
                  <pubid idtype="pmpid" link="fulltext">14630660</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
         <bibl id="B26">
            <title>
               <p>SABmark-a benchmark for sequence alignment that covers the entire known fold space</p>
            </title>
            <aug>
               <au>
                  <snm>Van Walle</snm>
                  <fnm>I</fnm>
               </au>
               <au>
                  <snm>Lasters</snm>
                  <fnm>I</fnm>
               </au>
               <au>
                  <snm>Wyns</snm>
                  <fnm>L</fnm>
               </au>
            </aug>
            <source>Bioinformatics</source>
            <pubdate>2005</pubdate>
            <volume>21</volume>
            <fpage>1267</fpage>
            <lpage>8</lpage>
            <xrefbib>
               <pubidlist>
                  <pubid idtype="doi">10.1093/bioinformatics/bth493</pubid>
                  <pubid idtype="pmpid" link="fulltext">15333456</pubid>
               </pubidlist>
            </xrefbib>
         </bibl>
      </refgrp>
   </bm>
</art>

