SeqAn Changelog
---------------

This file summarizes the changes to the SeqAn library and apps.

Release 2.2.0
~~~~~~~~~~~~~

Library Features
^^^^^^^^^^^^^^^^

- Indices:
    - FM index now has several options to reduce space consumption or improve running time
        - up to three level rank dictionaries
        - size of blocks on the lowest level (referred to as ``WORDS_PER_BLOCK``)
    - Bidirectional FM index with constant running time using EPR-dictionaries
    - Please see the `manual <seqan.readthedocs.io/en/master/Tutorial/DataStructures/Indices/FMIndex.html>`_ for more information

- Alignment:
    - Vectorized DP-Alignment algorithms using SSE3/AVX2. Allows for inter-parallel alignment computation in a many-vs-many or one-vs-many mode.
    - add a scoring matrix type that can be specified at runtime (e.g. BLOSSUM62, BLOSSUM50)

- Modifier:
    - ModifiedString ModPadding: Expand a string with padding symbols, without changing the source.

- Other:
    - Replace pthread implementation with STLs thread support library. Increases performance and fixes rare bugs in bam_io.

App Updates
^^^^^^^^^^^

- SAK (Swiss Army Knife):
    - fixed sequence filters.
- Yara:
    - verifying seeds
    - fixes CIGARs and secondary records.

Selected Bug Fixes
^^^^^^^^^^^^^^^^^^

- Alignments:
    - fixes MyersHirschberg implementation.
    - accept '=' operations in CIGAR string
- Split Alignment:
    - computes correct trace from split position.
    - allows flexible free-end gaps configuration.
- close Fasta file after FAI-Index is built.
- fixes Character to AminoAcid conversion.
- remove temporary files created during tests on Windows.

Infrastructure Updates
^^^^^^^^^^^^^^^^^^^^^^

- Build System:
    - The Intel Compiler is now fully supported on Linux and Windows, both 32bit and 64bit; it builds faster binaries and supports some functionality not available in MSVC.
    - On Windows there is now experimental support for Clang/C2, the Microsoft version of the clang compiler.
    - Please see the `manual <http://seqan.readthedocs.io/en/master/Infrastructure/Use/CMakeBuildDirs.html#visual-studio>`_ for more information on how to use these compilers.
    - support deb/rpm/exe/dmg packages and SSE4+POPCNT binaries

- Platforms:
    - full FreeBSD support
    - Ship UCRT, OPENMP and Intel DLLs for apps on windows
    - more apps available on Windows and some packaging fixes

Documentation Updates
^^^^^^^^^^^^^^^^^^^^^

- Api Docs:
    - Tree-View by Module

Release 2.1.1
~~~~~~~~~~~~~

Minor release including major improvements of the manual, several library bug-fixes and changes in the build system. All library modules are backward compatible
with 2.1.0. For a complete list of changes visit `GitHub <https://github.com/seqan/seqan/pulls?q=is%3Apr+is%3Amerged++milestone%3A%22Release+2.1.1%22+>`_.

Selected Bug Fixes
^^^^^^^^^^^^^^^^^^

- Tests:
    - delete automatically created temp directories in unit and app tests
    - demo tests: ``std::cout`` was not considered in tests

App Updates
^^^^^^^^^^^

- Yara:
    - fall back to single-end mapping when paired-end library length distribution is neither given nor estimable
    - fixed handling of reference metagenomes (references larger than 16k sequences)
    - enabled support for reference metagenomes by default (``-DYARA_LARGE_CONTIGS=ON``)
    - added option ``--sensitivity`` (low, high, full)
    - replaced option --output-secondary with ``--secondary-alignments`` (tag, record, omit)
    - renamed several options

Documentation Updates
^^^^^^^^^^^^^^^^^^^^^

- Manual:
    - major reworking of the manual
    - repaired links to API dox
    - hourly update of API dox for nightly builds

