### R代码从vignette源'Streamer。Rnw ' ################################################### ### 代码块1号:负载包 ################################################### 库(GenomicAlignments)库(拖缆 ) ################################################### ### 代码块2号:BamInput类 ################################################### . BamInput < - setRefClass(“BamInput”,包含=“制片人”字段=列表(文件=“字符”,范围=“农庄”,.seqNames = "性格")).BamInput美元方法(收益率= function(){“收益率数据从本文件“如果(verbose)味精(“BamInput .yield美元())如果(长度(.self .seqNames美元)){seq < - .self美元。seqNames [1] .self美元。seqNames <- .self$。seqNames[-1] idx <- as.character(seqNames (.self$ranges)) == seq param <- ScanBamParam(which=。self$ranges[idx], what=character()) aln <- readGAlignments(。自美元文件,参数=参数)seqlevels (aln) < - seq}其他{aln < - GAlignments ()} (aln列表 ) }) ################################################### ### 代码块3号:BamInput构造函数 ################################################### BamInput < -函数(文件、范围…){.seqNames < -名字(scanBamHeader(文件)[[1]]美元目标).BamInput新美元(=文件范围=范围,.seqNames =。seqNames , ...) } ################################################### ### 代码块4号:CountGOverlap类 ################################################### . CountGOverlap < - setRefClass(“CountGOverlap”,包含=“消费者”字段=列表(范围=“农庄”,模式=“字符”,ignore.strand="logical")) . countgoverlap $methods(yield=function(){"返回命中数" if(verbose) msg(". countgot $yield()") aln <- callSuper()[[1]] df <- DataFrame(hits=numeric(0)) if(length(aln)) {idx <- as.character(seqnames(.self$ranges)) == levels(rname(aln)) which <- .self$ranges[idx] olap <- summarizeOverlaps(which, aln, mode=。self$mode, ignore.strand=.self$ignore.strand) df <- as(assays(olap)[[1]], "DataFrame") dimnames(df) <- list(rownames(olap), seqlevels(aln))} df}) CountGOverlap <- function(ranges, mode = c("Union", "IntersectionStrict", "IntersectionNotEmpty"),忽略。strand= FALSE,…){values(ranges)$pos <- seq_len(length(ranges))) . countgoverlap $new(ranges=ranges, mode=mode, ignore.strand=ignore。链 , ...) } ################################################### ### 代码块5号:BAM文件和范围 ################################################### galn_file < -系统。文件(“extdata”,”丈夫说。bam”,包= " Rsamtools”)gr < -农庄(seqnames = Rle (c(“seq2”、“seq2”,“seq2”,“seq1”),c(1、3、2、4)),范围= IRanges(代表(10,1),宽度= 1:10,名字=头(信件、10)),链= Rle(链(代表(“+”,5)),c(1、2、2、3、2)),得分= 1:10,GC = seq(1 0长度= 10))bam < - BamInput(文件= galn_file范围= gr) olap < - CountGOverlap(范围= gr模式=“IntersectionNotEmpty”)s < -流(bam, olap)收益率(s ) ################################################### ### 代码块6号:重叠计数器 ################################################### overlapCounter < -函数(公关、cs) {s < -流(公关、cs) len <长度(水平(seqnames(公关范围美元)))lst < -向量(“列表”,len)(我在1:len) {lst[[我]]< -收益率(s)的名字(lst[[我]])< -“计数”}。call(rbind, lst)[names(cs$ranges),,drop=FALSE]} bam <- BamInput(file = galn_file, ranges=gr) olap <- CountGOverlap(ranges=gr, mode="IntersectionNotEmpty") overlapCounter(bam, olap)