Skip to content

Module: Graph

JΓΆrg Winkler edited this page Mar 12, 2018 · 5 revisions

There were 3 ideas for graphs in SeqAn3:

  1. use Boost Graph Library
  2. use Lemon Graph Library
  3. implement our own graph code

We decided to use Lemon for the following reasons:

  • Lemon provides efficient data structures and algorithms that serve our needs.
  • Lemon is very stable, even if there are no frequent releases.
  • Lemon has Boost license, which is compatible for SeqAn3.
  • Lemon can be used header-only.
  • Lemon has a good Documentation and Tutorial.

Aspects we considered for (1) and (3):

  • Boost implements even more data structures and algorithms.
  • Boost is header-only as well.
  • Boost Graph Library is dependent on other Boost headers: Include size gets huge!
  • Own graph code can be most specific, but has to be developed, implemented and maintained.

How we use Lemon in SeqAn3:

  • We created a header-only fork on Github that contains latest Lemon code (version 1.3.1). This is necessary, because Lemon uses Mercurial version control.
  • It will be updated manually, if Lemon developers provide useful extensions or bug-fixes in the future.
  • The fork is included as a sub-module in SeqAn3 repository. It is an optional dependency, but it will be downloaded with a recursive clone of SeqAn3 by default.
  • The absence of Lemon will disable all graph-dependent modules, like MSA (Multiple Sequence Alignment) and HMM (Hidden Markov Model).
  • We manually created the config.h file in the Lemon fork to set necessary macros. Platform-specific settings for Lemon can be found in include/seqan3/core/platform.hpp.

Applications

  • Alignment graph in MSA module
  • Guide tree, BFS search
  • Component search in MSA module
  • Maximum Weighted Matching in Lara2
  • Hidden Markov Model
Clone this wiki locally