# Page Home

SeqAn is an open source C++ library of efficient algorithms and data structures for the analysis of sequences with the focus on biological data. Our library applies a unique generic design that guarantees high performance, generality, extensibility, and integration with other libraries. SeqAn is easy to use and simplifies the development of new software tools with a minimal loss of performance.

## Getting Started

1. Install SeqAn. It's as easy as following the installation instructions.
2. Learn SeqAn. The SeqAn Tutorials in the SeqAn Manual will introduce you into SeqAn's basic concepts and show you how to use its data structures and functions.
3. Think SeqAn. Since our library uses advanced C++ template programming techniques, we recommend you to read our glossary of language entity types for a quick introduction.
4. Use SeqAn. Search the library for classes, functions, etc. using the search bar to the left. Need some orientation? Check the typical tasks below.

## Typical Tasks

If you know what you want to do but not how to achieve this with SeqAn, this sections gives you a nice overview of the components that might help you.

Alternatively you might want to check the SeqAn Tutorials.

- ### Read Mapping

  Most modern read mappers first identify candidate regions in the reference sequence approximately or using heuristics. Then, they verify the found locations. SeqAn can help with both and also provides facilities for making I/O easier.

  - Read Mapping

  instructive introductions

  - Index

  class and subclasses can be used for index-based search

  - Finder
  - Pattern

  can be used to implement online string search

  - Align
  - globalAlignment

  alignments can be used for the verification

  - SeqFileIn

  used to read FASTA and FASTQ files

  - BamFileOut

  used to write SAM and BAM files

  - FragmentStore

  allows for managing read alignments and reading/writing from/to SAM

- ### File I/O

  SeqAn has support for most common file formats in Bioinformatics. The following lists the most convenient access methods.

  - I/O Overview

  instructive introductions

  - SeqFileIn
  - SeqFileOut
  - FaiIndex

  FASTA, FASTQ

  - BamFileIn
  - BamFileOut

  SAM, BAM

  - VcfFileIn
  - VcfFileOut

  VCF

  - BedFileIn
  - BedFileOut

  BED

  - GffFileIn
  - GffFileOut

  GFF, GTF

- ### Sequence Alignment and Multiple Sequence Alignment

  Sequence alignment and multiple sequence alignment are classic problems in Bioinformatics.

  - Alignment Representation
  - Pairwise Sequence Alignment
  - Multiple Sequence Alignment

  instructive introductions

  - globalAlignment

  provides dynamic programming algorithms for global sequence alignment with various parameters

  - localAlignment

  - LocalAlignmentEnumerator

  offers the Waterman-Eggert algorithm for enumerating suboptimal local alignments

  - Align

  provides a data structure for tabular alignment of sequences with the same type

  - Gaps

  allows to store gaps independent of the underlying sequence

- ### Graph Data Structures and Algorithms

  Often, graphs come in handy to model subproblems in sequence analysis. SeqAn provides basic support for graphs and graph algorithms.

  - Graphs

  instructive introductions

  - Graph

  central class (including subclasses)

  - DirectedGraph
  - UndirectedGraph.

  simple directed and undirected graphs structures

  - Automaton
  - WordGraph
  - HmmGraph

  special subclasses for sequence analysis

  - Dijkstra's algorithm
  - Bellman-Ford algorithm
  - topological sorting
  - shortest paths in DAGs

  standard graph algorithms

  For more advanced usage and algorithms, we recommend using the LEMON Graph Library.

