[med-svn] [spades] 01/03: Imported Upstream version 3.8.1+dfsg

Sascha Steinbiss sascha at steinbiss.name
Mon Jun 13 09:21:52 UTC 2016


This is an automated email from the git hooks/post-receive script.

sascha-guest pushed a commit to branch master
in repository spades.

commit bc265dc5d8503a3ca86cd84e2ec455ae76816f78
Author: Sascha Steinbiss <sascha at steinbiss.name>
Date:   Mon Jun 13 09:02:17 2016 +0000

    Imported Upstream version 3.8.1+dfsg
---
 VERSION                                     |   2 +-
 changelog.html                              |   4 +
 configs/debruijn/path_extend/pe_params.info | 206 ++++++++++++++++++++++++++++
 ext/src/cityhash/city.cc                    | 132 ------------------
 manual.html                                 |  40 +++---
 src/cmake/pack.cmake                        |   4 +-
 src/include/config.hpp.in                   |   2 -
 src/projects/dipspades/main.cpp             |   2 +
 src/projects/spades/chromosome_removal.cpp  |  19 ++-
 src/projects/spades/launch.hpp              |  10 +-
 src/projects/spades/main.cpp                |   1 +
 11 files changed, 261 insertions(+), 161 deletions(-)

diff --git a/VERSION b/VERSION
index 6641052..1693986 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-3.8.0
+3.8.1
 
diff --git a/changelog.html b/changelog.html
index 99fd062..a11ed47 100644
--- a/changelog.html
+++ b/changelog.html
@@ -3,6 +3,10 @@
 
 <h2>SPAdes Genome Assembler changelog</h2>
 
+<h3>SPAdes 3.8.1, 8 June 2016</h3>
+
+<p>FIX: plasmidSPAdes now works with PacBio/Nanopore reads.</p>
+
 <h3>SPAdes 3.8.0, 1 June 2016</h3>
 
 <p>NEW: Added plasmidSPAdes –  a pipeline designed for extracting and assembling plasmids from WGS data sets.</p>
