It looks like you're new here. If you want to get involved, click one of these buttons!
Geraldine_VdAuwera
Posts: 2,239Administrator, GSA Official Member admin
Reads can be filtered out of traversals by either pileup size through one of our downsampling methods or by read property through our read filtering mechanism. Both techniques and described below.
Normal sequencing and alignment protocols can often yield pileups with vast numbers of reads aligned to a single section of the genome in otherwise well-behaved datasets. Because of the frequency of these 'speed bumps', the GATK now downsamples pileup data unless explicitly overridden.
The GATK's default downsampler exhibits the following properties:
The downsampler treats data from each sample independently, so that high coverage in one sample won't negatively impact calling in other samples.
The downsampler attempts to downsample uniformly across the range spanned by the reads in the pileup.
The downsampler's memory consumption is proportional to the sampled coverage depth rather than the full coverage depth.
By default, the downsampler is limited to 1000 reads per sample. This value can be adjusted either per-walker or per-run.
From the command line:
To disable the downsampler, specify -dt NONE.
To change the default coverage per-sample, specify the desired coverage to the -dcov option.
To modify the walker's default behavior:
by=<value>. Override the downsampling depth by changing the toCoverage=<value>.The downsampler algorithm is designed to maintain uniform coverage while preserving a low memory footprint in regions of especially deep data. Given an already established pileup, a single-base locus, and a pile of reads with an alignment start of single-base locus + 1, the outline of the algorithm is as follows:
For each sample:
Select reads with the next alignment start.
While the number of existing reads + the number of incoming reads is greater than the target sample size:
Walk backward through each set of reads having the same alignment start. If the count of reads having the same alignment start is > 1, throw out one randomly selected read.
If we have n slots avaiable where n is >= 1, randomly select n of the incoming reads and add them to the pileup.
Otherwise, we have zero slots available. Choose the read from the existing pileup with the least alignment start. Throw it out and add one randomly selected read from the new pileup.
To selectively filter out reads before they reach your walker, implement one or multiple net.sf.picard.filter.SamRecordFilter, and attach it to your walker as follows:
@ReadFilters({Platform454Filter.class, ZeroMappingQualityReadFilter.class})
You can add command-line arguments for filters with the @Argument tag, just as with walkers. Here's an example of our new max read length filter:
public class MaxReadLengthFilter implements SamRecordFilter {
@Argument(fullName = "maxReadLength", shortName = "maxRead", doc="Discard reads with length greater than the specified value", required=false)
private int maxReadLength;
public boolean filterOut(SAMRecord read) { return read.getReadLength() > maxReadLength; }
}
Adding this filter to the top of your walker using the @ReadFilters attribute will add a new required command-line argument, maxReadLength, which will filter reads > maxReadLength before your walker is called.
Note that when you specify a read filter, you need to strip the Filter part of its name off! E.g. in the example above, if you want to use MaxReadLengthFilter, you need to call it like this:
--read_filter MaxReadLength
The --read-filter argument will allow you to apply whatever read filters you'd like to your dataset, before the reads reach your walker. To add the MaxReadLength filter above to PrintReads, you'd add the command line parameters:
--read_filter MaxReadLength --maxReadLength 76
You can add as many filters as you like by using multiple copies of the --read_filter parameter:
--read_filter MaxReadLength --maxReadLength 76 --read_filter ZeroMappingQualityRead
Geraldine Van der Auwera, PhD
Comments
Hi, We are having problems running gatk commands with read filters:
$ java -Xmx50g -jar /software/additional/GenomeAnalysisTK-2.0-39-gd091f72/GenomeAnalysisTK.jar -T RealignerTargetCreator -I /software/additional/GenomeAnalysisTK-2.0-39-gd091f72/resources/exampleBAM.bam -R /software/additional/GenomeAnalysisTK-2.0-39-gd091f72/resources/exampleFASTA.fasta -o testGATK.intervals --read_filter UnmappedReadFilter
ERROR ------------------------------------------------------------------------------------------
ERROR A USER ERROR has occurred (version 2.0-39-gd091f72):
ERROR The invalid arguments or inputs must be corrected before the GATK can proceed
ERROR Please do not post this error to the GATK forum
ERROR
ERROR See the documentation (rerun with -h) for this tool to view allowable command-line arguments.
ERROR Visit our website and forum for extensive documentation and answers to
ERROR commonly asked questions http://www.broadinstitute.org/gatk
ERROR
ERROR MESSAGE: Could not find filter with name: UnmappedReadFilter
ERROR ------------------------------------------------------------------------------------------
Are there other programs etc that we need in our path?
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree Like WTF •Hi Anna, welcome to the forum!
When using read filters, you need to strip the
Filterpart of the name when passing it as an argument. SoUnmappedReadFilteris passed as:Sorry if that is not clear in the documentation, we will add a note to clarify this usage.
Geraldine Van der Auwera, PhD
- Spam
- Abuse
- Troll
0 • Off Topic Disagree Agree Like WTF •