Infrastructure Updates
^^^^^^^^^^^^^^^^^^^^^^

- Build System:
    - more sensible execinfo detection
    - don't ship apps and the manual on library releases
    - introduce cmake ``-DSEQAN_OFFICIAL_PKGS=1`` to build upstream releases with static binaries
    - cache dependency detection on ``DEVELOP``
    - make it possible to do ``RELEASE_LIBRARY`` without dox

- Platforms:
    - basic BSD support
    - fixed warnings on Windows

- KNIME:
    - packaging - more flexibility when generating KNIME plugins of external apps


Release 2.1.0
~~~~~~~~~~~~~

Major release with many new features and applications.
Except where noted below, this release is compatible to previous 2.x releases.
For a complete list of changes visit `GitHub <https://github.com/seqan/seqan/pulls?q=is%3Apr+is%3Amerged++milestone%3A%22Release+2.1.0%22+>`_.

Library Updates and Selected Bugfixes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

- Apps:
    - Yara: fixed warnings, build errors and bugs, updated test files
    - Yara: new features (compute mapping qualities, estimate distribution of paired-end insert sizes)
    - Yara: follow SAM recommended practices for paired-end reads
    - T-Coffee: new feature ``deep coffee`` (aligning several hundred sequences)
    - Gustaf: introduced two phase breakpoint combination; updated readme and help messages
    - Removed old apps: Razers2, Flexbar and SeqCons in favor of newer releases

- Alignments:
    - added feature to count gaps to the left a of a position/iterator
    - disallow wrong use of scoring scheme for Hirschberg algorithm
    - extended AlignmentStats by number of gaps and length of the alignment
    - fixed evaluation of alignment
    - using gaps for integrateAlign and align_extend

- BLAST (new module):
    - E-Value statistics, including precomputed constants, bit-score and e-value calculation for alignments
    - support for reading and writing BLAST Tabular files (with and without comments)
    - support for writing BLAST Report files

- Indices:
    - added public function for trie and radix tree construction
    - Q-gram Index: allows sorting the hash-table according to the number of occurrences to reduce cache misses

- IO:
    - Tabix index: allowing range queries on chromosomal file formats such as VCF
    - Fai Index: optimized fasta index construction
    - BAM: added function to write tags from BamTagsDict to the tags field of a bam record
    - BAM: allowed BamTagsDict to take const CharStrings

- Misc:
    - fixed Iupac alphabet by replacing ``=`` by ``U``
    - added missing ``O`` character to amino acid alphabet
    - Argument Parser: a few new features such as help string for advanced options
    - removed random number engine and replaced it by the STL one
    - ZipIterator & ZipContainerView: iterating simultaneously over multiple containers
    - extended edges in graphs to store a reference to its source

- Modifier:
    - ModifiedString ModPos: iterating over a sequence in a predefined order
    - overload save() of ModifiedStrings for const strings
    - fixed Modified Iterators and ModView

- Journaled String Tree (new module):
    - reference compressed string set structure
    - for more details see the `publication <http://bioinformatics.oxfordjournals.org/content/30/24/3499.short>`_

- STL containers:
    - added a completely new adaptation to SeqAn interfaces that supports all STL containers, also ``std::array`` and ``std::forward_list``
    - greatly improved compatibility of SeqAn algorithms with STL containers so these can be used instead of SeqAn Strings

- Streams:
    - improved ZipStream

- Compatibility to previous versions
    - the random module was removed, please use the STL's random module instead
    - the ``StringSet<T, Dependent<Tight> >`` has been deprecated and will likely be removed for the next release
    - some SeqAn Macros have been deprecated since C++11 is now required, e.g. there is no ``SEQAN_AUTO_PTR_NAME``, only ``unique_ptr<>``
    - ``SEQAN_NAMESPACE_MAIN`` has been moved into the ``seqan`` namespace, so some of your Metafunction overrides may need to be adapted