diff --git a/configs/debruijn/path_extend/pe_params.info b/configs/debruijn/path_extend/pe_params.info
new file mode 100644
index 0000000..13e04ad
--- /dev/null
+++ b/configs/debruijn/path_extend/pe_params.info
@@ -0,0 +1,206 @@
+default_pe {
+
+; output options
+
+debug_output    false
+
+output {
+    write_overlaped_paths   true
+    write_paths             true
+}
+
+visualize {
+    print_overlaped_paths   true
+    print_paths             true
+}
+
+; none | break_gaps | break_all
+output_broken_scaffolds     break_gaps
+
+params {
+    multi_path_extend   false
+    ; old | 2015 | combined | old_pe_2015
+    scaffolding_mode old
+
+    remove_overlaps     true
+    cut_all_overlaps  false
+
+    split_edge_length    99
+    normalize_weight     false
+    
+    ; extension selection
+    extension_options
+    {
+        use_default_single_threshold false
+        single_threshold           1.75676
+        weight_threshold           0.5
+        priority_coeff             1.5
+        max_repeat_length          8000
+    }    
+
+    mate_pair_options
+    {
+        use_default_single_threshold true
+        single_threshold           30
+        weight_threshold           0.5
+        priority_coeff             1.5
+        max_repeat_length          8000
+    }
+
+    scaffolder {
+        on            true
+        cutoff        2
+        rel_cutoff    0.1
+        sum_threshold 3  
+
+        cluster_info  true
+        cl_threshold  0
+
+        fix_gaps       true
+        use_la_gap_joiner true
+        ;next param should be 0.51 - 1.0 if use_old_score = true and 3.0 otherwise
+        min_gap_score   0.7
+
+        max_must_overlap  -2
+        max_can_overlap   0.5
+        short_overlap     6
+        artificial_gap    10
+        use_old_score   true
+
+        min_overlap_length 10
+        flank_addition_coefficient -5.9
+        flank_multiplication_coefficient 0.97
+    }
+    
+    loop_removal
+    {
+        max_loops       10
+        mp_max_loops    10
+    }
+
+    use_coordinated_coverage false
+    coordinated_coverage
+    {
+       max_edge_length_repeat 300
+       delta                  0.4
+    }
+
+    scaffolding2015 {
+        autodetect      true
+        min_unique_length 10000
+        unique_coverage_variation 0.5
+        ; (median * (1+variation) > unique > median * (1 - variation))
+    }
+
+    scaffold_graph {
+        construct    false
+        output       false
+        always_add   40         ; connection with read count >= always_add are always added to the graph
+        never_add     5         ; connection with read count < never_add are never added to the graph
+        relative_threshold 0.25 ; connection with read count >= max_read_count * relative_threshod are added to the graph if satisfy condition above, max_read_count is calculated amond all alternatives
+        graph_connectivity false
+        max_path_length 10000
+    }
+}
+
+
+long_reads {
+    pacbio_reads {
+        filtering   2.5
+        weight_priority    1.2
+        unique_edge_priority 5.0
+    }
+
+    single_reads {
+        filtering  1.25 
+        weight_priority    5.0
+        unique_edge_priority 1000.0
+    }
+
+    contigs {
+        filtering   0.0
+        weight_priority    1.5
+        unique_edge_priority 2.0
+    }
+
+    meta_untrusted_contigs {
+        filtering   0.0
+        weight_priority    100.0
+        unique_edge_priority 2.0
+    }
+
+}
+}
+
+sc_pe {
+params {
+    normalize_weight        true
+
+    ; extension selection
+    extension_options
+    {
+        use_default_single_threshold false
+        single_threshold           0.001
+        weight_threshold           0.6
+        max_repeat_length          8000
+    }
+
+}
+}
+
+moleculo_pe {
+params {
+    normalize_weight        true
+    cut_all_overlaps  true
+
+    ; extension selection
+    extension_options
+    {
+        use_default_single_threshold false
+        single_threshold           0.001
+        weight_threshold           0.6
+    }
+
+    scaffolder {
+        short_overlap     10
+        use_la_gap_joiner false
+    }
+}
+}
+
+;NB decsends from sc_pe
+meta_pe {
+params {
+    remove_overlaps     true
+    cut_all_overlaps  true
+
+    ;TODO proper configuration of different extenders is not supported 
+    ;TODO most settings ard hardcoded for now 
+
+    ;normalize_weight        NA
+    extension_options
+    {
+        ;use_default_single_threshold NA
+        ;single_threshold           NA 
+        weight_threshold           0.6
+        max_repeat_length          50000 
+   }
+    
+    use_coordinated_coverage true
+}
+}
+
+prelim_pe {
+params {
+    use_coordinated_coverage false
+    remove_overlaps     false
+}
+}
+
+rna_pe {
+
+params {
+    multi_path_extend   true
+    remove_overlaps     false
+}
+}
diff --git a/ext/src/cityhash/city.cc b/ext/src/cityhash/city.cc
index 95e5636..8fbee60 100644
--- a/ext/src/cityhash/city.cc
+++ b/ext/src/cityhash/city.cc
@@ -505,135 +505,3 @@ city_uint128 CityHash128(const char *s, size_t len) {
       CityHash128WithSeed(s, len, city_uint128(k0, k1));
 }
 
