SeqAn3  3.0.2
The Modern C++ library for sequence analysis.
Changelog

This changelog contains a top-level entry for each release with sections on new features, API changes and notable bug-fixes (not all bug-fixes will be listed).

Get to know SeqAn3 with our tutorials.

Please see the release announcement: https://www.seqan.de/announcing-seqan3/

See the porting guide for some help on porting: https://docs.seqan.de/seqan/3-master-user/howto_porting.html

See the documentation on API stability to learn about when API changes are allowed.

3.0.2

Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.

  • Check out our new SeqAn3 Cookbook. It contains a listing of code examples on how to perform particular tasks using the library.
  • SeqAn 3.0.2 is known to compile with GCC 7.5, 8.4, 9.3 and 10.2. Future versions (e.g. GCC 10.3 and 11) might work, but weren’t yet available at the time of this release.

New features

Alignment

Argument Parser

I/O

Build system

  • Add top-level CMakeLists.txt (#1475).
  • We now use Doxygen version 1.8.20 to build our documentation (#2081).

Range

Search

API changes

  • The required version of the ranges-v3 library has increased: We now support the versions >= 0.11.0 and < 0.12.0, increasing the previous requirement of >= 0.10.0 and < 0.11.0 (#2014).

Alignment

Header Changes:

#include <seqan3/alignment/configuration/{align_config_max_error.hpp => align_config_min_score.hpp}>
#include <seqan3/alignment/configuration/{align_config_scoring.hpp => align_config_scoring_scheme.hpp}>
#include <seqan3/alignment/configuration/{align_config_vectorise.hpp => align_config_vectorised.hpp}>
#include <seqan3/alignment/configuration/{align_config_gap.hpp => align_config_gap_cost_affine.hpp}>
#include <seqan3/alignment/configuration/{align_config_mode.hpp => align_config_method.hpp}>
#include <seqan3/alignment/configuration/{align_config_result.hpp => align_config_score_type.hpp}>
#include <seqan3/alignment/configuration/align_config_aligned_ends.hpp> [deleted without replacement; is now part of seqan3::align_cfg::method_global]
#include <seqan3/{alignment/pairwise => core/algorithm}/alignment_range.hpp>

Core

  • In accordance with the standard, the following concepts have been renamed:
    • std::default_constructible to std::default_initializable
    • std::readable to std::indirectly_readable
    • std::writable to std::indirectly_writable (#1860).
  • The seqan3::remove_cvref_t has been replaced by std::remove_cvref_t (#2079).

Range

  • The seqan3::begin(), seqan3::end(), seqan3::cbegin(), seqan3::cend(), seqan3::size(), seqan3::empty() functions have been deprecated. Use std::ranges::{begin|end|cbegin|cend|size|empty}() instead (#1663).
  • The seqan3::forward_range has been removed. Use std::ranges::borrowed_range instead (#2038).
  • The seqan3::views:trim has been renamed to seqan3::views:trim_quality (#2025).

Header Changes:

#include <seqan3/range/views/{trim.hpp => trim_quality.hpp}>

Search

Header Changes:

#include <seqan3/search/{algorithm => }/search.hpp>
#include <seqan3/{search/search_result_range.hpp => core/algorithm/algorithm_result_generator_range.hpp}>
#include <seqan3/search/configuration/{mode.hpp => hit.hpp}>
#include <seqan3/search/configuration/{max_error_rate.hpp => max_error.hpp AND max_error_common.hpp}>

Notable Bug-fixes

Alignment

  • When invoking the alignment algorithm with a user defined thread count using the seqan3::align_cfg::parallel configuration element, all available threads were used. This is now fixed and only the specified number of threads will be spawned (#1854).
  • Using an unsigned score type via the seqan3::align_cfg::score_type configuration is prevented with a static assert, since gaps and mismatches have negative scores and thus need a signed score type (#1891).

Argument Parser

  • Long option identifiers and their value must be separated by a space or equal sign =. Applying this restriction resolves an ambiguity that occurs if one long option identifier is the prefix of another (#1792).

    Valid short id value pairs: -iValue, -i=Value, -i Value Valid long id value pairs: --id=Value, --id Value (prohibited now: --idValue)

I/O

Search

Range

3.0.1

Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.

New features

Alphabet

Alignment

Argument parser

Build system

  • find_package(SeqAn3) is now case-insensitive and always populates SEQAN3_* variables in all upper-case (#1427).

Core

  • Added seqan3::lzcnt, seqan3::tzcnt, and seqan3::popcount for bit manipulation (#1141).
  • Added traits for "metaprogramming" with seqan3::type_list and type packs (#1204, #1214, #1273).
  • Added SIMD functions seqan3::upcast and seqan3::upcast_signed (#1190).

I/O

Range

Search

  • The memory footprint of FM-indices over text collections was reduced (#1363).

Std

  • We provide a std::to_chars overload for floating point data types in our seqan3/std/from_chars header (#1160).

API changes

  • The required version of the ranges-v3 library has increased: We now support the versions >= 0.10.0 and < 0.11.0, increasing the previous requirement of >= 0.5.0 and < 0.6.0 (#1471).
  • Customising for third party types has changes slightly: You are only affected if you added types to seqan3::custom::. Please see About Customisation (#1225).
  • All our concepts are named in the snake_case style (e.g. seqan3::WritableAlphabet -> seqan3::writable_alphabet)! This change was motivated by the decision of the ISO C++ committee to also use snake case everywhere (#1235).

Alphabet

Argument parser

Build system

  • find_package accepts minimum versions (e.g. find_package(SEQAN3 3.0.1) requires at least SeqAn3 with a version of >= 3.0.1 and < 4.0.0) (#1425).
  • The variable SEQAN3_VERSION_STRING defined by find_package(SEQAN3) was renamed to SEQAN3_VERSION (#1425).

Core

I/O

  • Removed the field-based in- and output interface for sequence and structure files through std::get and std::tie: Output can instead be achieved with seqan3::views:zip(), for input we will implement unzip() in the future (#1398 #1412).
  • The seqan3::field::flag of SAM/BAM input and output is now an enum instead of an integer, see seqan3::sam_flag (#1390).
  • Uppercase seqan3::field names are deprecated. Use the lower case field names instead. You can easily find and replace all occurrences by the following regex: find field::([A-Z_]+) replace field::\L$1 (#1421).
  • Removed the char type from the input and output files: Most user code will be unaffected; however, if you have fully specified all templates of any of the input or output files in your code, you need to remove the template parameter to select the char type of the stream, e.g. change seqan3::sequence_file_input<traits_t, fields_t, formats_t, char> to seqan3::sequence_file_input<traits_t, fields_t, formats_t>. Before this change, setting the char type gave the impression that also streams over wide characters are supported which is not the case yet (#1400).

Range

Search

Notable Bug-fixes

  • All our headers are self contained (#1085).
  • The alignment algorithm with edit distance returns the correct back coordinate (#1093).
  • Inserting or deleting gaps into an empty seqan3::gap_decorator does not cause assert anymore (#1109).
  • Some fixes to edge cases in BAM file writing (#1110).
  • The application name of the seqan3::argument_parser is restricted to alpha-numeric characters and _ and - (#1133).
  • Copying and moving the seqan3::fm_index and seqan3::bi_fm_index now work properly (#1144).
  • Searching in the seqan3::fm_index and seqan3::bi_fm_index constructed from a text collection containing a single text now returns the correct result (#1316).
  • The view seqan3::views::take is sized if the underlying range is sized (#1146).
  • The detection of the pthread library works correctly on linux based systems (#1200).
  • The translation table for nucleotide to amino acid translation was corrected (#1485).
  • The amino acid score matrices were corrected (#1455).

3.0.0 ("Escala")

This is the initial release of SeqAn3. It is an entirely new library so there is no changelog that covers the differences to SeqAn2.

Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.

seqan3::align_cfg::method_global
Sets the global alignment method.
Definition: align_config_method.hpp:106
seqan3::algorithm_result_generator_range::algorithm_result_generator_range
algorithm_result_generator_range(algorithm_executor_type &&) -> algorithm_result_generator_range< std::remove_reference_t< algorithm_executor_type >>
Deduces from the passed algorithm_executor_type.
seqan3::views::trim_quality
constexpr auto trim_quality
A view that does quality-threshold trimming on a range of seqan3::quality_alphabet.
Definition: trim_quality.hpp:129
seqan3::search
auto search(queries_t &&queries, index_t const &index, configuration_t const &cfg=search_cfg::default_configuration)
Search a query or a range of queries in an index.
Definition: search.hpp:105