MUSCLE: a multiple sequence alignment method with reduced time and space complexity
- Robert C Edgar^{1}Email author
DOI: 10.1186/1471-2105-5-113
© Edgar; licensee BioMed Central Ltd. 2004
Received: 25 March 2004
Accepted: 19 August 2004
Published: 19 August 2004
Abstract
Background
In a previous paper, we introduced MUSCLE, a new program for creating multiple alignments of protein sequences, giving a brief summary of the algorithm and showing MUSCLE to achieve the highest scores reported to date on four alignment accuracy benchmarks. Here we present a more complete discussion of the algorithm, describing several previously unpublished techniques that improve biological accuracy and / or computational complexity. We introduce a new option, MUSCLE-fast, designed for high-throughput applications. We also describe a new protocol for evaluating objective functions that align two profiles.
Results
We compare the speed and accuracy of MUSCLE with CLUSTALW, Progressive POA and the MAFFT script FFTNS1, the fastest previously published program known to the author. Accuracy is measured using four benchmarks: BAliBASE, PREFAB, SABmark and SMART. We test three variants that offer highest accuracy (MUSCLE with default settings), highest speed (MUSCLE-fast), and a carefully chosen compromise between the two (MUSCLE-prog). We find MUSCLE-fast to be the fastest algorithm on all test sets, achieving average alignment accuracy similar to CLUSTALW in times that are typically two to three orders of magnitude less. MUSCLE-fast is able to align 1,000 sequences of average length 282 in 21 seconds on a current desktop computer.
Conclusions
MUSCLE offers a range of options that provide improved speed and / or alignment accuracy compared with currently available programs. MUSCLE is freely available at http://www.drive5.com/muscle.
Background
Multiple alignments of protein sequences are important in many applications, including phylogenetic tree estimation, secondary structure prediction and critical residue identification. Many multiple sequence alignment (MSA) algorithms have been proposed; for a recent review, see [1]. Two attributes of MSA programs are of primary importance to the user: biological accuracy and computational complexity (i.e., time and memory requirements). Complexity is of increasing relevance due to the rapid growth of sequence databases, which now contain enough representatives of larger protein families to exceed the capacity of most current programs. Obtaining biologically accurate alignments is also a challenge, as the best methods sometimes fail to align readily apparent conserved motifs [2]. We recently introduced MUSCLE, a new MSA program that provides significant improvements in both accuracy and speed, giving only a summary of the algorithm [2]. Here, we describe the MUSCLE algorithm more fully and analyze its complexity. We introduce a new option designed for high-throughput applications, MUSCLE-fast. We also describe a new method for evaluating objective functions for profile-profile alignment, the iterated step in the MUSCLE algorithm.
Current methods
Implementation
The basic strategy used by MUSCLE is similar to that used by PRRP [13] and MAFFT [14]. A progressive alignment is built, to which horizontal refinement is then applied.
Algorithm overview
MUSCLE has three stages. At the completion of each stage, a multiple alignment is available and the algorithm can be terminated.
Stage 1: draft progressive
The first stage builds a progressive alignment.
Similarity measure
The similarity of each pair of sequences is computed, either using k-mer counting or by constructing a global alignment of the pair and determining the fractional identity.
Distance estimate
A triangular distance matrix is computed from the pair-wise similarities.
Tree construction
A tree is constructed from the distance matrix using UPGMA or neighbor-joining, and a root is identified.
Progressive alignment
A progressive alignment is built by following the branching order of the tree, yielding a multiple alignment of all input sequences at the root.
Stage 2: improved progressive
The second stage attempts to improve the tree and builds a new progressive alignment according to this tree. This stage may be iterated.
Similarity measure
The similarity of each pair of sequences is computed using fractional identity computed from their mutual alignment in the current multiple alignment.
Tree construction
A tree is constructed by computing a Kimura distance matrix and applying a clustering method to this matrix.
Tree comparison
The previous and new trees are compared, identifying the set of internal nodes for which the branching order has changed. If Stage 2 has executed more than once, and the number of changed nodes has not decreased, the process of improving the tree is considered to have converged and iteration terminates.
Progressive alignment
A new progressive alignment is built. The existing alignment is retained of each subtree for which the branching order is unchanged; new alignments are created for the (possibly empty) set of changed nodes. When the alignment at the root is completed, the algorithm may terminate, return to step 2.1 or go to Stage 3.
Stage 3: refinement
The third stage performs iterative refinement using a variant of tree-dependent restricted partitioning [12].
Choice of bipartition
An edge is deleted from the tree, dividing the sequences into two disjoint subsets (a bipartition). Edges are visiting in order of decreasing distance from the root.
Profile extraction
The profile (multiple alignment) of each subset is extracted from the current multiple alignment. Columns containing no residues (i.e., indels only) are discarded.
Re-alignment
The two profiles obtained in step 3.2 are re-aligned to each other using profile-profile alignment.
Accept/reject
The SP score of the multiple alignment implied by the new profile-profile alignment is computed. If the score increases, the new alignment is retained, otherwise it is discarded. If all edges have been visited without a change being retained, or if a user-defined maximum number of iterations has been reached, the algorithm is terminated, otherwise it returns to step 3.1. Visiting edges in order of decreasing distance from the root has the effect of first re-aligning individual sequences, then closely related groups
Algorithm elements
In the following, we describe the elements of the MUSCLE algorithm. In several cases, alternative versions of these elements were implemented in order to investigate their relative performance and to offer different trade-offs between accuracy, speed and memory use. Most of these alternatives are made available to the user via command-line options. Four benchmark datasets have been used to evaluate options and parameters in MUSCLE: BAliBASE [10, 11], SABmark [15], SMART [16–18] and our own benchmark, PREFAB [2].
Objective score
Progressive alignment
Progressive alignment requires a rooted binary tree in which each sequence is assigned to a leaf. The tree is created by clustering a triangular matrix containing a distance measure for each pair of sequences. The branching order of the tree is followed in postfix order (i.e., children are visited before their parent). At each internal node, profile-profile alignment is used to align the existing alignments of the two child subtrees, and the new alignment is assigned to that node. A multiple alignment of all input sequences is produced at the root node (Figure 1).
Similarity measures
We use the term similarity for a measure on a pair of sequences that indicates their degree of evolutionary divergence (the sequences are assumed to be related). MUSCLE uses two types of similarity measure: the fractional identity D computed from a global alignment of the two sequences, and measures obtained by k-mer counting. A k-mer is a contiguous subsequence of length k, also known as a word or k-tuple. Related sequences tend to have more k-mers in common than expected by chance, provided that k is not too large and the divergence is not too great. Many sequence comparison methods based on k-mer counting have been proposed in the literature; for a review, see [19]. The primary motivation for these measures is improved speed as no alignment is required. MAFFT uses k-mer counting in a compressed alphabet (i.e., an alphabet in which symbols denote classes that may contain two or more residue types) to compute its initial distance measure. The alphabet used in MAFFT is taken from [20], and is one of the options implemented in MUSCLE. Trivially, identity is higher or equal in a compressed alphabet; it cannot be reduced. If the alphabet is chosen such that there are high probabilities of intra-class substitution and low probabilities of inter-class substitution, then we might expect that detectable identity (and hence the number of conserved k-mers) could be usefully extended to greater evolutionary distances while limiting the increase in matches due to chance. We have previously shown [21] that k-mer similarities correlate well with fractional identity, although we failed to find evidence that compressed alphabets have superior performance to the standard alphabet at lower identities. We define the following similarity measure between sequences X and Y:
F = Σ_{ τ }min [n_{X}(τ), n_{Y}(τ) ] / [min (L_{X}, L_{Y}) - k + 1 ]. (1)
Here τ is a k-mer, L_{X}, L_{Y} are the sequence lengths, and n_{X}(τ) and n_{Y}(τ) are the number of times τ occurs in X and Y respectively. This definition can be motivated by considering an alignment of X to Y and defining the similarity to be the fraction of k-mers that are conserved between the two sequences. The denominator of F is the maximum number of k-mers that could be aligned. Note that if a given k-mer occurs more often in one sequence than the other, the excess cannot be conserved, hence the minimum in the numerator. The definition of F is an approximation in which it is assumed that (after correcting for excesses) common k-mers are always alignable to each other. MUSCLE also implements a binary approximation F^{Binary}, so-called because it reduces the k-mer count to a present / absent bit:
F^{Binary} = Σ_{ τ }δ_{XY}(τ) / [min (L_{X}, L_{Y}) - k + 1 ]. (2)
Here, δ_{XY}(τ) is 1 if τ is present in both sequences, 0 otherwise. As multiple instances of a given k-mer in one sequence are relatively rare, this is often a good approximation to F. The binary approximation enables a significant speed improvement as the size of the count vector for a given sequence can be reduced by an order of magnitude. This allows the count vector for every sequence to be retained in memory, and pairs of vectors to be compared efficiently using bit-wise instructions. When using an integer count, there may be insufficient memory to store all count vectors, making it necessary to re-compute counts several times for a given sequence.
Distance measures
Given a similarity value, we wish to estimate an additive distance measure. An additive measure distance measure d(A, B) between two sequences A and B satisfies d(A, B) = d(A, C) + d(C, B) for any third sequence C, assuming that A, B and C are all related. Ideal but generally unknowable is the mutation distance, i.e. the number of mutations that occurred on the historical path between the sequences. The historical path through the phylogenetic tree extends from one sequence to the other via their most recent common ancestor. The mutation distance is trivially additive. The fractional identity D is often used as a similarity measure; for closely related sequences 1 - D is a good approximation to a mutation distance (it is exact assuming substitution at a single site to be the only allowed type of mutation and that no position mutates more than once). As sequences diverge, there is an increasing probability of multiple mutations at a single site. To correct for this, we use the following distance estimate [22]:
d_{Kimura} = -log_{e} (1 - D - D^{2}/5) (3)
For D ≤ 0.25 we use a lookup table taken from the CLUSTALW source code. For k-mer measures, we use:
d_{kmer} = 1 - F. (4)
Tree construction
Given a distance matrix, a binary tree is constructed by clustering. Two methods are implemented: neighbor-joining [23], and UPGMA [24]. MUSCLE implements three variants of UPGMA that differ in their assignment of distances to a new cluster. Consider two clusters (subtrees) L and R to be merged into a new cluster P, which becomes the parent of L and R in the binary tree. Average linkage assigns this distance to a third cluster C:
d^{Avg}_{ PC }= (d_{ LC }+ d_{ RC })/2. (5)
We can take the minimum rather than the average:
d^{Min}_{ PC }= min [d_{ LC }, d_{ RC }]. (6)
Following MAFFT, we also implemented a weighted mixture of minimum and average linkage:
d^{Mix}_{ PC }= (1 - s) d^{Min}_{ PC }+ s d^{Avg}_{ PC }, (7)
where s is a parameter set to 0.1 by default. Clustering produces a pseudo-root (the last node created). We implemented two other methods for determining a root: minimizing the average branch weight [25], as used by CLUSTALW, and locating the root at the center of the longest span.
Sequence weighting
Conventional wisdom holds that sequences should be weighted to correct for the effects of biased sampling from a family of related proteins; however, there is no consensus on how such weights should be computed. MUSCLE implements the following sequence weighting schemes: none (all sequences have equal weight), Henikoff [26], PSI-BLAST [27] (a variant of Henikoff), CLUSTALW's, GSC [28], and the three-way method [29]. We found the use of weighting to give a small improvement in benchmark accuracy results, e.g. approximately 1% on BAliBASE, but saw little difference between the alternative schemes. The CLUSTALW method enables a significant reduction in complexity (described later), and is therefore the default choice.
Profile functions
In order to apply pair-wise alignment methods to profiles, a scoring function must be defined for a pair of profile positions, i.e. a pair of multiple alignment columns. This function is the profile analog of a substitution matrix; see for example [30]. We use the following notation. Let i and j be amino acid types, p_{ i }the background probability of i, p_{ ij }the joint probability of i and j being aligned to each other, S_{ ij }the substitution matrix score, f ^{ x }_{ i }the observed frequency of i in column x of the first profile, f ^{ x }_{G} the observed frequency of gaps in that column, and α^{ x }_{ i }the estimated probability of observing i in position x in the family. (Similarly for position y in the second profile). Estimated probabilities α are derived from the observed frequencies f, typically by adding heuristic pseudo-counts or by using Bayesian methods such as Dirichlet mixture priors [31]. A commonly used profile function is the sequence-weighted sum of substitution matrix scores for each pair of letters, selecting one from each column (PSP, for profile SP):
PSP^{ xy }= Σ_{ i }Σ_{ j }f ^{ x }_{ i }f ^{ y }_{ j }S_{ ij }. (8)
Note that S_{ ij }= log (p_{ ij }/ p_{ i }p_{ j }) [32], so
PSP^{ xy }= Σ_{ i }Σ_{ j }f ^{ x }_{ i }f ^{ y }_{ j }log (p_{ ij }/ p_{ i }p_{ j }). (9)
PSP is the function used by CLUSTALW and MAFFT. It is a natural choice when attempting to maximize the SP objective score: if gap penalties are neglected, maximizing PSP maximizes SP under the constraint that columns in each profile are preserved. (This follows from the observation that the contribution to SP from a pair of sequences in the same profile is the same for all alignments allowed under the constraint). MUSCLE implements PSP functions based on the 200 PAM matrix of [33] and the 240 PAM VTML matrix [34]. In addition to PSP, MUSCLE implements a function we call the log-expectation (LE) score. LE is a modified version of the log-average (LA) profile function that was proposed on theoretical grounds [35]:
LA^{ xy }= log Σ_{ i }Σ_{ j }α^{ x }_{ i }α^{ y }_{ j }p_{ ij }/ p_{ i }p_{ j }. (10)
LE is defined as follows:
LE^{ xy }= (1 - f ^{ x }_{ G }) (1 - f ^{ y }_{G}) log Σ_{ i }Σ _{ j }f ^{ x }_{ i }f ^{ y }_{ j }p_{ ij }/ p_{ i }p_{ j }. (11)
The MUSCLE LE function uses probabilities computed from VTML 240. Note that estimated probabilities α in LA are replaced by observed frequencies f in LE. The factor (1 - f_{G}) is the occupancy of a column. Frequencies f_{ i }must be normalized to sum to one if indels are present (otherwise the logarithm becomes increasingly negative with increasing numbers of gaps even when aligning conserved or similar residues). The occupancy factors are introduced to encourage more highly occupied columns (i.e., those with fewer gaps) to align, and are found to significantly improve accuracy. We avoid these complications in the PSP score by computing frequencies in a 21-letter alphabet (amino acids + indel), and by defining the substitution score of an amino acid to an indel to be zero. This has the desired effect of down-weighting column pairs with low occupancies, and can also be motivated by consideration of the SP function. If gap penalties are ignored, then this definition of PSP preserves the optimization of SP under the fixed-column constraint by correctly accounting for the reduced number of residue pairs in columns containing gaps.
Gap penalties
b(y) = g/2 (1 - f ^{ y }_{ o }) (1 + h_{ w }(y)H), (12)
t(y) = g/2 (1 - f ^{ y }_{ c }) (1 + h_{ w }(y)H). (13)
Here, g is a parameter that can be considered a default per-gap penalty, h_{ w }(y) is 1 if y falls within a window of w consecutive hydrophobic residues or zero otherwise, and H is a tunable parameter. By default, w = 5, H = 1.2. The factor g/2 (1 - f ^{ y }_{ o }) is motivated by considering the SP score of the alignment. The gap penalty contribution to SP for a pair of sequences (A ∈ Y, B ∈ X) is computed by discarding all columns in which both sequences have an indel, then applying an affine penalty g + λe for each remaining gap. It is convenient here to consider that half of the per-gap penalty g is applied to the open position and half to the close position. Suppose a gap G is inserted into X such that the gap-open is aligned to position y in Y. If a sequence s ∈ Y has a gap-open at y, then the SP score includes no open penalty for G induced by any pair (s, t) : t ∈ X. The multiplier (1 - f ^{ y }_{ o }) therefore corrects the gap-open contribution to the SP score due to pre-existing gaps in Y. (It should be noted that even with this correction, there are other issues related to gaps and PSP still does not exactly optimize SP under the fixed-column constraint). The increased penalty in hydrophobic windows is designed to discourage gaps in buried core regions where insertions and deletions are less frequent. Note that MUSCLE treats open and close positions symmetrically, in contrast to CLUSTALW, which treats the open position specially and may therefore tend to produce, in word processing terms, left-aligned gaps with a ragged right margin.
Terminal gaps
A terminal gap is one that opens at the N-terminal position of the sequence to which it is aligned or closes at the C-terminal; as opposed to an internal gap. It has been suggested [9, 36] that global methods have intrinsic difficulties with long deletions or insertions. We believe that these difficulties are often due to the choice of penalties for terminal gaps. CLUSTALW, which charges no penalty for terminal gaps, tends to fail to open a needed internal gap and thus fail to align terminal motifs; MAFFT, which charges the same penalty for terminal and internal gaps, sometimes aligns small numbers of residues to a terminal by inserting an unnatural internal gap. By default, MUSCLE penalizes terminal gaps with half the penalty of an internal gap. This is done by setting b(1), the open penalty at the C-terminal, and t(L), the close penalty at the N-terminal, to zero (Figure 4). The option of always applying full penalties, as in MAFFT, is also provided. We found that the compromise of a half penalty for terminal gaps gave good results for a wide range of input data, but that further improvements could sometimes by achieved by the following technique. If the length ratio of the two profiles to be aligned exceeds a threshold (by default, 20%), then MUSCLE constructs four different alignments in which gaps at both, one or neither terminals are fully penalized. A conservation score is defined by subtracting all gap penalties (both internal and terminal) from the alignment score, leaving a sum over profile functions only. The alignment with the highest conservation score is used.
Tree comparison
Defaults, optimizations and complexity analysis
We now discuss the default choices of algorithm elements in the MUSCLE program and analyze their complexity.
Complexity of CLUSTALW
Complexity of CLUSTALW. Here we show the big-O asymptotic complexity of the elements of CLUSTALW as a function of L, the typical sequence length, and N, the number of sequences, retaining the highest-order terms in N with L fixed and vice versa.
Step | O(Space) | O(Time) |
---|---|---|
Distance matrix | N^{2} + L | N ^{2} L ^{2} |
Neighbor joining | N ^{2} | N ^{4} |
Progressive (one iteration) | NL_{P} + L_{P} = NL + L^{2} | NL_{P} + L_{P}^{2} = N^{2} + L^{2} |
Progressive (total) | NL + L^{2} | N^{3} + NL^{2} |
TOTAL | N^{2} + L^{2} | N^{4} + L^{2} |
Initial distance measure
One might expect (a) that a more accurate distance measure would lead to a more accurate final alignment due to an improved tree, and (b) that errors due to a less accurate distance measure might be eliminated by allowing Stage 2 to iterate more times. Neither of these expectations is supported by our test results (unpublished). Allowing Stage 2 to iterate more than once with the goal of further improving the tree gave no significant improvement with any distance measure. Possibly, the tree is biased towards the MSA that was used to estimate it, and the MSA is biased by the tree used to create it, making it hard to achieve improvements. The most accurate measure on a pair of sequences is presumably the fractional identity D computed from a global alignment, but use of D in step 1.1 does not improve average accuracy on benchmark tests. The 6-class Dayhoff alphabet used by MAFFT proved to give slightly higher benchmark accuracy scores, despite the fact that other alphabets were found to correlate better with D [21]. We also found that the use of the binary approximation F^{Binary} gave slightly reduced accuracy scores even when Stage 2 was allowed to iterate. The default choice in MUSCLE is therefore to use the Dayhoff alphabet in step 1.1 and to execute Stage 2 once only. While the impact on the average accuracy of the final alignment due to the different options is not understood, we observe that a better alignment of a pair of sequences is often obtained from a multiple alignment than from a pair-wise alignment, due to the presence of intermediate sequences having higher identities. It is therefore plausible that D obtained from the multiple alignment in step 2.1 may be more accurate than D obtained from a pair-wise alignment in step 1.1, and this may be relatively insensitive to the method used to create the tree for Stage 1. But this leaves unexplained why k-mer counting appears to be as good as or better than D in Stage 1. Computing F from a pair of sequences is O(L) time and O(1) space, so for all pairs the similarity calculation is O(N^{2}L), compared with O(N^{2}L^{2}) in CLUSTALW. For a typical L around 250, combined with an order of magnitude improvement due to the simplicity of k-mer counting compared with dynamic programming, this typically gives a three orders of magnitude speed improvement for computing the distance matrix in MUSCLE compared with CLUSTALW. The default strategy is therefore well justified as a speed optimization, and has the added bonus of providing a small improvement in accuracy.
Clustering
Dynamic programming
The textbook algorithm for pair-wise alignment with affine penalties employs three dynamic programming matrices; see e.g. [40, 41]. A more time-and space-efficient implementation can be achieved using linear space for the recursion relations and a single matrix for trace-back (Kazutaka Katoh, personal communication). Consider sequences X and Y length L_{X}, L_{Y}. We use the following notation: X_{ x }is the x th letter in X, X^{ x }the first x letters in X, S_{ xy }the substitution score (or profile function) for aligning X_{ x }to Y_{ y }, b^{X}_{ x }the score for a gap-open in Y that is aligned to X_{ x }, t^{X}_{ x }the score for a gap-close aligned to X_{ x }, U_{ xy }the set of all alignments of X^{ x }to Y^{ y }, M_{ xy }the score of the best alignment in U_{ xy }ending in a match (i.e., X_{ x }and Y_{ y }are aligned), D_{ xy }the score of the best alignment ending in a delete relative to X (X_{ x }is aligned to an indel) and I_{ xy }the score of the best alignment ending in an insert (Y_{ y }is aligned to an indel). A match is preceded by either a match, delete or insert, so:
M_{ xy }= S_{ xy }+ max { M_{x-1y-1}, D_{x-1y-1}+ t^{X}_{x-1}, I_{x-1y-1}+ t^{Y}_{y-1}} (14)
We assume that a center parameter has been added to S_{ xy }such that the gap extension penalty is zero. By considering all possible lengths for the final gap,
D_{ xy }= max(k<x) [M_{ ky }+ b^{X}_{k+1}]. (15)
Here, k is the last position in X that is aligned to a letter in Y. Extract the special case of a gap of length 1:
D_{ xy }= max { max(k<x-1) [M_{ ky }+ b^{X}_{k+1}], M_{x-1y}+ b^{X}_{ x }}. (16)
Hence,
D_{ xy }= max { D_{x-1y}, M_{x-1y}+ b^{X}_{ x }}. (17)
Similarly,
I_{ xy }= max { I_{xy-1}, M_{xy-1}+ b^{Y}_{ y }}. (18)
Let the outer loop iterate over increasing x and the inner loop over increasing y. For fixed x, define vectors M^{ curr }_{ y }= M_{ xy }, M^{ prev }_{ y }= M_{x-1y}, D^{ curr }_{ x }= D_{ xy }, D^{ prev }_{ x }= D_{x-1y}; for fixed x, y define scalars I^{ curr }= I_{ xy }, I^{ prev }= I_{xy-1}. Now we can re-write (14), (17) and (18) to obtain the following recursion relations:
M^{ curr }_{ y }= S_{ xy }+ max { M^{ prev }_{y-1}, D^{ prev }_{y-1}+ t^{X}_{x-1}, I^{ prev }_{y-1}+ t^{Y}_{y-1}} (19)
D^{ curr }_{ y }= max { D^{ prev }_{ y }, M^{ prev }_{ y }+ b^{X}_{ x }} (20)
I^{ curr }= max { I^{ prev }, M^{ prev }_{ y }+ b^{Y}_{ y }}. (21)
An L_{X} × L_{Y} matrix is needed for the trace-back that produces the final alignment.
Inner loop
The inner-most dynamic programming loop, which computes the profile function, deserves careful optimization. We will consider the case of PSP; similar optimizations are possible for LE. PSP = Σ_{ i }Σ_{ j }f ^{ x }_{ i }f ^{ y }_{ j }S_{ ij }= Σ_{ i }f ^{ x }_{ i }W^{ y }_{ i }, where W^{ y }_{ i }= Σ_{ j }f ^{ y }_{ j }S_{ ij }. The vector W^{ y }_{ i }is used L_{X} times, and it therefore pays to compute it once and cache it. Observe that a typical profile column contains << 20 different amino acids. We sort the frequencies in decreasing order; the summation Σ_{ i }f ^{ x }_{ i }W^{ y }_{ i }is terminated if a frequency f ^{ x }_{ i }= 0 is encountered. This typically reduces the time spent in the summation, especially when sequences are closely related. As with W^{ y }_{ i }, the sort order is computed once and cached. Observe that the roles of the two profiles are not symmetrical. It is most efficient to choose X, for which frequency sort orders are computed, to be the profile with the lowest amino acid diversity when averaged over columns. With this choice, the summation terminates earlier on average then if the other profile is identified as X. Note that out of N - 1 iterations of progressive alignment, a minimum of and maximum of N - 1 profile-profile alignments will include at least one profile containing one sequence only, and in the refinement phase exactly N of the 2N - 1 edges in the tree terminate on a leaf. At least half of all profile-profile alignments created in the MUSCLE algorithm therefore include a profile of one sequence only. Special cases where one or both profiles is a single sequence can be handled in separate subroutines, saving overhead due to unneeded loops that are guaranteed to execute once only. This optimization is especially useful for the LE function as it enables the logarithm to be incorporated into the W vector.
Diagonal finding
Many alignment algorithms are optimized for speed, typically at some expense in average accuracy, by using fast methods to identify regions of high similarity between two sequences, which appear as diagonals in the similarity matrix. The alignment path is then constrained to include these diagonals, reducing the area of the dynamic programming matrix that must be computed. MAFFT uses the fast Fourier transform to find diagonals. MUSCLE uses a different technique which we have previously shown [21] have comparable sensitivity and to be significantly faster. We use a compressed alphabet to find k-mers in common between two sequences, then attempt to extend the match. In the case of diagonal identification we found compressed alphabets to significantly out-perform the standard amino acid alphabet [21]. Currently, MUSCLE uses 6-mers in the Dayhoff alphabet for diagonal finding, as for the initial distance measure, though other alphabets are known to give slightly better performance [21]. A candidate diagonal is rejected if there is any overlap (i.e., if a single position in one of the sequences appears in two or more diagonals) or if it is less than a minimum length (default 24). The ends of the diagonal are deleted (by default, the first and last five positions) as they are less reliable. Despite these heuristics, we find the use of diagonal-finding to reduce average accuracy and to give only modest improvements in speed for typical input data; this option is therefore disabled by default. Similar results are seen in MAFFT; the most accurate MAFFT script is NWNSI [14], in which diagonal-finding is also disabled.
Additive profiles
Both the PSP and LE profile functions are defined in terms of amino acid frequencies and position-specific gap penalties. The data structure representing a profile is a vector of length L_{P} in which each element contains frequencies for each amino acid type and a few additional values related to gaps. We call this data structure a profile vector, as distinct from a profile matrix, an explicit N × L_{P} multiple alignment containing letters and indels. For N > 20, using profile vectors reduces the cost of computing the profile function compared with profile matrices, and is therefore preferred for use in dynamic programming. In CLUSTALW and MAFFT, the implementation of progressive alignment builds a profile matrix at each internal node of the tree, which is used to compute a profile vector. This procedure is O(NL_{P}) = O(N^{2} + NL) in time and space, becoming expensive for large N. Observe that the count of a given amino acid in a column in the parent matrix is the sum of the counts in the two child columns that are aligned at that position (Figure 7). With a suitable sequence weighting scheme, it is therefore possible to compute the amino acid frequencies of the parent profile vector from the frequencies in the two child profile vectors and the alignment path. This is an O(L_{P}) procedure in both time and space, giving a significant advantage for N >> 20. Three issues must be addressed to fully implement this idea: the sequence weighting scheme, inclusion of occupancy factors and position-specific gap penalties, and construction of a profile matrix (i.e., the final multiple alignment) at the root node.
Sequence weighting
For the frequencies in the parent profile vector to be a linear combination of the child frequencies, the weight assigned to a sequence must be the same in the child and parent profiles. This requirement is not satisfied, for example, by the Henikoff or PSI-BLAST schemes, which compute weights based on a multiple alignment. We therefore choose the CLUSTALW scheme, which computes a fixed weight for each sequence from edge lengths in the tree.
Gap representation
To compute gap penalties, we need the frequencies f_{ o }of gap opens and f_{ c }of gap closes in each position. In the case of the LE profile function, we additionally require the gap frequency f_{G}. These can be accommodated by storing f_{ o }, f_{ c }and f_{ e }in the profile vector, where f_{ e }is the frequency of gap-extensions in the column (meaning that indels are found in a given sequence in the column, the preceding column and in the following column; i.e., a gap-close is not counted as an extension). These three occupancy frequencies are sufficient for computing the profile function and the position-specific gap penalties b and t. Note that we can compute the frequency f_{G} of indels, as needed for the occupancy factor in the profile function, as follows:
f_{G} = f_{ o }+ f_{ c }+ f_{ e }. (22)
Construction of the root alignment
By avoiding the use of profile matrices, the complexity of a single progressive alignment iteration is reduced from O(L_{P} ^{2} + NL_{p}) space and O(L_{P}^{2} + NL_{P}) time to O(L_{P}^{2}) = O(L^{2} + NL) space and time. The NL term in the time complexity is now due only to the increase in profile length, and is therefore typically much smaller than before. The root alignment is constructed by storing the alignment path produced at each internal node. For each input sequence, the path to the root is followed, inserting the gaps induced by each alignment path at each internal node. This procedure is O(NL_{P} log N) = O(N ^{2} log N + NL log N) time, and requires O(NL_{P}) = O(NL + N ^{2}) space for storage of the paths. This is expensive for large N, and we therefore optimize this step by using a device we call an e-string, a type of edit string.
E-strings
Brenner's method
Steven Brenner (personal communication) observed that a multiple alignment can be alternatively be obtained by aligning each sequence to the root profile. This requires O(NL_{P}^{2}) time, giving a lower asymptotic complexity in N at the expense of an additional factor of L_{P}. This method gives opportunities for errors relative to the "exact" e-string solution (when a sequence misaligns to its copy in the profile), but can also lead to improvements by allowing the sequence to correctly align to conserved motifs that were not apparent when the sequence was added. (Note the resemblance to the refinement stage, which begins by re-aligning individual sequences to the rest). The chances for error are reduced by constraining the alignment to forbid gaps in the root profile. Our tests show that this method gives comparable average accuracy to the e-string solution but to be slower for up to at least a few thousand sequences, and e-strings are therefore used by default.
Refinement complexity
In the following, we assume that an explicit multiple alignment (profile matrix) of all sequences is maintained, and determine the complexity of each step in Stage 3. Step 3.1 determines the bipartition induced by deleting an edge from the tree. This is O(N) time, and sufficiently fast that there is little motivation for further optimization. Step 3.2 extracts profiles for the two partitions from the current multiple alignment and computes their profile vectors, which is O(NL_{P}) time and space. Step 3.3 performs profile-profile alignment, which is O(L_{P}^{2}) time and space. Step 3.4 computes the SP score, which is O(N^{2}L_{P}) time and O(NL_{P}) space (discussed in more detail shortly). A single iteration of Stage 3 is thus O(N^{2}L_{P} + L_{P}^{2}) time and O(NL_{P} + L_{P}^{2}) space. There are O(N) edges in the tree, so executing this process for all edges is O(N^{3}L_{P} + NL_{P}^{2}) time and O(NL_{P} + L_{P}^{2}) space, which is O(N^{4} + N^{3}L + NL^{2}) time and O(N^{2} + NL + L^{2}) space. Assuming that a fixed maximum number of iterations of Stage 3 is imposed, this is also the total complexity of refinement. We now consider optimizations of the refinement stage.
Anchor columns
A multiple alignment can be divided vertically at high-confidence (anchor) columns. Each vertical block is then refined separately, improving speed and reducing space due to the O(L^{2}) factor in dynamic programming. This strategy has been used by several previous algorithms, including PRRP [13], RASCAL [42] and MAFFT. In MUSCLE, the following criteria are used to identify anchor columns. The profile function (LE or PSP) must exceed a threshold, the averaged profile function over a window around the position must exceed a (lower) threshold, and the column may not contain a gap. In addition, the contribution to the averaged score from a single column has a ceiling, reducing skew in the averaged score due to exceptionally high-scoring columns. These heuristics are designed to avoid anchor columns that have high scores but are either artifacts (similar residues found by chance in unrelated regions) or are too close to variable regions. When performing a profile-profile alignment, each anchor column and its two immediate neighbors (which form the boundaries of vertical blocks) are required to remain aligned; i.e., terminal gaps are forbidden except at the true terminals. Introducing this constraint overcomes a small degradation in average alignment quality that is otherwise observed. This implies that the degradation is sometimes due to cases where a well-conserved region is divided into two parts by an anchor column, one of which becomes short enough that it misaligns to a similar short motif elsewhere.
SP score
Notice that computation of the SP score dominates the time complexity of refinement and of MUSCLE overall, introducing O(N^{4}) and O(N^{3}L) terms. We are therefore motivated to consider optimizations of this step. We first consider the contribution SP^{a} to the SP score from amino acids; gap penalties require special treatment. Let s and t be sequences, x be a column, s [x] be the amino acid of sequence s in column x, and S(i, j) be the substitution score of amino acids i and j. It is convenient to impose an (arbitrary) ordering on the sequences and amino acid types. Then,
SP^{a} = Σ_{ x }Σ_{ s }Σ_{t >s}S(s [x], t [x]). (23)
Define δ(s, i, x) = 1 if s [x] = i, 0 otherwise, and n_{ i }[x] = Σ_{ s }δ(s, i, x). We say n_{ i }[x] is the count of amino acid type i in column x. We can now transform the sum over pairs of sequences into a sum over pairs of amino acid types:
SP^{a} = Σ_{ x }Σ_{ i }n_{ i }Σ_{ j }n_{j>i}S(i, j) + 1/2 Σ_{ x }Σ_{ i }(n_{ i }^{2} - n_{ i }) S(i, i). (24)
Frequencies are computed as:
f ^{ x }_{ i }= n_{ i }[x]/ N. (25)
Using frequencies,
For simplicity, we have neglected sequence weighting; it is straightforward to show that (26) applies unchanged if weighting is used. Note that (23) is O(N^{2}L_{P}) but (25) and (26) are O(NL_{P}). For N >> 20, this is a substantial improvement. Let SP^{g} be the contribution of gap penalties to SP, so SP = SP^{a} + SP^{g}. It is natural to seek an O(NL_{P}) expression for SP^{g} analogous to (26), but to the best of our knowledge no solution is known. Note that in MUSCLE refinement, the absolute value of the SP score is not needed; rather, it suffices to determine the difference in the SP scores before and after re-aligning a pair of profiles. Let SP(s, t) be the contribution to the SP score from a pair of sequences s and t, so SP = Σ_{ s }Σ_{t>s}SP(s,t), and denote the two profiles by X and Y. Then we can decompose SP into intra-and inter-profile terms as follows:
SP = Σ_{s∈X}Σ_{t∈X:t>s}SP(s, t) + Σ_{s∈Y}Σ_{t∈Y:t>s}SP(s, t) + Σ_{s∈X}Σ_{t∈Y}SP(s, t) (27)
Note that the intra-profile terms are unchanged in any alignment that preserves the columns of the profile intact, which is true by definition in profile-profile alignment. This follows by noting that any indels added to align the profiles are guaranteed to be external gaps with respect to any pair of sequences in the same profile. It therefore suffices to compute the change in the inter-profile term:
SP_{XY} = Σ_{s∈X}Σ_{t∈Y}SP(s, t). (28)
This reduces the average time by a factor of about two. We can further improve on this by noting that in the typical case, there are few or no changes to the alignment. This suggests computing the change in SP score by looking only at differences between the two alignments. Let π_{-} be the alignment path before re-alignment and π_{+} the path after re-alignment. The change in alignment can be specified as the set of edges in π_{-} or π_{+}, but not both; i.e., by considering a path to be a set of edges and taking the set symmetric difference Δπ = (π_{-} ∪ π_{+}) - (π_{-} ∩ π_{+}). The path π_{+} after re-alignment is available from the dynamic programming traceback. The path π_{-} before re-alignment can be efficiently computed in O(L_{P}) time. Note that in order to construct the profile of a subset of sequences extracted from a multiple alignment, those columns that contain only indels in that subset must be deleted. The set of such columns in both profiles is therefore available as a side effect of profile construction, and this set immediately implies π_{-}. It is a simple O(L_{P}) procedure to compute Δπ from π_{-} and π_{+}. Note that SP^{a} is a sum over columns, and there is a one-to-one correspondence between columns and edges in π. The change in SP^{a} can therefore be computed as a sum over columns in Δπ, with a negative sign for edges from π_{-}, reducing the time complexity from O(NL_{P}) to O(N|Δπ|). We now turn our attention to SP^{g}. We say that a gap G intersects Δπ if and only if any indel in G is in a column in Δπ, and denote by Γ the set of gaps that intersect Δπ. If a gap does not intersect Δπ, i.e. does not have an indel in a changed column, its contribution to SP^{g} is unchanged. It therefore suffices to consider penalties for gaps in Γ, again with negative signs for edges from π_{-}. The construction of Γ is straightforward in O(NL_{P}) time. Finally, a sum over pairs in Γ is needed, reducing the O(N^{2}) component to the smallest possible set of terms.
Dimer approximation
Evaluation of profile functions
Complexity of MUSCLE
Complexity of MUSCLE. Here we show the big-O asymptotic complexity of the elements of MUSCLE as a function of L, the typical sequence length, and N, the number of sequences, retaining the highest-order terms in N with L fixed and vice versa.
Step | O(Space) | O(Time) |
---|---|---|
K-mer distance matrix | N^{2} + L | N ^{2} L |
UPGMA | N ^{2} | N ^{2} |
Progressive (one iteration) | L_{P}^{2} = NL + L^{2} | L_{P}^{2} = N^{2} + L^{2} |
Progressive (root alignment) | NL_{P} = N^{2} + NL | NL_{P} log N = N^{2} log N + NL log N |
Progressive (N iterations + root) | N^{2} + NL + L^{2} | N^{3} + NL^{2} |
Refinement (one edge) | NL_{P} + L_{P}^{2} = N^{2} + L^{2} | N^{2}L_{P} + L_{P}^{2} = N^{3}+ L^{2} |
Refinement (N edges) | N^{2} + L^{2} | N ^{4} + NL ^{2} |
TOTAL | N^{2} + L^{2} | N^{4} + NL^{2} |
Results
MUSCLE offers a variety of options that offer different trade-offs between speed and accuracy. In the following, we report speed and accuracy results for three sets of options: (1) the full MUSCLE algorithm including Stages 1, 2 and 3 with default options; (2) Stages 1 and 2 only, using default options (MUSCLE-prog); and (3) Stage 1 only using the fastest possible options (MUSCLE-fast), which are as follows: F^{Binary} is used as a distance measure (Equation 2), the PSP profile function is used, and diagonal finding is enabled.
Alignment accuracy
Accuracy scores. The average accuracy, measured by the Q score, is reported for each method on each set of reference alignments.
Method | PREFAB | BAliBASE | SABmark | SMART |
---|---|---|---|---|
MUSCLE | 0.648 | 0.896 | 0.430 | 0.856 |
MUSCLE-prog | 0.634 | 0.883 | 0.427 | 0.837 |
FFTNS1 | 0.619 | 0.844 | 0.376 | 0.815 |
MUSCLE-fast | 0.616 | 0.849 | 0.396 | 0.813 |
CLUSTALW | 0.588 | 0.860 | 0.404 | 0.823 |
POA-blast | 0.577 | 0.839 | 0.352 | 0.788 |
POA | 0.576 | 0.834 | 0.280 | 0.797 |
CPU times. The total CPU time required to create all alignments in each test set, measured in seconds on a 2.5 GHz Pentium 4 desktop computer.
Method | PREFAB | BAliBASE | SABmark | SMART |
---|---|---|---|---|
MUSCLE-fast | 540 | 11 | 45 | 30 |
FFTNS1 | 720 | 16 | 70 | 46 |
MUSCLE-prog | 3,000 | 52 | 429 | 180 |
MUSCLE | 11,000 | 81 | 1,500 | 560 |
POA-blast | 11,000 | 90 | 290 | 670 |
CLUSTALW | 15,000 | 160 | 210 | 480 |
POA | 24,000 | 130 | 380 | 880 |
Execution speed
Conclusions
MUSCLE demonstrates improvements in accuracy and reductions in computational complexity by exploiting a range of existing and new algorithmic techniques. While the design–typically for practical multiple sequence alignment tools–arguably lacks elegance and theoretical coherence, useful improvements were achieved through a number of factors. Most important of these were selection of heuristics, close attention to details of the implementation, and careful evaluation of the impact of different elements of the algorithm on speed and accuracy. MUSCLE enables high-throughput applications to achieve average accuracy comparable to the most accurate tools previously available, which we expect to be increasingly important in view of the continuing rapid growth in sequence data.
Availability and requirements
MUSCLE is a command-line program written in a conservative subset of C++. At the time of writing, MUSCLE has been successfully ported to 32-bit Windows, 32-bit Intel architecture Linux, Solaris, Macintosh OSX and the 64-bit HP Alpha Tru64 platform. MUSCLE is donated to the public domain. Source code and executable files are freely available at http://www.drive5.com/muscle.
Declarations
Authors’ Affiliations
References
- Notredame C: Recent progress in multiple sequence alignment: a survey. Pharmacogenomics 2002, 3(1):131–144.View ArticlePubMed
- Edgar RC: MUSCLE: multiple sequence alignment with high accuracy and high throughput. Nucleic Acids Res 2004, 32(5):1792–1797. 10.1093/nar/gkh340PubMed CentralView ArticlePubMed
- Wang L, Jiang T: On the complexity of multiple sequence alignment. J Comput Biol 1994, 1(4):337–348.View ArticlePubMed
- Waterman MS, Smith TF, Beyer WA: Some biological sequence metrics. Adv in Math 1976, 20: 367–387.View Article
- Lawrence CE, Altschul SF, Boguski MS, Liu JS, Neuwald AF, Wootton JC: Detecting subtle sequence signals: a Gibbs sampling strategy for multiple alignment. Science 1993, 262(5131):208–214.View ArticlePubMed
- Hogeweg P, Hesper B: The alignment of sets of sequences and the construction of phyletic trees: an integrated method. J Mol Evol 1984, 20(2):175–186.View ArticlePubMed
- Feng DF, Doolittle RF: Progressive sequence alignment as a prerequisite to correct phylogenetic trees. J Mol Evol 1987, 25(4):351–360.View ArticlePubMed
- Thompson JD, Higgins DG, Gibson TJ: CLUSTAL W: improving the sensitivity of progressive multiple sequence alignment through sequence weighting, position-specific gap penalties and weight matrix choice. Nucleic Acids Res 1994, 22(22):4673–4680.PubMed CentralView ArticlePubMed
- Notredame C, Higgins DG, Heringa J: T-Coffee: A novel method for fast and accurate multiple sequence alignment. J Mol Biol 2000, 302(1):205–217. 10.1006/jmbi.2000.4042View ArticlePubMed
- Bahr A, Thompson JD, Thierry JC, Poch O: BAliBASE (Benchmark Alignment dataBASE): enhancements for repeats, transmembrane sequences and circular permutations. Nucleic Acids Res 2001, 29(1):323–326. 10.1093/nar/29.1.323PubMed CentralView ArticlePubMed
- Thompson JD, Plewniak F, Poch O: BAliBASE: a benchmark alignment database for the evaluation of multiple alignment programs. Bioinformatics 1999, 15(1):87–88. 10.1093/bioinformatics/15.1.87View ArticlePubMed
- Hirosawa M, Totoki Y, Hoshida M, Ishikawa M: Comprehensive study on iterative algorithms of multiple sequence alignment. Comput Appl Biosci 1995, 11(1):13–18.PubMed
- Gotoh O: Significant improvement in accuracy of multiple protein sequence alignments by iterative refinement as assessed by reference to structural alignments. J Mol Biol 1996, 264(4):823–838. 10.1006/jmbi.1996.0679View ArticlePubMed
- Katoh K, Misawa K, Kuma K, Miyata T: MAFFT: a novel method for rapid multiple sequence alignment based on fast Fourier transform. Nucleic Acids Res 2002, 30(14):3059–3066. 10.1093/nar/gkf436PubMed CentralView ArticlePubMed
- Van Walle I, Lasters I, Wyns L: Align-m–a new algorithm for multiple alignment of highly divergent sequences. Bioinformatics 2004.
- Schultz J, Copley RR, Doerks T, Ponting CP, Bork P: SMART: a web-based tool for the study of genetically mobile domains. Nucleic Acids Res 2000, 28(1):231–234. 10.1093/nar/28.1.231PubMed CentralView ArticlePubMed
- Ponting CP, Schultz J, Milpetz F, Bork P: SMART: identification and annotation of domains from signalling and extracellular protein sequences. Nucleic Acids Res 1999, 27(1):229–232. 10.1093/nar/27.1.229PubMed CentralView ArticlePubMed
- Schultz J, Milpetz F, Bork P, Ponting CP: SMART, a simple modular architecture research tool: identification of signaling domains. Proc Natl Acad Sci U S A 1998, 95(11):5857–5864. 10.1073/pnas.95.11.5857PubMed CentralView ArticlePubMed
- Vinga S, Almeida J: Alignment-free sequence comparison-a review. Bioinformatics 2003, 19(4):513–523. 10.1093/bioinformatics/btg005View ArticlePubMed
- Dayhoff MO, Schwartz RM, Orcutt BC: A model of evolutionary change in proteins in Atlas of protein sequence and structure,. (Edited by: Dayhoff MO, Ech RV). Maryland: National Biomedical Research Foundation 1978.
- Edgar RC: Local homology recognition and distance measures in linear time using compressed amino acid alphabets. Nucleic Acids Res 2004, 32(1):380–385. 10.1093/nar/gkh180PubMed CentralView ArticlePubMed
- Kimura M: The neutral theory of molecular evolution. Cambridge University Press 1983.View Article
- Saitou N, Nei M: The neighbor-joining method: a new method for reconstructing phylogenetic trees. Mol Biol Evol 1987, 4(4):406–425.PubMed
- Sneath PHA, Sokal RR: Numerical taxonomy. San Francisco: Freeman 1973.
- Thompson JD, Higgins DG, Gibson TJ: Improved sensitivity of profile searches through the use of sequence weights and gap excision. Comput Appl Biosci 1994, 10(1):19–29.PubMed
- Henikoff S, Henikoff JG: Position-based sequence weights. J Mol Biol 1994, 243(4):574–578. 10.1016/0022-2836(94)90032-9View ArticlePubMed
- Altschul SF, Madden TL, Schaffer AA, Zhang J, Zhang Z, Miller W, Lipman DJ: Gapped BLAST and PSI-BLAST: a new generation of protein database search programs. Nucleic Acids Res 1997, 25(17):3389–3402. 10.1093/nar/25.17.3389PubMed CentralView ArticlePubMed
- Gerstein M, Sonnhammer EL, Chothia C: Volume changes in protein evolution. J Mol Biol 1994, 236(4):1067–1078. 10.1016/0022-2836(94)90012-4View ArticlePubMed
- Gotoh O: A weighting system and algorithm for aligning many phylogenetically related sequences. Comput Appl Biosci 1995, 11(5):543–551.PubMed
- Edgar RC, Sjolander K: A comparison of scoring functions for protein sequence profile alignment. Bioinformatics 2004, in press.
- Sjolander K, Karplus K, Brown M, Hughey R, Krogh A, Mian IS, Haussler D: Dirichlet mixtures: a method for improved detection of weak but significant protein sequence homology. Comput Appl Biosci 1996, 12(4):327–345.PubMed
- Altschul SF: Amino acid substitution matrices from an information theoretic perspective. J Mol Biol 1991, 219(3):555–565.View ArticlePubMed
- Jones DT, Taylor WR, Thornton JM: The rapid generation of mutation data matrices from protein sequences. Comput Appl Biosci 1992, 8(3):275–282.PubMed
- Muller T, Spang R, Vingron M: Estimating amino acid substitution models: a comparison of Dayhoff's estimator, the resolvent approach and a maximum likelihood method. Mol Biol Evol 2002, 19(1):8–13.View ArticlePubMed
- von Ohsen N, Zimmer R: Improving profile-profile alignment via log average scoring. In: Algorithms in Bioinformatics, First International Workshop, WABI 2001 (Edited by: Gascuel O, Moret BME). Berlin: Springer-Verlag 2001, 2149: 11–26.
- Thompson JD, Plewniak F, Poch O: A comprehensive comparison of multiple sequence alignment programs. Nucleic Acids Res 1999, 27(13):2682–2690. 10.1093/nar/27.13.2682PubMed CentralView ArticlePubMed
- Myers EW, Miller W: Optimal alignments in linear space. Comput Appl Biosci 1988, 4(1):11–17.PubMed
- Felsenstein J: Inferring Phylogenies. Sunderland, Massachusetts: Sinauer Associates 2004.
- Sauder JM, Arthur JW, Dunbrack RL Jr: Large-scale comparison of protein sequence alignment algorithms with structure alignments. Proteins 2000, 40(1):6–22. 10.1002/(SICI)1097-0134(20000701)40:1<6::AID-PROT30>3.0.CO;2-7View ArticlePubMed
- Durbin R, Eddy S, Krogh A, Mitchison G: Biological sequence analysis. Cambridge University Press 1998.View Article
- Setubal J, Meidanis J: Introduction to computational biology. Pacific Grove, California: Brooks/Cole 1997.
- Thompson JD, Thierry JC, Poch O: RASCAL: rapid scanning and correction of multiple sequence alignments. Bioinformatics 2003, 19(9):1155–1161. 10.1093/bioinformatics/btg133View ArticlePubMed
- Pruitt KD, Tatusova T, Maglott DR: NCBI Reference Sequence project: update and current status. Nucleic Acids Res 2003, 31(1):34–37. 10.1093/nar/gkg111PubMed CentralView ArticlePubMed
- Edgar RC, Sjolander K: COACH: profile-profile alignment of protein families using hidden Markov models. Bioinformatics 2004, in press.
- Holm L, Sander C: Touring protein fold space with Dali/FSSP. Nucleic Acids Res 1998, 26(1):316–319. 10.1093/nar/26.1.316PubMed CentralView ArticlePubMed
- Yona G, Levitt M: Within the twilight zone: a sensitive profile-profile comparison tool based on information theory. J Mol Biol 2002, 315(5):1257–1275. 10.1006/jmbi.2001.5293View ArticlePubMed
- Pietrokovski S: Searching databases of conserved sequence regions by aligning protein multiple-alignments. Nucleic Acids Res 1996, 24(19):3836–3845. 10.1093/nar/24.19.3836PubMed CentralView ArticlePubMed
- Grasso C, Lee C: Combining partial order alignment and progressive multiple sequence alignment increases alignment speed and scalability to very large alignment problems. Bioinformatics 2004.
- Berman HM, Westbrook J, Feng Z, Gilliland G, Bhat TN, Weissig H, Shindyalov IN, Bourne PE: The Protein Data Bank. Nucleic Acids Res 2000, 28(1):235–242. 10.1093/nar/28.1.235PubMed CentralView ArticlePubMed
Copyright
This article is published under license to BioMed Central Ltd. This is an open-access article distributed under the terms of the Creative Commons Attribution License (http://creativecommons.org/licenses/by/2.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.