#### Dox Sources

    @mainpage Home

    SeqAn is an open source C++ library of efficient algorithms and data
    structures for the analysis of sequences with the focus on biological data.
    Our library applies a unique generic design that guarantees high performance,
    generality, extensibility, and integration with other libraries. SeqAn is
    easy to use and simplifies the development of new software tools with a
    minimal loss of performance.

    @section Getting Started

    <ol> <li><b>Install SeqAn.</b> It's as easy as following the <a
    href="http://seqan.readthedocs.org/en/master/Tutorial/GettingStarted.html"
    target="_top">installation instructions</a>.</li> <li><b>Learn SeqAn.</b> The
    <a href="http://seqan.readthedocs.org/en/master/Tutorial.html"
    target="_top">SeqAn Tutorials</a> in the <a
    href="http://seqan.readthedocs.org/en/master/" target="_top">SeqAn Manual</a>
    will introduce you into SeqAn's basic concepts and show you how to use its
    data structures and functions.</li> <li><b>Think SeqAn.</b> Since our library
    uses advanced C++ template programming techniques, we recommend you to read
    our glossary of <a href="page_LanguageEntities.html">language entity
    types</a> for a quick introduction.</li> <li><b>Use SeqAn.</b> Search the
    library for classes, functions, etc. using the search bar to the left. Need
    some orientation? Check the <a href="#typical_tasks">typical tasks</a>
    below.</li> </ol>

    <h2 name="typical_tasks">Typical Tasks</h2>

    If you know what you want to do but not how to achieve this with SeqAn, this
    sections gives you a nice overview of the components that might help you.

    Alternatively you might want to check the <a
    href="http://seqan.readthedocs.org/en/master/Tutorial.html"
    target="_top">SeqAn Tutorials</a>.

    <ul class="overview"> <li> <h3>Read Mapping</h3> <p>Most modern read mappers
    first identify candidate regions in the reference sequence approximately or
    using heuristics. Then, they verify the found locations. SeqAn can help with
    both and also provides facilities for making I/O easier.</p> <table>
    <tr><td><ul><li><a
    href="http://seqan.readthedocs.org/en/master/Tutorial/SimpleReadMapping.html"
    target="_top" data-lang-entity="tutorial">Read
    Mapping</a></li></ul></td><td>instructive introductions</td></tr>
    <tr><td><ul><li>@link Index @endlink</li></ul></td><td>class and subclasses
    can be used for index-based search</td></tr> <tr><td><ul><li>@link Finder
    @endlink</li><li>@link Pattern @endlink</li></ul></td><td>can be used to
    implement online string search</td></tr> <tr><td><ul><li>@link Align
    @endlink</li><li>@link globalAlignment @endlink</li></ul></td><td>alignments
    can be used for the verification</td></tr> <tr><td><ul><li>@link SeqFileIn
    @endlink</li></ul></td><td>used to read FASTA and FASTQ files</td></tr>
    <tr><td><ul><li>@link BamFileOut @endlink</li></ul></td><td>used to write SAM
    and BAM files</td></tr> <tr><td><ul><li>@link FragmentStore
    @endlink</li></ul></td><td>allows for managing read alignments and
    reading/writing from/to SAM</td></tr> </table> </li> <li> <h3>File I/O</h3>
    <p>SeqAn has support for most common file formats in Bioinformatics. The
    following lists the most convenient access methods.</p> <table>
    <tr><td><ul><li><a href="http://seqan.readthedocs.org/en/master/Tutorial/Inpu
    tOutputOverview.html" target="_top" data-lang-entity="tutorial">I/O
    Overview</a></li></ul></td><td>instructive introductions</td></tr>
    <tr><td><ul><li>@link SeqFileIn @endlink</li><li>@link SeqFileOut
    @endlink</li><li>@link FaiIndex @endlink</li></ul></td><td>FASTA,
    FASTQ</td></tr> <tr><td><ul><li>@link BamFileIn @endlink</li><li>@link
    BamFileOut @endlink</li></ul></td><td>SAM, BAM</td></tr>
    <tr><td><ul><li>@link VcfFileIn @endlink</li><li>@link VcfFileOut
    @endlink</li></ul></td><td>VCF</td></tr> <tr><td><ul><li>@link BedFileIn
    @endlink</li><li>@link BedFileOut @endlink</li></ul></td><td>BED</td></tr>
    <tr><td><ul><li>@link GffFileIn @endlink</li><li>@link GffFileOut
    @endlink</li></ul></td><td>GFF, GTF</td></tr> </table> </li> <li>
    <h3>Sequence Alignment <small>and Multiple Sequence Alignment</small></h3>
    <p>Sequence alignment and multiple sequence alignment are classic problems in
    Bioinformatics.</p> <table> <tr><td><ul><li><a href="http://seqan.readthedocs
    .org/en/master/Tutorial/AlignmentRepresentation.html" target="_top" data-
    lang-entity="tutorial">Alignment Representation</a></li><li><a href="http://s
    eqan.readthedocs.org/en/master/Tutorial/PairwiseSequenceAlignment.html"
    target="_top" data-lang-entity="tutorial">Pairwise Sequence
    Alignment</a></li><li><a href="http://seqan.readthedocs.org/en/master/Tutoria
    l/MultipleSequenceAlignment.html" target="_top" data-lang-
    entity="tutorial">Multiple Sequence
    Alignment</a></li></ul></td><td>instructive introductions</td></tr>
    <tr><td><ul><li>@link globalAlignment @endlink</li></ul></td><td>provides
    dynamic programming algorithms for global sequence alignment with various
    parameters</td></tr> <tr><td><ul><li>@link localAlignment
    @endlink</li></ul></td><td></td></tr> <tr><td><ul><li>@link
    LocalAlignmentEnumerator @endlink</li></ul></td><td>offers the Waterman-
    Eggert algorithm for enumerating suboptimal local alignments</td></tr>
    <tr><td><ul><li>@link Align @endlink</li></ul></td><td>provides a data
    structure for tabular alignment of sequences with the same type</td></tr>
    <tr><td><ul><li>@link Gaps @endlink</li></ul></td><td>allows to store gaps
    independent of the underlying sequence</td></tr> </table> </li> <li>
    <h3>Graph <small>Data Structures and Algorithms</small></h3> <p>Often, graphs
    come in handy to model subproblems in sequence analysis. SeqAn provides basic
    support for graphs and graph algorithms.</p> <table> <tr><td><ul><li><a
    href="http://seqan.readthedocs.org/en/master/Tutorial/Graphs.html"
    target="_top" data-lang-
    entity="tutorial">Graphs</a></li></ul></td><td>instructive
    introductions</td></tr> <tr><td><ul><li>@link Graph
    @endlink</li></ul></td><td>central class (including subclasses)</td></tr>
    <tr><td><ul><li>@link DirectedGraph @endlink</li><li>@link UndirectedGraph
    @endlink.</li></ul></td><td>simple directed and undirected graphs
    structures</td></tr> <tr><td><ul><li>@link Automaton @endlink</li><li>@link
    WordGraph @endlink</li><li>@link HmmGraph @endlink</li></ul></td><td>special
    subclasses for sequence analysis</td></tr> <tr><td><ul><li>@link dijkstra
    Dijkstra's algorithm @endlink</li><li>@link bellmanFordAlgorithm Bellman-Ford
    algorithm @endlink</li><li>@link topologicalSort topological sorting
    @endlink</li><li>@link dagShortestPath shortest paths in DAGs
    @endlink</li></ul></td><td>standard graph algorithms</td></tr> <tr><td
    colspan="2">For more advanced usage and algorithms, we recommend using the <a
    href="http://lemon.cs.elte.hu/trac/lemon" target="_top">LEMON Graph
    Library</a>.</td></tr> </table> </li> </ul>