Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Right now, we'll be using it to call variants (find mutations) in the re-sequenced E. coli genome from the Mapping tutorial. You will need the output SAM files from that tutorial to continue here. We assume that you are still in the main directory of intro_to_mapping data that you copied to $SCRATCH.

Load SAMtools

Load the SAMtools module (if not already loaded):.

Expand
I want to copy-paste...
I want to copy-paste...
Code Block

module load samtools

What Can you figure out what version of samtools is loaded on TACC ?Create a new output directoryand where it is installed?

Expand
No, give me the commands...
No, give me the commands...

This should work:

Code Block

mkdir
samtools
which samtools

Prepare your directories

Create a new output directory called samtools_bowtie

...

or whatever makes sense to you.

Let's copy over the read alignment file in the SAM format and the reference genome in FASTA format to the new directory, so that we don't have so many files cluttering our space.

Expand
Commands for doing this if you've been following the tutorials...
Commands for doing this if you've been following the tutorials...
Code Block

mdkdir samtools_bowtie
cp bowtie/SRR030257.sam samtools_bowtie
cp NC_012967.1.fasta samtools_bowtie

Index the FASTA reference file

First, you need to index the reference file. (This isn't indexing it for read mapping. It's indexing it so that SAMtools can quickly jump to a certain base in the reference.)

...

Take a look at the new *.fai file that was created by this command. Any idea what some of the numbers mean?

Expand
For example, by using this command...
For example, by using this command...
Code Block

less samtools_bowtie/NC_012967.1.fasta.fai

Hint: Type q to exit less.

Convert mapped reads from SAM to BAM, sort, and index

SAM is a text file, so it is slow to access information about how any given read was mapped. SAMtools and many of the commands that we will run later work on BAM files (essentially GZIP compressed binary forms of the text SAM files). These can be loaded much more quickly. Typically, they also need to be sorted, so that when the program wants to look at all reads overlapping position 4,129,888, it can easily find them all at once without having to search through the entire BAM file.

...

Code Block
samtools sort samtools_bowtie/SRR030257.bam samtools_bowtie/SRR030257.sorted
samtools index samtools_bowtie/SRR030257.sorted.bam

This is a really common sequence of commands, so you might want to add it to your personal cheat sheet.

  • What new files were created by these commands?
  • Why didn't we name the output SRR030257.sorted.bam in the sort command?
  • Can you guess what a *.bai file is?

Hint: You might be tempted to gzip BAM files when copying them from one computer to another. Don't bother! They are already internally compressed, so you won't be able to shrink the file. On the other hand, compressing SAM files will save a fair bit of space.

Call genome variants

Now we use the mpileup command from samtools to compile information about the bases mapped to each reference position.

Output BCF file. This is a binary form of the text Variant Call Format (VCF).

Code Block
samtools mpileup -u -f samtools_bowtie/NC_012967.1.fasta  samtools_bowtie/SRR030257.sorted.bam > samtools_bowtie/SRR030257.bcf

What are all the options doing?

Convert BCF to human-readable VCF:

Code Block
bcftools view -v -c -g samtools_bowtie/SRR030257.bcf > samtools_bowtie/SRR030257.vcf

What are these options doing?

Take a look at this the samtools_bowtie/SRR030257.vcf file. It has a nice header explaining what the columns mean.

Exercise

...

VCF format has alternative Allele Frequency tags denoted by AF1. Try the following command to see what values we have in our files.

Code Block
grep AF1 samtools_bowtie/SRR030257.vcf

Optional: For the data we are dealing with, predictions with an allele frequency not equal to 1 are not really applicable here. (The reference genome is haploid. There aren't any heterozygotes.) How can we remove these lines from the file and continue on?

Expand
Hint...
Hint...

What does the -v flag do in grep?

Code Block
grep -v *something*
Expand
Solution...
Solution...
Code Block
cat input.vcf | grep AF1=1 > output.vcf

Is not practical, since we will lose vital VCF formatting and may not be able to use this file in the future.

Code Block
cat input.vcf | grep -v AF1=0 > output.vcf

Will preserve all lines that don't have a AF1=0 value and is one way of doing this.

Code Block
sed -i '/AF1=0/ d' input.vcf

Is a way of doing it in-line and not requiring you to make another file. (But it writes over your existing file!)

Calling variants in reads mapped by BWA or Bowtie2

Follow the same directions to call variants in the BWA -or Bowtie2 mapped reads.

Just be sure you don't write over your old files. Maybe create another new directory:

...

new directories like samtools_bwa

...

and samtools_bowtie2.

You could also try running all of the commands from inside of the samtools_bwa directory, just for a change of pace.

Comparing the results of different mappers

Often you want to compare the results of variant calling on different samples or using different pipelines. Bedtools is a suite of utility programs that work on a variety of file formats, one of which is conveniently VCF format. It provides many ways of slicing, dicing, and comparing the information in VCF files. For example, we can use it to find out what predictions are the same and which are different from the variant calling on reads mapped with different programs.

Set up a new output directory and copy the respective VCF files to it., renaming them so that we know where they came from:

Code Block
mkdir comparison
cp samtools_bowtie/SRR030257.vcf comparison/bowtie.vcf
cp samtools_bwa/SRR030257.vcf comparison/bwa.vcf
cd comparison

Bedtools is a suite of utility programs that work on a variety of file formats, one of which is conveniently VCF format. Using intersectBed and subtractBed Use the subcommands bedtools intersect and bedtools subtract we can find equal and different predictions between mappers. Try to figure out how to to do this on your own first. Hint: Remember that adding > output.vcf

Expand
I'm stuck? Show me the commands...
I'm stuck? Show me the commands...

Load Bedtools.

Code Block

module load bedtools

Finding common mutations.

Code Block

intersectBed
bedtools intersect -a bowtie.vcf -b bwa.vcf > common_bowtie_bwa.vcf

Finding mutations that are unique for each mapper.

Code Block

subtractBed
bedtools subtract -a bowtie.vcf -b common_bowtie_bwa.vcf > unique_bowtie.vcf
subtractBed
bedtools subtract -a bwa.vcf -b common_bowtie_bwa.vcf > unique_bwa.vcf

Exercises

  • Which mapper finds more variants?
  • Can you figure out how to filter the VCF files on various criteria, like coverage, quality, ... ?
  • How many high quality mutations are there in these E. coli samples relative to the reference genome?

...

Look at how the reads supporting these variants were aligned to the reference genome by continuing in the Integrative Genomics Viewer (IGV) tutorial.