QuorUM: An Error Corrector for Illumina Reads
Identifieur interne : 001008 ( Pmc/Corpus ); précédent : 001007; suivant : 001009QuorUM: An Error Corrector for Illumina Reads
Auteurs : Guillaume Marçais ; James A. Yorke ; Aleksey ZiminSource :
- PLoS ONE [ 1932-6203 ] ; 2015.
Abstract
Illumina Sequencing data can provide high coverage of a genome by relatively short (most often 100 bp to 150 bp) reads at a low cost. Even with low (advertised 1%) error rate, 100 × coverage Illumina data on average has an error in some read at every base in the genome. These errors make handling the data more complicated because they result in a large number of low-count erroneous
We produce trimmed and error-corrected reads that result in assemblies with longer contigs and fewer errors. We compared QuorUM against several published error correctors and found that it is the best performer in most metrics we use. QuorUM is efficiently implemented making use of current multi-core computing architectures and it is suitable for large data sets (1 billion bases checked and corrected per day per core). We also demonstrate that a third-party assembler (SOAPdenovo) benefits significantly from using QuorUM error-corrected reads. QuorUM error corrected reads result in a factor of 1.1 to 4 improvement in N50 contig size compared to using the original reads with SOAPdenovo for the data sets investigated.
QuorUM is distributed as an independent software package and as a module of the MaSuRCA assembly software. Both are available under the GPL open source license at
Url:
DOI: 10.1371/journal.pone.0130821
PubMed: 26083032
PubMed Central: 4471408
Links to Exploration step
PMC:4471408Le document en format XML
<record><TEI><teiHeader><fileDesc><titleStmt><title xml:lang="en">QuorUM: An Error Corrector for Illumina Reads</title>
<author><name sortKey="Marcais, Guillaume" sort="Marcais, Guillaume" uniqKey="Marcais G" first="Guillaume" last="Marçais">Guillaume Marçais</name>
<affiliation><nlm:aff id="aff001"></nlm:aff>
</affiliation>
</author>
<author><name sortKey="Yorke, James A" sort="Yorke, James A" uniqKey="Yorke J" first="James A." last="Yorke">James A. Yorke</name>
<affiliation><nlm:aff id="aff001"></nlm:aff>
</affiliation>
</author>
<author><name sortKey="Zimin, Aleksey" sort="Zimin, Aleksey" uniqKey="Zimin A" first="Aleksey" last="Zimin">Aleksey Zimin</name>
<affiliation><nlm:aff id="aff001"></nlm:aff>
</affiliation>
</author>
</titleStmt>
<publicationStmt><idno type="wicri:source">PMC</idno>
<idno type="pmid">26083032</idno>
<idno type="pmc">4471408</idno>
<idno type="url">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4471408</idno>
<idno type="RBID">PMC:4471408</idno>
<idno type="doi">10.1371/journal.pone.0130821</idno>
<date when="2015">2015</date>
<idno type="wicri:Area/Pmc/Corpus">001008</idno>
<idno type="wicri:explorRef" wicri:stream="Pmc" wicri:step="Corpus" wicri:corpus="PMC">001008</idno>
</publicationStmt>
<sourceDesc><biblStruct><analytic><title xml:lang="en" level="a" type="main">QuorUM: An Error Corrector for Illumina Reads</title>
<author><name sortKey="Marcais, Guillaume" sort="Marcais, Guillaume" uniqKey="Marcais G" first="Guillaume" last="Marçais">Guillaume Marçais</name>
<affiliation><nlm:aff id="aff001"></nlm:aff>
</affiliation>
</author>
<author><name sortKey="Yorke, James A" sort="Yorke, James A" uniqKey="Yorke J" first="James A." last="Yorke">James A. Yorke</name>
<affiliation><nlm:aff id="aff001"></nlm:aff>
</affiliation>
</author>
<author><name sortKey="Zimin, Aleksey" sort="Zimin, Aleksey" uniqKey="Zimin A" first="Aleksey" last="Zimin">Aleksey Zimin</name>
<affiliation><nlm:aff id="aff001"></nlm:aff>
</affiliation>
</author>
</analytic>
<series><title level="j">PLoS ONE</title>
<idno type="eISSN">1932-6203</idno>
<imprint><date when="2015">2015</date>
</imprint>
</series>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc><textClass></textClass>
</profileDesc>
</teiHeader>
<front><div type="abstract" xml:lang="en"><sec id="sec001"><title>Motivation</title>
<p>Illumina Sequencing data can provide high coverage of a genome by relatively short (most often 100 bp to 150 bp) reads at a low cost. Even with low (advertised 1%) error rate, 100 × coverage Illumina data on average has an error in some read at every base in the genome. These errors make handling the data more complicated because they result in a large number of low-count erroneous <italic>k</italic>
-mers in the reads. However, there is enough information in the reads to correct most of the sequencing errors, thus making subsequent use of the data (e.g. for mapping or assembly) easier. Here we use the term “error correction” to denote the reduction in errors due to both changes in individual bases and trimming of unusable sequence. We developed an error correction software called QuorUM. QuorUM is mainly aimed at error correcting Illumina reads for subsequent assembly. It is designed around the novel idea of minimizing the number of distinct erroneous <italic>k</italic>
-mers in the output reads and preserving the most true <italic>k</italic>
-mers, and we introduce a composite statistic π that measures how successful we are at achieving this dual goal. We evaluate the performance of QuorUM by correcting actual Illumina reads from genomes for which a reference assembly is available.</p>
</sec>
<sec id="sec002"><title>Results</title>
<p>We produce trimmed and error-corrected reads that result in assemblies with longer contigs and fewer errors. We compared QuorUM against several published error correctors and found that it is the best performer in most metrics we use. QuorUM is efficiently implemented making use of current multi-core computing architectures and it is suitable for large data sets (1 billion bases checked and corrected per day per core). We also demonstrate that a third-party assembler (SOAPdenovo) benefits significantly from using QuorUM error-corrected reads. QuorUM error corrected reads result in a factor of 1.1 to 4 improvement in N50 contig size compared to using the original reads with SOAPdenovo for the data sets investigated.</p>
</sec>
<sec id="sec003"><title>Availability</title>
<p>QuorUM is distributed as an independent software package and as a module of the MaSuRCA assembly software. Both are available under the GPL open source license at <ext-link ext-link-type="uri" xlink:href="http://www.genome.umd.edu">http://www.genome.umd.edu</ext-link>
.</p>
</sec>
<sec id="sec004"><title>Contact</title>
<p><email>gmarcais@umd.edu</email>
.</p>
</sec>
</div>
</front>
<back><div1 type="bibliography"><listBibl><biblStruct><analytic><author><name sortKey="Zerbino, Dr" uniqKey="Zerbino D">DR Zerbino</name>
</author>
<author><name sortKey="Birney, E" uniqKey="Birney E">E Birney</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Li, R" uniqKey="Li R">R Li</name>
</author>
<author><name sortKey="Zhu, H" uniqKey="Zhu H">H Zhu</name>
</author>
<author><name sortKey="Ruan, J" uniqKey="Ruan J">J Ruan</name>
</author>
<author><name sortKey="Qian, W" uniqKey="Qian W">W Qian</name>
</author>
<author><name sortKey="Fang, X" uniqKey="Fang X">X Fang</name>
</author>
<author><name sortKey="Shi, Z" uniqKey="Shi Z">Z Shi</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Chaisson, Mj" uniqKey="Chaisson M">MJ Chaisson</name>
</author>
<author><name sortKey="Pevzner, Pa" uniqKey="Pevzner P">PA Pevzner</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gnerre, S" uniqKey="Gnerre S">S Gnerre</name>
</author>
<author><name sortKey="Maccallum, I" uniqKey="Maccallum I">I Maccallum</name>
</author>
<author><name sortKey="Przybylski, D" uniqKey="Przybylski D">D Przybylski</name>
</author>
<author><name sortKey="Ribeiro, Fj" uniqKey="Ribeiro F">FJ Ribeiro</name>
</author>
<author><name sortKey="Burton, Jn" uniqKey="Burton J">JN Burton</name>
</author>
<author><name sortKey="Walker, Bj" uniqKey="Walker B">BJ Walker</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Salzberg, Sl" uniqKey="Salzberg S">SL Salzberg</name>
</author>
<author><name sortKey="Phillippy, Am" uniqKey="Phillippy A">AM Phillippy</name>
</author>
<author><name sortKey="Zimin, Av" uniqKey="Zimin A">AV Zimin</name>
</author>
<author><name sortKey="Puiu, D" uniqKey="Puiu D">D Puiu</name>
</author>
<author><name sortKey="Magoc, T" uniqKey="Magoc T">T Magoc</name>
</author>
<author><name sortKey="Koren, S" uniqKey="Koren S">S Koren</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Magoc, T" uniqKey="Magoc T">T Magoc</name>
</author>
<author><name sortKey="Pabinger, S" uniqKey="Pabinger S">S Pabinger</name>
</author>
<author><name sortKey="Canzar, S" uniqKey="Canzar S">S Canzar</name>
</author>
<author><name sortKey="Liu, X" uniqKey="Liu X">X Liu</name>
</author>
<author><name sortKey="Su, Q" uniqKey="Su Q">Q Su</name>
</author>
<author><name sortKey="Puiu, D" uniqKey="Puiu D">D Puiu</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Zimin, Av" uniqKey="Zimin A">AV Zimin</name>
</author>
<author><name sortKey="Marcais, G" uniqKey="Marcais G">G Marçais</name>
</author>
<author><name sortKey="Puiu, D" uniqKey="Puiu D">D Puiu</name>
</author>
<author><name sortKey="Roberts, M" uniqKey="Roberts M">M Roberts</name>
</author>
<author><name sortKey="Salzberg, Sl" uniqKey="Salzberg S">SL Salzberg</name>
</author>
<author><name sortKey="Yorke, Ja" uniqKey="Yorke J">JA Yorke</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Ilie, L" uniqKey="Ilie L">L Ilie</name>
</author>
<author><name sortKey="Fazayeli, F" uniqKey="Fazayeli F">F Fazayeli</name>
</author>
<author><name sortKey="Ilie, S" uniqKey="Ilie S">S Ilie</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Kao, Wc" uniqKey="Kao W">WC Kao</name>
</author>
<author><name sortKey="Chan, Ah" uniqKey="Chan A">AH Chan</name>
</author>
<author><name sortKey="Song, Ys" uniqKey="Song Y">YS Song</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Salmela, L" uniqKey="Salmela L">L Salmela</name>
</author>
<author><name sortKey="Schroder, J" uniqKey="Schroder J">J Schröder</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Simpson, Jt" uniqKey="Simpson J">JT Simpson</name>
</author>
<author><name sortKey="Durbin, R" uniqKey="Durbin R">R Durbin</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Ilie, L" uniqKey="Ilie L">L Ilie</name>
</author>
<author><name sortKey="Molnar, M" uniqKey="Molnar M">M Molnar</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Liu, Y" uniqKey="Liu Y">Y Liu</name>
</author>
<author><name sortKey="Schrder, J" uniqKey="Schrder J">J Schrder</name>
</author>
<author><name sortKey="Schmidt, B" uniqKey="Schmidt B">B Schmidt</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Kelley, Dr" uniqKey="Kelley D">DR Kelley</name>
</author>
<author><name sortKey="Schatz, Mc" uniqKey="Schatz M">MC Schatz</name>
</author>
<author><name sortKey="Salzberg, Sl" uniqKey="Salzberg S">SL Salzberg</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Pevzner, Pa" uniqKey="Pevzner P">PA Pevzner</name>
</author>
<author><name sortKey="Tang, H" uniqKey="Tang H">H Tang</name>
</author>
<author><name sortKey="Waterman, Ms" uniqKey="Waterman M">MS Waterman</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Zhao, X" uniqKey="Zhao X">X Zhao</name>
</author>
<author><name sortKey="Palmer, Le" uniqKey="Palmer L">LE Palmer</name>
</author>
<author><name sortKey="Bolanos, R" uniqKey="Bolanos R">R Bolanos</name>
</author>
<author><name sortKey="Mircean, C" uniqKey="Mircean C">C Mircean</name>
</author>
<author><name sortKey="Fasulo, D" uniqKey="Fasulo D">D Fasulo</name>
</author>
<author><name sortKey="Wittenberg, Gm" uniqKey="Wittenberg G">GM Wittenberg</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Shi, H" uniqKey="Shi H">H Shi</name>
</author>
<author><name sortKey="Schmidt, B" uniqKey="Schmidt B">B Schmidt</name>
</author>
<author><name sortKey="Liu, W" uniqKey="Liu W">W Liu</name>
</author>
<author><name sortKey="Mller Wittig, W" uniqKey="Mller Wittig W">W Mller-Wittig</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Yang, X" uniqKey="Yang X">X Yang</name>
</author>
<author><name sortKey="Chockalingam, Sp" uniqKey="Chockalingam S">SP Chockalingam</name>
</author>
<author><name sortKey="Aluru, S" uniqKey="Aluru S">S Aluru</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Bentley, Dr" uniqKey="Bentley D">DR Bentley</name>
</author>
<author><name sortKey="Balasubramanian, S" uniqKey="Balasubramanian S">S Balasubramanian</name>
</author>
<author><name sortKey="Swerdlow, Hp" uniqKey="Swerdlow H">HP Swerdlow</name>
</author>
<author><name sortKey="Smith, Gp" uniqKey="Smith G">GP Smith</name>
</author>
<author><name sortKey="Milton, J" uniqKey="Milton J">J Milton</name>
</author>
<author><name sortKey="Brown, Cg" uniqKey="Brown C">CG Brown</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Marcais, G" uniqKey="Marcais G">G Marçais</name>
</author>
<author><name sortKey="Kingsford, C" uniqKey="Kingsford C">C Kingsford</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Mackenzie, C" uniqKey="Mackenzie C">C Mackenzie</name>
</author>
<author><name sortKey="Choudhary, M" uniqKey="Choudhary M">M Choudhary</name>
</author>
<author><name sortKey="Larimer, Fw" uniqKey="Larimer F">FW Larimer</name>
</author>
<author><name sortKey="Predki, Pf" uniqKey="Predki P">PF Predki</name>
</author>
<author><name sortKey="Stilwagen, S" uniqKey="Stilwagen S">S Stilwagen</name>
</author>
<author><name sortKey="Armitage, Jp" uniqKey="Armitage J">JP Armitage</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Waterston, Rh" uniqKey="Waterston R">RH Waterston</name>
</author>
<author><name sortKey="Lindblad Toh, K" uniqKey="Lindblad Toh K">K Lindblad-Toh</name>
</author>
<author><name sortKey="Birney, E" uniqKey="Birney E">E Birney</name>
</author>
<author><name sortKey="Rogers, J" uniqKey="Rogers J">J Rogers</name>
</author>
<author><name sortKey="Abril, Jf" uniqKey="Abril J">JF Abril</name>
</author>
<author><name sortKey="Agarwal, P" uniqKey="Agarwal P">P Agarwal</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Langmead, B" uniqKey="Langmead B">B Langmead</name>
</author>
<author><name sortKey="Trapnell, C" uniqKey="Trapnell C">C Trapnell</name>
</author>
<author><name sortKey="Pop, M" uniqKey="Pop M">M Pop</name>
</author>
<author><name sortKey="Salzberg, Sl" uniqKey="Salzberg S">SL Salzberg</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Zimin, A" uniqKey="Zimin A">A Zimin</name>
</author>
<author><name sortKey="Stevens, Ka" uniqKey="Stevens K">KA Stevens</name>
</author>
<author><name sortKey="Crepeau, Mw" uniqKey="Crepeau M">MW Crepeau</name>
</author>
<author><name sortKey="Holtz Morris, A" uniqKey="Holtz Morris A">A Holtz-Morris</name>
</author>
<author><name sortKey="Koriabine, M" uniqKey="Koriabine M">M Koriabine</name>
</author>
<author><name sortKey="Marais, G" uniqKey="Marais G">G Marais</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Luo, R" uniqKey="Luo R">R Luo</name>
</author>
<author><name sortKey="Liu, B" uniqKey="Liu B">B Liu</name>
</author>
<author><name sortKey="Xie, Y" uniqKey="Xie Y">Y Xie</name>
</author>
<author><name sortKey="Li, Z" uniqKey="Li Z">Z Li</name>
</author>
<author><name sortKey="Huang, W" uniqKey="Huang W">W Huang</name>
</author>
<author><name sortKey="Yuan, J" uniqKey="Yuan J">J Yuan</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gurevich, A" uniqKey="Gurevich A">A Gurevich</name>
</author>
<author><name sortKey="Saveliev, V" uniqKey="Saveliev V">V Saveliev</name>
</author>
<author><name sortKey="Vyahhi, N" uniqKey="Vyahhi N">N Vyahhi</name>
</author>
<author><name sortKey="Tesler, G" uniqKey="Tesler G">G Tesler</name>
</author>
</analytic>
</biblStruct>
</listBibl>
</div1>
</back>
</TEI>
<pmc article-type="research-article"><pmc-dir>properties open_access</pmc-dir>
<front><journal-meta><journal-id journal-id-type="nlm-ta">PLoS One</journal-id>
<journal-id journal-id-type="iso-abbrev">PLoS ONE</journal-id>
<journal-id journal-id-type="publisher-id">plos</journal-id>
<journal-id journal-id-type="pmc">plosone</journal-id>
<journal-title-group><journal-title>PLoS ONE</journal-title>
</journal-title-group>
<issn pub-type="epub">1932-6203</issn>
<publisher><publisher-name>Public Library of Science</publisher-name>
<publisher-loc>San Francisco, CA USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta><article-id pub-id-type="pmid">26083032</article-id>
<article-id pub-id-type="pmc">4471408</article-id>
<article-id pub-id-type="publisher-id">PONE-D-14-42333</article-id>
<article-id pub-id-type="doi">10.1371/journal.pone.0130821</article-id>
<article-categories><subj-group subj-group-type="heading"><subject>Research Article</subject>
</subj-group>
</article-categories>
<title-group><article-title>QuorUM: An Error Corrector for Illumina Reads</article-title>
<alt-title alt-title-type="running-head">QuorUM</alt-title>
</title-group>
<contrib-group><contrib contrib-type="author"><name><surname>Marçais</surname>
<given-names>Guillaume</given-names>
</name>
<xref ref-type="corresp" rid="cor001">*</xref>
<xref ref-type="aff" rid="aff001"></xref>
</contrib>
<contrib contrib-type="author"><name><surname>Yorke</surname>
<given-names>James A.</given-names>
</name>
<xref ref-type="aff" rid="aff001"></xref>
</contrib>
<contrib contrib-type="author"><name><surname>Zimin</surname>
<given-names>Aleksey</given-names>
</name>
<xref ref-type="corresp" rid="cor001">*</xref>
<xref ref-type="aff" rid="aff001"></xref>
</contrib>
</contrib-group>
<aff id="aff001"><addr-line>IPST, University of Maryland, College Park, MD, USA</addr-line>
</aff>
<contrib-group><contrib contrib-type="editor"><name><surname>Gibas</surname>
<given-names>Cynthia</given-names>
</name>
<role>Academic Editor</role>
<xref ref-type="aff" rid="edit1"></xref>
</contrib>
</contrib-group>
<aff id="edit1"><addr-line>University of North Carolina at Charlotte, UNITED STATES</addr-line>
</aff>
<author-notes><fn fn-type="COI-statement" id="coi001"><p><bold>Competing Interests: </bold>
The authors have declared that no competing interests exist.</p>
</fn>
<fn fn-type="con" id="contrib001"><p>Conceived and designed the experiments: GM AZ JY. Performed the experiments: GM AZ. Analyzed the data: GM AZ. Wrote the paper: GM AZ JY.</p>
</fn>
<corresp id="cor001">* E-mail: <email>alekseyz@ipst.umd.edu</email>
(AZ), <email>gmarcais@umd.edu</email>
(GM)</corresp>
</author-notes>
<pub-date pub-type="collection"><year>2015</year>
</pub-date>
<pub-date pub-type="epub"><day>17</day>
<month>6</month>
<year>2015</year>
</pub-date>
<volume>10</volume>
<issue>6</issue>
<elocation-id>e0130821</elocation-id>
<history><date date-type="received"><day>19</day>
<month>9</month>
<year>2014</year>
</date>
<date date-type="accepted"><day>26</day>
<month>5</month>
<year>2015</year>
</date>
</history>
<permissions><copyright-statement>© 2015 Marçais et al</copyright-statement>
<copyright-year>2015</copyright-year>
<copyright-holder>Marçais et al</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><license-p>This is an open-access article distributed under the terms of the Creative Commons Attribution License, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are properly credited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:type="simple" xlink:href="pone.0130821.pdf"></self-uri>
<abstract><sec id="sec001"><title>Motivation</title>
<p>Illumina Sequencing data can provide high coverage of a genome by relatively short (most often 100 bp to 150 bp) reads at a low cost. Even with low (advertised 1%) error rate, 100 × coverage Illumina data on average has an error in some read at every base in the genome. These errors make handling the data more complicated because they result in a large number of low-count erroneous <italic>k</italic>
-mers in the reads. However, there is enough information in the reads to correct most of the sequencing errors, thus making subsequent use of the data (e.g. for mapping or assembly) easier. Here we use the term “error correction” to denote the reduction in errors due to both changes in individual bases and trimming of unusable sequence. We developed an error correction software called QuorUM. QuorUM is mainly aimed at error correcting Illumina reads for subsequent assembly. It is designed around the novel idea of minimizing the number of distinct erroneous <italic>k</italic>
-mers in the output reads and preserving the most true <italic>k</italic>
-mers, and we introduce a composite statistic π that measures how successful we are at achieving this dual goal. We evaluate the performance of QuorUM by correcting actual Illumina reads from genomes for which a reference assembly is available.</p>
</sec>
<sec id="sec002"><title>Results</title>
<p>We produce trimmed and error-corrected reads that result in assemblies with longer contigs and fewer errors. We compared QuorUM against several published error correctors and found that it is the best performer in most metrics we use. QuorUM is efficiently implemented making use of current multi-core computing architectures and it is suitable for large data sets (1 billion bases checked and corrected per day per core). We also demonstrate that a third-party assembler (SOAPdenovo) benefits significantly from using QuorUM error-corrected reads. QuorUM error corrected reads result in a factor of 1.1 to 4 improvement in N50 contig size compared to using the original reads with SOAPdenovo for the data sets investigated.</p>
</sec>
<sec id="sec003"><title>Availability</title>
<p>QuorUM is distributed as an independent software package and as a module of the MaSuRCA assembly software. Both are available under the GPL open source license at <ext-link ext-link-type="uri" xlink:href="http://www.genome.umd.edu">http://www.genome.umd.edu</ext-link>
.</p>
</sec>
<sec id="sec004"><title>Contact</title>
<p><email>gmarcais@umd.edu</email>
.</p>
</sec>
</abstract>
<funding-group><funding-statement>This project was supported by Agriculture and Food Research Initiative Competitive Grant no. 2008-04049 and 2010-15739-01 from the USDA National Institute of Food and Agriculture and Grant R01HG002945 from the National Institutes of Health.</funding-statement>
</funding-group>
<counts><fig-count count="1"></fig-count>
<table-count count="6"></table-count>
<page-count count="13"></page-count>
</counts>
<custom-meta-group><custom-meta id="data-availability"><meta-name>Data Availability</meta-name>
<meta-value>All sequencing data is available from the NIH SRA database <ext-link ext-link-type="uri" xlink:href="http://www.ncbi.nlm.nih.gov/sra">http://www.ncbi.nlm.nih.gov/sra</ext-link>
(SRR081522, SRR022868, SRP001314).</meta-value>
</custom-meta>
</custom-meta-group>
</article-meta>
<notes><title>Data Availability</title>
<p>All sequencing data is available from the NIH SRA database <ext-link ext-link-type="uri" xlink:href="http://www.ncbi.nlm.nih.gov/sra">http://www.ncbi.nlm.nih.gov/sra</ext-link>
(SRR081522, SRR022868, SRP001314).</p>
</notes>
</front>
<body><sec sec-type="intro" id="sec005"><title>Introduction</title>
<p>While second generation sequencing technologies have progressed tremendously and offer ever longer reads with low overall sequencing error rate, correcting errors in reads remains a desired pre-processing step in <italic>de novo</italic>
genome assembly. Most current assembly software use the de Bruijn graph representation as major part of the assembly process [<xref rid="pone.0130821.ref001" ref-type="bibr">1</xref>
–<xref rid="pone.0130821.ref004" ref-type="bibr">4</xref>
]. The de Bruijn graph made from raw reads (i.e. not error corrected) is likely larger and more complicated, making the assembly process more difficult and error-prone. In general, error correcting the reads leads to assemblies with longer contiguous sequences and fewer misassemblies [<xref rid="pone.0130821.ref005" ref-type="bibr">5</xref>
, <xref rid="pone.0130821.ref006" ref-type="bibr">6</xref>
].</p>
<p>In this paper we present a new error correction procedure and software package, named QuorUM (Quality Optimized Reads from the University of Maryland), that reduces errors by both trimming and changing individual bases in Illumina reads. It is targeted at improving genome assembly. QuorUM works as a stand-alone program and is also a component of the assembler MaSuRCA [<xref rid="pone.0130821.ref007" ref-type="bibr">7</xref>
]. It is designed to efficiently work the large data sets produced by today’s high throughput sequencing machines. On our system, it checks approximately 1 billion bases per hour per core (2GHz Intel or AMD) and it scales nearly linearly with multiple cores. We evaluate the error correction skill of QuorUM and compare it to other error correction programs on three genomes that have Illumina reads and have high quality reference assemblies. The other programs used for comparison are: HiTec [<xref rid="pone.0130821.ref008" ref-type="bibr">8</xref>
], Echo [<xref rid="pone.0130821.ref009" ref-type="bibr">9</xref>
], Coral [<xref rid="pone.0130821.ref010" ref-type="bibr">10</xref>
], SGA [<xref rid="pone.0130821.ref011" ref-type="bibr">11</xref>
], Racer [<xref rid="pone.0130821.ref012" ref-type="bibr">12</xref>
], Musket [<xref rid="pone.0130821.ref013" ref-type="bibr">13</xref>
] and Quake [<xref rid="pone.0130821.ref014" ref-type="bibr">14</xref>
].</p>
<sec id="sec006"><title>Trimming</title>
<p>In our view, trimming is an integral part of error correction. The distribution of sequencing errors in the reads is complex, and for some percentage of the reads, the sequence beyond a certain point contains too many errors to be corrected or, even worse, does not correspond to any sequence in the original genome. It is important to trim those reads to avoid misassemblies [<xref rid="pone.0130821.ref005" ref-type="bibr">5</xref>
]. Indeed, in the programs that trim, such as Quake [<xref rid="pone.0130821.ref014" ref-type="bibr">14</xref>
] there is generally no option to turn this feature off.</p>
<p>Trimming can be viewed as an error reduction step. Since for Illumina sequencing, the base quality degrades toward the 3’ ends of the reads one can reduce the overall error rate in the data by trimming the reads by a fixed amount. One can also trim based on the quality values reported by the sequencing machine. Although these simple trimming schemes will reduce the number of erroneous bases, they still leave many errors in the reads and needlessly discard a lot of valid sequence. Trimming too aggressively will result in fragmented assemblies.</p>
<p>QuorUM does not trim a fixed amount nor trim below a certain quality score. Rather, it detects when a region is “questionable” in the sense of requiring too many base changes. It trims off such questionable regions.</p>
</sec>
<sec id="sec007"><title>Not eliminating rare <italic>k</italic>
-mers</title>
<p>Random sequencing errors result in spurious <italic>k</italic>
-mers, which, with high probability, occur only rarely in the reads. A common approach to error reduction in graph-based assembly techniques is to eliminate rare <italic>k</italic>
-mers from the <italic>k</italic>
-mer database [<xref rid="pone.0130821.ref003" ref-type="bibr">3</xref>
, <xref rid="pone.0130821.ref015" ref-type="bibr">15</xref>
–<xref rid="pone.0130821.ref017" ref-type="bibr">17</xref>
]. In that approach, one determines a threshold and eliminates from the reads each <italic>k</italic>
-mer whose multiplicity in the reads is below that threshold.</p>
<p>Setting such a threshold works well when there is uniform coverage or, at least, when there is high coverage throughout the entire genome. In practice, with second generation sequencing, parts of the genome will have low or zero coverage. The method with a threshold will accurately correct the regions with high coverage and will convert low coverage regions to zero coverage regions thus creating gaps in the assembly.</p>
<p>A central theme of QuorUM is to preserve low coverage regions when possible by not correcting any bases in low coverage regions unless there is evidence that the base is definitely erroneous and we know what the replacement base should be.</p>
</sec>
<sec id="sec008"><title>Other approaches</title>
<p>Some other approaches are not based on the multiplicities of <italic>k</italic>
-mers in the reads. For example, Coral and Echo use multiple alignment of the reads and statistical models of sequencing to correct misaligned bases. HiTec uses a suffix array to find and correct potentially erroneous bases. Coral, Echo, HiTec, SGA and Racer only attempt to make base substitutions, while Quake, Musket and QuorUM will also trim reads. See [<xref rid="pone.0130821.ref018" ref-type="bibr">18</xref>
] for a brief survey of methods used to correct reads.</p>
<p>Finally we note that QuorUM only corrects substitution errors, not insertions and deletions (except via trimming). It is well suited for correcting reads sequenced using Illumina technology [<xref rid="pone.0130821.ref019" ref-type="bibr">19</xref>
], where the substitutions errors are the most common.</p>
</sec>
</sec>
<sec sec-type="materials|methods" id="sec009"><title>Methods</title>
<p>QuorUM is based on heuristic approach designed by examining the properties of Illumina sequencing data. One difference between QuorUM and most other published error correctors is that QuorUM does not assume that low count <italic>k</italic>
-mers are likely to be erroneous. One cannot make such an assumption if the error-corrected reads are to be used for assembly because of high local variability of the coverage of a genome by Illumina reads due to sequencing and library construction biases. Instead QuorUM assesses the validity of a <italic>k</italic>
-mer in a read using a variety of statistics, including the number of occurrences in the reads, the quality value of the bases, and the continuity of the coverage. QuorUM trims off any end of a read that otherwise seems to require numerous corrections.</p>
<p>We based our approach on the following properties of the data:
<list list-type="order"><list-item><p>the base quality is generally high at 5’ end and it deteriorates toward 3’ end for most reads</p>
</list-item>
<list-item><p>it is quite common to have the same substitution error in multiple reads or an error in high quality (<italic>q</italic>
> 30) base; thus neither the number of occurrences of a <italic>k</italic>
-mer in the reads nor the quality score alone can be used as a reliable way to identify correct or erroneous <italic>k</italic>
-mers</p>
</list-item>
</list>
</p>
<p>We designed the QuorUM error reduction algorithm to be conservative: unless we have evidence that a base is erroneous and we know with strong likelihood what the unique substitution is, we do not change the base.</p>
<sec id="sec010"><title>Two sets of <italic>k</italic>
-mers in reads</title>
<p>Using the <italic>k</italic>
-mer counter Jellyfish [<xref rid="pone.0130821.ref020" ref-type="bibr">20</xref>
], we create a list or hash of all the <italic>k</italic>
-mers that occur in the reads and record each <italic>k</italic>
-mer’s <italic><bold>count</bold>
</italic>
, that is, the number of times that the <italic>k</italic>
-mer occurs in the set of reads. The <italic>k</italic>
-mer and its reversed complement are identified, meaning that the count of a <italic>k</italic>
-mer <italic>m</italic>
is the number of occurrences of <italic>m</italic>
plus the number of occurrences of the reverse complement of <italic>m</italic>
. We mark the <italic>k</italic>
-mers for which there is at least one occurrence in the reads in which all bases in the <italic>k</italic>
-mer have at least quality <italic>q</italic>
and we call these reliable. We call <italic>q</italic>
the quality threshold and is set to 5 by default. We found that the algorithm is not sensitive to this choice in a significant way: the results were similar for thresholds between 4 and 8. Let <italic>R</italic>
(Reliable) denote the set of reliable <italic>k</italic>
-mers and <italic>A</italic>
(All) is the set of all <italic>k</italic>
-mers.</p>
</sec>
<sec id="sec011"><title>Start procedure</title>
<p>We begin correcting a read by creating a string <italic>S</italic>
, initially consisting of the string of bases in the read. We will possibly modify the string <italic>S</italic>
to obtain the corrected read. We choose as a starting point for error detection the first <italic>k</italic>
-mer in the read with a count of at least 3. We call it the <italic><bold>anchor</bold>
</italic>
<italic>k</italic>
-mer. (If none exists, the read is discarded.) By definition, we assume that the anchor <italic>k</italic>
-mer is valid, i.e. all bases in it are correct. We proceed forward and backward from this <italic>k</italic>
-mer. We only describe the forward procedure below, that is, correcting while moving toward the 3’ end. The backward procedure is essentially identical.</p>
</sec>
<sec id="sec012"><title>Evaluating a base</title>
<p>At each iteration, after accepting a <italic>k</italic>
-mer <italic>m</italic>
as valid, we shift one base in the forward direction, and evaluate the correctness of that base as follows. Let <italic>b</italic>
denote the next base in <italic>S</italic>
beyond m. Let <italic>m</italic>
′ denote the (<italic>k</italic>
−1)-suffix of <italic>m</italic>
and <italic>m</italic>
′<italic>x</italic>
denote the <italic>k</italic>
-mer consisting of <italic>m</italic>
′ with some base <italic>x</italic>
appended. For example <italic>m</italic>
′<italic>b</italic>
will denote the <italic>k</italic>
-mer in <italic>S</italic>
. (Note that it may differ from the corresponding <italic>k</italic>
-mer in the read if a recent substitution has been made). In the following, <italic>c</italic>
corresponds to the count of the <italic>k</italic>
-mer <italic>m</italic>
, the <italic>k</italic>
-mer prior to the one under consideration. Also, we always consider only the non-zero counts of the <italic>m</italic>
′<italic>x</italic>
(with <italic>x</italic>
in {<italic>A</italic>
, <italic>C</italic>
, <italic>G</italic>
, <italic>T</italic>
}) in the reliable database <italic>R</italic>
, if there are any. Only if all the counts are 0 in the <italic>R</italic>
database do we consider the <italic>A</italic>
database. In other words, reliable <italic>k</italic>
-mers always trump others.</p>
</sec>
<sec id="sec013"><title>Case 1: Unique continuation</title>
<p>If there is a unique choice of the base <italic>x</italic>
for which <italic>m</italic>
′<italic>x</italic>
has non-zero count, we accept <italic>m</italic>
′<italic>x</italic>
and <italic>x</italic>
becomes a base in <italic>S</italic>
. Of course that might mean there is no change since <italic>x</italic>
might equal <italic>b</italic>
. If there is no unique continuation, proceed to Case 2.</p>
</sec>
<sec id="sec014"><title>Case 2: Count threshold</title>
<p>If <italic>m</italic>
′<italic>b</italic>
has a count greater than some integer threshold <italic>T</italic>
, we accept <italic>m</italic>
′<italic>b</italic>
and no change is made to <italic>S</italic>
. Otherwise, proceed to Case 3. The program chooses <italic>T</italic>
based on the local estimate of coverage. When the count of <italic>m</italic>
′<italic>b</italic>
is greater or equal to <italic>T</italic>
, then the probability of <italic>b</italic>
being the wrong base is less than 1 in a million. Notice that we have threshold above which <italic>k</italic>
-mers are considered valid, below which <italic>k</italic>
-mers might be valid.</p>
</sec>
<sec id="sec015"><title>Case 3: Continuity of coverage</title>
<p>We choose the base <italic>x</italic>
such that the count of <italic>k</italic>
-mer <italic>m</italic>
′<italic>x</italic>
is closest to <italic>c</italic>
(the count of the previous <italic>k</italic>
-mer), provided that only one such base exists. Otherwise, if there is not a unique choice, we proceed to case 4. As in case 1, <italic>x</italic>
and <italic>b</italic>
might be equal and no change is made.</p>
</sec>
<sec id="sec016"><title>Case 4: No change</title>
<p>If none of the above apply, make no change if the count of <italic>m</italic>
′<italic>b</italic>
is non-zero. If it is zero, trim the read at the current base.</p>
<p>We repeat this process until we come to the end of the read or until the read is trimmed.</p>
<p>In making base changes, we do not allow more than <italic>M</italic>
substitutions in a window of <italic>W</italic>
bases. In that case, we trim the read just prior to the first change in the window <italic>W</italic>
. The default values are <italic>M</italic>
= 3 and <italic>W</italic>
= 10.</p>
</sec>
</sec>
<sec sec-type="results" id="sec017"><title>Results</title>
<p>We only use real Illumina data in our comparisons. Simulated data often do not reflect error profiles of Illumina reads. All data sets used in this paper have been obtained from the NCBI SRA and have been use previously in [<xref rid="pone.0130821.ref004" ref-type="bibr">4</xref>
, <xref rid="pone.0130821.ref005" ref-type="bibr">5</xref>
]. These data sets represent typical data sets that one may use for <italic>de novo</italic>
genome assembly.</p>
<p>We evaluate the error-correction software by error correcting the reads of three organisms, two bacterial genomes and a mammalian genome, for which a high quality reference assembly is available: <italic>Rhodobacter sphareoides</italic>
(rhodobacter) [<xref rid="pone.0130821.ref021" ref-type="bibr">21</xref>
], SRA accession SRR081522 randomly sampled to 45 × genome coverage; <italic>Staphylococcus aureus</italic>
(staphylococcus) SRA accession SRR022868, randomly sampled to 45 × genome coverage; and <italic>Mus musculus</italic>
(mouse) [<xref rid="pone.0130821.ref022" ref-type="bibr">22</xref>
] chromosome 16. The rhodobacter and staphylococcus data sets have previously been used in the GAGE project [<xref rid="pone.0130821.ref005" ref-type="bibr">5</xref>
]. At the request of a referee, we added in supplementary material a more recent (2012) data set for <italic>R. sphareoides</italic>
, SRX264781. The results are significantly better for this new data set but the relative performance of the correctors remains unchanged. See Supplementary Material <xref ref-type="supplementary-material" rid="pone.0130821.s004">S2 Table</xref>
. For the mouse chromosome 16 data set we downloaded the paired-end reads from NCBI SRA study Mouse_B6_Genome_on_Illumina. These sequences were generated from mouse strain C57BL/6J, the same strain used for the finished mouse sequence [<xref rid="pone.0130821.ref022" ref-type="bibr">22</xref>
]. We then mapped the reads to the finished sequence for the entire mouse genome using Bowtie2 [<xref rid="pone.0130821.ref023" ref-type="bibr">23</xref>
], and then extracted the reads whose best hit either for the read or for its mate was in chromosome 16. These genomes present different type of challenges for error reduction. The rhodobacter genome (4.6Mb long) has a high GC content and is consequently difficult to sequence using Illumina technology. The staphylococcus genome is 2.9Mb long. The mouse chromosome is larger and has a more complex repeat structure.</p>
<p>We were able to successfully run all error correctors on the bacterial data sets. No results are reported for Echo and HiTec on the mouse due to excessive runtime on larger data sets (see <xref rid="pone.0130821.t005" ref-type="table">Table 5</xref>
). In addition, we implemented two simple programs that only trim the input reads. <italic><bold>trim20B</bold>
</italic>
trims 20 bases from the 3’ end of the reads, while <italic><bold>trimQual5</bold>
</italic>
trims the 3’ end of a read at a base where the quality goes below or equal to 5 and subsequently never goes above 5. When applicable, we also compare the results with making no changes and/or no trimming at all, mentioned in the result tables as the <italic><bold>none</bold>
</italic>
corrector. The commands used to run the error correctors are available in Supplementary Material <xref ref-type="supplementary-material" rid="pone.0130821.s001">S1 Text</xref>
.</p>
<sec id="sec018"><title>False and missing <italic>k</italic>
-mers</title>
<p>A <italic>k</italic>
-mer is considered <italic><bold>false</bold>
</italic>
if it is present in the corrected reads and not in the reference. Note that a false <italic>k</italic>
-mer present in multiple reads is counted as 1 false <italic>k</italic>
-mer. Conversely, a <italic>k</italic>
-mer is <italic><bold>missing</bold>
</italic>
if it is present in the reference and not in the corrected reads.</p>
<p>In <xref rid="pone.0130821.t001" ref-type="table">Table 1</xref>
the <italic><bold>False remain</bold>
</italic>
is the number of false 31-mers left in the corrected reads as a percentage of the false 31-mers in the original reads. We examined other <italic>k</italic>
-mer sizes (<italic>k</italic>
= 21,51) and found that the results are similar. See Supplementary Material <xref ref-type="supplementary-material" rid="pone.0130821.s005">S3 Table</xref>
. By definition, the “none error” corrector has 100% of its false 31-mers remaining. The <italic><bold>True missing</bold>
</italic>
is the number of missing 31-mers as a percentage of the number of 31-mers in the reference. The numbers of true 31-mers missing from the original reads are 16452, 1047, and 59322 respectively for rhodobacter, staphylococcus, and mouse.</p>
<table-wrap id="pone.0130821.t001" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.t001</object-id>
<label>Table 1</label>
<caption><title>Percent of false 31-mers remaining and true 31-mers missing in error corrected reads.</title>
<p>The numbers for “false remain” and “true missing” in the table are percentages. We list the denominators used for the percentages in the headers of each of these columns. For the “false remain”, this denominator is the number of the false 31-mers in the original reads and for the “true missing”, it is the number of 31-mers in the reference. The “score” <italic>π</italic>
= the product of the “false remain” and “true missing” columns. QuorUM’s <italic>π</italic>
score is the best with a factor of 30, 15, and 3.5 better than the second best for Rhodobacter, Staphylococcus and Mouse C16 data sets respectively.</p>
</caption>
<alternatives><graphic id="pone.0130821.t001g" xlink:href="pone.0130821.t001"></graphic>
<table frame="box" rules="all" border="0"><colgroup span="1"><col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead><tr><th align="left" rowspan="1" colspan="1">Corrector</th>
<th colspan="3" align="center" rowspan="1">Rhodobacter</th>
<th colspan="3" align="center" rowspan="1">Staphylococcus</th>
<th colspan="3" align="center" rowspan="1">Mouse C16</th>
</tr>
<tr><th align="left" rowspan="1" colspan="1"></th>
<th align="left" rowspan="1" colspan="1">False remain (55 M)</th>
<th align="left" rowspan="1" colspan="1">True missing (4:6 M)</th>
<th align="left" rowspan="1" colspan="1">Score π</th>
<th align="left" rowspan="1" colspan="1">False remain (33 M)</th>
<th align="left" rowspan="1" colspan="1">True missing (2:9 M)</th>
<th align="left" rowspan="1" colspan="1">Score π</th>
<th align="left" rowspan="1" colspan="1">False remain (410 M)</th>
<th align="left" rowspan="1" colspan="1">True missing (87 M)</th>
<th align="left" rowspan="1" colspan="1">Score π</th>
</tr>
</thead>
<tbody><tr><td align="left" rowspan="1" colspan="1">none</td>
<td align="left" rowspan="1" colspan="1">100</td>
<td align="char" char="." rowspan="1" colspan="1">0.36</td>
<td align="left" rowspan="1" colspan="1">40</td>
<td align="left" rowspan="1" colspan="1">100</td>
<td align="char" char="." rowspan="1" colspan="1">0.037</td>
<td align="left" rowspan="1" colspan="1">4</td>
<td align="left" rowspan="1" colspan="1">100</td>
<td align="char" char="." rowspan="1" colspan="1">0.069</td>
<td align="left" rowspan="1" colspan="1">7</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trim20B</td>
<td align="left" rowspan="1" colspan="1">55</td>
<td align="char" char="." rowspan="1" colspan="1">0.39</td>
<td align="left" rowspan="1" colspan="1">20</td>
<td align="left" rowspan="1" colspan="1">64</td>
<td align="char" char="." rowspan="1" colspan="1">0.085</td>
<td align="left" rowspan="1" colspan="1">5</td>
<td align="left" rowspan="1" colspan="1">50</td>
<td align="char" char="." rowspan="1" colspan="1"><bold>0.076</bold>
</td>
<td align="left" rowspan="1" colspan="1">4</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trimQual5</td>
<td align="left" rowspan="1" colspan="1">9.4</td>
<td align="char" char="." rowspan="1" colspan="1">0.71</td>
<td align="left" rowspan="1" colspan="1">7</td>
<td align="left" rowspan="1" colspan="1">96</td>
<td align="char" char="." rowspan="1" colspan="1">0.039</td>
<td align="left" rowspan="1" colspan="1">4</td>
<td align="left" rowspan="1" colspan="1">34</td>
<td align="char" char="." rowspan="1" colspan="1">0.10</td>
<td align="left" rowspan="1" colspan="1">3</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Coral</td>
<td align="left" rowspan="1" colspan="1">69</td>
<td align="char" char="." rowspan="1" colspan="1">0.38</td>
<td align="left" rowspan="1" colspan="1">30</td>
<td align="left" rowspan="1" colspan="1">56</td>
<td align="char" char="." rowspan="1" colspan="1">0.13</td>
<td align="left" rowspan="1" colspan="1">7</td>
<td align="left" rowspan="1" colspan="1">52</td>
<td align="char" char="." rowspan="1" colspan="1">0.22</td>
<td align="left" rowspan="1" colspan="1">10</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Echo</td>
<td align="left" rowspan="1" colspan="1">60</td>
<td align="char" char="." rowspan="1" colspan="1"><bold>0.36</bold>
</td>
<td align="left" rowspan="1" colspan="1">20</td>
<td align="left" rowspan="1" colspan="1">55</td>
<td align="char" char="." rowspan="1" colspan="1"><bold>0.029</bold>
</td>
<td align="left" rowspan="1" colspan="1">2</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">HiTec</td>
<td align="left" rowspan="1" colspan="1">42</td>
<td align="char" char="." rowspan="1" colspan="1">1.1</td>
<td align="left" rowspan="1" colspan="1">50</td>
<td align="left" rowspan="1" colspan="1">33</td>
<td align="char" char="." rowspan="1" colspan="1">0.23</td>
<td align="left" rowspan="1" colspan="1">8</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Quake</td>
<td align="left" rowspan="1" colspan="1">8.3</td>
<td align="char" char="." rowspan="1" colspan="1">0.71</td>
<td align="left" rowspan="1" colspan="1">6</td>
<td align="left" rowspan="1" colspan="1">3.3</td>
<td align="char" char="." rowspan="1" colspan="1">0.24</td>
<td align="left" rowspan="1" colspan="1">0.8</td>
<td align="left" rowspan="1" colspan="1">4.6</td>
<td align="char" char="." rowspan="1" colspan="1">0.16</td>
<td align="left" rowspan="1" colspan="1">0.7</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">SGA</td>
<td align="left" rowspan="1" colspan="1">2.3</td>
<td align="char" char="." rowspan="1" colspan="1">1.5</td>
<td align="left" rowspan="1" colspan="1">3</td>
<td align="left" rowspan="1" colspan="1">0.49</td>
<td align="char" char="." rowspan="1" colspan="1">0.61</td>
<td align="left" rowspan="1" colspan="1">0.3</td>
<td align="left" rowspan="1" colspan="1">7.1</td>
<td align="char" char="." rowspan="1" colspan="1">0.16</td>
<td align="left" rowspan="1" colspan="1">1</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Racer</td>
<td align="left" rowspan="1" colspan="1">40</td>
<td align="char" char="." rowspan="1" colspan="1">0.93</td>
<td align="left" rowspan="1" colspan="1">40</td>
<td align="left" rowspan="1" colspan="1">35</td>
<td align="char" char="." rowspan="1" colspan="1">0.26</td>
<td align="left" rowspan="1" colspan="1">9</td>
<td align="left" rowspan="1" colspan="1">30</td>
<td align="char" char="." rowspan="1" colspan="1">0.27</td>
<td align="left" rowspan="1" colspan="1">8</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Musket</td>
<td align="left" rowspan="1" colspan="1">40</td>
<td align="char" char="." rowspan="1" colspan="1">0.52</td>
<td align="left" rowspan="1" colspan="1">20</td>
<td align="left" rowspan="1" colspan="1">44</td>
<td align="char" char="." rowspan="1" colspan="1">0.067</td>
<td align="left" rowspan="1" colspan="1">3</td>
<td align="left" rowspan="1" colspan="1">29</td>
<td align="char" char="." rowspan="1" colspan="1">0.15</td>
<td align="left" rowspan="1" colspan="1">4</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">QuorUM</td>
<td align="left" rowspan="1" colspan="1"><bold>0.29</bold>
</td>
<td align="char" char="." rowspan="1" colspan="1">0.40</td>
<td align="left" rowspan="1" colspan="1"><bold>0.1</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>0.22</bold>
</td>
<td align="char" char="." rowspan="1" colspan="1">0.087</td>
<td align="left" rowspan="1" colspan="1"><bold>0.02</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>2.0</bold>
</td>
<td align="char" char="." rowspan="1" colspan="1">0.11</td>
<td align="left" rowspan="1" colspan="1"><bold>0.2</bold>
</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
</sec>
<sec id="sec019"><title>Effectiveness of error reduction</title>
<p>We have found that low counts for both false and missing <italic>k</italic>
-mers correlates well with better assembly quality. Intuitively, having many false <italic>k</italic>
-mers in a set of reads makes the creation of contigs more difficult for an assembler while missing many <italic>k</italic>
-mers leads to a fragmented assembly. In our view, a corrector is effective on a genome if both metrics are small. In either case, QuorUM does better than the other programs on all 3 species. QuorUM consistently has low counts for both the false and missing <italic>k</italic>
-mer values while other correctors have less balanced results: either the false or missing <italic>k</italic>
-mer value is high. Surprisingly, Echo’s staphylococcus corrected reads have even fewer missing <italic>k</italic>
-mers than the original reads (0.029% vs. 0.037%), i.e. it recovers some true <italic>k</italic>
-mers which are not present in the original reads. This is possible because Echo does a multiple alignment. But it is not aggressive in its correction and leaves many false <italic>k</italic>
-mers. On the other hand, Quake usually leaves few false <italic>k</italic>
-mers but is so rigorous in its trimming, that many true <italic>k</italic>
-mers are missing from its corrected reads. We introduced a score <italic>π</italic>
, which is equal to the product of the “false remain” and “true missing” percentages of <italic>k</italic>
-mers listed in <xref rid="pone.0130821.t001" ref-type="table">Table 1</xref>
.</p>
<p>This statistic <italic>π</italic>
is introduced to measure only how successful an error corrector is at achieving our design goal of minimizing both the “false remain” and “true missing”. The <italic>π</italic>
score is introduced for comparing how different error correctors perform on our design idea. For example, if for a given pair of error correctors “false remain” percentages differ by a factor of 2, but “true missing” percentages are the same, then the <italic>π</italic>
scores would differ by a factor of two.</p>
<p><xref rid="pone.0130821.t002" ref-type="table">Table 2</xref>
gives an evaluation of how good the corrected reads might be for creating an assembly. Important metrics of the quality of an assembly include the statistics on the length of the contigs generated, such as the <italic><bold>N50</bold>
</italic>
size and the <italic><bold>E-size</bold>
</italic>
[<xref rid="pone.0130821.ref005" ref-type="bibr">5</xref>
]. In general, the N<italic>x</italic>
size is defined as the contig size such that <italic>x</italic>
% of the genome is contained in contigs of size N<italic>x</italic>
or larger. The expected size, or E-size, of the contigs is computed as follows. For each base (i.e. location) in the reference, compute the size of the contig it lies in. The E-size is the average of these sizes, averaged over all the bases in the finished sequence. In other words, the E-size is the expected contig size for a randomly chosen base in the genome. It is computed as the sum of the squares of the contig lengths divided by the length of the reference assembly.</p>
<table-wrap id="pone.0130821.t002" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.t002</object-id>
<label>Table 2</label>
<caption><title>Idealized contig size statistics (in kb).</title>
</caption>
<alternatives><graphic id="pone.0130821.t002g" xlink:href="pone.0130821.t002"></graphic>
<table frame="box" rules="all" border="0"><colgroup span="1"><col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead><tr><th align="left" rowspan="1" colspan="1">Corrector</th>
<th colspan="2" align="center" rowspan="1">Rhodobacter</th>
<th colspan="2" align="center" rowspan="1">Staphylococcus</th>
<th colspan="2" align="center" rowspan="1">Mouse C16</th>
</tr>
<tr><th align="left" rowspan="1" colspan="1"></th>
<th align="left" rowspan="1" colspan="1">N50</th>
<th align="left" rowspan="1" colspan="1">E-size</th>
<th align="left" rowspan="1" colspan="1">N50</th>
<th align="left" rowspan="1" colspan="1">E-size</th>
<th align="left" rowspan="1" colspan="1">N50</th>
<th align="left" rowspan="1" colspan="1">E-size</th>
</tr>
</thead>
<tbody><tr><td align="left" rowspan="1" colspan="1">none</td>
<td align="left" rowspan="1" colspan="1">2.7</td>
<td align="left" rowspan="1" colspan="1">4.1</td>
<td align="left" rowspan="1" colspan="1">43</td>
<td align="left" rowspan="1" colspan="1">42.4</td>
<td align="left" rowspan="1" colspan="1">32</td>
<td align="char" char="." rowspan="1" colspan="1">40.4</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trim20B</td>
<td align="left" rowspan="1" colspan="1">3.9</td>
<td align="left" rowspan="1" colspan="1">5.8</td>
<td align="left" rowspan="1" colspan="1">17</td>
<td align="left" rowspan="1" colspan="1">20.4</td>
<td align="left" rowspan="1" colspan="1">32</td>
<td align="char" char="." rowspan="1" colspan="1">40.1</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trimQual5</td>
<td align="left" rowspan="1" colspan="1">3.2</td>
<td align="left" rowspan="1" colspan="1">4.3</td>
<td align="left" rowspan="1" colspan="1">35</td>
<td align="left" rowspan="1" colspan="1">42.3</td>
<td align="left" rowspan="1" colspan="1">38</td>
<td align="char" char="." rowspan="1" colspan="1">47.8</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Coral</td>
<td align="left" rowspan="1" colspan="1">4.7</td>
<td align="left" rowspan="1" colspan="1">6.9</td>
<td align="left" rowspan="1" colspan="1">65</td>
<td align="left" rowspan="1" colspan="1">87.7</td>
<td align="left" rowspan="1" colspan="1">17</td>
<td align="char" char="." rowspan="1" colspan="1">22.6</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Echo</td>
<td align="left" rowspan="1" colspan="1">5.6</td>
<td align="left" rowspan="1" colspan="1">8.0</td>
<td align="left" rowspan="1" colspan="1"><bold>100</bold>
</td>
<td align="left" rowspan="1" colspan="1">110</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">HiTec</td>
<td align="left" rowspan="1" colspan="1">5.7</td>
<td align="left" rowspan="1" colspan="1">8.1</td>
<td align="left" rowspan="1" colspan="1">55</td>
<td align="left" rowspan="1" colspan="1">56.3</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Quake</td>
<td align="left" rowspan="1" colspan="1">3.2</td>
<td align="left" rowspan="1" colspan="1">4.3</td>
<td align="left" rowspan="1" colspan="1">21</td>
<td align="left" rowspan="1" colspan="1">23.1</td>
<td align="left" rowspan="1" colspan="1">36</td>
<td align="char" char="." rowspan="1" colspan="1">45.1</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">SGA</td>
<td align="left" rowspan="1" colspan="1">4.7</td>
<td align="left" rowspan="1" colspan="1">6.8</td>
<td align="left" rowspan="1" colspan="1">15</td>
<td align="left" rowspan="1" colspan="1">16.2</td>
<td align="left" rowspan="1" colspan="1">38</td>
<td align="char" char="." rowspan="1" colspan="1">48.1</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Racer</td>
<td align="left" rowspan="1" colspan="1">5.7</td>
<td align="left" rowspan="1" colspan="1">9.3</td>
<td align="left" rowspan="1" colspan="1">39</td>
<td align="left" rowspan="1" colspan="1">44.3</td>
<td align="left" rowspan="1" colspan="1">24</td>
<td align="char" char="." rowspan="1" colspan="1">30.2</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Musket</td>
<td align="left" rowspan="1" colspan="1">5.1</td>
<td align="left" rowspan="1" colspan="1">7.8</td>
<td align="left" rowspan="1" colspan="1">61</td>
<td align="left" rowspan="1" colspan="1">78.1</td>
<td align="left" rowspan="1" colspan="1">31</td>
<td align="char" char="." rowspan="1" colspan="1">38.6</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">QuorUM</td>
<td align="left" rowspan="1" colspan="1"><bold>12</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>18</bold>
</td>
<td align="left" rowspan="1" colspan="1">86</td>
<td align="left" rowspan="1" colspan="1"><bold>112</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>40</bold>
</td>
<td align="char" char="." rowspan="1" colspan="1"><bold>49.0</bold>
</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
</sec>
<sec id="sec020"><title>Idealized contigs</title>
<p>To avoid any bias in our results related to choosing a particular assembler, we chose to simply map the corrected reads to the reference genome thus creating idealized contigs.</p>
<p>An <italic><bold>idealized contig</bold>
</italic>
consists of a segment of the genome that is covered by overlapping corrected reads, overlapping by at least <italic>O</italic>
bases (we chose <italic>O</italic>
= 25 for reporting the results shown in <xref rid="pone.0130821.t002" ref-type="table">Table 2</xref>
because it corresponds to building an overlap-based assembly with a minimum overlap of 25 bases or de Bruijn graph assembly with 25-mers; one rarely would choose a minimum overlap or smaller <italic>k</italic>
-mer size for an assembly). These reads must match the reference along their entire length with at least 98% identity. Given that the idealized contigs are created by alignment to the reference, the N50 and E-size of idealized contigs represent an estimate of the upper-bound of the best N50 and E-size that can be obtained when assembling this set of reads. We note that reads with less than 98% identity will likely be assembled in different contigs by the assembly program. The N50 and E-size of idealized contigs are reported in <xref rid="pone.0130821.t002" ref-type="table">Table 2</xref>
.</p>
<p>The correctors that leave too many false <italic>k</italic>
-mers in the reads will have fewer reads that align to the reference at 98% identity, resulting in gaps between the idealized contigs. Conversely, too many true <italic>k</italic>
-mers missing result in gaps between the idealized contigs. <xref rid="pone.0130821.t002" ref-type="table">Table 2</xref>
suggests that QuorUM generally generates a set of reads that will lead to an assembly with longer contigs.</p>
</sec>
<sec id="sec021"><title>Perfect reads</title>
<p><xref rid="pone.0130821.t003" ref-type="table">Table 3</xref>
reports the percentage of the original reads that are perfect after error reduction, and it also reports the percentage of bases contained in perfect reads compared with bases in original reads. A <italic><bold>perfect read</bold>
</italic>
is defined as read having a full length error-free alignment with the reference.</p>
<table-wrap id="pone.0130821.t003" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.t003</object-id>
<label>Table 3</label>
<caption><title>Percentage of the original reads that are perfect after error reduction, and percentage of bases contained in perfect reads compared with bases in original reads.</title>
<p>The number in parenthesis is the denominator used to compute the percentage, the number of original reads and the amount of sequence in the original reads respectively.</p>
</caption>
<alternatives><graphic id="pone.0130821.t003g" xlink:href="pone.0130821.t003"></graphic>
<table frame="box" rules="all" border="0"><colgroup span="1"><col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead><tr><th align="left" rowspan="1" colspan="1">Corrector</th>
<th colspan="2" align="center" rowspan="1">Rhodobacter</th>
<th colspan="2" align="center" rowspan="1">Staphylococcus</th>
<th colspan="2" align="center" rowspan="1">Mouse C16</th>
</tr>
<tr><th align="left" rowspan="1" colspan="1"></th>
<th align="left" rowspan="1" colspan="1">Reads (2 M)</th>
<th align="left" rowspan="1" colspan="1">Sequence (202 M)</th>
<th align="left" rowspan="1" colspan="1">Reads (1:2 M)</th>
<th align="left" rowspan="1" colspan="1">Sequence (120 M)</th>
<th align="left" rowspan="1" colspan="1">Reads (41 M)</th>
<th align="left" rowspan="1" colspan="1">Sequence (4:2 G)</th>
</tr>
</thead>
<tbody><tr><td align="left" rowspan="1" colspan="1">none</td>
<td align="left" rowspan="1" colspan="1">21</td>
<td align="left" rowspan="1" colspan="1">21</td>
<td align="left" rowspan="1" colspan="1">33</td>
<td align="left" rowspan="1" colspan="1">33</td>
<td align="left" rowspan="1" colspan="1">48</td>
<td align="left" rowspan="1" colspan="1">48</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trim20B</td>
<td align="left" rowspan="1" colspan="1">44</td>
<td align="left" rowspan="1" colspan="1">36</td>
<td align="left" rowspan="1" colspan="1">46</td>
<td align="left" rowspan="1" colspan="1">37</td>
<td align="left" rowspan="1" colspan="1">79</td>
<td align="left" rowspan="1" colspan="1">64</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trimQual5</td>
<td align="left" rowspan="1" colspan="1">76</td>
<td align="left" rowspan="1" colspan="1">51</td>
<td align="left" rowspan="1" colspan="1">35</td>
<td align="left" rowspan="1" colspan="1">35</td>
<td align="left" rowspan="1" colspan="1">78</td>
<td align="left" rowspan="1" colspan="1">72</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Coral</td>
<td align="left" rowspan="1" colspan="1">58</td>
<td align="left" rowspan="1" colspan="1">58</td>
<td align="left" rowspan="1" colspan="1">74</td>
<td align="left" rowspan="1" colspan="1">74</td>
<td align="left" rowspan="1" colspan="1">81</td>
<td align="left" rowspan="1" colspan="1">81</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Echo</td>
<td align="left" rowspan="1" colspan="1">56</td>
<td align="left" rowspan="1" colspan="1">56</td>
<td align="left" rowspan="1" colspan="1">65</td>
<td align="left" rowspan="1" colspan="1">65</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">HiTec</td>
<td align="left" rowspan="1" colspan="1">61</td>
<td align="left" rowspan="1" colspan="1">61</td>
<td align="left" rowspan="1" colspan="1">78</td>
<td align="left" rowspan="1" colspan="1">78</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Quake</td>
<td align="left" rowspan="1" colspan="1">81</td>
<td align="left" rowspan="1" colspan="1">59</td>
<td align="left" rowspan="1" colspan="1">69</td>
<td align="left" rowspan="1" colspan="1">60</td>
<td align="left" rowspan="1" colspan="1">89</td>
<td align="left" rowspan="1" colspan="1">81</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">SGA</td>
<td align="left" rowspan="1" colspan="1">62</td>
<td align="left" rowspan="1" colspan="1">62</td>
<td align="left" rowspan="1" colspan="1">75</td>
<td align="left" rowspan="1" colspan="1">75</td>
<td align="left" rowspan="1" colspan="1">85</td>
<td align="left" rowspan="1" colspan="1">85</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Racer</td>
<td align="left" rowspan="1" colspan="1">63</td>
<td align="left" rowspan="1" colspan="1">63</td>
<td align="left" rowspan="1" colspan="1">78</td>
<td align="left" rowspan="1" colspan="1">78</td>
<td align="left" rowspan="1" colspan="1">84</td>
<td align="left" rowspan="1" colspan="1">84</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Musket</td>
<td align="left" rowspan="1" colspan="1">76</td>
<td align="left" rowspan="1" colspan="1">70</td>
<td align="left" rowspan="1" colspan="1">80</td>
<td align="left" rowspan="1" colspan="1">78</td>
<td align="left" rowspan="1" colspan="1">88</td>
<td align="left" rowspan="1" colspan="1">86</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">QuorUM</td>
<td align="left" rowspan="1" colspan="1"><bold>90</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>77</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>84</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>81</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>92</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>88</bold>
</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<p>We can use these numbers to determine the average length of the corrected reads as a fraction of their original length. For example, consider rhodobacter. Of the QuorUM corrected reads, 90% are perfect and they contain 77% of the bases in all of the original reads. It follows that the perfect reads have average length 77/90 = 0.86 times the original read length. Hence, 14% of the bases those reads were trimmed away. The non-trimming correctors, by definition, have the same value for both columns. By comparison, Quake trimmed away 28% and Musket trimmed away 8%.</p>
<p>QuorUM consistently produces the most sequence in perfect reads. At the request of a referee, we have included as supplementary material <xref ref-type="supplementary-material" rid="pone.0130821.s003">S1 Fig</xref>
. three graphs, one for each of the three species we study. We plot the percentage (that is the percentage of the uncorrected reads) of reads that are perfect (full read length no error match) versus a minimum read length. For lengths close to 100% of the original read length the non-trimming error correctors perform better in these plots.</p>
</sec>
<sec id="sec022"><title>Chimeric reads</title>
<p>We call a read <italic><bold>chimeric</bold>
</italic>
when it merges together sequences from two or more distant regions of the genome. We declare a read to be chimeric when it matches in two disjoint pieces in the genome better than any single match of the whole read. Specifically, using Bowtie [<xref rid="pone.0130821.ref023" ref-type="bibr">23</xref>
], a read is chimeric if satisfies two conditions. First, there is no match in one piece at 98% identity. Second it can be divided into two non-overlapping pieces (each at least 20 bases long) that match in two disjoint places at 98% identity.</p>
<p><xref rid="pone.0130821.t004" ref-type="table">Table 4</xref>
reports the effect of error reduction on chimeric reads. Such reads typically cannot be corrected and have to be trimmed or discarded.</p>
<table-wrap id="pone.0130821.t004" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.t004</object-id>
<label>Table 4</label>
<caption><title>Number of chimeric reads per 10000 after correction.</title>
</caption>
<alternatives><graphic id="pone.0130821.t004g" xlink:href="pone.0130821.t004"></graphic>
<table frame="box" rules="all" border="0"><colgroup span="1"><col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead><tr><th align="left" rowspan="1" colspan="1">Corrector</th>
<th align="left" rowspan="1" colspan="1">Rhodobacter</th>
<th align="left" rowspan="1" colspan="1">Staphylococcus</th>
<th align="left" rowspan="1" colspan="1">Mouse C16</th>
</tr>
</thead>
<tbody><tr><td align="left" rowspan="1" colspan="1">none</td>
<td align="left" rowspan="1" colspan="1">11</td>
<td align="left" rowspan="1" colspan="1">7.3</td>
<td align="left" rowspan="1" colspan="1">59</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trim20B</td>
<td align="left" rowspan="1" colspan="1">7.9</td>
<td align="left" rowspan="1" colspan="1">4.9</td>
<td align="left" rowspan="1" colspan="1">46</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">trimQual5</td>
<td align="left" rowspan="1" colspan="1">2.9</td>
<td align="left" rowspan="1" colspan="1">7.1</td>
<td align="left" rowspan="1" colspan="1">26</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Coral</td>
<td align="left" rowspan="1" colspan="1">11</td>
<td align="left" rowspan="1" colspan="1">9.3</td>
<td align="left" rowspan="1" colspan="1">52</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Echo</td>
<td align="left" rowspan="1" colspan="1">9.6</td>
<td align="left" rowspan="1" colspan="1">7.6</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">HiTec</td>
<td align="left" rowspan="1" colspan="1">35</td>
<td align="left" rowspan="1" colspan="1">12</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Quake</td>
<td align="left" rowspan="1" colspan="1"><bold>0.100</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>5.2</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>11</bold>
</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">SGA</td>
<td align="left" rowspan="1" colspan="1">3.8</td>
<td align="left" rowspan="1" colspan="1">5.7</td>
<td align="left" rowspan="1" colspan="1">14</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Racer</td>
<td align="left" rowspan="1" colspan="1">18</td>
<td align="left" rowspan="1" colspan="1">8.8</td>
<td align="left" rowspan="1" colspan="1">65</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Musket</td>
<td align="left" rowspan="1" colspan="1">15</td>
<td align="left" rowspan="1" colspan="1">8.6</td>
<td align="left" rowspan="1" colspan="1">40</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">QuorUM</td>
<td align="left" rowspan="1" colspan="1">0.17</td>
<td align="left" rowspan="1" colspan="1">7.2</td>
<td align="left" rowspan="1" colspan="1">13</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<p>The Illumina technology generates few chimeric reads (usually much less than 1% of all the reads). When aggressively changing bases, one runs the risk of creating new chimeric reads; i.e. sequence from a distant, possibly repeated, region of the genome may be used to rewrite significant portion of a read.</p>
<p>Quake performs best at reducing the number of chimeric reads, although, this often comes at the cost of very aggressive trimming. Musket and HiTec increase the number of chimeric reads.</p>
</sec>
<sec id="sec023"><title>Computation time of the error corrector programs</title>
<p><xref rid="pone.0130821.t005" ref-type="table">Table 5</xref>
reports the runtime to error correct reads for each program, on all three data sets using 16 AMD 8389 cores. QuorUM is significantly faster than all the other programs. <xref ref-type="fig" rid="pone.0130821.g001">Fig 1</xref>
shows the runtime on Rhodobacter while varying the number of threads used. To measure the runtime with different number of threads, we use the ‘<monospace>numactl</monospace>
’ command of Linux to restrict at the system level the number of execution cores available to the programs. HiTec is not multi-threaded and it does not benefit from the availability of multiple cores. Echo is multi-threaded, but it is written in Python, and the Python interpreter does not scale over multiple cores, thus the speed-up is limited. The other programs benefit from multiple cores, with Racer and QuorUM having a speed-up closest to the theoretical linear limit. Using 16 threads QuorUM is significantly faster than the other error correctors on all data sets.</p>
<table-wrap id="pone.0130821.t005" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.t005</object-id>
<label>Table 5</label>
<caption><title>Runtime of each program in hours:minutes:seconds, using 16 threads, and memory usage in giga-bytes.</title>
<p>The number of bases in each genome is reported in each column.</p>
</caption>
<alternatives><graphic id="pone.0130821.t005g" xlink:href="pone.0130821.t005"></graphic>
<table frame="box" rules="all" border="0"><colgroup span="1"><col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead><tr><th align="left" rowspan="1" colspan="1">Corrector</th>
<th colspan="2" align="center" rowspan="1">Rhodobacter 4:6Mb</th>
<th colspan="2" align="center" rowspan="1">Staphylococcus 2:9Mb</th>
<th colspan="2" align="center" rowspan="1">Mouse C16 98:2Mb</th>
</tr>
<tr><th align="left" rowspan="1" colspan="1"></th>
<th align="left" rowspan="1" colspan="1">Time</th>
<th align="left" rowspan="1" colspan="1">Mem</th>
<th align="left" rowspan="1" colspan="1">Time</th>
<th align="left" rowspan="1" colspan="1">Mem</th>
<th align="left" rowspan="1" colspan="1">Time</th>
<th align="left" rowspan="1" colspan="1">Mem</th>
</tr>
</thead>
<tbody><tr><td align="left" rowspan="1" colspan="1">Coral</td>
<td align="left" rowspan="1" colspan="1">0:09:46</td>
<td align="left" rowspan="1" colspan="1">35</td>
<td align="left" rowspan="1" colspan="1">0:06:18</td>
<td align="left" rowspan="1" colspan="1">33</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Echo</td>
<td align="left" rowspan="1" colspan="1">2:10:46</td>
<td align="left" rowspan="1" colspan="1">58</td>
<td align="left" rowspan="1" colspan="1">1:06:11</td>
<td align="left" rowspan="1" colspan="1">39</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">HiTec</td>
<td align="left" rowspan="1" colspan="1">0:41:51</td>
<td align="left" rowspan="1" colspan="1">4.0</td>
<td align="left" rowspan="1" colspan="1">0:22:09</td>
<td align="left" rowspan="1" colspan="1">2.3</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Quake</td>
<td align="left" rowspan="1" colspan="1">0:03:01</td>
<td align="left" rowspan="1" colspan="1">0.37</td>
<td align="left" rowspan="1" colspan="1">0:04:18</td>
<td align="left" rowspan="1" colspan="1">1.3</td>
<td align="left" rowspan="1" colspan="1">1:13:30</td>
<td align="left" rowspan="1" colspan="1">5.7</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">SGA</td>
<td align="left" rowspan="1" colspan="1">0:05:14</td>
<td align="left" rowspan="1" colspan="1">0.34</td>
<td align="left" rowspan="1" colspan="1">0:03:23</td>
<td align="left" rowspan="1" colspan="1">0.28</td>
<td align="left" rowspan="1" colspan="1">0:32:33</td>
<td align="left" rowspan="1" colspan="1">2.1</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Racer</td>
<td align="left" rowspan="1" colspan="1">0:01:58</td>
<td align="left" rowspan="1" colspan="1">2.0</td>
<td align="left" rowspan="1" colspan="1">0:01:01</td>
<td align="left" rowspan="1" colspan="1">1.4</td>
<td align="left" rowspan="1" colspan="1">0:34:35</td>
<td align="left" rowspan="1" colspan="1">11</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Musket</td>
<td align="left" rowspan="1" colspan="1">0:06:54</td>
<td align="left" rowspan="1" colspan="1"><bold>0.23</bold>
</td>
<td align="left" rowspan="1" colspan="1">0:01:49</td>
<td align="left" rowspan="1" colspan="1"><bold>0.22</bold>
</td>
<td align="left" rowspan="1" colspan="1">0:58:11</td>
<td align="left" rowspan="1" colspan="1"><bold>0.38</bold>
</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">QuorUM</td>
<td align="left" rowspan="1" colspan="1"><bold>0:00:53</bold>
</td>
<td align="left" rowspan="1" colspan="1">0.44</td>
<td align="left" rowspan="1" colspan="1"><bold>0:00:17</bold>
</td>
<td align="left" rowspan="1" colspan="1">0.74</td>
<td align="left" rowspan="1" colspan="1"><bold>0:23:12</bold>
</td>
<td align="left" rowspan="1" colspan="1">8.8</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<fig id="pone.0130821.g001" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.g001</object-id>
<label>Fig 1</label>
<caption><title>Runtime of the error corrector programs on Rhodobacter vs. the number of threads.</title>
<p>The solid lines represent the actual runtime while the dashed lines represent the perfect linear speed-up (except for HiTec which is not multi-threaded). The plot uses a log-log scale.</p>
</caption>
<graphic xlink:href="pone.0130821.g001"></graphic>
</fig>
<p>QuorUM was used in error correcting the 15 billion read data set used for assembling the 2Gb Loblolly Pine genome [<xref rid="pone.0130821.ref024" ref-type="bibr">24</xref>
]. The peak memory usage was 480Gb.</p>
</sec>
<sec id="sec024"><title>Impact of error-correction on assembly</title>
<p>To illustrate the utility of using QuorUM to pre-process Illumina data before running a <italic>de novo</italic>
assembly, we assembled the three data sets used in this paper. We used two assemblers: SOAPdenovo2 [<xref rid="pone.0130821.ref025" ref-type="bibr">25</xref>
] version 240, which is a popular assembler for Illumina data, and MaSuRCA [<xref rid="pone.0130821.ref007" ref-type="bibr">7</xref>
], an assembler designed to use QuorUM corrected reads. The results of the SOAPdenovo assemblies provide an unbiased comparison between the correctors as SOAPdenovo is developed independently from any of the error correctors. On the other hand, the MaSuRCA assemblies are of better quality and using MaSuRCA is the recommended way to use QuorUM corrected reads. For SOAPdenovo, we used the recommended assembler parameters from <ext-link ext-link-type="uri" xlink:href="http://soap.genomics.org.cn/soapdenovo.html">http://soap.genomics.org.cn/soapdenovo.html</ext-link>
with <italic>k</italic>
= 31. SOAPdenovo was run twice with the settings “-d0” and “-d1”. The former instruct SOAPdenovo to use all <italic>k</italic>
-mers, while the latter instruct to ignore <italic>k</italic>
-mers with count 1. In itself, the setting “-d1” can be viewed as a crude error reduction technique: most count 1 <italic>k</italic>
-mers are indeed errors as we discussed above.</p>
<p>In <xref rid="pone.0130821.t006" ref-type="table">Table 6</xref>
we show the contigs’ <italic><bold>NGA50</bold>
</italic>
for the various error-correctors used with SOAPdenovo. For QuorUM we list the MaSuRCA assembly NGA50 in parenthesis. The complete results for all error-correctors with both assemblers are provided in Supplementary Material <xref ref-type="supplementary-material" rid="pone.0130821.s002">S1 Table</xref>
. The NGA50, computed using Quast [<xref rid="pone.0130821.ref026" ref-type="bibr">26</xref>
] version 2.3, is the N50 with respect to the finished genome size of the contig sizes after being split at misassemblies. Quast only uses contigs of at least 500 bases for computing NGA50. A reported value of 0. means that the amount of sequence in the split contigs of size greater than 500 bases is less than half of the reference sequence.</p>
<table-wrap id="pone.0130821.t006" orientation="portrait" position="float"><object-id pub-id-type="doi">10.1371/journal.pone.0130821.t006</object-id>
<label>Table 6</label>
<caption><title>The assembled NGA50 contig size in kilo-bases for SOAPdenovo.</title>
<p>The “-d0” and “-d1” are parameters to SOAPdenovo instructing the assemblers to use all 31-mers or to ignore the 31-mers occurring only once. For MaSuRCA, which incorporates QuorUM, the result is in parentheses.</p>
</caption>
<alternatives><graphic id="pone.0130821.t006g" xlink:href="pone.0130821.t006"></graphic>
<table frame="box" rules="all" border="0"><colgroup span="1"><col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead><tr><th align="left" rowspan="1" colspan="1">Corrector</th>
<th colspan="2" align="center" rowspan="1">Rhodobacter</th>
<th colspan="2" align="center" rowspan="1">Staphylococcus</th>
<th colspan="2" align="center" rowspan="1">Mouse C16</th>
</tr>
<tr><th align="left" rowspan="1" colspan="1"></th>
<th align="left" rowspan="1" colspan="1">-d0</th>
<th align="left" rowspan="1" colspan="1">-d1</th>
<th align="left" rowspan="1" colspan="1">-d0</th>
<th align="left" rowspan="1" colspan="1">-d1</th>
<th align="left" rowspan="1" colspan="1">-d0</th>
<th align="left" rowspan="1" colspan="1">-d1</th>
</tr>
</thead>
<tbody><tr><td align="left" rowspan="1" colspan="1">none</td>
<td align="left" rowspan="1" colspan="1">0.</td>
<td align="left" rowspan="1" colspan="1">2.7</td>
<td align="left" rowspan="1" colspan="1">0.</td>
<td align="left" rowspan="1" colspan="1">4.8</td>
<td align="left" rowspan="1" colspan="1">0.64</td>
<td align="left" rowspan="1" colspan="1">1.5</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Coral</td>
<td align="left" rowspan="1" colspan="1">0.</td>
<td align="left" rowspan="1" colspan="1">3.4</td>
<td align="left" rowspan="1" colspan="1">0.67</td>
<td align="left" rowspan="1" colspan="1">16</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Echo</td>
<td align="left" rowspan="1" colspan="1">0.</td>
<td align="left" rowspan="1" colspan="1">3.1</td>
<td align="left" rowspan="1" colspan="1">0.92</td>
<td align="left" rowspan="1" colspan="1">9.1</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">HiTec</td>
<td align="left" rowspan="1" colspan="1">0.96</td>
<td align="left" rowspan="1" colspan="1">2.3</td>
<td align="left" rowspan="1" colspan="1">3.0</td>
<td align="left" rowspan="1" colspan="1">8.5</td>
<td align="left" rowspan="1" colspan="1">-</td>
<td align="left" rowspan="1" colspan="1">-</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Quake</td>
<td align="left" rowspan="1" colspan="1">2.9</td>
<td align="left" rowspan="1" colspan="1">1.6</td>
<td align="left" rowspan="1" colspan="1">10</td>
<td align="left" rowspan="1" colspan="1">5.7</td>
<td align="left" rowspan="1" colspan="1"><bold>1.7</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>1.7</bold>
</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">SGA</td>
<td align="left" rowspan="1" colspan="1">3.4</td>
<td align="left" rowspan="1" colspan="1">2.3</td>
<td align="left" rowspan="1" colspan="1">8.4</td>
<td align="left" rowspan="1" colspan="1">5.9</td>
<td align="left" rowspan="1" colspan="1">1.4</td>
<td align="left" rowspan="1" colspan="1"><bold>1.7</bold>
</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Racer</td>
<td align="left" rowspan="1" colspan="1">1.2</td>
<td align="left" rowspan="1" colspan="1">2.5</td>
<td align="left" rowspan="1" colspan="1">5.2</td>
<td align="left" rowspan="1" colspan="1">7.8</td>
<td align="left" rowspan="1" colspan="1">1.2</td>
<td align="left" rowspan="1" colspan="1">1.4</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">Musket</td>
<td align="left" rowspan="1" colspan="1">0.53</td>
<td align="left" rowspan="1" colspan="1">2.9</td>
<td align="left" rowspan="1" colspan="1">2.1</td>
<td align="left" rowspan="1" colspan="1">9.5</td>
<td align="left" rowspan="1" colspan="1">1.2</td>
<td align="left" rowspan="1" colspan="1">1.4</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">QuorUM</td>
<td align="left" rowspan="1" colspan="1"><bold>6.6</bold>
</td>
<td align="left" rowspan="1" colspan="1">5.9</td>
<td align="left" rowspan="1" colspan="1"><bold>19</bold>
</td>
<td align="left" rowspan="1" colspan="1">16.206</td>
<td align="left" rowspan="1" colspan="1"><bold>1.7</bold>
</td>
<td align="left" rowspan="1" colspan="1"><bold>1.7</bold>
</td>
</tr>
<tr><td align="left" rowspan="1" colspan="1">MaSuRCA</td>
<td colspan="2" align="center" rowspan="1">(19)</td>
<td colspan="2" align="center" rowspan="1">(33)</td>
<td colspan="2" align="center" rowspan="1">(5.7)</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<p>QuorUM improves SOAPdenovo assemblies more than the other error-correctors. Using QuorUM with MaSuRCA yields even better results.</p>
</sec>
</sec>
<sec sec-type="conclusions" id="sec025"><title>Conclusion</title>
<p>Our algorithm for correcting reads focuses on achieving our design idea of minimizing the number of distinct erroneous <italic>k</italic>
-mers in the output reads, while preserving the most true <italic>k</italic>
-mers. The algorithm is admittedly complex due to the complex nature of Illumina read data. It has been and remains our view that if we achieve this design idea, the <italic>π</italic>
score will be low, and the QuorUM corrected reads will produce better assemblies. To assist the reader in evaluating how well we achieve this design idea we have created the statistic <italic>π</italic>
, and we show the values of <italic>π</italic>
in <xref rid="pone.0130821.t001" ref-type="table">Table 1</xref>
. The values of <italic>π</italic>
are lowest for QuorUM by factors of 30, 15, and 3.5. Of course this reflects that the design ideas of the other correctors are different, not aimed at minimizing <italic>π</italic>
. But, as we argue below, our reads are better for assemblies, and we leave it to the reader to determine if the low scores of <italic>π</italic>
are the reason why our assemblies are good.</p>
<p>From the point of view of using error correctors as aids in the assembly of whole genome shotgun reads, the most revealing criterion is the size of the idealized contigs (<xref rid="pone.0130821.t002" ref-type="table">Table 2</xref>
). We also illustrate that error correction with QuorUM can benefit in assembly using an independent third-party assembly tool that has not been optimized for use with QuorUM (<xref rid="pone.0130821.t006" ref-type="table">Table 6</xref>
). QuorUM produces a larger proportion of error-free reads (<xref rid="pone.0130821.t003" ref-type="table">Table 3</xref>
) and its reads yield the largest idealized contig size (<xref rid="pone.0130821.t002" ref-type="table">Table 2</xref>
). Chimeric reads can result in misassemblies of contigs and Quake is best at eliminating chimeric reads. Also, QuorUM is the fastest error corrector according to our timing statistics listed in <xref rid="pone.0130821.t005" ref-type="table">Table 5</xref>
. Overall, by most criteria in this paper, QuorUM is the best error corrector for the purpose of genome assembly.</p>
</sec>
<sec sec-type="supplementary-material" id="sec026"><title>Supporting Information</title>
<supplementary-material content-type="local-data" id="pone.0130821.s001"><label>S1 Text</label>
<caption><title>Corrector commands.</title>
<p>List of all commands and parameters used to run the error correctors and assemblers.</p>
<p>(PDF)</p>
</caption>
<media xlink:href="pone.0130821.s001.pdf"><caption><p>Click here for additional data file.</p>
</caption>
</media>
</supplementary-material>
<supplementary-material content-type="local-data" id="pone.0130821.s002"><label>S1 Table</label>
<caption><title>NGA50 and NG50 for SOAPdenovo and MaSuRCA.</title>
<p>Additional quality statistics the assemblies generated.</p>
<p>(PDF)</p>
</caption>
<media xlink:href="pone.0130821.s002.pdf"><caption><p>Click here for additional data file.</p>
</caption>
</media>
</supplementary-material>
<supplementary-material content-type="local-data" id="pone.0130821.s003"><label>S1 Fig</label>
<caption><title>Perfect reads.</title>
<p>Perfect reads versus minimum read length.</p>
<p>(PDF)</p>
</caption>
<media xlink:href="pone.0130821.s003.pdf"><caption><p>Click here for additional data file.</p>
</caption>
</media>
</supplementary-material>
<supplementary-material content-type="local-data" id="pone.0130821.s004"><label>S2 Table</label>
<caption><title>Rhodobacter SRX264781.</title>
<p>Extra dataset.</p>
<p>(PDF)</p>
</caption>
<media xlink:href="pone.0130821.s004.pdf"><caption><p>Click here for additional data file.</p>
</caption>
</media>
</supplementary-material>
<supplementary-material content-type="local-data" id="pone.0130821.s005"><label>S3 Table</label>
<caption><title>Robustness to choice of <italic>k</italic>
.</title>
<p>False remain and true missing table for different <italic>k</italic>
-mer lengths.</p>
<p>(PDF)</p>
</caption>
<media xlink:href="pone.0130821.s005.pdf"><caption><p>Click here for additional data file.</p>
</caption>
</media>
</supplementary-material>
</sec>
</body>
<back><ack><p>This project was supported by Agriculture and Food Research Initiative Competitive Grant no. 2008-04049 and 2010-15739-01 from the USDA National Institute of Food and Agriculture and Grant R01HG002945 from the National Institutes of Health.</p>
</ack>
<ref-list><title>References</title>
<ref id="pone.0130821.ref001"><label>1</label>
<mixed-citation publication-type="journal"><name><surname>Zerbino</surname>
<given-names>DR</given-names>
</name>
, <name><surname>Birney</surname>
<given-names>E</given-names>
</name>
. <article-title>Velvet: algorithms for de novo short read assembly using de Bruijn graphs</article-title>
. <source>Genome research</source>
. <year>2008</year>
<month>5</month>
;<volume>18</volume>
(<issue>5</issue>
):<fpage>8219</fpage>
Available from: <ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/content/18/5/821.short">http://genome.cshlp.org/content/18/5/821.short</ext-link>
<ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/cgi/content/abstract/18/5/821">http://genome.cshlp.org/cgi/content/abstract/18/5/821</ext-link>
. <pub-id pub-id-type="doi">10.1101/gr.074492.107</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref002"><label>2</label>
<mixed-citation publication-type="journal"><name><surname>Li</surname>
<given-names>R</given-names>
</name>
, <name><surname>Zhu</surname>
<given-names>H</given-names>
</name>
, <name><surname>Ruan</surname>
<given-names>J</given-names>
</name>
, <name><surname>Qian</surname>
<given-names>W</given-names>
</name>
, <name><surname>Fang</surname>
<given-names>X</given-names>
</name>
, <name><surname>Shi</surname>
<given-names>Z</given-names>
</name>
, <etal>et al</etal>
<article-title>De novo assembly of human genomes with massively parallel short read sequencing</article-title>
. <source>Genome Research</source>
. <year>2010</year>
<month>2</month>
;<volume>20</volume>
(<issue>2</issue>
):<fpage>265</fpage>
–<lpage>272</lpage>
. PMID: 20019144. Available from: <ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/content/20/2/265">http://genome.cshlp.org/content/20/2/265</ext-link>
. <pub-id pub-id-type="doi">10.1101/gr.097261.109</pub-id>
<pub-id pub-id-type="pmid">20019144</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref003"><label>3</label>
<mixed-citation publication-type="journal"><name><surname>Chaisson</surname>
<given-names>MJ</given-names>
</name>
, <name><surname>Pevzner</surname>
<given-names>PA</given-names>
</name>
. <article-title>Short read fragment assembly of bacterial genomes</article-title>
. <source>Genome Research</source>
. <year>2008</year>
<month>2</month>
;<volume>18</volume>
(<issue>2</issue>
):<fpage>324</fpage>
–<lpage>330</lpage>
. PMID: 18083777. Available from: <ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/content/18/2/324">http://genome.cshlp.org/content/18/2/324</ext-link>
. <pub-id pub-id-type="doi">10.1101/gr.7088808</pub-id>
<pub-id pub-id-type="pmid">18083777</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref004"><label>4</label>
<mixed-citation publication-type="journal"><name><surname>Gnerre</surname>
<given-names>S</given-names>
</name>
, <name><surname>Maccallum</surname>
<given-names>I</given-names>
</name>
, <name><surname>Przybylski</surname>
<given-names>D</given-names>
</name>
, <name><surname>Ribeiro</surname>
<given-names>FJ</given-names>
</name>
, <name><surname>Burton</surname>
<given-names>JN</given-names>
</name>
, <name><surname>Walker</surname>
<given-names>BJ</given-names>
</name>
, <etal>et al</etal>
<article-title>High-quality draft assemblies of mammalian genomes from massively parallel sequence data</article-title>
. <source>Proc Natl Acad Sci U S A</source>
. <year>2011</year>
<month>1</month>
;<volume>108</volume>
(<issue>4</issue>
):<fpage>15131518</fpage>
Available from: <ext-link ext-link-type="uri" xlink:href="http://www.pnas.org/cgi/content/abstract/108/4/1513">http://www.pnas.org/cgi/content/abstract/108/4/1513</ext-link>
. <pub-id pub-id-type="doi">10.1073/pnas.1017351108</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref005"><label>5</label>
<mixed-citation publication-type="journal"><name><surname>Salzberg</surname>
<given-names>SL</given-names>
</name>
, <name><surname>Phillippy</surname>
<given-names>AM</given-names>
</name>
, <name><surname>Zimin</surname>
<given-names>AV</given-names>
</name>
, <name><surname>Puiu</surname>
<given-names>D</given-names>
</name>
, <name><surname>Magoc</surname>
<given-names>T</given-names>
</name>
, <name><surname>Koren</surname>
<given-names>S</given-names>
</name>
, <etal>et al</etal>
<article-title>GAGE: A critical evaluation of genome assemblies and assembly algorithms</article-title>
. <source>Genome Research</source>
. <year>2011</year>
<month>12</month>
;p. <fpage>gr.131383.111</fpage>
Available from: <ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/content/22/3/557.short">http://genome.cshlp.org/content/22/3/557.short</ext-link>
.</mixed-citation>
</ref>
<ref id="pone.0130821.ref006"><label>6</label>
<mixed-citation publication-type="journal"><name><surname>Magoc</surname>
<given-names>T</given-names>
</name>
, <name><surname>Pabinger</surname>
<given-names>S</given-names>
</name>
, <name><surname>Canzar</surname>
<given-names>S</given-names>
</name>
, <name><surname>Liu</surname>
<given-names>X</given-names>
</name>
, <name><surname>Su</surname>
<given-names>Q</given-names>
</name>
, <name><surname>Puiu</surname>
<given-names>D</given-names>
</name>
, <etal>et al</etal>
<article-title>GAGE-B: An Evaluation of Genome Assemblers for Bacterial Organisms</article-title>
. <source>Bioinformatics</source>
. <year>2013</year>
<month>5</month>
;PMID: 23665771. Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/content/early/2013/05/10/bioinformatics.btt273">http://bioinformatics.oxfordjournals.org/content/early/2013/05/10/bioinformatics.btt273</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btt273</pub-id>
<pub-id pub-id-type="pmid">23665771</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref007"><label>7</label>
<mixed-citation publication-type="journal"><name><surname>Zimin</surname>
<given-names>AV</given-names>
</name>
, <name><surname>Marçais</surname>
<given-names>G</given-names>
</name>
, <name><surname>Puiu</surname>
<given-names>D</given-names>
</name>
, <name><surname>Roberts</surname>
<given-names>M</given-names>
</name>
, <name><surname>Salzberg</surname>
<given-names>SL</given-names>
</name>
, <name><surname>Yorke</surname>
<given-names>JA</given-names>
</name>
. <article-title>The MaSuRCA genome assembler</article-title>
. <source>Bioinformatics</source>
. <year>2013</year>
<month>11</month>
;<volume>29</volume>
(<issue>21</issue>
):<fpage>2669</fpage>
–<lpage>2677</lpage>
. PMID: 23990416. Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/content/29/21/2669">http://bioinformatics.oxfordjournals.org/content/29/21/2669</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btt476</pub-id>
<pub-id pub-id-type="pmid">23990416</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref008"><label>8</label>
<mixed-citation publication-type="journal"><name><surname>Ilie</surname>
<given-names>L</given-names>
</name>
, <name><surname>Fazayeli</surname>
<given-names>F</given-names>
</name>
, <name><surname>Ilie</surname>
<given-names>S</given-names>
</name>
. <article-title>HiTEC: accurate error correction in high-throughput sequencing data</article-title>
. <source>Bioinformatics</source>
. <year>2011</year>
;<volume>27</volume>
(<issue>3</issue>
):<fpage>295</fpage>
–<lpage>302</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://www.ncbi.nlm.nih.gov/pubmed/21115437">http://www.ncbi.nlm.nih.gov/pubmed/21115437</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btq653</pub-id>
<pub-id pub-id-type="pmid">21115437</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref009"><label>9</label>
<mixed-citation publication-type="journal"><name><surname>Kao</surname>
<given-names>WC</given-names>
</name>
, <name><surname>Chan</surname>
<given-names>AH</given-names>
</name>
, <name><surname>Song</surname>
<given-names>YS</given-names>
</name>
. <article-title>ECHO: A reference-free short-read error correction algorithm</article-title>
. <source>Genome research</source>
. <year>2011</year>
<month>5</month>
;<volume>21</volume>
(<issue>7</issue>
):<fpage>1181</fpage>
–<lpage>1192</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/cgi/content/abstract/21/7/1181">http://genome.cshlp.org/cgi/content/abstract/21/7/1181</ext-link>
. <pub-id pub-id-type="doi">10.1101/gr.111351.110</pub-id>
<pub-id pub-id-type="pmid">21482625</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref010"><label>10</label>
<mixed-citation publication-type="journal"><name><surname>Salmela</surname>
<given-names>L</given-names>
</name>
, <name><surname>Schröder</surname>
<given-names>J</given-names>
</name>
. <article-title>Correcting errors in short reads by multiple alignments</article-title>
. <source>Bioinformatics</source>
. <year>2011</year>
;<volume>27</volume>
(<issue>11</issue>
):<fpage>1455</fpage>
Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/content/27/11/1455.short">http://bioinformatics.oxfordjournals.org/content/27/11/1455.short</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btr170</pub-id>
<pub-id pub-id-type="pmid">21471014</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref011"><label>11</label>
<mixed-citation publication-type="journal"><name><surname>Simpson</surname>
<given-names>JT</given-names>
</name>
, <name><surname>Durbin</surname>
<given-names>R</given-names>
</name>
. <article-title>Efficient de novo assembly of large genomes using compressed data structures</article-title>
. <source>Genome Research</source>
. <year>2012</year>
<month>3</month>
;<volume>22</volume>
(<issue>3</issue>
):<fpage>549</fpage>
–<lpage>556</lpage>
. PMID: 22156294. Available from: <ext-link ext-link-type="uri" xlink:href="http://genome.cshlp.org/content/22/3/549">http://genome.cshlp.org/content/22/3/549</ext-link>
. <pub-id pub-id-type="doi">10.1101/gr.126953.111</pub-id>
<pub-id pub-id-type="pmid">22156294</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref012"><label>12</label>
<mixed-citation publication-type="journal"><name><surname>Ilie</surname>
<given-names>L</given-names>
</name>
, <name><surname>Molnar</surname>
<given-names>M</given-names>
</name>
. <article-title>RACER: Rapid and accurate correction of errors in reads</article-title>
. <source>Bioinformatics</source>
. <year>2013</year>
<month>10</month>
;<volume>29</volume>
(<issue>19</issue>
):<fpage>2490</fpage>
–<lpage>2493</lpage>
. PMID: 23853064. Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/content/29/19/2490">http://bioinformatics.oxfordjournals.org/content/29/19/2490</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btt407</pub-id>
<pub-id pub-id-type="pmid">23853064</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref013"><label>13</label>
<mixed-citation publication-type="journal"><name><surname>Liu</surname>
<given-names>Y</given-names>
</name>
, <name><surname>Schrder</surname>
<given-names>J</given-names>
</name>
, <name><surname>Schmidt</surname>
<given-names>B</given-names>
</name>
. <article-title>Musket: a multistage k-mer spectrum-based error corrector for Illumina sequence data</article-title>
. <source>Bioinformatics</source>
. <year>2013</year>
<month>2</month>
;<volume>29</volume>
(<issue>3</issue>
):<fpage>308</fpage>
–<lpage>315</lpage>
. PMID: 23202746. Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/content/29/3/308">http://bioinformatics.oxfordjournals.org/content/29/3/308</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/bts690</pub-id>
<pub-id pub-id-type="pmid">23202746</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref014"><label>14</label>
<mixed-citation publication-type="journal"><name><surname>Kelley</surname>
<given-names>DR</given-names>
</name>
, <name><surname>Schatz</surname>
<given-names>MC</given-names>
</name>
, <name><surname>Salzberg</surname>
<given-names>SL</given-names>
</name>
. <article-title>Quake: quality-aware detection and correction of sequencing errors</article-title>
. <source>Genome Biol</source>
. <year>2010</year>
;<volume>11</volume>
(<issue>11</issue>
):<fpage>R116</fpage>
–<lpage>R116</lpage>
. <pub-id pub-id-type="doi">10.1186/gb-2010-11-11-r116</pub-id>
<pub-id pub-id-type="pmid">21114842</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref015"><label>15</label>
<mixed-citation publication-type="journal"><name><surname>Pevzner</surname>
<given-names>PA</given-names>
</name>
, <name><surname>Tang</surname>
<given-names>H</given-names>
</name>
, <name><surname>Waterman</surname>
<given-names>MS</given-names>
</name>
. <article-title>An Eulerian path approach to DNA fragment assembly</article-title>
. <source>Proc Natl Acad Sci U S A</source>
. <year>2001</year>
<month>8</month>
;<volume>98</volume>
(<issue>17</issue>
):<fpage>97489753</fpage>
<pub-id pub-id-type="doi">10.1073/pnas.171285098</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref016"><label>16</label>
<mixed-citation publication-type="journal"><name><surname>Zhao</surname>
<given-names>X</given-names>
</name>
, <name><surname>Palmer</surname>
<given-names>LE</given-names>
</name>
, <name><surname>Bolanos</surname>
<given-names>R</given-names>
</name>
, <name><surname>Mircean</surname>
<given-names>C</given-names>
</name>
, <name><surname>Fasulo</surname>
<given-names>D</given-names>
</name>
, <name><surname>Wittenberg</surname>
<given-names>GM</given-names>
</name>
. <article-title>EDAR: An Efficient Error Detection and Removal Algorithm for Next Generation Sequencing Data</article-title>
. <source>Journal of Computational Biology</source>
. <year>2010</year>
<month>11</month>
;<volume>17</volume>
(<issue>11</issue>
):<fpage>1549</fpage>
–<lpage>1560</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://online.liebertpub.com/doi/abs/10.1089/cmb.2010.0127">http://online.liebertpub.com/doi/abs/10.1089/cmb.2010.0127</ext-link>
. <pub-id pub-id-type="doi">10.1089/cmb.2010.0127</pub-id>
<pub-id pub-id-type="pmid">20973743</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref017"><label>17</label>
<mixed-citation publication-type="journal"><name><surname>Shi</surname>
<given-names>H</given-names>
</name>
, <name><surname>Schmidt</surname>
<given-names>B</given-names>
</name>
, <name><surname>Liu</surname>
<given-names>W</given-names>
</name>
, <name><surname>Mller-Wittig</surname>
<given-names>W</given-names>
</name>
. <article-title>A parallel algorithm for error correction in high-throughput short-read data on CUDA-enabled graphics hardware</article-title>
. <source>Journal of Computational Biology</source>
. <year>2010</year>
;<volume>17</volume>
(<issue>4</issue>
):<fpage>603615</fpage>
Available from: <ext-link ext-link-type="uri" xlink:href="http://www.liebertonline.com/doi/abs/10.1089/cmb.2009.0062">http://www.liebertonline.com/doi/abs/10.1089/cmb.2009.0062</ext-link>
. <pub-id pub-id-type="doi">10.1089/cmb.2009.0062</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref018"><label>18</label>
<mixed-citation publication-type="journal"><name><surname>Yang</surname>
<given-names>X</given-names>
</name>
, <name><surname>Chockalingam</surname>
<given-names>SP</given-names>
</name>
, <name><surname>Aluru</surname>
<given-names>S</given-names>
</name>
. <article-title>A survey of error-correction methods for next-generation sequencing</article-title>
. <source>Briefings in Bioinformatics</source>
. <year>2012</year>
;p. <fpage>bbs015</fpage>
Available from: <ext-link ext-link-type="uri" xlink:href="http://bib.oxfordjournals.org/cgi/doi/10.1093/bib/bbs015">http://bib.oxfordjournals.org/cgi/doi/10.1093/bib/bbs015</ext-link>
<ext-link ext-link-type="uri" xlink:href="http://bib.oxfordjournals.org/content/early/2012/04/06/bib.bbs015.short">http://bib.oxfordjournals.org/content/early/2012/04/06/bib.bbs015.short</ext-link>
.</mixed-citation>
</ref>
<ref id="pone.0130821.ref019"><label>19</label>
<mixed-citation publication-type="journal"><name><surname>Bentley</surname>
<given-names>DR</given-names>
</name>
, <name><surname>Balasubramanian</surname>
<given-names>S</given-names>
</name>
, <name><surname>Swerdlow</surname>
<given-names>HP</given-names>
</name>
, <name><surname>Smith</surname>
<given-names>GP</given-names>
</name>
, <name><surname>Milton</surname>
<given-names>J</given-names>
</name>
, <name><surname>Brown</surname>
<given-names>CG</given-names>
</name>
, <etal>et al</etal>
<article-title>Accurate whole human genome sequencing using reversible terminator chemistry</article-title>
. <source>Nature</source>
. <year>2008</year>
<month>11</month>
;<volume>456</volume>
(<issue>7218</issue>
):<fpage>53</fpage>
–<lpage>59</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://www.nature.com/nature/journal/v456/n7218/full/nature07517.html">http://www.nature.com/nature/journal/v456/n7218/full/nature07517.html</ext-link>
. <pub-id pub-id-type="doi">10.1038/nature07517</pub-id>
<pub-id pub-id-type="pmid">18987734</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref020"><label>20</label>
<mixed-citation publication-type="journal"><name><surname>Marçais</surname>
<given-names>G</given-names>
</name>
, <name><surname>Kingsford</surname>
<given-names>C</given-names>
</name>
. <article-title>A fast, lock-free approach for efficient parallel counting of occurrences of k-mers</article-title>
. <source>Bioinformatics (Oxford, England)</source>
. <year>2011</year>
<month>3</month>
;<volume>27</volume>
(<issue>6</issue>
):<fpage>764</fpage>
–<lpage>70</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/cgi/content/abstract/27/6/764">http://bioinformatics.oxfordjournals.org/cgi/content/abstract/27/6/764</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btr011</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref021"><label>21</label>
<mixed-citation publication-type="journal"><name><surname>Mackenzie</surname>
<given-names>C</given-names>
</name>
, <name><surname>Choudhary</surname>
<given-names>M</given-names>
</name>
, <name><surname>Larimer</surname>
<given-names>FW</given-names>
</name>
, <name><surname>Predki</surname>
<given-names>PF</given-names>
</name>
, <name><surname>Stilwagen</surname>
<given-names>S</given-names>
</name>
, <name><surname>Armitage</surname>
<given-names>JP</given-names>
</name>
, <etal>et al</etal>
<article-title>The home stretch, a first analysis of the nearly completed genome of Rhodobacter sphaeroides 2.4.1</article-title>
. <source>Photosynthesis research</source>
. <year>2001</year>
<month>1</month>
;<volume>70</volume>
(<issue>1</issue>
):<fpage>19</fpage>
–<lpage>41</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://link.springer.com/article/10.1023/A:1013831823701">http://link.springer.com/article/10.1023/A:1013831823701</ext-link>
. <pub-id pub-id-type="doi">10.1023/A:1013888522793</pub-id>
<pub-id pub-id-type="pmid">16228360</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref022"><label>22</label>
<mixed-citation publication-type="journal"><name><surname>Waterston</surname>
<given-names>RH</given-names>
</name>
, <name><surname>Lindblad-Toh</surname>
<given-names>K</given-names>
</name>
, <name><surname>Birney</surname>
<given-names>E</given-names>
</name>
, <name><surname>Rogers</surname>
<given-names>J</given-names>
</name>
, <name><surname>Abril</surname>
<given-names>JF</given-names>
</name>
, <name><surname>Agarwal</surname>
<given-names>P</given-names>
</name>
, <etal>et al</etal>
<article-title>Initial sequencing and comparative analysis of the mouse genome</article-title>
. <source>Nature</source>
. <year>2002</year>
<month>12</month>
;<volume>420</volume>
(<issue>6915</issue>
):<fpage>52062</fpage>
Available from: <pub-id pub-id-type="doi">10.1038/nature01262</pub-id>
.</mixed-citation>
</ref>
<ref id="pone.0130821.ref023"><label>23</label>
<mixed-citation publication-type="journal"><name><surname>Langmead</surname>
<given-names>B</given-names>
</name>
, <name><surname>Trapnell</surname>
<given-names>C</given-names>
</name>
, <name><surname>Pop</surname>
<given-names>M</given-names>
</name>
, <name><surname>Salzberg</surname>
<given-names>SL</given-names>
</name>
. <article-title>Ultrafast and memory-efficient alignment of short DNA sequences to the human genome</article-title>
. <source>Genome biology</source>
. <year>2009</year>
<month>1</month>
;<volume>10</volume>
(<issue>3</issue>
):<fpage>R25</fpage>
–<lpage>R25</lpage>
. <pub-id pub-id-type="doi">10.1186/gb-2009-10-3-r25</pub-id>
<pub-id pub-id-type="pmid">19261174</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref024"><label>24</label>
<mixed-citation publication-type="journal"><name><surname>Zimin</surname>
<given-names>A</given-names>
</name>
, <name><surname>Stevens</surname>
<given-names>KA</given-names>
</name>
, <name><surname>Crepeau</surname>
<given-names>MW</given-names>
</name>
, <name><surname>Holtz-Morris</surname>
<given-names>A</given-names>
</name>
, <name><surname>Koriabine</surname>
<given-names>M</given-names>
</name>
, <name><surname>Marais</surname>
<given-names>G</given-names>
</name>
, <etal>et al</etal>
<article-title>Sequencing and Assembly of the 22-Gb Loblolly Pine Genome</article-title>
. <source>Genetics</source>
. <year>2014</year>
<month>3</month>
;<volume>196</volume>
(<issue>3</issue>
):<fpage>875</fpage>
–<lpage>890</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://www.genetics.org/content/196/3/875">http://www.genetics.org/content/196/3/875</ext-link>
. <pub-id pub-id-type="doi">10.1534/genetics.113.159715</pub-id>
<pub-id pub-id-type="pmid">24653210</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref025"><label>25</label>
<mixed-citation publication-type="journal"><name><surname>Luo</surname>
<given-names>R</given-names>
</name>
, <name><surname>Liu</surname>
<given-names>B</given-names>
</name>
, <name><surname>Xie</surname>
<given-names>Y</given-names>
</name>
, <name><surname>Li</surname>
<given-names>Z</given-names>
</name>
, <name><surname>Huang</surname>
<given-names>W</given-names>
</name>
, <name><surname>Yuan</surname>
<given-names>J</given-names>
</name>
, <etal>et al</etal>
<article-title>SOAPdenovo2: an empirically improved memory-efficient short-read de novo assembler</article-title>
. <source>GigaScience</source>
. <year>2012</year>
<month>12</month>
;<volume>1</volume>
(<issue>1</issue>
):<fpage>18</fpage>
PMID: 23587118. Available from: <ext-link ext-link-type="uri" xlink:href="http://www.gigasciencejournal.com/content/1/1/18/abstract">http://www.gigasciencejournal.com/content/1/1/18/abstract</ext-link>
. <pub-id pub-id-type="doi">10.1186/2047-217X-1-18</pub-id>
<pub-id pub-id-type="pmid">23587118</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0130821.ref026"><label>26</label>
<mixed-citation publication-type="journal"><name><surname>Gurevich</surname>
<given-names>A</given-names>
</name>
, <name><surname>Saveliev</surname>
<given-names>V</given-names>
</name>
, <name><surname>Vyahhi</surname>
<given-names>N</given-names>
</name>
, <name><surname>Tesler</surname>
<given-names>G</given-names>
</name>
. <article-title>QUAST: quality assessment tool for genome assemblies</article-title>
. <source>Bioinformatics</source>
. <year>2013</year>
<month>4</month>
;<volume>29</volume>
(<issue>8</issue>
):<fpage>1072</fpage>
–<lpage>1075</lpage>
. Available from: <ext-link ext-link-type="uri" xlink:href="http://bioinformatics.oxfordjournals.org/content/29/8/1072">http://bioinformatics.oxfordjournals.org/content/29/8/1072</ext-link>
. <pub-id pub-id-type="doi">10.1093/bioinformatics/btt086</pub-id>
<pub-id pub-id-type="pmid">23422339</pub-id>
</mixed-citation>
</ref>
</ref-list>
</back>
</pmc>
</record>
Pour manipuler ce document sous Unix (Dilib)
EXPLOR_STEP=$WICRI_ROOT/Sante/explor/MersV1/Data/Pmc/Corpus
HfdSelect -h $EXPLOR_STEP/biblio.hfd -nk 001008 | SxmlIndent | more
Ou
HfdSelect -h $EXPLOR_AREA/Data/Pmc/Corpus/biblio.hfd -nk 001008 | SxmlIndent | more
Pour mettre un lien sur cette page dans le réseau Wicri
{{Explor lien |wiki= Sante |area= MersV1 |flux= Pmc |étape= Corpus |type= RBID |clé= PMC:4471408 |texte= QuorUM: An Error Corrector for Illumina Reads }}
Pour générer des pages wiki
HfdIndexSelect -h $EXPLOR_AREA/Data/Pmc/Corpus/RBID.i -Sk "pubmed:26083032" \ | HfdSelect -Kh $EXPLOR_AREA/Data/Pmc/Corpus/biblio.hfd \ | NlmPubMed2Wicri -a MersV1
![]() | This area was generated with Dilib version V0.6.33. | ![]() |