De Bruijn Graph Assembly
Author(s) | Simon Gladman Helena Rasche Saskia Hiltemann |
Reviewers |
OverviewQuestions:Objectives:
What are the factors that affect genome assembly?
How does Genome assembly work?
Requirements:
Perform an optimised Velvet assembly with the Velvet Optimiser
Compare this assembly with those we did in the basic tutorial
Perform an assembly using the SPAdes assembler.
Time estimation: 2 hoursLevel: Introductory IntroductorySupporting Materials:Published: May 24, 2017Last modification: Feb 1, 2024License: Tutorial Content is licensed under Creative Commons Attribution 4.0 International License. The GTN Framework is licensed under MITpurl PURL: https://gxy.io/GTN:T00031rating Rating: 1.5 (2 recent ratings, 9 all time)version Revision: 25
Optimised de Bruijn Graph assemblies using the Velvet Optimiser and SPAdes
In this activity, we will perform de novo assemblies of a short read set using the Velvet Optimiser and the SPAdes assemblers. We are using the Velvet Optimiser for illustrative purposes. For real assembly work, a more suitable assembler should be chosen - such as SPAdes.
The Velvet Optimiser is a script written by Simon Gladman to optimise the k-mer size and coverage cutoff parameters for Velvet. More information can be found in its repository.
SPAdes is a de novo genome assembler written by Pavel Pevzner’s group in St. Petersburg. More details on it can be found on Spades’ website>
AgendaIn this tutorial, we will deal with:
Get the data
We will be using the same data that we used in the introductory tutorial, so if you have already completed that and have the data, skip this section.
Hands-on: Getting the data
Create and name a new history for this tutorial.
To create a new history simply click the new-history icon at the top of the history panel:
Import the sequence read raw data (*.fastq) from Zenodo
https://zenodo.org/record/582600/files/mutant_R1.fastq https://zenodo.org/record/582600/files/mutant_R2.fastq
- Copy the link location
Click galaxy-upload Upload Data at the top of the tool panel
- Select galaxy-wf-edit Paste/Fetch Data
Paste the link(s) into the text field
Press Start
- Close the window
Rename the files galaxy-pencil
- The name of the files are the full URL, let’s make the names a little clearer
- Change the names to just the last part,
Mutant_R1.fastq
,Mutant_R2.fastq
respectively
- Click on the galaxy-pencil pencil icon for the dataset to edit its attributes
- In the central panel, change the Name field
- Click the Save button
Question
- What are four key features of a FASTQ file?
- What is the main difference between a FASTQ and a FASTA file?
Assembly with the Velvet Optimiser
We will perform an assembly with the Velvet Optimiser, which automatically runs and optimises the output of the Velvet assembler (Zerbino and Birney 2008). It will automatically choose a suitable value for the k-mer size (k). It will then go on to optimise the coverage cutoff (cov_cutoff) which corrects for read errors. It will use the “n50” metric for optimising the k-mer size and the “total number of bases in contigs” for optimising the coverage cutoff.
Hands-on: Assemble with the Velvet Optimiser
- Velvet Optimiser tool: Optimise your assembly with the following parameters:
- “Start k-mer size”:
45
- “End k-mer size”:
73
- “Input file type”:
Fastq
- “Single or paired end reads”:
Paired
- param-file “Select first set of reads”:
mutant_R1.fastq
- param-file “Select second set of reads”:
mutant_R2.fastq
Your history will now contain a number of new files:
- Velvet optimiser contigs
- A fasta file of the final assembled contigs
- Velvet optimiser contig stats
- A table of the lengths (in k-mer length) and coverages (k-mer coverages) for the final contigs.
Have a look at each file.
Hands-on: Get contig statistics for Velvet Optimiser contigs
- Fasta Statistics tool: Produce a summary of the velvet optimiser contigs:
- param-file “fasta or multifasta file”: Select your velvet optimiser contigs file
View the output
QuestionCompare the output we got here with the output of the simple assemblies obtained in the introductory tutorial.
- What are the main differences between them?
- Which has a higher “n50”? What does this mean?
Tables of results from (a) Simple assembly and (b) optimised assembly.
- Heuristic Resolution of Repeats and Scaffolding in the Velvet Short-Read de Novo Assembler (Zerbino et al. 2009)
Visualisation of the Assembly
Now that we’ve assembled the genomes, let’s visualise this assembly using Bandage (Wick et al. 2015). This tool will let us better understand how the assembly graph really looks, and can give us a feeling for if the genome was well assembled or not.
Currently VelvetOptimiser does not include the LastGraph output, so we will manually run velveth
and velvetg
with the optimised parameters.
Hands-on: Manually running velvetg/h
Locate the output called “VelvetOptimiser: Contigs” in your history
Click the (i) information icon
Check the tool
stderr
in the information page for the optimised k-mer value
QuestionWhat was the optimal k-mer value? (referred to as “hash” in the stderr log)
55
With this information in hand, let’s run velvet:
Hands-on: Manually running velvetg/h
- velveth tool: Prepare a dataset for the Velvet velvetg Assembler
- “Hash length”:
55
- “Insert Input Files”:
- 1: Input Files
- “file format”:
fastq
- “read type”:
shortPaired reads
- “Dataset”:
mutant_R1.fastq
- “Insert Input Files”:
- 2: Input Files
- “file format”:
fastq
- “read type”:
shortPaired reads
- “Dataset”:
mutant_R2.fastq
- velvetg tool: Velvet sequence assembler for very short reads
- “Velvet dataset”: output from velveth tool
- “Generate velvet LastGraph file”:
Yes
- “Coverage cutoff”:
Specify Cutoff Value
- “Remove nodes with coverage below”:
1.44
- “Using Paired Reads”:
Yes
The LastGraph contains a detailed representation of the De Bruijn graph, which can give us an idea how velvet has assembled the genome and potentially resolved any conflicts.
Hands-on: Bandage
- Bandage Image tool: visualize de novo assembly graphs
- “Graphical Fragment Assembly”: The “LastGraph” output of velvetg tool
- “Produce jpg, png or svg file?”:
.svg
- Execute
- View the output file
And now you should be able to see the graph that velvet produced:
Interpreting Bandage Graphs
k-mer size has a significant effect on the assembly. You can play around with various k-mers to see this effect in practice.
k-mer | graph |
---|---|
21 | |
33 | |
53 | |
77 |
The next thing to be aware of is that there can be multiple valid interpretations of a graph, all equally valid in absence of other data. The following is taken verbatim from Bandage’s wiki:
For a simple case, imagine a bacterial genome that contains a single repeated element in two separate places in the chromosome:
A researcher (who does not yet know the structure of the genome) sequences it, and the resulting 100 bp reads are assembled with a de novo assembler:
Because the repeated element is longer than the sequencing reads, the assembler was not able to reproduce the original genome as a single contig. Rather, three contigs are produced: one for the repeated sequence (even though it occurs twice) and one for each sequence between the repeated elements.
Given only the contigs, the relationship between these sequences is not clear. However, the assembly graph contains additional information which is made apparent in Bandage:
There are two principal underlying sequences compatible with this graph: two separate circular sequences that share a region in common, or a single larger circular sequence with an element that occurs twice:
Additional knowledge, such as information on the approximate size of the bacterial chromosome, can help the researcher to rule out the first alternative. In this way, Bandage has assisted in turning a fragmented assembly of three contigs into a completed genome of one sequence.
Assemble with SPAdes
We will now perform an assembly with the much more modern SPAdes assembler (Bankevich et al. 2012). It goes through a similar process to Velvet in the fact that it uses and simplifies de Bruijn graphs but it uses multiple values for k-mer size and combines the resultant graphs. This combination produces very good assemblies. When using SPAdes it is typical to choose at least 3 k-mer sizes. One low, one medium and one high. We will use 33, 55 and 91.
Hands-on: Assemble with SPAdes
SPAdes tool: Assemble the reads:
- “Run only assembly”:
yes
- “K-mers to use separated by commas”:
33,55,91
[note: no spaces!]- “Coverage cutoff”:
auto
- param-file “Files -> forward reads”:
mutant_R1.fastq
- param-file “Files -> reverse reads”:
mutant_R2.fastq
- “Output final assembly graph with scaffolds?”:
Yes
You will now have 5 new files in your history:
- two Fasta files, one for contigs and one for scaffolds
- two statistics files, one for contigs and one for scaffolds
- the SPAdes log file.
Examine each file, especially the stats files.
Question
- Why would one of the contigs have much higher coverage than the others?
- What could this represent?
Hands-on: Visualize assembly with Bandage
- Bandage tool with the following parameters:
- “Graphical Fragment Assembly”:
assembly graph with scaffolds
output from SPAdes tool- Examine the output image galaxy-eye
The visualized assembly should look something like this:
QuestionWhich assembly looks better to you? Why?
Hands-on: Get contig statistics for SPAdes contigs
- Fasta Statistics tool: Produce a summary of the SPAdes contigs:
- param-file “fasta or multifasta file”: Select your velvet optimiser contigs file
Look at the output file.
QuestionCompare the output we got here with the output of the simple assemblies obtained in the introductory tutorial.
- What are the main differences between them?
- Did SPAdes produce a better assembly than the Velvet Optimiser?