I understand how to assemble genome from error-free reads. I implemented like this:

Construct directed overlap graph with reads as vertices and edges as maximum overlap between two vertices. Edges represent the length of overlapping maximum substring of one read suffix with other read prefix. Find the path that visits all vertices only once in overlap graph. With small graph we can use greedy approach : Starting from first pattern always choose egde of maximum weight and store shortest common superstring spelled by this path in resulting string. Resulting string spelled by path is shortest common superstring of all reads, that is assembled genome.

For example


Gives the AACTAGAT as a result

Now let's say that two error-prone reads have at most one error (mismatch):


As you can see second read has one substitution in third character from 'A' to 'C'.

So how assembled genome should look like for the error-prone reads? Do I take A or C to resulting string? Or I'm missing something?

Note: I used short reads for example because of simplicity. I work with much larger number of reads which are 100 nucleotides long and have at most one substitution of character. So that's a big overlap graph. I know I can use De Bruijn graph, but can I use some greedy approach (like in error-free example)?  


It's common for assemblers to have a coverage threshold to make sure that there are enough reads across the same region to properly assemble a contig.

You can't work out an ideal solution from a situation where the consensus sequence is ambiguous. If your overlap were representative (e.g. a heterozygous variant in a diploid genome, based on a few tens of reads of 100bp, rather than 6bp), then the resulting assembly would have a bubble in the assembly graph at the variant point.

       / \
A-A-C-T   G-A-T
       \ /

A conservative assembler might produce two assembled contigs corresponding to these two paths, AACTAGAT and AACTCGAT. A greedy assembler would just pick one path and use that. Subsequent assembly steps might attempt to search for bubbles and annotate the assembled contigs with variant locations.

  • $\begingroup$ For all mainstream short-read overlappers, if there is a mismatch, the overlap will be missed entirely. You don't get a bubble. Usually you need at least 4 reads to see a bubble and the bubble is not single-based in string/overlap graph. $\endgroup$
    – user172818
    Oct 22 '17 at 21:07
  • $\begingroup$ Yes, for the particular example that was given, a bubble wouldn't be formed. I was assuming that the reads were representative of something with a better coverage (e.g. overlap of 50 long sequences, with half having a variant, and half not) $\endgroup$
    – gringer
    Oct 23 '17 at 1:04

For short reads, the typical and the most widely used solution is to correct away sequencing errors before assembly. You can correct errors with k-mer spectrum, a trie or multi-alignment. There are many papers on this topic.

Error correction alone won't fix all sequencing errors. Remaining errors may lead to bubbles and tips in the overlap/de Bruijn graph. You can identify them by inspecting the local topology of assembly graph.

  • $\begingroup$ So what would be solution from error-prone sample above? $\endgroup$
    – gagro
    Oct 22 '17 at 17:35
  • 1
    $\begingroup$ No solution to your example. You can only identify errors with sufficient coverage. $\endgroup$
    – user172818
    Oct 22 '17 at 21:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.