Documentation Updates
^^^^^^^^^^^^^^^^^^^^^

- Dox:
    - added version selector in API dox


Infrastructure Updates
^^^^^^^^^^^^^^^^^^^^^^

- Build System:
    - Major improvements to build system resulting in cleanup and dropped dependencies
    - C++11 is now required and many datatypes now have move cosntructors and -assignment operators
    - added support for new compiler versions, but dropped support for older compilers
    - requirements are now GCC ≥ 4.9 or LLVM / Clang ≥ 3.5 (for Linux, Mac OSX, FreeBSD) and Visual C++ ≥ 14.0 / Visual Studio ≥ 2015 (for Windows)


Release 2.0.2
~~~~~~~~~~~~~

Minor release including several library bug-fixes as well as better documentation and infrastructure.
All library modules are backward compatible with 2.0.1.
For a complete list of changes visit `GitHub <https://github.com/seqan/seqan/pulls?q=is%3Apr+is%3Amerged++milestone%3A%22Release+2.0.2%22+>`_.

Selected Bug Fixes
^^^^^^^^^^^^^^^^^^

- Sequences:
    - fixed insert() for packed_string
    - fixed segfault bug for upac assignment in Dna5 StringSet
    - added insertValue(), insert() and replace() for StringSets
    - added empty() for std::list

- IO:
    - BAM I/O: adding spport for custom tags with floats
    - BAM I/O: BamTagsDict allows wrapping a const object
    - FastQ: fixed readRecord() for malformed fastq files (avoid skipping records)
    - FaiIndex: fixed readSequence/readRegion allocation

- Apps:
    - Gustaf: loading Fasta files with Iupac characters

Documentation Updates
^^^^^^^^^^^^^^^^^^^^^

- Dox:
    - fixed page redirection
    - minor bugs
    - code snippets in the documentation now undergo build tests and continuous integration to avoid outdated documentation

Infrastructure Updates
^^^^^^^^^^^^^^^^^^^^^^

- Platform Support:
    - FreeBSD support
    - updated prerequisites for GCC to >= 4.7 and Clang to >= 3.3
    - fixed warnings for gcc6
    - clang-3.7.x: deactivated openmp because of bug
    - fixed compiler-warnings in Visual Studio (/W2 produces no warnings anymore)
    - added support for Visual Studio 2014 and 2015

- Build System:
    - added pkg-config support
    - changed includes search priorities for CMake's FindSeqAn

- Continuous Integration:
    - added more platforms on TravisCI


Release 2.0.1
~~~~~~~~~~~~~

Minor release including several library bug-fixes as well as better documentation and infrastructure.
All library modules are backward compatible with 2.0.0.
For a complete list of changes visit `GitHub <https://github.com/seqan/seqan/pulls?q=is%3Apr+is%3Amerged++milestone%3A%22Release+2.0.1%22+>`_.

Library Bug Fixes
^^^^^^^^^^^^^^^^^

- Basic:
    - Added AminoAcid symbol "O"
    - Disabled global exception handler by default

- Sequence:
    - Added missing overloads for const Strings
    - Fixed and tested StringSet
    - Reworked STL containers adaption
    - Fixed several bugs in ModifiedStrings and ModifiedIterators

- Stream:
    - Worked around I/O with std::string
    - Supported multi-stream gzip files produced by Illumina Casava
    - Fixed BgzfStream tell()

- SeqIO:
    - Changed Raw file extension from .txt to .raw

- BAM I/O:
    - Fixed BIN computation
    - Fixed a bug in jumpToOrphans()
    - Fixed internal concurrency problems
    - Fixed readBamHeader() to clear the BamHeader
    - Added assertions to writeRecord()
    - Added BamIndex::save() to save .bai files

- Gff I/O:
    - Fixed parsing of comment lines

- FragmentStore:
    - Fixed loading Gtf/Gff3 files

