[BioC] summarizeOverlaps using GRanges or bed file as reads?
Ryan
rct at thompsonclan.org
Tue Apr 15 19:25:06 CEST 2014
Thanks! This is exactly what I wanted.
On Tue Apr 15 09:24:27 2014, Valerie Obenchain wrote:
> Methods for 'reads' as 'GRanges' and 'GRangesList' have been added to
> GenomicAlignments 1.1.1.
>
> Valerie
>
> On 04/14/2014 11:35 PM, Martin Morgan wrote:
>> On 04/14/2014 06:08 PM, Ryan C. Thompson wrote:
>>> Hello,
>>>
>>> I would like to manipulate the start and end positions of my reads
>>> before
>>> calling summarizeOverlaps. One way to do this is to convert my reads
>>> to a
>>> GRanges and then use flank, narrow, etc. to properly position the read
>>> ends
>>> where I want them. However, I don't see a method for summarizeOverlaps
>>> that
>>> accepts a GRanges object or bed file or similar for the reads. Is
>>> there such a
>>> method, and if not, would it be possible to add it?
>>>
>>> The specific application I have in mind is single-end ChIP-Seq reads,
>>> where we
>>> have a good idea of what the fragment length is and would like to
>>> extend the
>>> reads to this length. Alternately, it may be preferable to count
>>> only the
>>> 5-prime ends of the read, and this could be done by narrowing to 1 bp
>>> length.
>>
>>
>> if bam is 'bed file or similar' then... summarizeOverlaps can take an
>> arbitrary function as it's 'mode' argument, as documented on
>> ?summarizeOverlaps
>>
>> ## The 'mode' argument can take a custom count function whose
>> ## arguments are the same as those in the current counting modes
>> ## (i.e., Union, IntersectionNotEmpty, IntersectionStrict).
>> ## In this example records are filtered by map quality before
>> counting.
>>
>> mapq_filter <- function(features, reads, ignore.strand,
>> inter.feature) {
>> require(GenomicAlignments) # needed for parallel evaluation
>> Union(features, reads[mcols(reads)$mapq >= 20],
>> ignore.strand=ignore.strand,
>> inter.feature=inter.feature)
>> }
>>
>> genes <- GRanges("seq1", IRanges(seq(1, 1500, by=200), width=100))
>> param <- ScanBamParam(what="mapq")
>> fl <- system.file("extdata", "ex1.bam", package="Rsamtools")
>> se <- summarizeOverlaps(genes, fl, mode=mapq_filter, param=param)
>> assays(se)$counts
>>
>> ## The count function can be completely custom (i.e., not use the
>> ## pre-defined count functions at all). Requirements are that
>> ## the input arguments match the pre-defined modes and the output
>> ## is a vector of counts the same length as 'features'.
>>
>> my_count <- function(features, reads, ignore.strand,
>> inter.feature) {
>> ## perform filtering, or subsetting etc.
>> require(GenomicAlignments) # needed for parallel evaluation
>> countOverlaps(features, reads)
>> }
>>
>> the 'reads' argument is a GAlignments / GAlignmentsList (for single /
>> paired reads) so you could do whatever you'd like to them, so long as
>> your function returns a vector of counts equal to length(features)
>>
>> ryans_count = function(features, reads, ...) {
>> reads = as(reads, "GRanges") ## equivalently (??)
>> granges(reads)
>> width(reads) = 147
>> countOverlaps(features, reads)
>> }
>>
>> I think you're also interested in width of overlaps, so you could
>> implement that in ryans_count, too, e.g., via
>>
>>
>> http://stackoverflow.com/questions/14685802/width-of-the-overlapped-segment-in-genomicranges-package
>>
>>
>>
>> or
>>
>> https://stat.ethz.ch/pipermail/bioconductor/2014-January/056891.html
>>
>> and other parts of that thread, include the late continuation
>>
>> https://stat.ethz.ch/pipermail/bioconductor/2014-March/058620.html
>>
>> (probably need to think through carefully what these are doing).
>>
>> summarizeOverlaps will iterate through a bam file in chunks, so
>> moderating memory use (your function will be called several times).
>>
>> If you have several bam files and a linux / Mac, load the BiocParallel
>> package and it'll distribute one bam file to each processor. If memory
>> becomes a problem use BamFileList(your_files, yieldSize=500000) or
>> similar to reduce the size of each chunk (the default yield size is I
>> think 1,000,000).
>>
>>
>> A newer approach is to build a tool of your own using the bed / wig
>> reader functions in rtracklayer with GenomicRanges::tileGenome to create
>> large-ish chunks of file to process, followed by, e.g.,
>> GenomicFiles::reduceByFile to MAP from the file to count in each tile,
>> and REDUCE to summarize counts within a file; the vignette outlines this
>> approach for several case studies (though not for counting reads
>> overlapping ranges -- I'm sure a worked example using, e.g.,
>>
>>
>> http://bioconductor.org/packages/release/data/experiment/html/RNAseqData.HNRNPC.bam.chr14.html
>>
>>
>>
>> would be appreciated).
>>
>>
>> Martin
>>
>>>
>>> -Ryan Thompson
>>>
>>> _______________________________________________
>>> Bioconductor mailing list
>>> Bioconductor at r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>>> Search the archives:
>>> http://news.gmane.org/gmane.science.biology.informatics.conductor
>>
>>
>
More information about the Bioconductor
mailing list