### R code from vignette source 'tutorial.Rnw'

###################################################
### chunk number 1: setup
###################################################
options(width=50)


###################################################
### chunk number 2: chipseq-cstest
###################################################
library(chipseq)
data(cstest)
names(cstest)
head(cstest$ctcf, 1)


###################################################
### chunk number 3: chipseq-estimate.mean.fraglen eval=FALSE
###################################################
## fraglen <- 
##   estimate.mean.fraglen(cstest$ctcf, 
##                         method = "correlation",
##                         seqLen = 35)


###################################################
### chunk number 4: chipseq-estimate.mean.fraglen
###################################################
library(lazycache)
cache(fraglen = 
      estimate.mean.fraglen(cstest$ctcf, 
                            method = "correlation", 
                            seqLen = 35))


###################################################
### chunk number 5: chipseq-fraglen
###################################################
fraglen
median(fraglen)


###################################################
### chunk number 6: chipseq-resize
###################################################
ctcf.ext <- resize(cstest$ctcf, 
                   width = median(fraglen))
head(ctcf.ext, 3)


###################################################
### chunk number 7: chipseq-coverage
###################################################
cov.ctcf <- coverage(ctcf.ext)
cov.ctcf$chr10


###################################################
### chunk number 8: chipseq-slice
###################################################
islands <- slice(cov.ctcf, lower = 1)
head(islands$chr10, 3)


###################################################
### chunk number 9: chipseq-slice-peaks
###################################################
peak_viewsList <- slice(cov.ctcf, lower = 8)
peak_rangesList <- ranges(peak_viewsList)
peaks <- as(peak_rangesList, "GRanges")
head(peaks, 3)


###################################################
### chunk number 10: findPeaks
###################################################
findPeaks <- function(reads) {
  fraglen <- estimate.mean.fraglen(reads, 
                                   method = "correlation", 
                                   seqLen = 35)
  reads_ext <- resize(reads, fraglen)
  cov <- coverage(reads_ext)
  slice(cov, lower = 8)
}


###################################################
### chunk number 11: chipseq-viewMaxs
###################################################
values(peaks)$max <- 
  unlist(viewMaxs(peak_viewsList))


###################################################
### chunk number 12: chipseq-viewSums
###################################################
values(peaks)$sum <- 
  unlist(viewSums(peak_viewsList))


###################################################
### chunk number 13: chipseq-viewRangeMaxs
###################################################
values(peaks)$summits <- 
  unlist(viewRangeMaxs(peak_viewsList))


###################################################
### chunk number 14: chipseq-promoters
###################################################
library(TxDb.Mmusculus.UCSC.mm9.knownGene)
mm9_tx <- transcripts(Mmusculus_UCSC_mm9_knownGene_TxDb,
                      columns = "gene_id")


###################################################
### chunk number 15: chipseq-gene-id
###################################################
gene_id <- values(mm9_tx)$gene_id
all(elementLengths(gene_id) <= 1)
flat_gene_id <- character(length(mm9_tx))
flat_gene_id[elementLengths(gene_id) == 1] <- 
  unlist(gene_id)
values(mm9_tx)$gene_id <- flat_gene_id


###################################################
### chunk number 16: chipseq-promoters
###################################################
promoters <- resize(flank(mm9_tx, 500), 700)


###################################################
### chunk number 17: chipseq-promoters-in
###################################################
values(peaks)$in_promoter <- peaks %in% promoters
table(values(peaks)$in_promoter)


###################################################
### chunk number 18: chipseq-promoters-match
###################################################
values(peaks)$in_promoter_of <- 
  values(promoters)$gene_id[match(peaks, promoters)]
head(subset(values(peaks), in_promoter)$in_promoter_of, 3)


###################################################
### chunk number 19: chipseq-all-peaks eval=FALSE
###################################################
## ctcf_peaks <- findPeaks(cstest$ctcf)
## gfp_peaks <- findPeaks(cstest$gfp)


###################################################
### chunk number 20: chipseq-all-peaks-real
###################################################
lazycache::cache(ctcf_peaks = findPeaks(cstest$ctcf))
lazycache::cache(gfp_peaks = findPeaks(cstest$gfp))


###################################################
### chunk number 21: chipseq-diffPeakSummary
###################################################
peak_summary <- diffPeakSummary(ctcf_peaks, gfp_peaks)
colnames(peak_summary)


###################################################
### chunk number 22: chipseq-SummarizedExperiment
###################################################
peak_summary_gr <- as(ranges(peak_summary), "GRanges")
max_matrix <- with(peak_summary, cbind(maxs1, maxs2))
SummarizedExperiment(max_matrix, rowData = peak_summary_gr)


###################################################
### chunk number 23: rnaseq-readGappedAlignments
###################################################
library(leeBamViews)
bams <- dir(system.file("bam", package="leeBamViews"), 
            full = TRUE, pattern = "bam$")
reads_ga <- readGappedAlignments(bams[1])
head(reads_ga, 1)


###################################################
### chunk number 24: rnaseq-grglist
###################################################
reads_grl <- grglist(reads_ga)


###################################################
### chunk number 25: rnaseq-transcripts
###################################################
data(leeUnn)
leeUnn <- 
  subset(leeUnn, lengthWithoutMask > 0 & !is.na(chr))
leeUnn$strand <- c("-", "*", "+")[leeUnn$strand + 2]
sc2_tx <- with(leeUnn, 
               GRanges(sprintf("Scchr%02d", chr), 
                       IRanges(start, end), strand))
seqlevels(sc2_tx)[length(seqlevels(sc2_tx))] <- "Scmito"


###################################################
### chunk number 26: rnaseq-count-exons
###################################################
values(sc2_tx)$counts <- 
  countOverlaps(sc2_tx, reads_grl, ignore.strand = TRUE)


###################################################
### chunk number 27: rnaseq-junctions
###################################################
ol <- findOverlaps(reads_grl, sc2_tx, 
                   ignore.strand = TRUE)
reads_factor <- factor(queryHits(ol), 
                       seq_len(length(reads_grl)))
values(reads_grl)$tx_hits <- 
  split(subjectHits(ol), reads_factor)
head(table(elementLengths(values(reads_grl)$exon_hits)))