- Index:
    - Fixed open() and save() for WT FMIndex
    - Added open() and save() for OpenAddressing QGramIndex

- Seeds:
    - Fixed a bug in sparse chaining
    - Fixed a bug in banded chain alignment

Documentation Updates
^^^^^^^^^^^^^^^^^^^^^

- Manual:
    - Fixed and improved several Tutorials and HowTos
    - Added version-aware links to the dox

- Dox:
    - Added @datarace entity
    - Fixed broken links in "See Also" section
    - Fixed a problem with close button in the side pane
    - Documented class VirtualStream

- Demos:
    - Restructured demos directory
    - Fixed several broken demos

Infrastructure Updates
^^^^^^^^^^^^^^^^^^^^^^

- Platform Support:
    - Added support for GCC 4.9 and Clang 3.7
    - Preliminary support for Clang 3.8 with OpenMP
    - Preliminary support for Visual Studio 2015
    - Preliminary support for FreeBSD 10.2

- Build System:
   - Tested all demos
   - Upgraged TravisCI builds to run on Docker
   - Fixed Java detection


Release 2.0.0
~~~~~~~~~~~~~

Major release with many new features and applications.
Note, the majority of the modules are backward compatible to the previous version.
Some modules, e.g. I/O-modules, have some adapted easier-to-use or unified interfaces.

Library Updates
^^^^^^^^^^^^^^^

- Faster and easier-to-use modules for basic and formatted file I/O:
    - ``stream``
    - ``seq_io``
    - ``bam_io``
    - ``vcf_io``
    - ``gff_io``
- Faster data structures:
    - FMIndex (up to 4X).
    - Packed Strings.
- New alignment modules:
    - X-Drop extension for alignments (``align_extend``)
    - Sequence-profile alignments (``align_profile``)
- New AminoAcid-Dna translation module (``translation``)
- The motif finding module (``find_module``) has been removed.

Infrastructure Updates
^^^^^^^^^^^^^^^^^^^^^^

