|
25 | 25 | #'
|
26 | 26 | #' @return A dataframe.
|
27 | 27 | #' @importFrom rtracklayer import
|
28 |
| -#' @importFrom Rsamtools indexBam |
| 28 | +#' @importFrom Rsamtools indexBam ScanBamParam |
29 | 29 | #' @importFrom utils read.csv
|
30 |
| -#' @importFrom GenomicAlignments alphabetFrequencyFromBam |
| 30 | +#' @importFrom GenomicAlignments alphabetFrequencyFromBam readGAlignments coverage |
31 | 31 | #' @importFrom GenomicRanges GRanges
|
32 |
| -#' @importFrom IRanges IRanges |
| 32 | +#' @importFrom IRanges IRanges subsetByOverlaps |
33 | 33 | #' @importFrom magrittr %>%
|
34 | 34 | #' @importFrom dplyr select filter
|
35 | 35 | #' @importFrom BiocParallel register MulticoreParam bplapply
|
@@ -170,67 +170,110 @@ LoadTrackFile <- function(track.file, track.folder = NULL, format = c("bam", "wi
|
170 | 170 | stop("Please provide region for visualizing single nucleotide!")
|
171 | 171 | }
|
172 | 172 | } else {
|
173 |
| - # require deeptools |
174 |
| - if (is.null(bamcoverage.path)) { |
175 |
| - bamcoverage.path <- Sys.which("bamCoverage") |
176 |
| - if (bamcoverage.path == "") { |
177 |
| - stop("Can not find bamCoverage automatically, please specify the path!") |
178 |
| - } |
179 |
| - } else { |
180 |
| - bamcoverage.path <- bamcoverage.path |
181 |
| - } |
182 |
| - |
183 | 173 | # get used gr
|
184 | 174 | gr <- PrepareRegion(region = region, gtf.gr = gtf.gr, gene.name = gene.name, gene.name.type = gene.name.type, extend = extend)
|
185 |
| - # read track file |
186 |
| - if (is.null(n.cores) || n.cores == 1) { |
187 |
| - track.list <- lapply(track.file, function(x) { |
188 |
| - # get basename |
189 |
| - track.file.base <- basename(x) |
190 |
| - # bigwig file |
191 |
| - out.bw.file <- tempfile(fileext = c(".bw")) |
192 |
| - # prepare bamCoverage cmd |
193 |
| - bamcoverage.cmd <- paste( |
194 |
| - bamcoverage.path, "-b", x, "-o", out.bw.file, |
195 |
| - "--binSize", bin.size, "--normalizeUsing", norm.method, bc.extra.para |
196 |
| - ) |
197 |
| - # run command |
198 |
| - message(paste("Calling bamCoverage: ", bamcoverage.cmd)) |
199 |
| - bamcoverage.status <- system(bamcoverage.cmd, intern = TRUE) |
200 |
| - bamcoverage.status.code <- attr(bamcoverage.status, "status") |
201 |
| - if (!is.null(bamcoverage.status.code)) { |
202 |
| - stop("Run bamCoverage error!") |
203 |
| - } |
204 |
| - # import wig, bigwig and bedgraph file |
205 |
| - single.track.df <- as.data.frame(rtracklayer::import(out.bw.file, which = gr)) |
206 |
| - single.track.df$TrackFile <- track.file.base |
207 |
| - return(single.track.df) |
208 |
| - }) |
| 175 | + if (norm.method == "None") { |
| 176 | + message("Calculate coverage with GenomicAlignments when norm.method is None!") |
| 177 | + if (is.null(n.cores) || n.cores == 1) { |
| 178 | + track.list <- lapply(track.file, function(x) { |
| 179 | + # get basename |
| 180 | + track.file.base <- basename(x) |
| 181 | + # load track |
| 182 | + param <- Rsamtools::ScanBamParam(which = gr) |
| 183 | + ga <- GenomicAlignments::readGAlignments(x, param = param) |
| 184 | + ga.cov <- GenomicAlignments::coverage(ga) |
| 185 | + ga.cov.gr <- GenomicRanges::GRanges(ga.cov) |
| 186 | + ga.cov.df <- GenomicRanges::subsetByOverlaps(ga.cov.gr, gr) %>% as.data.frame() |
| 187 | + # valid the region |
| 188 | + gr.df <- as.data.frame(gr) |
| 189 | + ga.cov.df[1, "start"] <- gr.df[1, "start"] |
| 190 | + ga.cov.df[nrow(ga.cov.df), "end"] <- gr.df[1, "end"] |
| 191 | + # add track file |
| 192 | + ga.cov.df$TrackFile <- track.file.base |
| 193 | + return(ga.cov.df) |
| 194 | + }) |
| 195 | + } else { |
| 196 | + # register |
| 197 | + BiocParallel::register(BiocParallel::MulticoreParam(workers = n.cores), default = TRUE) |
| 198 | + track.list <- BiocParallel::bplapply(track.file, BPPARAM = BiocParallel::MulticoreParam(), FUN = function(x) { |
| 199 | + # get basename |
| 200 | + track.file.base <- basename(x) |
| 201 | + # load track |
| 202 | + param <- Rsamtools::ScanBamParam(which = gr) |
| 203 | + ga <- GenomicAlignments::readGAlignments(x, param = param) |
| 204 | + ga.cov <- GenomicAlignments::coverage(ga) |
| 205 | + ga.cov.gr <- GenomicRanges::GRanges(ga.cov) |
| 206 | + ga.cov.df <- GenomicRanges::subsetByOverlaps(ga.cov.gr, gr) %>% as.data.frame() |
| 207 | + # valid the region |
| 208 | + gr.df <- as.data.frame(gr) |
| 209 | + ga.cov.df[1, "start"] <- gr.df[1, "start"] |
| 210 | + ga.cov.df[nrow(ga.cov.df), "end"] <- gr.df[1, "end"] |
| 211 | + # add track file |
| 212 | + ga.cov.df$TrackFile <- track.file.base |
| 213 | + return(ga.cov.df) |
| 214 | + }) |
| 215 | + } |
209 | 216 | } else {
|
210 |
| - # register |
211 |
| - BiocParallel::register(BiocParallel::MulticoreParam(workers = n.cores), default = TRUE) |
212 |
| - track.list <- BiocParallel::bplapply(track.file, BPPARAM = BiocParallel::MulticoreParam(), FUN = function(x) { |
213 |
| - # get basename |
214 |
| - track.file.base <- basename(x) |
215 |
| - # bigwig file |
216 |
| - out.bw.file <- tempfile(fileext = c(".bw")) |
217 |
| - # prepare bamCoverage cmd |
218 |
| - bamcoverage.cmd <- paste( |
219 |
| - bamcoverage.path, "-b", x, "-o", out.bw.file, |
220 |
| - "--binSize", bin.size, "--normalizeUsing", norm.method, bc.extra.para |
221 |
| - ) |
222 |
| - # run command |
223 |
| - message(paste("Calling bamCoverage: ", bamcoverage.cmd)) |
224 |
| - bamcoverage.status <- system(bamcoverage.cmd, intern = TRUE) |
225 |
| - bamcoverage.status.code <- attr(bamcoverage.status, "status") |
226 |
| - if (!is.null(bamcoverage.status.code)) { |
227 |
| - stop("Run bamCoverage error!") |
| 217 | + message("Calculate coverage with bamCoverage when norm.method is not None!") |
| 218 | + # require deeptools |
| 219 | + if (is.null(bamcoverage.path)) { |
| 220 | + bamcoverage.path <- Sys.which("bamCoverage") |
| 221 | + if (bamcoverage.path == "") { |
| 222 | + stop("Can not find bamCoverage automatically, please specify the path!") |
228 | 223 | }
|
229 |
| - # import wig, bigwig and bedgraph file |
230 |
| - single.track.df <- as.data.frame(rtracklayer::import(out.bw.file, which = gr)) |
231 |
| - single.track.df$TrackFile <- track.file.base |
232 |
| - return(single.track.df) |
233 |
| - }) |
| 224 | + } else { |
| 225 | + bamcoverage.path <- bamcoverage.path |
| 226 | + } |
| 227 | + # read track file |
| 228 | + if (is.null(n.cores) || n.cores == 1) { |
| 229 | + track.list <- lapply(track.file, function(x) { |
| 230 | + # get basename |
| 231 | + track.file.base <- basename(x) |
| 232 | + # bigwig file |
| 233 | + out.bw.file <- tempfile(fileext = c(".bw")) |
| 234 | + # prepare bamCoverage cmd |
| 235 | + bamcoverage.cmd <- paste( |
| 236 | + bamcoverage.path, "-b", x, "-o", out.bw.file, |
| 237 | + "--binSize", bin.size, "--normalizeUsing", norm.method, bc.extra.para |
| 238 | + ) |
| 239 | + # run command |
| 240 | + message(paste("Calling bamCoverage: ", bamcoverage.cmd)) |
| 241 | + bamcoverage.status <- system(bamcoverage.cmd, intern = TRUE) |
| 242 | + bamcoverage.status.code <- attr(bamcoverage.status, "status") |
| 243 | + if (!is.null(bamcoverage.status.code)) { |
| 244 | + stop("Run bamCoverage error!") |
| 245 | + } |
| 246 | + # import wig, bigwig and bedgraph file |
| 247 | + single.track.df <- as.data.frame(rtracklayer::import(out.bw.file, which = gr)) |
| 248 | + single.track.df$TrackFile <- track.file.base |
| 249 | + return(single.track.df) |
| 250 | + }) |
| 251 | + } else { |
| 252 | + # register |
| 253 | + BiocParallel::register(BiocParallel::MulticoreParam(workers = n.cores), default = TRUE) |
| 254 | + track.list <- BiocParallel::bplapply(track.file, BPPARAM = BiocParallel::MulticoreParam(), FUN = function(x) { |
| 255 | + # get basename |
| 256 | + track.file.base <- basename(x) |
| 257 | + # bigwig file |
| 258 | + out.bw.file <- tempfile(fileext = c(".bw")) |
| 259 | + # prepare bamCoverage cmd |
| 260 | + bamcoverage.cmd <- paste( |
| 261 | + bamcoverage.path, "-b", x, "-o", out.bw.file, |
| 262 | + "--binSize", bin.size, "--normalizeUsing", norm.method, bc.extra.para |
| 263 | + ) |
| 264 | + # run command |
| 265 | + message(paste("Calling bamCoverage: ", bamcoverage.cmd)) |
| 266 | + bamcoverage.status <- system(bamcoverage.cmd, intern = TRUE) |
| 267 | + bamcoverage.status.code <- attr(bamcoverage.status, "status") |
| 268 | + if (!is.null(bamcoverage.status.code)) { |
| 269 | + stop("Run bamCoverage error!") |
| 270 | + } |
| 271 | + # import wig, bigwig and bedgraph file |
| 272 | + single.track.df <- as.data.frame(rtracklayer::import(out.bw.file, which = gr)) |
| 273 | + single.track.df$TrackFile <- track.file.base |
| 274 | + return(single.track.df) |
| 275 | + }) |
| 276 | + } |
234 | 277 | }
|
235 | 278 | }
|
236 | 279 | } else if (format == "txt") {
|
|
0 commit comments