SAMtools is a suite of commands for dealing with databases of mapped reads. You'll be using it quite a bit throughout the course. It includes programs for performing variant calling (mpileup-bcftools).
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. If you wish to start this tutorial without completing the Mapping Tutorial, see the bottom section of this page for information about downloading canned data.
We assume that you are still working in the main directory called mapping data that you created on $SCRATCH.
Check if SAMtools is loaded and if not Load the SAMtools module.
Remember we use the the base command "
|
Can you figure out what version of samtools is loaded on TACC and where it is installed?
samtools which samtools |
Since the $SCRATCH directory on lonestar is effectively infinite for our purposes, we're going to copy the relevant files from our mapping tutorial into a new directory for this tutorial. This should help you identify what files came from what tutorial if you look back at it in the future. Let's copy over just the read alignment file in the SAM format and the reference genome in FASTA format to a new directory called samtools_tutorial.
cds mkdir samtools_tutorial cd samtools_tutorial cp $SCRATCH/bowtie2MappingTutorial/bowtie2/SRR030257.sam . cp $SCRATCH/bowtie2MappingTutorial/bowtie2/NC_012967.1.fasta . |
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.)
samtools faidx NC_012967.1.fasta |
Take a look at the new *.fai file that was created by this command see if you have any idea what some of the numbers mean.
less NC_012967.1.fasta.fai # can exit with "q" |
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.
The following 3 commands are used to convert from SAM to BAM format, sort the BAM file, and index the BAM file. As each command requires the previous command to have been completed it makes more sense to run them on an iDEV node. If you want to submit them to the queue, separate them with a ";" to ensure that they run sequentially on the same node. Under no circumstances should you run this on the head node.
Many commands past this point are computationally intensive. You should run them through an
|
Examine the output of the previous commands to get an idea of whats going on. Here are some prompts of how to do that:
|
Samtools appends an extra .bam to whatever we put here, so it would have created SRR030257.sorted.bam.bam, and then we would have had to make a joke about the Flintstones. |
Sure enough, it's the index file for the BAM file. |
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. |
Now we use the mpileup command from samtools to compile information about the bases mapped to each reference position. The output is a BCF file. This is a binary form of the text Variant Call Format (VCF).
samtools mpileup -u -f NC_012967.1.fasta SRR030257.sorted.bam > SRR030257.bcf |
What are all the options doing?
The samtools mpileup command will take a few minutes to run. You might consider putting it in the background by pressing control-z and then typing the command bg so that you can do some other things in this terminal window at the same time – like starting to run variant calling on the BWA or bowtie mapping results. Remember, there are still many other processors available on this node!
Convert BCF to human-readable VCF:
bcftools view -v -c -g SRR030257.bcf > SRR030257.vcf |
What are these options doing?
Take a look at the samtools_bowtie2/SRR030257.vcf file using less. It has a nice header explaining what the columns mean. Below this are the rows of data describing potential genetic variants.
Follow the same directions to call variants in the BWA or Bowtie mapped reads.
Just be sure you don't write over your old files. Maybe create new directories like samtools_bwa and samtools_bowtie for the output in each case.
You could also try running all of the commands from inside of the samtools_bwa directory, just for a change of pace.
VCF format has alternative Allele Frequency tags denoted by AF1. Try the following command to see what values we have in our files.
grep AF1 samtools_bowtie2/SRR030257.vcf |
Optional: For the data we are dealing with, predictions with an allele frequency not equal to 1 are not really applicable. (The reference genome is haploid. There aren't any heterozygotes.) How can we remove these lines from the file?
What does the -v flag do in grep?
|
Is not practical, since we will lose vital VCF formatting and may not be able to use this file in the future.
Will preserve all lines that don't have a AF1=0 value and is one way of doing this.
Is a way of doing it in-line and not requiring you to make another file. (But it writes over your existing file!) |
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 if you generated VCF files for each one.
Set up a new output directory and copy the respective VCF files to it, renaming them so that we know where they came from:
mkdir comparison cp samtools_bowtie2/SRR030257.vcf comparison/bowtie2.vcf cp samtools_bwa/SRR030257.vcf comparison/bwa.vcf cp samtools_bowtie/SRR030257.vcf comparison/bowtie.vcf cd comparison |
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 to the end of a command will pipe the output that is to the terminal into a file, so that you can save it.
Load Bedtools.
Finding common mutations.
Finding mutations that are unique for each mapper.
|
If you do not have the output from the Mapping tutorial, run these commands to copy over the output that would have been produced. Then, you can immediately start this tutorial!
|