-#ifdef __SSE4_2__
-#include <city/citycrc.h>
-#include <nmmintrin.h>
-
-// Requires len >= 240.
-static void CityHashCrc256Long(const char *s, size_t len,
-                               uint32_t seed, uint64_t *result) {
-  uint64_t a = Fetch64(s + 56) + k0;
-  uint64_t b = Fetch64(s + 96) + k0;
-  uint64_t c = result[0] = HashLen16(b, len);
-  uint64_t d = result[1] = Fetch64(s + 120) * k0 + len;
-  uint64_t e = Fetch64(s + 184) + seed;
-  uint64_t f = 0;
-  uint64_t g = 0;
-  uint64_t h = c + d;
-  uint64_t x = seed;
-  uint64_t y = 0;
-  uint64_t z = 0;
-
-  // 240 bytes of input per iter.
-  size_t iters = len / 240;
-  len -= iters * 240;
-  do {
-#undef CHUNK
-#define CHUNK(r)                                \
-    PERMUTE3(x, z, y);                          \
-    b += Fetch64(s);                            \
-    c += Fetch64(s + 8);                        \
-    d += Fetch64(s + 16);                       \
-    e += Fetch64(s + 24);                       \
-    f += Fetch64(s + 32);                       \
-    a += b;                                     \
-    h += f;                                     \
-    b += c;                                     \
-    f += d;                                     \
-    g += e;                                     \
-    e += z;                                     \
-    g += x;                                     \
-    z = _mm_crc32_u64(z, b + g);                \
-    y = _mm_crc32_u64(y, e + h);                \
-    x = _mm_crc32_u64(x, f + a);                \
-    e = Rotate(e, r);                           \
-    c += e;                                     \
-    s += 40
-
-    CHUNK(0); PERMUTE3(a, h, c);
-    CHUNK(33); PERMUTE3(a, h, f);
-    CHUNK(0); PERMUTE3(b, h, f);
-    CHUNK(42); PERMUTE3(b, h, d);
-    CHUNK(0); PERMUTE3(b, h, e);
-    CHUNK(33); PERMUTE3(a, h, e);
-  } while (--iters > 0);
-
-  while (len >= 40) {
-    CHUNK(29);
-    e ^= Rotate(a, 20);
-    h += Rotate(b, 30);
-    g ^= Rotate(c, 40);
-    f += Rotate(d, 34);
-    PERMUTE3(c, h, g);
-    len -= 40;
-  }
-  if (len > 0) {
-    s = s + len - 40;
-    CHUNK(33);
-    e ^= Rotate(a, 43);
-    h += Rotate(b, 42);
-    g ^= Rotate(c, 41);
-    f += Rotate(d, 40);
-  }
-  result[0] ^= h;
-  result[1] ^= g;
-  g += h;
-  a = HashLen16(a, g + z);
-  x += y << 32;
-  b += x;
-  c = HashLen16(c, z) + h;
-  d = HashLen16(d, e + result[0]);
-  g += e;
-  h += HashLen16(x, f);
-  e = HashLen16(a, d) + g;
-  z = HashLen16(b, c) + a;
-  y = HashLen16(g, h) + c;
-  result[0] = e + z + y + x;
-  a = ShiftMix((a + y) * k0) * k0 + b;
-  result[1] += a + result[0];
-  a = ShiftMix(a * k0) * k0 + c;
-  result[2] = a + result[1];
-  a = ShiftMix((a + e) * k0) * k0;
-  result[3] = a + result[2];
-}
-
-// Requires len < 240.
-static void CityHashCrc256Short(const char *s, size_t len, uint64_t *result) {
-  char buf[240];
-  memcpy(buf, s, len);
-  memset(buf + len, 0, 240 - len);
-  CityHashCrc256Long(buf, 240, ~static_cast<uint32>(len), result);
-}
-
-void CityHashCrc256(const char *s, size_t len, uint64_t *result) {
-  if (LIKELY(len >= 240)) {
-    CityHashCrc256Long(s, len, 0, result);
-  } else {
-    CityHashCrc256Short(s, len, result);
-  }
-}
-
-city_uint128 CityHashCrc128WithSeed(const char *s, size_t len, city_uint128 seed) {
-  if (len <= 900) {
-    return CityHash128WithSeed(s, len, seed);
-  } else {
-    uint64_t result[4];
-    CityHashCrc256(s, len, result);
-    uint64_t u = Uint128High64(seed) + result[0];
-    uint64_t v = Uint128Low64(seed) + result[1];
-    return uint128(HashLen16(u, v + result[2]),
-                   HashLen16(Rotate(v, 32), u * k0 + result[3]));
-  }
-}
-
-city_uint128 CityHashCrc128(const char *s, size_t len) {
-  if (len <= 900) {
-    return CityHash128(s, len);
-  } else {
-    uint64_t result[4];
-    CityHashCrc256(s, len, result);
-    return uint128(result[2], result[3]);
-  }
-}
-
-#endif
diff --git a/manual.html b/manual.html
index 0ded83c..9e7e799 100644
--- a/manual.html
+++ b/manual.html
@@ -1,6 +1,6 @@
 <html>
 <head>
