|
| 1 | +// ========================================================================== |
| 2 | +// SeqAn - The Library for Sequence Analysis |
| 3 | +// ========================================================================== |
| 4 | +// Copyright (c) 2006-2015, Knut Reinert, FU Berlin |
| 5 | +// All rights reserved. |
| 6 | +// |
| 7 | +// Redistribution and use in source and binary forms, with or without |
| 8 | +// modification, are permitted provided that the following conditions are met: |
| 9 | +// |
| 10 | +// * Redistributions of source code must retain the above copyright |
| 11 | +// notice, this list of conditions and the following disclaimer. |
| 12 | +// * Redistributions in binary form must reproduce the above copyright |
| 13 | +// notice, this list of conditions and the following disclaimer in the |
| 14 | +// documentation and/or other materials provided with the distribution. |
| 15 | +// * Neither the name of Knut Reinert or the FU Berlin nor the names of |
| 16 | +// its contributors may be used to endorse or promote products derived |
| 17 | +// from this software without specific prior written permission. |
| 18 | +// |
| 19 | +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| 20 | +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 21 | +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 22 | +// ARE DISCLAIMED. IN NO EVENT SHALL KNUT REINERT OR THE FU BERLIN BE LIABLE |
| 23 | +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 24 | +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 25 | +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 26 | +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 27 | +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 28 | +// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH |
| 29 | +// DAMAGE. |
| 30 | +// |
| 31 | +// ========================================================================== |
| 32 | +// Author: Manuel Holtgrewe <manuel.holtgrewe@fu-berlin.de> |
| 33 | +// ========================================================================== |
| 34 | + |
| 35 | +#ifndef SEQAN_INCLUDE_SEQAN_ALIGN_H_ |
| 36 | +#define SEQAN_INCLUDE_SEQAN_ALIGN_H_ |
| 37 | + |
| 38 | +// TODO(holtgrew): Usage of gapped value in align module is not consistent, need proxies in many places, reference not cleanly implemented everywhere yet. |
| 39 | +// TODO(holtgrew): The Author: tag at the top has to be corrected in the headers of this module. |
| 40 | +// TODO(holtgrew): Anchor Gaps must be integrated completely. |
| 41 | +// TODO(holtgrew): Local alignments & Fragments don't work nicely together at the moment, multiLocalAlignments() needs an equivalent in the new align module. |
| 42 | +// TODO(holtgrew): Align<>, AlignCol<> need some love and documentation. |
| 43 | +// TODO(holtgrew): Gaps need better documentation. |
| 44 | +// TODO(holtgrew): refinement should become graph_align and also host Graph<Alignment<>> |
| 45 | +// TODO(holtgrew): graph_msa should become align_msa, or so, see whitepaper. |
| 46 | +// TODO(holtgrew): The documentation and Tutorial need heavy updates, clipping alignments howto can go away. |
| 47 | + |
| 48 | +// ============================================================================ |
| 49 | +// Prerequisites |
| 50 | +// ============================================================================ |
| 51 | + |
| 52 | +#include <seqan/basic.h> |
| 53 | +#include <seqan/modifier.h> // ModifiedAlphabet<>. |
| 54 | +#include <seqan/align/align_metafunctions.h> |
| 55 | +#include <seqan/graph_align.h> // TODO(holtgrew): We should not have to depend on this. |
| 56 | + |
| 57 | +// TODO(holtgrew): Why not use priority queue from STL? |
| 58 | +#include <seqan/misc/priority_type_base.h> |
| 59 | +#include <seqan/misc/priority_type_heap.h> |
| 60 | + |
| 61 | +// ============================================================================ |
| 62 | +// Support |
| 63 | +// ============================================================================ |
| 64 | + |
| 65 | +#include <seqan/align/gapped_value_type.h> |
| 66 | +#include <seqan/align/align_config.h> |
| 67 | +#include <seqan/align/align_traceback.h> |
| 68 | +#include <seqan/align/matrix_base.h> |
| 69 | + |
| 70 | +// ============================================================================ |
| 71 | +// Gaps & Gaps Iterator Data Structures |
| 72 | +// ============================================================================ |
| 73 | + |
| 74 | +#include <seqan/align/fragment.h> |
| 75 | + |
| 76 | +#include <seqan/align/gaps_base.h> |
| 77 | +#include <seqan/align/gaps_iterator_base.h> |
| 78 | + |
| 79 | +#include <seqan/align/gaps_array.h> |
| 80 | +#include <seqan/align/gaps_iterator_array.h> |
| 81 | + |
| 82 | +#include <seqan/align/gap_anchor.h> |
| 83 | +#include <seqan/align/gaps_anchor.h> |
| 84 | +#include <seqan/align/gaps_iterator_anchor.h> |
| 85 | + |
| 86 | +// ============================================================================ |
| 87 | +// Alignment Data Structures and Columns |
| 88 | +// ============================================================================ |
| 89 | + |
| 90 | +#include <seqan/align/align_cols.h> |
| 91 | +#include <seqan/align/align_base.h> |
| 92 | + |
| 93 | +// ============================================================================ |
| 94 | +// Alignment Algorithm Implementations. |
| 95 | +// ============================================================================ |
| 96 | + |
| 97 | +//################################################################################ |
| 98 | +// New module |
| 99 | +//################################################################################ |
| 100 | + |
| 101 | +// The tags have to be available everywhere so we define them centrally. |
| 102 | +#include <seqan/align/alignment_algorithm_tags.h> |
| 103 | + |
| 104 | +// Defines all tags needed for the DP alignment. |
| 105 | +#include <seqan/align/dp_profile.h> |
| 106 | + |
| 107 | +// The DP Band |
| 108 | +#include <seqan/align/dp_band.h> |
| 109 | + |
| 110 | +// The DP Scout |
| 111 | +#include <seqan/align/dp_scout.h> |
| 112 | + |
| 113 | +// Stores the score value of a particular cell in the dp matrix. |
| 114 | +// If affine gap costs are selected one cell stores the three values |
| 115 | +// for all three dp matrices. |
| 116 | +#include <seqan/align/dp_cell.h> |
| 117 | +#include <seqan/align/dp_cell_linear.h> |
| 118 | +#include <seqan/align/dp_cell_affine.h> |
| 119 | +#include <seqan/align/dp_cell_dynamic.h> |
| 120 | + |
| 121 | +// Stores the actual trace segment that was detected during traceback. |
| 122 | +// The trace segments can be adapted into any alignment representation |
| 123 | +// form. |
| 124 | +#include <seqan/align/dp_trace_segment.h> |
| 125 | +#include <seqan/align/dp_traceback_adaptor.h> |
| 126 | + |
| 127 | +// Implements the different recursion formula of the alignment algorithms. |
| 128 | +#include <seqan/align/dp_formula.h> |
| 129 | +#include <seqan/align/dp_formula_linear.h> |
| 130 | +#include <seqan/align/dp_formula_affine.h> |
| 131 | +#include <seqan/align/dp_formula_dynamic.h> |
| 132 | + |
| 133 | +// Defines meta informations which determine how to compute a column and a |
| 134 | +// certain cell for different profiles. |
| 135 | +#include <seqan/align/dp_meta_info.h> |
| 136 | + |
| 137 | +// Actual matrix to store the values. Uses the matrix_base.h definitions |
| 138 | +// as a host. |
| 139 | +#include <seqan/align/dp_matrix.h> |
| 140 | +#include <seqan/align/dp_matrix_sparse.h> |
| 141 | + |
| 142 | +// The navigator that based on the selected profile and band chooses the |
| 143 | +// correct way to navigate through the matrix. |
| 144 | +#include <seqan/align/dp_matrix_navigator.h> |
| 145 | +#include <seqan/align/dp_matrix_navigator_score_matrix.h> |
| 146 | +#include <seqan/align/dp_matrix_navigator_score_matrix_sparse.h> |
| 147 | +#include <seqan/align/dp_matrix_navigator_trace_matrix.h> |
| 148 | + |
| 149 | +// Ensures the backwards compatibility for the global interfaces of the |
| 150 | +// alignment algorithms. Based on the called function this selects the |
| 151 | +// correct parameters for the new alignment module. |
| 152 | +#include <seqan/align/dp_context.h> |
| 153 | +#include <seqan/align/dp_setup.h> |
| 154 | + |
| 155 | +// The actual implementations of the traceback and the dynamic programming that |
| 156 | +// is used by all different alignment algorithms. |
| 157 | +#include <seqan/align/dp_traceback_impl.h> |
| 158 | +#include <seqan/align/dp_algorithm_impl.h> |
| 159 | + |
| 160 | +//################################################################################ |
| 161 | +// Old module |
| 162 | +//################################################################################ |
| 163 | + |
| 164 | +// Also, we have an implementation of Hirschberg's algorithm to compute |
| 165 | +// alignments. |
| 166 | +#include <seqan/align/global_alignment_hirschberg_impl.h> |
| 167 | + |
| 168 | +// The implementations of Myers' bitvector algorithm for alignments can only |
| 169 | +// compute alignment scores. The combination of Hirschberg's and Myers' |
| 170 | +// algorithm is limited in the same way. |
| 171 | +#include <seqan/align/global_alignment_myers_impl.h> |
| 172 | +#include <seqan/align/global_alignment_myers_hirschberg_impl.h> |
| 173 | + |
| 174 | +// Implementations of the local alignment algorithms with declumping. We also |
| 175 | +// use them for the localAlignment() calls and return the best local alignment |
| 176 | +// only. |
| 177 | +// TODO(rmaerker): Replace this with a new implementation based on the new alignment module. |
| 178 | +#include <seqan/align/local_alignment_waterman_eggert_impl.h> |
| 179 | +#include <seqan/align/local_alignment_banded_waterman_eggert_impl.h> |
| 180 | + |
| 181 | +// We carry around this implementation of Smith-Waterman because it supports |
| 182 | +// aligning into fragment strings and alignment graphs. Eventually, it could |
| 183 | +// go away if Waterman-Eggert supports them. |
| 184 | +//#include <seqan/align/local_alignment_smith_waterman_impl.h> |
| 185 | + |
| 186 | +// ============================================================================ |
| 187 | +// Alignment Algorithm Interfaces |
| 188 | +// ============================================================================ |
| 189 | + |
| 190 | +// The front-end functions for global alignments. |
| 191 | +#include <seqan/align/global_alignment_unbanded.h> |
| 192 | +#include <seqan/align/global_alignment_banded.h> |
| 193 | + |
| 194 | +// The front-end functions for local alignments. |
| 195 | +#include <seqan/align/local_alignment_unbanded.h> |
| 196 | +#include <seqan/align/local_alignment_banded.h> |
| 197 | + |
| 198 | +// The front-end for enumeration of local alignments. |
| 199 | +#include <seqan/align/local_alignment_enumeration.h> // documentation |
| 200 | +#include <seqan/align/local_alignment_enumeration_unbanded.h> |
| 201 | +#include <seqan/align/local_alignment_enumeration_banded.h> |
| 202 | + |
| 203 | +// The front-end functions for the more specialized alignment algorithms such as |
| 204 | +// Hirschberg, Myers and Myers-Hirschberg. |
| 205 | +#include <seqan/align/global_alignment_specialized.h> |
| 206 | + |
| 207 | +// ============================================================================ |
| 208 | +// Operations On Alignments |
| 209 | +// ============================================================================ |
| 210 | + |
| 211 | +#include <seqan/align/alignment_operations.h> |
| 212 | +#include <seqan/align/evaluate_alignment.h> |
| 213 | + |
| 214 | +#endif // SEQAN_INCLUDE_SEQAN_ALIGN_H_ |
0 commit comments