- The repository has been migrated to GitHub (https://github.com/seqan/seqan).
- Continuous integration builds happen on TravisCI.
- The manual has been migrated to sphinx (http://seqan.readthedocs.io).
- The ``core`` and ``extras`` subfolders have been removed.

New Apps
^^^^^^^^

- ANISE and BASIL
    - Methods for the detection and assembly of inserted sequence in High-Throughput Sequencing Data.

- BS Tools
    - Bisulfite read mapping and SNP and methylation level calling.

- Fiona
    - A parallel and automatic strategy for read error correction.

- Gustaf
    - Generic mUlti-SpliT Alignment Finder.

- Mason 2
    - A read simulator.

- NGS ROI
    - Region of Interest Analysis for NGS Data.

- Samcat
    - Concatenate and convert SAM/BAM files (faster than samtools).

- Seqcons 2
    - Compute consensus from sequences sequences with and without approximate alignment information.

- Yara
    - Yet another read aligner (replaces Masai).


Release 1.4.2
~~~~~~~~~~~~~

Documentation-only release backward compatible with 1.4.1.


Release 1.4.1
~~~~~~~~~~~~~

This minor release should be backward compatible with 1.4. It contains small fixes and many demos for improving the API documentation. Some file format functionality has been added.

Highlights
^^^^^^^^^^

- Many new demos and improved API documentation throughout the library.
- New file format support and tutorials for this functionality: VCF I/O, BED I/O, and improvements to GFF and GTF I/O.

Selected Bug Fixes
^^^^^^^^^^^^^^^^^^

- ``gff_io.h`` does not contain corrupt includes any more
- Gapped X-drop seed extension now works with score matrices such as BLOSUM60.
- SAM writer code now writes ``255`` for invalid ``MAPQ`` and ``0`` for invalid/unapplicable ``TLEN`` instead of ``*``.
- Fix in Postorder ParentLinks VSTree Iterator.
- ``SEQAN_PATH_TO_ROOT()`` can now be used in demo programs.
- Removing duplicate definition of ``SEQAN_ENABLE_TESTING`` in build system.
- Write support for ``char *`` for ``BamTagsDict``.
- Fix in ``StringEnumerator``.
- Fix writing out of file extension when writing KNIME plugins.

Release 1.4
~~~~~~~~~~~

Highlights
^^^^^^^^^^

- New read mappers applications Masai and RazerS 3.
- Extended and more robust I/O functionality in ``stream``, ``seq_io``, ``bam_io``, and ``gff_io``.
- Module arg_parse creates improved command line help and supports workflow engine integration.
    - Also see https://github.com/genericworkflownodes
- Greatly improved alignment module with better performance and interfaces.
- Greatly improved build system, ``find_package(SeqAn)`` for your CMake build systems.

New Apps
^^^^^^^^

- ALF
    - Alignment free sequence comparison.

- Breakpoint Calculator
    - Breakpoint computation for genomic alignments.

- Masai
    - Fast index-based read mapper.

- RazerS 3
    - Fast filtration-based, parallel read mapper.

- SnpStore
    - SNP and small indel calling.

Major App Updates
^^^^^^^^^^^^^^^^^

- All applications now use the ArgumentParser and have better CLI help.

- Rabema
    - Rewritten from scratch, includes BAM support.
    - Greatly lowered memory requirements.

- SeqCons
    - Fixing input bugs, supports SAM I/O now.

- Stellar
    - Major update improving running time, including bug fixes, and
      allowing for various alphabet types.

- MicroRazerS
    - Adding support for SAM output.

Major Library Updates
^^^^^^^^^^^^^^^^^^^^^

- Modules ``seq_io``, ``bam_io``, ``gff_io`` with I/O functionality.
- FM Index in module ``index``.
- Rewritten ``align`` module with better performance, more consistent interfaces.
- Split alignment module ``align_split``.
- Metaprogramming: introducing ``EnableIf``, ``DisableIf``, ``EnableIf2``, and ``DisableIf2`` metafunctions
- Module ``alignment_free`` for alignment free sequence comparison.
- Module ``journaled_set`` for managing many similar sequences.
- Faster open addressing q-gram index.
- generic support for memory mapped files via FileMapping class
- Adding module ``parallel`` with atomic operations in C++98.
- Greatly improved FragmentStore documentation.
- Adding ``position()``, ``operator-()``, ``operator[]`` with proxy functionality and relation operators to journaled string iterator.
- Pigeonhole-based filter algorithm.
- Parallel repeat finding.
- Clang support, C++11 support

Major Library Bug Fixes
^^^^^^^^^^^^^^^^^^^^^^^

- Fixing repeat finding on Dna5Q.
- Fixing insert size computation in store_all.h
- Fixing memory initialization problem in ``appendValue()`` for Block String.
- Default constructor of Iter modified, such that data_container and data_position are initialized.
- Fixed error loading Fasta on Windows.
- Fixed wrong StringSet size types, allow to easily subclass Alloc strings
- Now supports SAM files with missing read sequences
- Fixing SeqAn code for C++11
- FragmentStore fixes.

Miscellaneous
^^^^^^^^^^^^^

- Experimental support added platforms for ICC and PGI compilers.
- Experimental support for CUDA.
- Build System
    - Large updates to build system.
    - Includes ``FindSeqAn.cmake`` for easily using SeqAn in your own CMake build system.
    - Packaging now based on CPack
- Xcode plugin for MacPorts LLVM/Clang in Xcode 3 and 4
- Improved code generator ``skel.py``.
- Many minor bug fixes
- Cleaned code base
- Added test cases (e.g. Stellar)
- Improved documentation and added examples (Mason, Rabema, RazerS, etc.)
- Improving coding style compliance of Array String implementation.
- Various tool improvements (e.g. RazerS 3)
- Performance improvements.
