SeqAn3
FM Index
Collaboration diagram for FM Index:

Classes

class  seqan3::bi_fm_index< text_t, index_traits_t >
 The SeqAn Bidirectional FM Index. More...
 
interface  seqan3::bi_fm_index_concept
 Concept for bidirectional FM indices. More...
 
struct  seqan3::bi_fm_index_default_traits
 The default Bidirectional FM Index Configuration. More...
 
class  seqan3::bi_fm_index_iterator< index_t >
 The SeqAn Bidirectional FM Index Iterator. More...
 
interface  seqan3::bi_fm_index_iterator_concept
 Concept for bidirectional FM index iterators. More...
 
interface  seqan3::bi_fm_index_traits_concept
 Concept for bidirectional FM Index traits. More...
 
class  seqan3::fm_index< text_t, fm_index_traits >
 The SeqAn FM Index. More...
 
interface  seqan3::fm_index_concept
 Concept for unidirectional FM indices. More...
 
struct  seqan3::fm_index_default_traits
 The default FM Index Configuration. More...
 
class  seqan3::fm_index_iterator< index_t >
 The SeqAn FM Index Iterator. More...
 
interface  seqan3::fm_index_iterator_concept
 Concept for unidirectional FM index iterators. More...
 
interface  seqan3::fm_index_traits_concept
 Concept for unidirectional FM Index traits. More...
 

Requirements for seqan3::fm_index_traits_concept

The SDSL index must support the following interface to work with SeqAn3.

typename t::sdsl_index_type seqan3::fm_index_traits_concept::sdsl_index_type
 Declares the type of the underlying SDSL index. Must satisfy the seqan3::detail::sdsl_index_concept.
 

Requirements for seqan3::fm_index_concept

You can expect these member types and member functions on all types that satisfy seqan3::fm_index_concept.

typename t::text_type seqan3::fm_index_concept::text_type
 Type of the indexed text.
 
typename t::char_type seqan3::fm_index_concept::char_type
 Type of the underlying character of text_type.
 
typename t::size_type seqan3::fm_index_concept::size_type
 Type for representing the size of the indexed text.
 
typename t::iterator_type seqan3::fm_index_concept::iterator_type
 Type of the unidirectional FM index iterator. More...
 

Requirements for seqan3::fm_index_iterator_concept

You can expect these member types and member functions on all types that satisfy seqan3::fm_index_iterator_concept.

typename t::index_type seqan3::fm_index_iterator_concept::index_type
 Type of the underlying SeqAn FM index (not the underlying SDSL index).
 
typename t::size_type seqan3::fm_index_iterator_concept::size_type
 Type for representing the size of the indexed text. More...
 

Requirements for seqan3::bi_fm_index_traits_concept

The bidirectional FM index traits must provide the following types:

typename t::fm_index_traits seqan3::bi_fm_index_traits_concept::fm_index_traits
 Declares the type of the underlying unidirectional FM index on the original text. Must satisfy seqan3::fm_index_traits_concept.
 
typename t::rev_fm_index_traits seqan3::bi_fm_index_traits_concept::rev_fm_index_traits
 Declares the type of the underlying unidirectional FM index on the reversed text. Must satisfy seqan3::fm_index_traits_concept.
 

Requirements for seqan3::bi_fm_index_concept

You can expect these member types and member functions on all types that satisfy seqan3::bi_fm_index_concept.

typename t::iterator_type seqan3::bi_fm_index_concept::iterator_type
 Type of the bidirectional FM index iterator.
 
typename t::fwd_iterator_type seqan3::bi_fm_index_concept::fwd_iterator_type
 Type of the unidirectional FM index iterator based on the unidirectional FM index on the original text.
 
typename t::rev_iterator_type seqan3::bi_fm_index_concept::rev_iterator_type
 Type of the unidirectional FM index iterator based on the unidirectional FM index on the reversed text. More...
 

Requirements for seqan3::bi_fm_index_iterator_concept

You can expect these member types and member functions on all types that satisfy seqan3::fm_index_iterator_concept.

typename t::index_type seqan3::bi_fm_index_iterator_concept::index_type
 Type of the underlying SeqAn FM index (not the underlying SDSL index).
 
typename t::size_type seqan3::bi_fm_index_iterator_concept::size_type
 Type for representing the size of the indexed text. More...
 

Detailed Description

FM Indices

FM indices are text indices similar to suffix trees or suffix arrays which are based on the Burrow Wheeler transform and a sampled suffix array. FM indices are significantly smaller in space without sacrificing speed. They also allow for adjusting the speed respectively space by choosing the underlying data structures accordingly or modyfing the sampling rate of the sampled suffix array.

The FM indices are based on the SDSL 3 (succinct data structure library). You are able to specify the underlying implementation of the SDSL to adjust it to your needs as well as choose one of the preconfigured indices that are suitable for common applications in sequence analysis.

For technical reasons you can currently only build indices over a seqan3::alphabet_concept if its seqan3::alphabet_size is smaller or equal 256.

You can choose between unidirectional and bidirectional FM indices (which can be thought of suffix trees and affix trees, i.e. a combination of suffix and prefix trees being able to search a pattern from left to right, right to left and character by character in any arbitrary order). Roughly speaking bidirectional FM indices are more powerful for approximate string matching at the cost of a higher space consumption

Todo:
(between a factor of X and Y depending on the configuration).

FM Index Iterators

Index Iterators are lightweight objects, i.e. they are cheap to copy.

Note that although the SeqAn3 index iterators are called "iterators", they don't model any of the standard library iterator concepts, not even std::Iterator.

Function Documentation

◆ iterator_type()

typename t::iterator_type iterator_type

Type of the unidirectional FM index iterator.

Todo:
Write me!

◆ rev_iterator_type()

typename t::rev_iterator_type rev_iterator_type

Type of the unidirectional FM index iterator based on the unidirectional FM index on the reversed text.

Todo:
Write me!

◆ size_type() [1/2]

typename t::size_type size_type

Type for representing the size of the indexed text.

Todo:
Write me!

◆ size_type() [2/2]

typename t::size_type size_type

Type for representing the size of the indexed text.

Todo:
Write me!