## suppressMessages({
## library(Rsamtools)
## library(RUnit)
## })
fl <- system.file(package="Rsamtools", "extdata", "tagfilter.bam")
bf <- BamFile(fl)
msbp <- function(rnames) {
ScanBamParam(which=GRanges(rnames, IRanges(1,10)), what="rname")
}
numrecs <- function(sbp) countBam(fl, param=sbp)[["records"]]
test_notags <- function() {
sbp <- msbp("notags")
bamTagFilter(sbp) <- list(TT="bogus")
res <- numrecs(sbp)
checkIdentical(0L, res)
}
##test_notags()
test_shared_by_multiple_reads <- function() {
sbp <- ScanBamParam(tagFilter=list(AA=c("a", "d")))
res <- numrecs(sbp)
checkIdentical(2L, res)
}
##test_shared_by_multiple_reads()
test_multitags <- function() {
## two reads have AA:A:a or AA:A:d, but only one of the two has
## II:i:45
sbp <- ScanBamParam(tagFilter=list(AA=c("a", "d"), II=45))
res <- numrecs(sbp)
checkIdentical(1L, res)
}
##test_multitags()
test_integer <- function() {
sbp <- msbp("itag")
## exclude all
bamTagFilter(sbp) <- list(II=1)
res <- numrecs(sbp)
checkIdentical(0L, res)
## include 2 discontiguous
bamTagFilter(sbp) <- list(II=c(42, 44))
res <- numrecs(sbp)
checkIdentical(2L, res)
## exception for mismatch
bamTagFilter(sbp) <- list(II="fun")
checkException(numrecs(sbp))
}
##test_integer()
## per the SAM spec, single printable character is different from a
## string
test_single_printable <- function() {
sbp <- msbp("Atag")
## exclude all
bamTagFilter(sbp) <- list(AA="d")
res <- numrecs(sbp)
checkIdentical(0L, res)
## include 2 discontiguous
bamTagFilter(sbp) <- list(AA=c("a", "c"))
res <- numrecs(sbp)
checkIdentical(2L, res)
## exception for mismatch
bamTagFilter(sbp) <- list(AA="fun")
checkException(numrecs(sbp))
}
##test_single_printable()
test_string <- function() {
sbp <- msbp("Ztag")
## exclude all
bamTagFilter(sbp) <- list(ZZ="wok")
res <- numrecs(sbp)
checkIdentical(0L, res)
## include 2 discontiguous
bamTagFilter(sbp) <- list(ZZ=c("woo", "wow"))
res <- numrecs(sbp)
checkIdentical(2L, res)
## exception for mismatch
bamTagFilter(sbp) <- list(ZZ=1)
checkException(numrecs(sbp))
}
##test_string()
## confirm throwing error when user tries to filter on a tag that has
## an unsupported type in the BAM file
test_unsupported_tag_types <- function() {
## floating point type
checkException(countBam(fl, param=ScanBamParam(tagFilter=list(FF=13))))
## hex array
checkException(countBam(fl, param=ScanBamParam(tagFilter=list(HH="foo"))))
## integer or numeric *array*
checkException(countBam(fl, param=ScanBamParam(tagFilter=list(BB="foo"))))
}
##test_unsupported_tag_types()
## Input validation
test_exception_names <- function() {
## Too many letters
checkException(ScanBamParam(tagFilter=list(NNN=1)))
## Too few
checkException(ScanBamParam(tagFilter=list(N=1)))
## No names
checkException(ScanBamParam(tagFilter=list(1)))
}
##test_exception_names()
test_exception_floating_point <- function() {
checkException(ScanBamParam(tagFilter=list(FF=13.001)))
}
##test_exception_floating_point()
test_exception_weird_values <- function() {
checkException(ScanBamParam(tagFilter=list(FF=NULL)))
checkException(ScanBamParam(tagFilter=list(FF=NA)))
## zero-length
checkException(ScanBamParam(tagFilter=list(FF=character())))
## empty string
checkException(ScanBamParam(tagFilter=list(FF="")))
}
##test_exception_weird_values()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.