-    <title>SPAdes 3.8.0 Manual</title>
+    <title>SPAdes 3.8.1 Manual</title>
     <style type="text/css">
         .code {
             background-color: lightgray;
@@ -8,7 +8,7 @@
     </style>
 </head>
 <body>
-<h1>SPAdes 3.8.0 Manual</h1>
+<h1>SPAdes 3.8.1 Manual</h1>
 
 1. <a href="#sec1">About SPAdes</a><br>
     1.1. <a href="#sec1.1">Supported data types</a><br>
@@ -35,18 +35,18 @@
 <h2>1. About SPAdes</h2>
 <p>
     SPAdes – St. Petersburg genome assembler – is intended for both standard isolates and single-cell MDA bacteria assemblies. This manual will help you to install and run SPAdes. 
-SPAdes version 3.8.0 was released under GPLv2 on March 8, 2016 and can be downloaded from  <a href="http://bioinf.spbau.ru/en/spades" target="_blank">http://bioinf.spbau.ru/en/spades</a>.
+SPAdes version 3.8.1 was released under GPLv2 on June 8, 2016 and can be downloaded from  <a href="http://bioinf.spbau.ru/en/spades" target="_blank">http://bioinf.spbau.ru/en/spades</a>.
 
 <a name="sec1.1"></a>
 <h3>1.1 Supported data types</h3>
 <p>
     The current version of SPAdes works with Illumina or IonTorrent reads and is capable of providing hybrid assemblies using PacBio, Oxford Nanopore and Sanger reads. You can also provide additional contigs that will be used as long reads.
 <p>
-    Version 3.8.0 of SPAdes supports paired-end reads, mate-pairs and unpaired reads. SPAdes can take as input several paired-end and mate-pair libraries simultaneously. Note, that SPAdes was initially designed for small genomes. It was tested on single-cell and standard bacterial and fungal data sets. SPAdes is not intended for larger genomes (e.g. mammalian size genomes). For such purposes you can use it at your own risk.
+    Version 3.8.1 of SPAdes supports paired-end reads, mate-pairs and unpaired reads. SPAdes can take as input several paired-end and mate-pair libraries simultaneously. Note, that SPAdes was initially designed for small genomes. It was tested on single-cell and standard bacterial and fungal data sets. SPAdes is not intended for larger genomes (e.g. mammalian size genomes). For such purposes you can use it at your own risk.
 <p>
-    SPAdes 3.8.0 includes metaSPAdes – a pipeline designed specially for metagenomic data sets. To learn more see <a href="#meta">options</a>.
+    SPAdes 3.8.1 includes metaSPAdes – a pipeline designed specially for metagenomic data sets. To learn more see <a href="#meta">options</a>.
 <p>
-    Also, SPAdes 3.8.0 includes plasmidSPAdes – a pipeline designed for extracting and assembling plasmids from WGS data sets. To learn more see <a href="#plasmid">options</a>.
+    Also, SPAdes 3.8.1 includes plasmidSPAdes – a pipeline designed for extracting and assembling plasmids from WGS data sets. To learn more see <a href="#plasmid">options</a>.
 <p>
     Additionally, SPAdes has a separate modules for assembling highly polymorphic diploid genomes and for TruSeq barcode assembly. For more information see <a href="dipspades_manual.html" target="_blank">dipSPAdes manual</a> and <a href="truspades_manual.html" target="_blank">truSPAdes manual</a> .
 
@@ -143,7 +143,7 @@ SPAdes comes in several separate modules:
         <li> Running SPAdes without preliminary read error correction (e.g. without BayesHammer or IonHammer) will likely require more time and memory. </li>
         <li> Each module removes its temporary files as soon as it finishes. </li>
         <li> SPAdes uses 512 Mb per thread for buffers, which results in higher memory consumption. If you set memory limit manually, SPAdes will use smaller buffers and thus less RAM. </li>
-        <li> Performance statistics is given for SPAdes version 3.8.0. </li>
+        <li> Performance statistics is given for SPAdes version 3.8.1. </li>
     </ul>
 
 
@@ -157,13 +157,13 @@ SPAdes comes in several separate modules:
 <h3>2.1 Downloading SPAdes Linux binaries</h3>
 
 <p>
-    To download <a href="http://spades.bioinf.spbau.ru/release3.8.0/SPAdes-3.8.0-Linux.tar.gz">SPAdes Linux binaries</a> and extract them, go to the directory in which you wish SPAdes to be installed and run:
+    To download <a href="http://spades.bioinf.spbau.ru/release3.8.1/SPAdes-3.8.1-Linux.tar.gz">SPAdes Linux binaries</a> and extract them, go to the directory in which you wish SPAdes to be installed and run:
 
 <pre  class="code">
 <code>
-    wget http://spades.bioinf.spbau.ru/release3.8.0/SPAdes-3.8.0-Linux.tar.gz
-    tar -xzf SPAdes-3.8.0-Linux.tar.gz
-    cd SPAdes-3.8.0-Linux/bin/
+    wget http://spades.bioinf.spbau.ru/release3.8.1/SPAdes-3.8.1-Linux.tar.gz
+    tar -xzf SPAdes-3.8.1-Linux.tar.gz
+    cd SPAdes-3.8.1-Linux/bin/
 </code>
 </pre>
 
@@ -189,13 +189,13 @@ SPAdes comes in several separate modules:
 <h3>2.2 Downloading SPAdes binaries for Mac</h3>
 
 <p>
-    To obtain <a href="http://spades.bioinf.spbau.ru/release3.8.0/SPAdes-3.8.0-Darwin.tar.gz">SPAdes binaries for Mac</a>, go to the directory in which you wish SPAdes to be installed and run:
+    To obtain <a href="http://spades.bioinf.spbau.ru/release3.8.1/SPAdes-3.8.1-Darwin.tar.gz">SPAdes binaries for Mac</a>, go to the directory in which you wish SPAdes to be installed and run:
 
 <pre  class="code">
 <code>
-    curl http://spades.bioinf.spbau.ru/release3.8.0/SPAdes-3.8.0-Darwin.tar.gz -o SPAdes-3.8.0-Darwin.tar.gz
-    tar -zxf SPAdes-3.8.0-Darwin.tar.gz
-    cd SPAdes-3.8.0-Darwin/bin/
+    curl http://spades.bioinf.spbau.ru/release3.8.1/SPAdes-3.8.1-Darwin.tar.gz -o SPAdes-3.8.1-Darwin.tar.gz
+    tar -zxf SPAdes-3.8.1-Darwin.tar.gz
+    cd SPAdes-3.8.1-Darwin/bin/
 </code>
 </pre>
 
@@ -230,13 +230,13 @@ SPAdes comes in several separate modules:
     </ul>
 
 <p>
-    If you meet these requirements, you can download the <a href="http://spades.bioinf.spbau.ru/release3.8.0/SPAdes-3.8.0.tar.gz">SPAdes source code</a>: 
+    If you meet these requirements, you can download the <a href="http://spades.bioinf.spbau.ru/release3.8.1/SPAdes-3.8.1.tar.gz">SPAdes source code</a>: 
 
 <pre class="code">
 <code>
-    wget http://spades.bioinf.spbau.ru/release3.8.0/SPAdes-3.8.0.tar.gz
-    tar -xzf SPAdes-3.8.0.tar.gz
-    cd SPAdes-3.8.0
+    wget http://spades.bioinf.spbau.ru/release3.8.1/SPAdes-3.8.1.tar.gz
+    tar -xzf SPAdes-3.8.1.tar.gz
+    cd SPAdes-3.8.1
 </code>
 </pre>
 
@@ -340,7 +340,7 @@ Thank you for using SPAdes!
     SPAdes takes as input paired-end reads, mate-pairs and single (unpaired) reads in FASTA and FASTQ. For IonTorrent data SPAdes also supports unpaired reads in unmapped BAM format (like the one produced by Torrent Server). However, in order to run read error correction, reads should be in FASTQ or BAM format. Sanger, Oxford Nanopore and PacBio CLR reads can be provided in both formats since SPAdes does not run error correction for these types of data.
 
 <p>
-    To run SPAdes 3.8.0 you need at least one library of the following types:
+    To run SPAdes 3.8.1 you need at least one library of the following types:
     <ul>
         <li>Illumina paired-end/high-quality mate-pairs/unpaired reads</li>
         <li>IonTorrent paired-end/high-quality mate-pairs/unpaired reads</li>
diff --git a/src/cmake/pack.cmake b/src/cmake/pack.cmake
index 08b37da..560c2cb 100644
--- a/src/cmake/pack.cmake
+++ b/src/cmake/pack.cmake
@@ -12,10 +12,10 @@ set(CPACK_PACKAGE_NAME "SPAdes")
 set(CPACK_PACKAGE_VENDOR "Saint Petersburg Academic University")
 set(CPACK_PACKAGE_DESCRIPTION_FILE "${SPADES_MAIN_SRC_DIR}/../README")
 set(CPACK_RESOURCE_FILE_LICENSE "${SPADES_MAIN_SRC_DIR}/../LICENSE")
-set(CPACK_PACKAGE_VERSION "3.8.0")
+set(CPACK_PACKAGE_VERSION "3.8.1")
 set(CPACK_PACKAGE_VERSION_MAJOR "3")
 set(CPACK_PACKAGE_VERSION_MINOR "8")
-set(CPACK_PACKAGE_VERSION_PATCH "0")
+set(CPACK_PACKAGE_VERSION_PATCH "1")
 set(CPACK_STRIP_FILES bin/spades bin/hammer bin/ionhammer bin/dipspades bin/spades-bwa bin/corrector bin/scaffold_correction)
 
 # Source stuff
diff --git a/src/include/config.hpp.in b/src/include/config.hpp.in
index acb60de..3513d35 100644
--- a/src/include/config.hpp.in
+++ b/src/include/config.hpp.in
@@ -4,7 +4,5 @@
 #cmakedefine SPADES_USE_JEMALLOC
 #cmakedefine SPADES_USE_TCMALLOC
 #cmakedefine SPADES_DEBUG_LOGGING
-#cmakedefine SPADES_GIT_REFSPEC "${SPADES_GIT_REFSPEC}"
-#cmakedefine SPADES_GIT_SHA1 "${SPADES_GIT_SHA1}"
 
 #endif // __SPADES_CONFIG_HPP__
diff --git a/src/projects/dipspades/main.cpp b/src/projects/dipspades/main.cpp
index d0fbf86..7c63a75 100644
--- a/src/projects/dipspades/main.cpp
+++ b/src/projects/dipspades/main.cpp
@@ -19,6 +19,8 @@
 #include "pipeline/graph_pack.hpp"
 #include "stages/construction.hpp"
 
+#include "version.hpp"
+
 #include "dipspades.hpp"
 
 void make_dirs(){
diff --git a/src/projects/spades/chromosome_removal.cpp b/src/projects/spades/chromosome_removal.cpp
index aec5b82..6f5e067 100644
--- a/src/projects/spades/chromosome_removal.cpp
+++ b/src/projects/spades/chromosome_removal.cpp
@@ -120,6 +120,19 @@ double ChromosomeRemoval::RemoveLongGenomicEdges(conj_graph_pack &gp, size_t lon
     if (external_chromosome_coverage < 1.0) {
         median_long_edge_coverage = coverages[i-1].first;
         INFO ("genomic coverage is "<< median_long_edge_coverage << " calculated of length " << size_t (double(total_len) * 0.5));
+        size_t outsiders_length = 0;
+        for (size_t j = 0; j < coverages.size(); j++) {
+            if ( coverages[j].first >= median_long_edge_coverage * (1 + coverage_limits) || coverages[j].first <= median_long_edge_coverage * (1 - coverage_limits)) {
+                outsiders_length += coverages[j].second;
+            }
+        }
+        if (outsiders_length * 5 > total_len) {
+            WARN ("More than 20% of long edges have coverage significantly different from median (total " << size_t (double(outsiders_length) * 0.5) <<" of "<< size_t (double(total_len) * 0.5) << " bases).");
+            WARN ("In most cases it means that either read coverage is uneven or significant contamination is present - both of these two cases make plasmidSPAdes' results unreliable");
+            WARN ("However, that situation may still be OK if you expect to see large plasmids in your dataset, so plasmidSPAdes will continue to work");
+        } else {
+            INFO(size_t(double(outsiders_length)/ double(total_len) * 100) << "% of bases from long edges have coverage significantly different from median");
+        }
         for (auto iter = gp.g.ConstEdgeBegin(); ! iter.IsEnd(); ++iter) {
             if (long_component_.find(*iter) == long_component_.end()) {
                 CalculateComponentSize(*iter, gp.g);
@@ -230,7 +243,11 @@ void ChromosomeRemoval::run(conj_graph_pack &gp, const char*) {
         size_t new_graph_size = gp.g.size();
         if (new_graph_size == graph_size) {
             INFO("Iteration " << i << " of small components additional filtering graph was not changed");
-            INFO("After plasmidSPAdes subroutine " << new_graph_size << " vertices left");
+            if (new_graph_size == 0) {
+                WARN("No putative plasmid contigs found!");
+            } else {
+                INFO("After plasmidSPAdes subroutine " << new_graph_size << " vertices left");
+            }
             break;
         }
     }
diff --git a/src/projects/spades/launch.hpp b/src/projects/spades/launch.hpp
index d6e6589..7d3eb40 100644
--- a/src/projects/spades/launch.hpp
+++ b/src/projects/spades/launch.hpp
@@ -84,6 +84,10 @@ void assemble_genome() {
             SPAdes.add(new debruijn_graph::Simplification());
         }
 
+        if (cfg::get().pd) {
+            SPAdes.add(new debruijn_graph::ChromosomeRemoval());
+        }
+
         //begin pacbio
         bool run_pacbio = false;
         for (size_t i = 0; i < cfg::get().ds.reads.lib_count(); ++i) {
@@ -97,14 +101,14 @@ void assemble_genome() {
             VERIFY(!two_step_rr);
             SPAdes.add(new debruijn_graph::PacBioAligning());
         }
+        //not a handler, no graph modification allowed after PacBioAligning stage!
         //end pacbio
-        if (cfg::get().pd) {
-            SPAdes.add(new debruijn_graph::ChromosomeRemoval());
-        }
+        
         SPAdes.add(new debruijn_graph::PairInfoCount())
               .add(new debruijn_graph::DistanceEstimation())
               .add(new debruijn_graph::RepeatResolution());
 
+        
     } else {
         SPAdes.add(new debruijn_graph::ContigOutput());
     }
diff --git a/src/projects/spades/main.cpp b/src/projects/spades/main.cpp
index fd3eafb..0f28162 100644
--- a/src/projects/spades/main.cpp
+++ b/src/projects/spades/main.cpp
@@ -13,6 +13,7 @@
 #include "dev_support/segfault_handler.hpp"
 #include "launch.hpp"
 #include "dev_support/copy_file.hpp"
+#include "version.hpp"
 
 void load_config(const vector<string>& cfg_fns) {
     for (const auto& s : cfg_fns) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/spades.git



More information about the debian-med-commit mailing list