Skip to content
Commits on Source (116)
......@@ -3,6 +3,75 @@ SeqAn Changelog
This file summarizes the changes to the SeqAn library and apps.
Release 2.4.0
~~~~~~~~~~~~~
Library Features
^^^^^^^^^^^^^^^^
- Align
- Generic parallelisation and vectorisation.
- Support for SSE4, AVX2 and AVX512.
- Speed-Ups of > 1000x compared to serial execution of long DNA alignments.
- Indexing
- Parallel ``find()`` interface
- Support for optimal search schemes (https://arxiv.org/abs/1711.02035)
- ReducedAminoAcid
- several new Reduced Amino Acid alphabets are now available.
- VCF I/O
- Now supports version 4.2 of the specification, i.e. columns with only eight fields.
Selected Bug Fixes
^^^^^^^^^^^^^^^^^^
- BAM I/O
- Fix of jumpToRegion() functionality to start at the desired region instead of the index block.
- Works correctly on big endian platforms now.
- Translation
- Handle empty/too-short input correctly.
- Code Cleanup
- various parts of the codebase have undergone cleanup and may now report deprecated functionality as being deprecated via compiler-functionality.
Platform Support
^^^^^^^^^^^^^^^^
- Compiler support:
- Satisfies stricter warning levels of GCC-8, Clang-5 also with ``-std=c++17``.
- Supports VS2017.
- Intel Compiler suite 2016 **was dropped**.
- Intel Compiler suites 2017 and 2018 are newly supported.
- GCC-4.9 on MacOS **was dropped** (newer GCC available everywhere via MacPorts or Homebrew).
- Clang-3.5 on FreeBSD **was dropped** (newer Clang available in base system and Ports).
- CPU architectures support:
- Substantial fixes for big endian platforms
- Now officially supported and passing integration tests:
- ``i386, amd64/intel64, x32, ia64``
- ``armel, armhf, arm64``
- ``mips, mipsel, mips64el``
- ``powerpc, ppc64, ppc64el``
- ``s390x, alpha, m68k, sh4``
- Officially **not** supported: ``sparc64``
- Thanks to the `Debian Med team <https://www.debian.org/devel/debian-med/>`_ for their patches!
- Upstream packages:
- SeqAn2 packages are finally coming to Fedora, thanks to @sagitter
- Package updates in Debian, Ubuntu, MacPorts, Homebrew and FreeBSD expected shortly.
Release 2.3.2
~~~~~~~~~~~~~
Selected Bug Fixes
^^^^^^^^^^^^^^^^^^
- Argument parser
- various fixes in the version checker
- fix incompatibilities in CTD file creation with KNIME (introduced in 2.3.0)
- Build systems
- reintroduce ``FindSeqAn.cmake`` for projects that rely on cmake's module mode
- fix the pkgconfig file
- Platform related
- improved compliance with warning levels of soon-to-be-released gcc7 and clang4
- because of unresolved bugs we now recommend gcc5 as minimum gcc version when using static linking
Release 2.3.1
~~~~~~~~~~~~~
......
......@@ -75,7 +75,10 @@ set (SEQAN_CTD_EXECUTABLES CACHE INTERNAL "Global list of executables for workfl
option (SEQAN_STATIC_APPS "Build static apps." OFF)
option (SEQAN_ARCH_SSE4 "Build SSE optimized binaries." OFF)
option (SEQAN_ARCH_AVX2 "Build AVX optimized binaries." OFF)
option (SEQAN_ARCH_AVX2 "Build AVX2 optimized binaries." OFF)
option (SEQAN_ARCH_AVX512_KNL "Build AVX512 optimized binaries for Knights Landing." OFF)
option (SEQAN_ARCH_AVX512_SKX "Build AVX512 optimized binaries for Skylake." OFF)
option (SEQAN_ARCH_AVX512_CNL "Build AVX512 optimized binaries for Cannon Lake." OFF)
option (SEQAN_ARCH_NATIVE "Build natively optimized binaries." OFF)
# ===========================================================================
......@@ -132,9 +135,11 @@ if ("${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP")
message (STATUS "Configuring demos")
add_subdirectory (demos)
if (NOT SEQAN_NO_DOX)
message (STATUS "Configuring manual")
add_subdirectory (manual)
endif ()
endif ()
if ((("${SEQAN_BUILD_SYSTEM}" STREQUAL "DEVELOP") OR
("${SEQAN_BUILD_SYSTEM}" STREQUAL "SEQAN_RELEASE_LIBRARY")) AND
......
Copyright (c) 2006-2016, Knut Reinert, FU Berlin
Copyright (c) 2006-2018, Knut Reinert, FU Berlin
All rights reserved.
Redistribution and use in source and binary forms, with or without
......@@ -24,4 +24,3 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
......@@ -21,22 +21,21 @@ The licenses for the applications themselves can be found in the LICENSE files.
Prerequisites
-------------------
Linux, Mac OSX, FreeBSD:
* GCC ≥ 4.9
* Clang/LLVM ≥ 3.5
* Intel Compiler ≥ 16.0.2
Linux, MacOS, FreeBSD:
* GCC ≥ 5 [limited GCC-4.9 support on Linux]
* Clang/LLVM ≥ 3.6 [limited Clang-3.5 support on Linux]
* Intel Compiler ≥ 17.0.0 on Linux
Windows:
* Visual C++ ≥ 14.0 / Visual Studio ≥ 2015
* Intel Compiler ≥ 16.0.3 / Visual Studio ≥ 2015u2
* Intel Compiler ≥ 17.0.0 / Visual Studio ≥ 2015u2
* Clang/C2 ≥ 3.8.0 / Visual Studio ≥ 2015u3 [experimental, requires CMake ≥ 3.6]
Architecture support:
* 32bit and 64bit Intel/AMD officially supported
* 64bit is highly recommended and some parts of SeqAn are optimized for ``POPCNT``, ``SSE4`` and/or ``AVX2`` instruction sets available on newer CPUs
* many other architectures, including ARM, PowerPC and Sparc64 work, but receive less testing and optimizations
* Intel/AMD platforms, including optimisations for modern instruction sets (``POPCNT``, ``SSE4``, ``AVX2``, ``AVX512``)
* All Debian release architectures supported, including most ARM and all PowerPC platforms.
To build tests, demos, and official SeqAn applications you also need:
* CMake ≥ 3.0 (http://cmake.org/)
* CMake ≥ 3.0 [CMake ≥ 3.4 recommended]
Some of the official applications might have additional requirements or work only on a subset of platforms.
......
......@@ -10,7 +10,7 @@ cmake_minimum_required (VERSION 3.0.0)
project (seqan_apps_alf CXX)
message (STATUS "Configuring apps/alf")
set (SEQAN_APP_VERSION "1.1.8")
set (SEQAN_APP_VERSION "1.1.10")
# ----------------------------------------------------------------------------
# Dependencies
......@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
# Install alf in ${PREFIX}/bin directory
install (TARGETS alf
DESTINATION bin)
DESTINATION ${CMAKE_INSTALL_BINDIR})
# Install non-binary files for the package to "." for app builds and
# ${PREFIX}/share/doc/alf for SeqAn release builds.
......
// ==========================================================================
// ALF - Alignment free sequence comparison
// ==========================================================================
// Copyright (c) 2006-2016, Knut Reinert, FU Berlin
// Copyright (c) 2006-2018, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
......
......@@ -28,12 +28,12 @@ N2 similarity measure.
---------------------------------------------------------------------------
ALF is distributed with SeqAn - The C++ Sequence Analysis Library (see
http://www.seqan.de). To build ALF from SVN do the following:
http://www.seqan.de). To build ALF from Git do the following:
1) svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
1) git clone https://github.com/seqan/seqan.git
2) mkdir -p build/Release
3) cd build/Release
4) cmake ../.. -DCMAKE_BUILD_TYPE=Release
4) cmake ../../seqan -DCMAKE_BUILD_TYPE=Release
5) make alf
6) ./apps/alf/alf --help
......@@ -42,7 +42,7 @@ was dumped.
For more information about retrieving SeqAn and prerequisites please visit
http://trac.seqan.de/wiki/Tutorial/GettingStarted
https://www.seqan.de/getting-started/
---------------------------------------------------------------------------
3. Usage
......
// ==========================================================================
// ALF - Alignment free sequence comparison
// ==========================================================================
// Copyright (c) 2006-2016, Knut Reinert, FU Berlin
// Copyright (c) 2006-2018, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
......@@ -74,7 +74,7 @@ int main(int argc, const char * argv[])
// Options Section: Input / Output parameters.
addSection(parser, "Input / Output");
addOption(parser, seqan::ArgParseOption("i", "input-file", "Name of the multi-FASTA input file.", seqan::ArgParseArgument::INPUT_FILE));
setValidValues(parser, "input-file", "fa fasta");
setValidValues(parser, "input-file", seqan::SeqFileIn::getFileExtensions());
setRequired(parser, "input-file");
addOption(parser, seqan::ArgParseOption("o", "output-file", "Name of the file to which the tab-delimtied matrix with pairwise scores will be written to. Default is to write to stdout.", seqan::ArgParseArgument::OUTPUT_FILE));
setValidValues(parser, "output-file", "alf.tsv");
......
......@@ -10,7 +10,7 @@ cmake_minimum_required (VERSION 3.0.0)
project (seqan_apps_bs_tools CXX)
message (STATUS "Configuring apps/bs_tools")
set (SEQAN_APP_VERSION "0.1.8")
set (SEQAN_APP_VERSION "0.1.10")
if ((${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") AND ("$ENV{MODEL}" STREQUAL "Nightly"))
message (STATUS "bs_tools skipped on FreeBSD because math.h rounding errors.")
......@@ -99,7 +99,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
# Install bs_tools in ${PREFIX}/bin directory
install (TARGETS bisar casbar four2three
DESTINATION bin)
DESTINATION ${CMAKE_INSTALL_BINDIR})
# Install non-binary files for the package to "." for app builds and
# ${PREFIX}/share/doc/bs_tools for SeqAn release builds.
......@@ -114,6 +114,11 @@ install (FILES LICENSE
# App Test
# ----------------------------------------------------------------------------
if (SEQAN_BUILD_SYSTEM STREQUAL "DEVELOP")
include("SeqAnConsistentFPFlags")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SEQAN_CONSISTENT_FP_FLAGS}")
endif()
# (weese:) temporarily disabled app test
seqan_add_app_test (bs_tools)
......
// ==========================================================================
// SeqAn - The Library for Sequence Analysis
// ==========================================================================
// Copyright (c) 2006-2016, Knut Reinert, FU Berlin
// Copyright (c) 2006-2018, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
......
// ==========================================================================
// bisar
// ==========================================================================
// Copyright (c) 2006-2016, Knut Reinert, FU Berlin
// Copyright (c) 2006-2018, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
......
......@@ -1098,7 +1098,7 @@ postProcessMain(TOptions &options, TModel const &)
if (hasFlagUnmapped(record)) continue; // Read is unmapped
// Get readId (could be curr. read or mate) -> Only Id, seq. we will get the original from readSeqStore
// If read name not found, skip entry
if (!getIdByName(store.readNameStore, record.qName, readId, readNameCache)) continue;
if (!getIdByName(readId, readNameCache, record.qName)) continue;
if (hasFlagMultiple(record)) //) // If paired: Get readId for current mate
{
......
// ==========================================================================
// casbar
// ==========================================================================
// Copyright (c) 2006-2016, Knut Reinert, FU Berlin
// Copyright (c) 2006-2018, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
......@@ -165,8 +165,8 @@ copyNextWindowMatchesAndReads(TFragmentStore &fragmentStore,
--itG;
// We will use minCoord/maxCoord to store the temporarily minimal and maximal coordinates in the window.
int minCoord = maxValue<int>();
int maxCoord = minValue<int>();
int minCoord = std::numeric_limits<int>::max();
int maxCoord = std::numeric_limits<int>::min();
//CharString str = "discBef";
//_dumpMatches(fragmentStore, str);
......@@ -192,9 +192,9 @@ copyNextWindowMatchesAndReads(TFragmentStore &fragmentStore,
}
// Write minimal and maximal coordinate from reads in this window to options.minCoord/options.maxCoord.
if (minCoord != maxValue<int>())
if (minCoord != std::numeric_limits<int>::max())
options.minCoord = minCoord;
if (maxCoord != minValue<int>())
if (maxCoord != std::numeric_limits<int>::min())
options.maxCoord = maxCoord;
if(options._debugLevel > 1)
......@@ -625,7 +625,7 @@ detectSNPsForContig(seqan::VcfFileOut & vcfFileOut,
TReadStore tmpRs;
TReadSeqStore tmpReads; // Something went wrong when keeping all reads of contig, so keep it like that for the moment
TSetContigAnchorGaps tmpSetContigAnchorGaps;
options.minCoord = MaxValue<unsigned>::VALUE;
options.minCoord = std::numeric_limits<unsigned>::max();
options.maxCoord = 0;
// snp calling is done for all positions between windowBegin and windowEnd
......
......@@ -180,7 +180,7 @@ struct SNPCallingOptions
pHomoSnp(0.0005),
//
maxHitLength(1),
minCoord(maxValue<unsigned>()),
minCoord(std::numeric_limits<unsigned>::max()),
maxCoord(0),
windowSize(100000), // 10000?
windowBuff(70)
......@@ -684,7 +684,7 @@ int readMatchesFromSamBam(
options.maxHitLength = endPos - beginPos;
// remember min and max positions seen
if(beginPos < (TContigPos)options.minCoord || options.minCoord == maxValue<unsigned>()) options.minCoord = (unsigned)beginPos;
if(beginPos < (TContigPos)options.minCoord || options.minCoord == numeric_limits<unsigned>::max()) options.minCoord = (unsigned)beginPos;
if(endPos > (TContigPos)options.maxCoord) options.maxCoord = (unsigned)endPos;
// alignedReadStoreElement
......
......@@ -628,7 +628,7 @@ reAlign(FragmentStore<TSpec, TConfig> & fragStore,
// Copy all reads belonging to this contig and reverse complement them if necessary.
TAlignedReadStore contigReads; // TODO(holtgrew): Rather contigAlignedReads?
TReadPos maxPos = 0;
TReadPos minPos = MaxValue<TReadPos>::VALUE;
TReadPos minPos = std::numeric_limits<TReadPos>::max();
for (; alignIt != alignItEnd; ++alignIt) {
if (alignIt->beginPos > alignIt->endPos) {
reverseComplement(fragStore.readSeqStore[alignIt->readId]);
......
......@@ -363,16 +363,20 @@ sequenceEntryForScore(Score<TScoreValue, BsTagList<TBsProfileScore, TModel, TCel
// Modify to use different scoring function at first and last row
// (end gaps score different)
// Computes the score and tracks it if enabled.
template <typename TDPScout, typename TTraceMatrixNavigator, typename TScoreValue, typename TGapCosts,
typename TSequenceHValue, typename TSequenceVValue, typename TBsProfileScore, typename TModel, typename TCellDescriptor2, typename TColumnDescriptor,
template <typename TDPScout, typename TTraceMatrixNavigator,
typename TDPCell,
typename TSequenceHValue,
typename TSequenceVValue,
typename TScoreValue, typename TBsProfileScore, typename TModel, typename TCellDescriptor2,
typename TColumnDescriptor,
typename TDPProfile>
inline void
_computeCell(TDPScout & scout,
TTraceMatrixNavigator & traceMatrixNavigator,
DPCell_<TScoreValue, TGapCosts> & activeCell,
DPCell_<TScoreValue, TGapCosts> const & previousDiagonal,
DPCell_<TScoreValue, TGapCosts> const & previousHorizontal,
DPCell_<TScoreValue, TGapCosts> const & previousVertical,
TDPCell & c,
TDPCell & d,
TDPCell const & h,
TDPCell & v,
TSequenceHValue const & seqHVal,
TSequenceVValue const & seqVVal,
Score<TScoreValue, BsTagList<TBsProfileScore, TModel, TCellDescriptor2> > const & scoringScheme,
......@@ -385,7 +389,7 @@ _computeCell(TDPScout & scout,
Score<TScoreValue, BsTagList<TBsProfileScore, TModel, FirstCell> > scoringSchemeDummy(scoringScheme);
assignValue(traceMatrixNavigator,
_computeScore(activeCell, previousDiagonal, previousHorizontal, previousVertical, seqHVal, seqVVal,
_computeScore(c, d, h, v, seqHVal, seqVVal,
scoringSchemeDummy, typename RecursionDirection_<TMetaColumn, TCellDescriptor>::Type(),
TDPProfile()));
// std::cout << "("<< activeCell._score << "," << previousDiagonal._score << "," << previousHorizontal._score << "," << previousVertical._score << ") ";
......@@ -395,23 +399,28 @@ _computeCell(TDPScout & scout,
bool isLastRow = And<IsSameType<TCellDescriptor, LastCell>,
Or<IsSameType<typename TColumnDescriptor::TLocation, PartialColumnBottom>,
IsSameType<typename TColumnDescriptor::TLocation, FullColumn> > >::VALUE;
_scoutBestScore(scout, activeCell, traceMatrixNavigator, isLastColumn, isLastRow);
_setVerticalScoreOfCell(c, _verticalScoreOfCell(v));
_scoutBestScore(scout, c, traceMatrixNavigator, isLastColumn, isLastRow);
}
}
// Modify to use different scoring function at first and last row
// (end gaps score different)
// Computes the score and tracks it if enabled.
template <typename TDPScout, typename TTraceMatrixNavigator, typename TScoreValue, typename TGapCosts,
typename TSequenceHValue, typename TSequenceVValue, typename TBsProfileScore, typename TModel, typename TCellDescriptor2, typename TColumnDescriptor,
template <typename TDPScout, typename TTraceMatrixNavigator,
typename TDPCell,
typename TSequenceHValue,
typename TSequenceVValue,
typename TScoreValue, typename TBsProfileScore, typename TModel, typename TCellDescriptor2,
typename TColumnDescriptor,
typename TDPProfile>
inline void
_computeCell(TDPScout & scout,
TTraceMatrixNavigator & traceMatrixNavigator,
DPCell_<TScoreValue, TGapCosts> & activeCell,
DPCell_<TScoreValue, TGapCosts> const & previousDiagonal,
DPCell_<TScoreValue, TGapCosts> const & previousHorizontal,
DPCell_<TScoreValue, TGapCosts> const & previousVertical,
TDPCell & c,
TDPCell & d,
TDPCell const & h,
TDPCell & v,
TSequenceHValue const & seqHVal,
TSequenceVValue const & seqVVal,
Score<TScoreValue, BsTagList<TBsProfileScore, TModel, TCellDescriptor2> > const & scoringScheme,
......@@ -424,7 +433,7 @@ _computeCell(TDPScout & scout,
Score<TScoreValue, BsTagList<TBsProfileScore, TModel, LastCell> > scoringSchemeDummy(scoringScheme);
assignValue(traceMatrixNavigator,
_computeScore(activeCell, previousDiagonal, previousHorizontal, previousVertical, seqHVal, seqVVal,
_computeScore(c, d, h, v, seqHVal, seqVVal,
scoringSchemeDummy, typename RecursionDirection_<TMetaColumn, TCellDescriptor>::Type(),
TDPProfile()));
// std::cout << "("<< activeCell._score << "," << previousDiagonal._score << "," << previousHorizontal._score << "," << previousVertical._score << ") ";
......@@ -434,7 +443,8 @@ _computeCell(TDPScout & scout,
bool isLastRow = And<IsSameType<TCellDescriptor, LastCell>,
Or<IsSameType<typename TColumnDescriptor::TLocation, PartialColumnBottom>,
IsSameType<typename TColumnDescriptor::TLocation, FullColumn> > >::VALUE;
_scoutBestScore(scout, activeCell, traceMatrixNavigator, isLastColumn, isLastRow);
_setVerticalScoreOfCell(c, _verticalScoreOfCell(v));
_scoutBestScore(scout, c, traceMatrixNavigator, isLastColumn, isLastRow);
}
}
......
// ==========================================================================
// four2three
// ==========================================================================
// Copyright (c) 2006-2016, Knut Reinert, FU Berlin
// Copyright (c) 2006-2018, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
......
......@@ -10,7 +10,7 @@ cmake_minimum_required (VERSION 3.0.0)
project (seqan_apps_dfi CXX)
message (STATUS "Configuring apps/dfi")
set (SEQAN_APP_VERSION "2.1.8")
set (SEQAN_APP_VERSION "2.1.10")
# ----------------------------------------------------------------------------
# Dependencies
......@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
# Install dfi in ${PREFIX}/bin directory
install (TARGETS dfi
DESTINATION bin)
DESTINATION ${CMAKE_INSTALL_BINDIR})
# Install non-binary files for the package to "." for app builds and
# ${PREFIX}/share/doc/dfi for SeqAn release builds.
......
......@@ -49,16 +49,14 @@ http://www.seqan.de). To compile DFI on your system do the following:
5) cd dfi
6) ./dfi --help
Alternatively you can check out the latest SVN version of DFI and SeqAn
Alternatively you can check out the latest Git version of DFI and SeqAn
with:
1) svn co http://svn.mi.fu-berlin.de/seqan/trunk/seqan
2) cd seqan
3) make forwards
4) cd projects/library/apps
5) make dfi
6) cd dfi
7) ./dfi --help
1) git clone https://github.com/seqan/seqan.git
2) mkdir seqan/buld; cd seqan/build
3) cmake .. -DCMAKE_BUILD_TYPE=Release
4) make dfi
5) ./bin/dfi --help
On success, an executable file dfi was build and a brief usage description
was dumped.
......
......@@ -10,7 +10,7 @@ cmake_minimum_required (VERSION 3.0.0)
project (seqan_apps_fiona CXX)
message (STATUS "Configuring apps/fiona")
set (SEQAN_APP_VERSION "0.2.8")
set (SEQAN_APP_VERSION "0.2.10")
# ----------------------------------------------------------------------------
# Dependencies
......@@ -83,7 +83,7 @@ if (NOT SEQAN_PREFIX_SHARE_DOC)
endif (NOT SEQAN_PREFIX_SHARE_DOC)
# Install fiona in ${PREFIX}/bin directory
install (TARGETS fiona compute_gain DESTINATION bin)
install (TARGETS fiona compute_gain DESTINATION ${CMAKE_INSTALL_BINDIR})
# Install non-binary files for the package to "." for app builds and
# ${PREFIX}/share/doc/fiona for SeqAn release builds.
......