## ----init, echo=FALSE, results='hide'-----------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  ## comment = "#>",
  error = FALSE,
  warning = FALSE,
  message = FALSE,
  crop = NULL                           # fix vignette rendering based on yihui/knitr#1796 , added also error=FALSE to include_graphics
)
## stopifnot(requireNamespace("htmltools"))
## htmltools::tagList(rmarkdown::html_dependency_font_awesome())

## check the output type
out_type <- knitr::opts_knit$get("rmarkdown.pandoc.to")

## add styling
if (out_type == "html") {
    BiocStyle::markdown()
    ## BiocStyle::markdown(css.files = c('custom.css'))
} else if (out_type == "latex") {
    BiocStyle::latex()
}

## ----init2, echo=FALSE, results='hide'----------------------------------------
library(knitr)

source(system.file("scripts/documentation.R", package="Gviz"))
xtabDetails <- details

addParTable <- function(xtabDetails, class, skip=c("showTitle", "size", "background.title"), add=NULL, out_type="html") {
  Parameters <- data.frame("Display Parameter"=names(xtabDetails[[class]]),
                           "Description"=xtabDetails[[class]], check.names=FALSE)
  if(!is.null(add)) {
    Parameters <- cbind(Parameters, add)
  }
  Parameters <- Parameters[order(Parameters[,1]),]  
  sel <- !Parameters[,1] %in% skip
  Parameters <- Parameters[sel,]
  Parameters[,2] <- gsub("\\\\\\code\\{(.*?)\\}", "`\\1`", Parameters[,2])
  Parameters[,2] <- gsub("\\\\\\link[sS]4[Cc]lass\\{(.*?)\\}", "\\1", Parameters[,2])
  Parameters[,2] <- gsub("\\\\\\link\\{(.*?)\\}", "\\1", Parameters[,2])
  rownames(Parameters) <- NULL
  if (out_type == "html") {
    out <- kable(Parameters) # %>% kable_styling(full_width = FALSE)
  } else if (out_type == "latex") {
    out <- kable(Parameters, format="latex", booktabs=TRUE, longtable=TRUE) # %>% kable_styling(full_width = FALSE, latex_options = "hold_position")
  }
  print(out)
  return(invisible())
}

hasUcscConnection <- !is(try(rtracklayer::browserSession(), silent=TRUE), "try-error")
oto <- options(timeout=5)
hasBiomartConnection <- (!is(try(download.file("http://www.biomart.org", tempfile(), quiet=TRUE)), "try-error") &&
                         !is(try(biomaRt::listMarts(), silent=TRUE), "try-error"))
## hasBiomartConnection <- FALSE
options(timeout=oto)
## ## Uncommenting this helps when the UCSC server has a hickup but still lets you connect:
## hasUcscConnection <- !is(try(rtracklayer::browserSession(), silent=TRUE), "try-error") && !is(try(IdeogramTrack(genome="hg19", chromosome=7), silent=TRUE), "try-error")

## ----loadPackage, cache=FALSE-------------------------------------------------
library(Gviz)

## ----AnnotationTrack----------------------------------------------------------
library(GenomicRanges)
data(cpgIslands)
class(cpgIslands)
chr <- as.character(unique(seqnames(cpgIslands)))
gen <- genome(cpgIslands)
atrack <- AnnotationTrack(cpgIslands, name="CpG")

## ----plotAnnotationTrack, fig.width=7.5, fig.height=0.5-----------------------
plotTracks(atrack)

## ----GenomeAxisTrack----------------------------------------------------------
gtrack <- GenomeAxisTrack()

## ----plotGenomeAxisTrack, fig.width=7.5, fig.height=1.1-----------------------
plotTracks(list(gtrack, atrack))

## ----showIdeogramTrack, eval=FALSE--------------------------------------------
#  itrack <- IdeogramTrack(genome=gen, chromosome=chr)

## ----doIdeogramTrack, echo=FALSE, results='hide'------------------------------
if(hasUcscConnection){
    itrack <- IdeogramTrack(genome=gen, chromosome=chr)
}else{
    data(itrack)
}

## ----plotIdeogramTrack, fig.width=7.5, fig.height=1.5-------------------------
plotTracks(list(itrack, gtrack, atrack))

## ----GeneRegionTrack, fig.width=7.5, fig.height=3-----------------------------
data(geneModels)
grtrack <- GeneRegionTrack(geneModels, genome=gen, chromosome=chr, name="Gene Model")
plotTracks(list(itrack, gtrack, atrack, grtrack))

## ----zooming, fig.width=7.5, fig.height=2.2-----------------------------------
plotTracks(list(itrack, gtrack, atrack, grtrack), from=26700000, to=26750000)

## ----zooming2, fig.width=7.5, fig.height=3------------------------------------
plotTracks(list(itrack, gtrack, atrack, grtrack), extend.left=0.5, extend.right=1000000)

## ----zooming3, fig.width=7.5, fig.height=3------------------------------------
plotTracks(list(itrack, gtrack, atrack, grtrack), extend.left=0.5, extend.right=1000000, col=NULL)

## ----zooming4, fig.width=7.5, fig.height=3.1----------------------------------
library(BSgenome.Hsapiens.UCSC.hg19)
strack <- SequenceTrack(Hsapiens, chromosome=chr)
plotTracks(list(itrack, gtrack, atrack, grtrack, strack), from=26591822, to=26591852, cex=0.8)

## ----DataTrack, fig.width=7.5, fig.height=4-----------------------------------
set.seed(255)
lim <- c(26700000, 26750000)
coords <- sort(c(lim[1], sample(seq(from=lim[1], to=lim[2]), 99), lim[2]))
dat <- runif(100, min=-10, max=10)
dtrack <- DataTrack(data=dat, start=coords[-length(coords)], end=coords[-1], chromosome=chr,
                    genome=gen, name="Uniform")
plotTracks(list(itrack, gtrack, atrack, grtrack, dtrack), from=lim[1], to=lim[2])

## ----DataTrackHist, fig.width=7.5, fig.height=4-------------------------------
plotTracks(list(itrack, gtrack, atrack, grtrack, dtrack), from=lim[1], to=lim[2], type="histogram")

## ----displayPars1f, fig.width=7.5, fig.height=3-------------------------------
grtrack <- GeneRegionTrack(geneModels, genome=gen, chromosome=chr, name="Gene Model", transcriptAnnotation="symbol", background.title="brown")
head(displayPars(grtrack))
displayPars(grtrack) <- list(background.panel="#FFFEDB", col=NULL)
head(displayPars(grtrack))

plotTracks(list(itrack, gtrack, atrack, grtrack))

## ----displayPars2f, fig.width=7.5, fig.height=3-------------------------------
plotTracks(list(itrack, gtrack, atrack, grtrack), background.panel="#FFFEDB", background.title="darkblue")

## ----displayPars3-------------------------------------------------------------
dp <- availableDisplayPars(grtrack)
tail(dp)

## ----displayPars4, fig.width=7.5, fig.height=1.5------------------------------
getOption("Gviz.scheme")
scheme <- getScheme()
scheme$GeneRegionTrack$fill <- "salmon"
scheme$GeneRegionTrack$col <- NULL
scheme$GeneRegionTrack$transcriptAnnotation <- "transcript"
addScheme(scheme, "myScheme")
options(Gviz.scheme="myScheme")
grtrack <- GeneRegionTrack(geneModels, genome=gen, chromosome=chr, name="Gene Model")
plotTracks(grtrack)
options(Gviz.scheme="default")
grtrack <- GeneRegionTrack(geneModels, genome=gen, chromosome=chr, name="Gene Model",
                           transcriptAnnotation="symbol")

## ----schemes, eval=FALSE------------------------------------------------------
#  .GvizSchemes <- list(myScheme=list(GeneRegionTrack=list(fill="salmon", col=NULL, transcriptAnnotation="transcript")))

## ----plottingdirections, fig.width=7.5, fig.height=3--------------------------
plotTracks(list(itrack, gtrack, atrack, grtrack), reverseStrand=TRUE)

## ----GenomeAxisTrackClass1, fig.width=7.5, fig.height=0.5---------------------
axisTrack <- GenomeAxisTrack()
plotTracks(axisTrack, from=1e6, to=9e6)

## ----GenomeAxisTrackClass2, fig.width=7.5, fig.height=0.5---------------------
axisTrack <- GenomeAxisTrack(range=IRanges(start=c(2e6, 4e6), end=c(3e6, 7e6),
                                           names=rep("N-stretch", 2)))
plotTracks(axisTrack, from=1e6, to=9e6)

## ----GenomeAxisTrackClass2a, fig.width=7.5, fig.height=0.5--------------------
plotTracks(axisTrack, from=1e6, to=9e6, showId=TRUE)

## ----GenomeAxisTrackClass3, fig.width=7.5, fig.height=0.5---------------------
plotTracks(axisTrack, from=1e6, to=9e6, add53=TRUE, add35=TRUE)

## ----GenomeAxisTrackClass4, fig.width=7.5, fig.height=0.5---------------------
plotTracks(axisTrack, from=1e6, to=9e6, add53=TRUE, add35=TRUE, littleTicks=TRUE)

## ----GenomeAxisTrackClass5, fig.width=7.5, fig.height=0.5---------------------
plotTracks(axisTrack, from=1e6, to=9e6, exponent=4)

## ----GenomeAxisTrackClass6, fig.width=7.5, fig.height=0.5---------------------
plotTracks(axisTrack, from=1e6, to=9e6, labelPos="below")

## ----GenomeAxisTrackClass7, fig.width=7.5, fig.height=0.5---------------------
plotTracks(axisTrack, from=1e6, to=9e6, scale=0.5)

## ----GenomeAxisTrackClass8, fig.width=7.5, fig.height=0.5---------------------
plotTracks(axisTrack, from=1e6, to=9e6, scale=0.5, labelPos="below")

## ----GenomeAxisTrackClassTable, echo=FALSE, results='asis'--------------------
addParTable(xtabDetails,"GenomeAxisTrack", out_type = out_type)

## ----IdeogramTrackClass1Show, eval=FALSE--------------------------------------
#  ideoTrack <- IdeogramTrack(genome="hg19", chromosome="chrX")
#  plotTracks(ideoTrack, from=85e6, to=129e6)

## ----IdeogramTrackClass1Do, fig.width=7.5, fig.height=0.5, echo=FALSE, results='hide'----
if(hasUcscConnection){
    ideoTrack <- IdeogramTrack(genome="hg19", chromosome="chrX")
}else{
    data(itrack)
}
plotTracks(ideoTrack, from=85e6, to=129e6)

## ----IdeogramTrackClass2, fig.width=7.5, fig.height=0.5-----------------------
plotTracks(ideoTrack, from=85e6, to=129e6, showId=FALSE)

## ----IdeogramTrackClass3, fig.width=7.5, fig.height=0.5-----------------------
plotTracks(ideoTrack, from=85e6, to=129e6, showId=FALSE, showBandId=TRUE, cex.bands=0.5)

## ----IdeogramTrackClassTable, echo=FALSE, results='asis'----------------------
addParTable(xtabDetails,"IdeogramTrack", out_type = out_type)

## ----DataClass1, fig.width=7.5, fig.height=1.5--------------------------------
data(twoGroups)
dTrack <- DataTrack(twoGroups, name="uniform")
plotTracks(dTrack)

## ----types, echo=FALSE, results='asis'----------------------------------------
types <- data.frame(Value=c("p", "l", "b", "a", "s", "S", "g", "r", "h", "confint", "smooth", "histogram", "mountain", "polygon", "boxplot", "gradient", "heatmap", "horizon"),
                    Type=c("dot plot", "lines plot", "dot and lines plot", "lines plot of average (i.e., mean) values", "stair steps (horizontal first)",
                           "stair steps (vertical first)", "add grid lines", "add linear regression line", "histogram lines", "confidence intervals for average values", "add loess curve",
                           "histogram (bar width equal to range with)", "'mountain-type' plot relative to a baseline",
                           "'polygon-type' plot relative to a baseline", "box and whisker plot",
                           "false color image of the summarized values", "false color image of the individual values",
                           "Horizon plot indicating magnitude and direction of a change relative to a baseline"))

if (out_type == "html") {
  kable(types) # %>% kable_styling(full_width = FALSE)
} else if (out_type == "latex") {
  kable(types, "latex", booktabs=TRUE, longtable=TRUE) # %>% kable_styling(full_width = FALSE, latex_options = "hold_position")
}

## ----typePlots, fig.width=7.5, fig.height=8.5, echo=FALSE, results='hide'-----
pushViewport(viewport(layout=grid.layout(nrow=9, ncol=2)))
i <- 1
for(t in types$Value)
{
    pushViewport(viewport(layout.pos.col=((i-1)%%2)+1, layout.pos.row=((i-1)%/%2)+1))
    if(t != "horizon"){
        names(dTrack) <- t
        plotTracks(dTrack, type=t, add=TRUE, cex.title=0.8, margin=0.5)
    }else{
        data(dtHoriz)
        names(dtHoriz) <- "horizon *"
        plotTracks(dtHoriz[8,], type="horizon", add=TRUE, cex.title=0.8, margin=0.5, showAxis=FALSE, horizon.origin=0.7)
    }
    i <- i+1
    popViewport(1)
}
popViewport(1)
names(dTrack) <- "uniform"

## ----mutitype, results='hide', fig.width=7.5, fig.height=1.5------------------
plotTracks(dTrack, type=c("boxplot", "a", "g"))

## ----sampNames, fig.width=7.5, fig.height=1.5---------------------------------
colnames(mcols(twoGroups))
plotTracks(dTrack, type=c("heatmap"), showSampleNames=TRUE, cex.sampleNames=0.6)

## ----grouping, results='hide', fig.width=7.5, fig.height=1.5------------------
plotTracks(dTrack, groups=rep(c("control", "treated"), each=3), type=c("a", "p", "confint"))

## ----typeGroupedPlots, fig.width=7.5, fig.height=6, echo=FALSE, results='hide'----
pushViewport(viewport(layout=grid.layout(nrow=9, ncol=1)))
i <- 1
for(t in c("a", "s", "confint", "smooth", "histogram", "boxplot", "heatmap", "horizon"))
{
    pushViewport(viewport(layout.pos.col=((i-1)%%1)+1, layout.pos.row=((i-1)%/%1)+1))
    if(t != "horizon"){
        names(dTrack) <- t
        plotTracks(dTrack, type=t, add=TRUE, cex.title=0.8, groups=rep(1:2, each=3), margin=0.5)
    }else{
        plotTracks(dtHoriz[c(1,8),], type="horizon", add=TRUE, cex.title=0.8, margin=0.5, showAxis=FALSE, horizon.origin=0.3,
                   groups=1:2)
    }
    i <- i+1
    popViewport(1)
}
pushViewport(viewport(layout.pos.col=((i-1)%%1)+1, layout.pos.row=((i-1)%/%1)+1))
names(dTrack) <- "hor. hist."
plotTracks(dTrack, type="histogram", stackedBars=FALSE, add=TRUE, cex.title=0.8, groups=rep(1:2, each=3), margin=0.5)
popViewport(2)
names(dTrack) <- "uniform"

## ----groupingLegend, results='hide', fig.width=7.5, fig.height=1.5------------
plotTracks(dTrack, groups=rep(c("control", "treated"), each=3), type=c("a", "p"), legend=TRUE)

## ----horizLegend, results='hide', fig.width=7.5, fig.height=1.5---------------
data(dtHoriz)
dtHoriz <- dtHoriz[1:6,]
plotTracks(dtHoriz, type="horiz", groups=rownames(values(dtHoriz)),
           showSampleNames=TRUE, cex.sampleNames = 0.6, separator=1)

## ----filedt1, fig.width=7.5, fig.height=1-------------------------------------
bgFile <- system.file("extdata/test.bedGraph", package="Gviz")
dTrack2 <- DataTrack(range=bgFile, genome="hg19", type="l", chromosome="chr19", name="bedGraph")
class(dTrack2)
plotTracks(dTrack2)

## ----filedt2------------------------------------------------------------------
library(rtracklayer)
dTrack3 <-  DataTrack(range=bgFile, genome="hg19", type="l", chromosome="chr19", name="bedGraph",
                      importFunction=function(file) import(con=file))
identical(dTrack2, dTrack3)

## ----filedt3, fig.width=7.5, fig.height=1-------------------------------------
bamFile <- system.file("extdata/test.bam", package="Gviz")
dTrack4 <- DataTrack(range=bamFile, genome="hg19", type="l", name="Coverage", window=-1, chromosome="chr1")
class(dTrack4)
dTrack4
plotTracks(dTrack4, from=189990000, to=190000000)

## ----filedt4, fig.width=7.5, fig.height=1-------------------------------------
plotTracks(dTrack4, chromosome="chr1", from=189891483, to=190087517)

## ----filedt5------------------------------------------------------------------
myImportFun <- function(file, selection){
    ## do something here
}
DataTrack(range=bamFile, genome="hg19", type="l", name="Coverage", window=-1, chromosome="chr1",
          importFunction=myImportFun, stream=TRUE)

## ----biggerdata, results='hide', fig.width=7.5, fig.height=1.5----------------
dat <- sin(seq(pi, 10*pi, len=500))
dTrack.big <- DataTrack(start=seq(1,100000, len=500), width=15, chromosome="chrX",
                        genome="hg19", name="sinus",
                        data=sin(seq(pi, 5*pi, len=500))*runif(500, 0.5, 1.5))
plotTracks(dTrack.big, type="hist")

## ----aggregation, results='hide', fig.width=7.5, fig.height=1.5---------------
plotTracks(dTrack.big, type="hist", window=50)

## ----aggregation2, results='hide', fig.width=7.5, fig.height=1.5--------------
plotTracks(dTrack.big, type="hist", window=-1, windowSize=2500)

## ----transformation, results='hide', fig.width=7.5, fig.height=1.5------------
plotTracks(dTrack.big, type="l", transformation=function(x){x[x<0] <- 0; x})

## ----groupingAv1, results='hide', fig.width=7.5, fig.height=1.5---------------
plotTracks(dTrack, groups=rep(c("control", "treated"), each=3), type=c("b"), aggregateGroups=TRUE)

## ----groupingAv2, results='hide', fig.width=7.5, fig.height=1.5---------------
plotTracks(dTrack, groups=rep(c("control", "treated"), each=3), type=c("b"), aggregateGroups=TRUE, aggregation="max")

## ----DataTrackClassTable, echo=FALSE, results='asis'--------------------------
addParTable(xtabDetails,"DataTrack", out_type = out_type)

## ----anntrack1, results='hide', fig.width=7.5, fig.height=0.5-----------------
aTrack <- AnnotationTrack(start=c(10, 40, 120), width=15, chromosome="chrX",
                          strand=c("+", "*", "-"),
                          id=c("Huey", "Dewey", "Louie"), genome="hg19", name="foo")
plotTracks(aTrack)

## ----anntrack2, results='hide', fig.width=7.5, fig.height=0.5-----------------
plotTracks(aTrack, shape="box", featureAnnotation="id")

## ----anntrack3, results='hide', fig.width=7.5, fig.height=0.5-----------------
plotTracks(aTrack, shape="ellipse", featureAnnotation="id", fontcolor.feature="darkblue")

## ----anntrack4f, results='hide', fig.width=7.5, fig.height=0.5----------------
aTrack.groups <- AnnotationTrack(start=c(50, 180, 260, 460, 860, 1240), width=c(15,20,40,100,200, 20),
                                 chromosome="chrX",
                                 strand=rep(c("+", "*", "-"), c(1,3,2)),
                                 group=rep(c("Huey", "Dewey", "Louie"), c(1,3,2)),
                                 genome="hg19", name="foo")
plotTracks(aTrack.groups, groupAnnotation="group")

## ----anntrack4af, results='hide', fig.width=7.5, fig.height=0.5---------------
plotTracks(aTrack.groups, groupAnnotation="group", just.group="right")

## ----anntrack4bf, results='hide', fig.width=7.5, fig.height=0.5---------------
plotTracks(aTrack.groups, groupAnnotation="group", just.group="above")

## ----stacking1, results='hide', fig.width=7.5, fig.height=0.5-----------------
aTrack.stacked <- AnnotationTrack(start=c(50, 180, 260, 800, 600, 1240), width=c(15,20,40,100,500, 20),
                                 chromosome="chrX",
                                 strand="*",
                                 group=rep(c("Huey", "Dewey", "Louie"), c(1,3,2)),
                                 genome="hg19", name="foo")
plotTracks(aTrack.stacked, groupAnnotation="group")

## ----stacking2, results='hide', fig.width=7.5, fig.height=0.5-----------------
plotTracks(aTrack.stacked, stacking="dense")

## ----features-----------------------------------------------------------------
feature(aTrack.stacked)
feature(aTrack.stacked)<- c("foo", "bar", "bar", "bar", "no", "no")

## ----featuresIdPlot, results='hide', fig.width=7.5, fig.height=0.5------------
plotTracks(aTrack.stacked, featureAnnotation="feature", groupAnnotation="feature", fontcolor.feature=1, cex.feature=0.7)

## ----featuresPlotf, results='hide', fig.width=7.5, fig.height=0.5-------------
plotTracks(aTrack.stacked, groupAnnotation="group", foo="darkred", bar="darkgreen")

## ----overplotting, results='hide', fig.width=7.5, fig.height=0.75-------------
data("denseAnnTrack")
plotTracks(denseAnnTrack, showOverplotting=TRUE)

## ----collapse1f, results='hide', fig.width=7.5, fig.height=0.85---------------
data(collapseTrack)
plotTracks(ctrack)

## ----collapse2f, results='hide', fig.width=7.5, fig.height=0.85---------------
plotTracks(ctrack, min.width=1)

## ----collapse3f, results='hide', fig.width=7.5, fig.height=0.85---------------
plotTracks(ctrack, min.width=1, collapse=TRUE)

## ----collapse4f, results='hide', fig.width=7.5, fig.height=0.85---------------
plotTracks(ctrack, min.width=3, min.distance=5, collapse=TRUE)

## ----collapse5f, results='hide', fig.width=7.5, fig.height=0.65---------------
plotTracks(ctrack, min.width=3, min.distance=5, collapse=TRUE,
           mergeGroups=TRUE, extend.left=0.1)

## ----fileat1, fig.width=7.5, fig.height=1-------------------------------------
aTrack2 <- AnnotationTrack(range=bamFile, genome="hg19", name="Reads", chromosome="chr1")
class(aTrack2)
aTrack2
plotTracks(aTrack2, from=189995000, to=190000000)

## ----fileat2, fig.width=7.5, fig.height=1-------------------------------------
aTrack3 <- AnnotationTrack(range=bamFile, genome="hg19", name="Reads", chromosome="chr1", group="id")
aTrack3
plotTracks(aTrack3, from=189995000, to=190000000)

## ----fileat3------------------------------------------------------------------
availableDefaultMapping(bamFile, "AnnotationTrack")

## ----fileat4, fig.width=7.5, fig.height=2-------------------------------------
plotTracks(list(dTrack4, aTrack2), from=189990000, to=190000000)

## ----AnnotationTrackClassTable, echo=FALSE, results='asis'--------------------
addParTable(xtabDetails,"AnnotationTrack", out_type = out_type)

## ----generegtrackf, results='hide', fig.width=7.5, fig.height=1.5-------------
data(geneModels)
grtrack <- GeneRegionTrack(geneModels, genome=gen, chromosome=chr, name="foo")
head(gene(grtrack))
head(transcript(grtrack))
head(exon(grtrack))
head(symbol(grtrack))
plotTracks(grtrack)

## ----generegtrack2af, results='hide', fig.width=7.5, fig.height=2.5-----------
plotTracks(grtrack, transcriptAnnotation="symbol")

## ----generegtrack2bf, results='hide', fig.width=7.5, fig.height=2.5-----------
plotTracks(grtrack, transcriptAnnotation="transcript")

## ----generegtrack2cf, results='hide', fig.width=7.5, fig.height=1-------------
plotTracks(grtrack, exonAnnotation="exon", extend.left=-0.8, fontcolor.exon=1)

## ----generegtrack3f, results='hide', fig.width=7.5, fig.height=1--------------
plotTracks(grtrack, collapseTranscripts=TRUE, shape="arrow", transcriptAnnotation="symbol")

## ----generegtrack3g, results='hide', fig.width=7.5, fig.height=1--------------
plotTracks(grtrack, collapseTranscripts="longest", shape="arrow", transcriptAnnotation="symbol")

## ----generegtrack3h, results='hide', fig.width=7.5, fig.height=1--------------
plotTracks(grtrack, collapseTranscripts="meta", shape="arrow", transcriptAnnotation="symbol")

## ----tdb2grt1-----------------------------------------------------------------
library(GenomicFeatures)
samplefile <- system.file("extdata", "hg19_knownGene_sample.sqlite", package="GenomicFeatures")
txdb <- loadDb(samplefile)
GeneRegionTrack(txdb)

## ----tdb2grt2-----------------------------------------------------------------
txTr <- GeneRegionTrack(txdb, chromosome="chr6", start=35000000, end=40000000)

## ----generegtrack4f, results='hide', fig.width=7.5, fig.height=0.35-----------
feature(txTr)
plotTracks(txTr)

## ----GeneRegionTrackClassTable, echo=FALSE, results='asis'--------------------
addParTable(xtabDetails,"GeneRegionTrack", out_type = out_type)

## ----BiomartGeneRegionTrackShow, eval=FALSE-----------------------------------
#  library(biomaRt)
#  bm <- useMart(host="grch37.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL", dataset="hsapiens_gene_ensembl")
#  biomTrack <- BiomartGeneRegionTrack(genome="hg19", chromosome=chr, start=20e6, end=21e6,
#                                    name="ENSEMBL", biomart=bm)
#  plotTracks(biomTrack)

## ----BiomartGeneRegionTrackDo, echo=FALSE, results='hide', fig.width=7.5, fig.height=1.25----
library(biomaRt)
if(hasBiomartConnection){
    bm <- useMart(host="grch37.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL", dataset="hsapiens_gene_ensembl")
    biomTrack <- BiomartGeneRegionTrack(genome="hg19", chromosome=chr, start=20e6, end=21e6,
                                        name="ENSEMBL", biomart=bm)
}else{
    data("biomTrack")
}
plotTracks(biomTrack)

## ----BiomartGeneRegionTrackCol, fig.width=7.5, fig.height=1.25----------------
plotTracks(biomTrack, col.line=NULL, col=NULL)

## ----BiomartGeneRegionTrackHeight, fig.width=7.5, fig.height=1.25-------------
plotTracks(biomTrack, col.line=NULL, col=NULL, stackHeight=0.3)

## ----BiomartGeneRegionTrackFilterShow, eval=FALSE-----------------------------
#  bm <- useMart(host="grch37.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL", dataset="hsapiens_gene_ensembl")
#  biomTrack <- BiomartGeneRegionTrack(genome="hg19", chromosome=chr, start=20e6, end=21e6,
#                                    name="ENSEMBL", filter=list(with_refseq_mrna=TRUE), biomart=bm)
#  plotTracks(biomTrack, col.line=NULL, col=NULL, stackHeight=0.3)

## ----BiomartGeneRegionTrackFilterDo, fig.width=7.5, fig.height=1.25, echo=FALSE, results='hide'----
if(hasBiomartConnection){
    bm <- useMart(host="grch37.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL", dataset="hsapiens_gene_ensembl")
    biomTrack <- BiomartGeneRegionTrack(genome="hg19", chromosome=chr, start=20e6, end=21e6,
                                  name="ENSEMBL", filter=list(with_refseq_mrna=TRUE), biomart=bm)
    plotTracks(biomTrack, col.line=NULL, col=NULL, stackHeight=0.3)
}else{
    biomTrack@filter <- list(with_refseq_mrna=TRUE)
    plotTracks(biomTrack, col.line=NULL, col=NULL, stackHeight=0.3)
    biomTrack@filter <- list()
}

## ----BiomartGeneRegionTrackSymbolShow, eval=FALSE-----------------------------
#  bm <- useMart(host="grch37.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL", dataset="hsapiens_gene_ensembl")
#  biomTrack <- BiomartGeneRegionTrack(genome="hg19", name="ENSEMBL", symbol="ABCB5", biomart=bm)
#  plotTracks(biomTrack, transcriptAnnotation="symbol")

## ----BiomartGeneRegionTrackSymbolDo, fig.width=7.5, fig.height=1.25, echo=FALSE, results='hide'----
if(hasBiomartConnection){
    bm <- useMart(host="grch37.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL", dataset="hsapiens_gene_ensembl")
    biomTrack <- BiomartGeneRegionTrack(genome="hg19", name="ENSEMBL", symbol="ABCB5", biomart=bm)
}else{
    ranges(biomTrack) <- ranges(biomTrack)[symbol(biomTrack) == "ABCB5"]
}
plotTracks(biomTrack, transcriptAnnotation="symbol")

## ----BiomartGeneRegionTrackCustom, fig.width=7.5, fig.height=1.25, eval=FALSE, echo=F----
#  library(biomaRt)
#  bm <- useMart(host="dec2012.archive.ensembl.org", biomart="ENSEMBL_MART_ENSEMBL",
#                dataset="hsapiens_gene_ensembl")
#  fm <- Gviz:::.getBMFeatureMap()
#  fm[["symbol"]] <- "external_gene_id"
#  biomTrack <- BiomartGeneRegionTrack(genome="hg19", chromosome="chr7", start=20e6, end=21e6,name="ENSEMBL",
#                                      featureMap=fm, biomart=bm)
#  plotTracks(biomTrack, col.line=NULL, col=NULL, stackHeight=0.3)

## ----BiomartGeneRegionTrackClassTable, echo=FALSE, results='asis'-------------
addInfo <- t(data.frame(displayPars(biomTrack, names(details[["BiomartGeneRegionTrack"]]))))
colnames(addInfo) <- "Color"
addParTable(xtabDetails,"BiomartGeneRegionTrack", add=addInfo, out_type = out_type)

## ----DetailsAnnotationTrack1--------------------------------------------------
library(GenomicRanges)
probes <- GRanges(seqnames="chr7", ranges=IRanges(start=c(2000000, 2070000, 2100000, 2160000), end=c(2050000, 2130000, 2150000, 2170000)),
                  strand=c("-", "+", "-", "-"))

## ----DetailsAnnotationTrack2--------------------------------------------------
methylation <- matrix(c(rgamma(400, 1)), ncol=100, dimnames=list(paste("probe", 1:4, sep=""), NULL))
methylation[,51:100] <- methylation[,51:100] + 0:3
sgroups <- rep(c("grp1","grp2"), each=50)

## ----DetailsAnnotationTrack3--------------------------------------------------
library(lattice)
details <- function(identifier, ...) {
    d <- data.frame(signal=methylation[identifier,], group=sgroups)
    print(densityplot(~signal, group=group, data=d, main=list(label=identifier, cex=0.7),
                      scales=list(draw=FALSE, x=list(draw=TRUE)), ylab="", xlab="",
                      ), newpage=FALSE, prefix="plot")
}

## ----DetailsAnnotationTrack4, results='hide', fig.width=7.5, fig.height=5-----
deTrack <- AnnotationTrack(range=probes, genome="hg19", chromosome=7, id=rownames(methylation),
                           name="probe details", stacking="squish",
                           fun=details)
plotTracks(deTrack)

## ----DetailsAnnotationTrack5--------------------------------------------------
selFun <- function(identifier, start, end, track, GdObject, ...){
    gcount <- table(group(GdObject))
    ## This computes the width of 2 pixels in genomic coordinates
    pxRange <- Gviz:::.pxResolution(min.width=20, coord="x")
    return((end-start)<pxRange && gcount[identifier]==1)
}

## ----DetailsAnnotationTrack6--------------------------------------------------
detFun <- function(identifier, GdObject.original, ...){
    plotTracks(list(GenomeAxisTrack(scale=0.3, size=0.2, cex=0.7), GdObject.original[group(GdObject.original)==identifier]),
               add=TRUE, showTitle=FALSE)
}

## ----DetailsAnnotationTrack7f, results='hide', fig.width=7.5, fig.height=2----
data(geneDetails)
deTrack2 <- AnnotationTrack(geneDetails, fun=detFun, selectFun=selFun,
                            groupDetails=TRUE, details.size=0.5, detailsConnector.cex=0.5, detailsConnector.lty="dotted",
                            shape=c("smallArrow", "arrow"), groupAnnotation="group")
plotTracks(deTrack2, extend.left=90000)

## ----DetailsAnnotationTrack8, results='hide', fig.width=7.5, fig.height=3-----
plotTracks(deTrack, details.size=0.75, detailsConnector.pch=NA, detailsConnector.col="darkred",
           detailsBorder.fill="#FFE3BF", detailsBorder.col="darkred", shape="box", detailsConnector.lty="dotted")

## ----DetailsAnnotationTrackClassTableSec, echo=FALSE, results='asis'----------
addParTable(xtabDetails,"DetailsAnnotationTrack", out_type = out_type)

## ----SequenceTrack1-----------------------------------------------------------
library(BSgenome.Hsapiens.UCSC.hg19)
sTrack <- SequenceTrack(Hsapiens)
sTrack

## ----SequenceTrack2, results='hide', fig.width=7.5, fig.height=0.5------------
plotTracks(sTrack, chromosome=1, from=20000, to=20050)

## ----SequenceTrack3, results='hide', fig.width=7.5, fig.height=0.5------------
fcol <- c(A="darkgray", C="darkgray", T="darkgray", G="darkgray")
plotTracks(sTrack, chromosome=1, from=20000, to=20050, fontcolor=fcol)

## ----SequenceTrack4, results='hide', fig.width=7.5, fig.height=0.5------------
plotTracks(sTrack, chromosome=1, from=20000, to=20050, add53=TRUE)

## ----SequenceTrack5, results='hide', fig.width=7.5, fig.height=0.3------------
plotTracks(sTrack, chromosome=1, from=20000, to=20050, add53=TRUE, complement=TRUE)

## ----SequenceTrack6, results='hide', fig.width=7.5, fig.height=0.3------------
plotTracks(sTrack, chromosome=1, from=20000, to=20100)

## ----SequenceTrack7, results='hide', fig.width=7.5, fig.height=0.3------------
plotTracks(sTrack, chromosome=1, from=20000, to=201000)

## ----SequenceTrack8, results='hide', fig.width=7.5, fig.height=0.3------------
plotTracks(sTrack, chromosome=1, from=20000, to=20100, cex=0.5)

## ----SequenceTrackClassTableSec, echo=FALSE, results='asis'-------------------
addParTable(xtabDetails,"SequenceTrack", out_type = out_type)

## ----alignmentstrack_1_do, echo=FALSE, results='hide'-------------------------
afrom <- 2960000
ato <- 3160000
alTrack <- AlignmentsTrack(system.file(package="Gviz", "extdata", "gapped.bam"), isPaired=TRUE)
data(alTrackGenes)

## ----alignmentstrack_1_show, eval=FALSE---------------------------------------
#  afrom <- 2960000
#  ato <- 3160000
#  alTrack <- AlignmentsTrack(system.file(package="Gviz", "extdata", "gapped.bam"), isPaired=TRUE)
#  bmt <- BiomartGeneRegionTrack(genome="hg19", chromosome="chr12", start=afrom, end=ato,
#                                filter=list(with_refseq_mrna=TRUE), stacking="dense")

## ----alignmentstrack_2, results='hide', fig.width=7.5, fig.height=5-----------
plotTracks(c(bmt, alTrack), from=afrom, to=ato, chromosome="chr12")

## ----alignmentstrack_3, results='hide', fig.width=7.5, fig.height=5-----------
plotTracks(c(bmt, alTrack), from=afrom, to=ato, chromosome="chr12", min.height=0, coverageHeight=0.08,
           minCoverageHeight=0)

## ----alignmentstrack_4, results='hide', fig.width=7.5, fig.height=2-----------
plotTracks(c(alTrack, bmt), from=afrom, to=ato, chromosome="chr12", type="coverage")

## ----alignmentstrack_5, results='hide', fig.width=7.5, fig.height=5-----------
plotTracks(c(bmt, alTrack), from=afrom+12700, to=afrom+15200, chromosome="chr12")

## ----alignmentstrack_5_1, results='hide', fig.width=7.5, fig.height=2---------
plotTracks(c(bmt, alTrack), from=afrom+12700, to=afrom+15200, chromosome="chr12",
           type=c("coverage", "sashimi"))

## ----alignmentstrack_5_2, results='hide', fig.width=7.5, fig.height=2---------
introns <- GRanges("chr12", IRanges(start=c(2973662, 2973919), end=c(2973848, 2974520)))
plotTracks(c(bmt, alTrack), from=afrom+12700, to=afrom+15200, chromosome="chr12",
           type=c("coverage", "sashimi"), sashimiFilter=introns)

## ----alignmentstrack_5_3, results='hide', fig.width=7.5, fig.height=2---------
plotTracks(c(bmt, alTrack), from=afrom+12700, to=afrom+15200, chromosome="chr12",
           type=c("coverage", "sashimi"), sashimiFilter=introns, sashimiFilterTolerance=5L)

## ----alignmentstrack_6, results='hide', fig.width=7.5, fig.height=5-----------
plotTracks(c(bmt, alTrack), from=afrom+12700, to=afrom+15200, chromosome="chr12", reverseStacking=TRUE,
           col.mates="purple", col.gap="orange", type="pileup")

## ----alignmentstrack_6_1, results='hide', fig.width=7.5, fig.height=5---------
alTrack <- AlignmentsTrack(system.file(package="Gviz", "extdata", "gapped.bam"), isPaired=FALSE)
plotTracks(c(bmt, alTrack), from=afrom+12700, to=afrom+15200, chromosome="chr12")

## ----alignmentstrack_7, results='hide', fig.width=7.5, fig.height=5-----------
afrom <- 44945200
ato <- 44947200
alTrack <- AlignmentsTrack(system.file(package="Gviz", "extdata", "snps.bam"), isPaired=TRUE)
plotTracks(alTrack, chromosome="chr21", from=afrom, to=ato)

## ----alignmentstrack_8, results='hide', fig.width=7.5, fig.height=5-----------
plotTracks(c(alTrack, sTrack), chromosome="chr21", from=afrom, to=ato)

## ----alignmentstrack_9, results='hide', fig.width=7.5, fig.height=5-----------
plotTracks(c(alTrack, sTrack), chromosome="chr21", from=44946590, to=44946660)

## ----alignmentstrack_10, results='hide', fig.width=7.5, fig.height=5----------
plotTracks(c(alTrack, sTrack), chromosome="chr21", from=44946590, to=44946660, cex=0.5, min.height=8)

## ----AlignmentsTrackClassTable, echo=FALSE, results='asis'--------------------
addParTable(xtabDetails,"AlignmentsTrack", out_type = out_type)

## ----UCSC1, echo=FALSE,fig.cap="A screen shot of a UCSC genome browser view around the FMR1 locus on the mouse chromosome."----
include_graphics("ucsc1.png")

## ----UCSC2, echo=FALSE, fig.cap="A screen shot of a UCSC table browser view on the UCSC Known Genes track."----
include_graphics("ucsc2.png")

## ----ucscTrack1, eval=FALSE---------------------------------------------------
#  from <- 65921878
#  to <- 65980988
#  knownGenes <- UcscTrack(genome="mm9", chromosome="chrX", track="knownGene", from=from, to=to,
#                          trackType="GeneRegionTrack", rstarts="exonStarts", rends="exonEnds", gene="name",
#                          symbol="name", transcript="name", strand="strand", fill="#8282d2", name="UCSC Genes")

## ----ucscTrack2, eval=FALSE---------------------------------------------------
#  refGenes <- UcscTrack(genome="mm9", chromosome="chrX", track="xenoRefGene", from=from, to=to,
#                        trackType="GeneRegionTrack", rstarts="exonStarts", rends="exonEnds", gene="name",
#                        symbol="name2", transcript="name", strand="strand", fill="#8282d2",
#                        stacking="dense", name="Other RefSeq")
#  
#  ensGenes <- UcscTrack(genome="mm9", chromosome="chrX", track="ensGene", from=from, to=to,
#                        trackType="GeneRegionTrack", rstarts="exonStarts", rends="exonEnds", gene="name",
#                        symbol="name2", transcript="name", strand="strand", fill="#960000",
#                        name="Ensembl Genes")

## ----ucscTrack3, eval=FALSE---------------------------------------------------
#  cpgIslands <- UcscTrack(genome="mm9", chromosome="chrX", track="cpgIslandExt", from=from, to=to,
#                          trackType="AnnotationTrack", start="chromStart", end="chromEnd", id="name",
#                          shape="box", fill="#006400", name="CpG Islands")
#  
#  snpLocations <-  UcscTrack(genome="mm9", chromosome="chrX", track="snp128", from=from, to=to,
#                             trackType="AnnotationTrack", start="chromStart", end="chromEnd", id="name",
#                             feature="func", strand="strand", shape="box", stacking="dense", fill="black",
#                             name="SNPs")

## ----ucscTrack4, eval=FALSE---------------------------------------------------
#  conservation <- UcscTrack(genome="mm9", chromosome="chrX", track="Conservation", table="phyloP30wayPlacental",
#                            from=from, to=to, trackType="DataTrack", start="start", end="end", data="score",
#                            type="hist", window="auto", col.histogram="darkblue", fill.histogram="darkblue",
#                            ylim=c(-3.7, 4), name="Conservation")
#  
#  gcContent <- UcscTrack(genome="mm9", chromosome="chrX", track="GC Percent", table="gc5Base",
#                         from=from, to=to, trackType="DataTrack", start="start", end="end", data="score",
#                         type="hist", window=-1, windowSize=1500, fill.histogram="black", col.histogram="black",
#                         ylim=c(30, 70), name="GC Percent")

## ----ucscTrack5, eval=FALSE---------------------------------------------------
#  axTrack <- GenomeAxisTrack()
#  idxTrack <- IdeogramTrack(genome="mm9", chromosome="chrX")

## ----ucscTrackLoad, echo=FALSE, results='hide'--------------------------------
data(ucscItems)

## ----ucscTrack6, results='hide', fig.width=7.5, fig.height=5.5----------------
plotTracks(list(idxTrack, axTrack, knownGenes, refGenes, ensGenes, cpgIslands,
                gcContent, conservation, snpLocations), from=from, to=to, showTitle=FALSE)

## ----HighlightTrack, fig.width=7.5, fig.height=4------------------------------
ht <- HighlightTrack(trackList=list(atrack, grtrack, dtrack), start=c(26705000, 26720000), width=7000, chromosome=7)
plotTracks(list(itrack, gtrack, ht), from = lim[1], to = lim[2])

## ----HighlightTrack2, fig.width=7.5, fig.height=4-----------------------------
ht1 <- HighlightTrack(trackList=list(itrack, gtrack, atrack), start=c(26705000, 26720000), width=7000, chromosome=7)
ht2 <- HighlightTrack(trackList=dtrack, start=c(26705000, 26720000), width=7000, chromosome=7)
plotTracks(list(ht1, grtrack, ht2), from=lim[1], to=lim[2])

## ----HighlightTrackClassTable, echo=FALSE, results='asis'---------------------
addParTable(xtabDetails,"HighlightTrack", out_type = out_type)

## ----OverlayTrack, fig.width=7.5, fig.height=3--------------------------------
dat <- runif(100, min=-2, max=22)
dtrack2 <- DataTrack(data=dat, start=coords[-length(coords)], end=coords[-1], chromosome=chr,
                     genome=gen, name="Uniform2", groups=factor("sample 2", levels=c("sample 1", "sample 2")),
                     legend=TRUE)
displayPars(dtrack) <- list(groups=factor("sample 1", levels=c("sample 1", "sample 2")), legend=TRUE)
ot <- OverlayTrack(trackList=list(dtrack2, dtrack))
ylims <- extendrange(range(c(values(dtrack), values(dtrack2))))
plotTracks(list(itrack, gtrack, ot), from=lim[1], to=lim[2], ylim=ylims, type=c("smooth", "p"))

## ----OverlayTrack2, fig.width=7.5, fig.height=3-------------------------------
displayPars(dtrack) <- list(alpha.title=1, alpha=0.5)
displayPars(dtrack2) <- list(alpha.title=1, alpha=0.5)
ot <- OverlayTrack(trackList=list(dtrack, dtrack2))
plotTracks(list(itrack, gtrack, ot), from=lim[1], to=lim[2], ylim=ylims, type=c("hist"), window=30)

## ----multPlot1----------------------------------------------------------------
chroms <- c("chr1", "chr2", "chr3", "chr4")
maTrack <- AnnotationTrack(range=GRanges(seqnames=chroms, ranges=IRanges(start=1, width=c(100,400,200,1000)),
                                         strand=c("+", "+", "-", "+")), genome="mm9", chromosome="chr1", name="foo")

mdTrack <- DataTrack(range=GRanges(seqnames=rep(chroms, c(10, 40, 20, 100)),
                                   ranges=IRanges(start=c(seq(1,100,len=10), seq(1,400,len=40), seq(1, 200, len=20),
                                                          seq(1,1000, len=100)), width=9), values=runif(170)),
                     data="values", chromosome="chr1", genome="mm9", name="bar")

## ----multPlot2----------------------------------------------------------------
mgTrack <- GenomeAxisTrack(scale=50, labelPos="below", exponent=3)
chromosome(itrack) <- "chr1"

## ----multPlot3, results='hide', fig.width=7.5, fig.height=4-------------------
ncols <- 2
nrows <- length(chroms)%/%ncols
grid.newpage()
pushViewport(viewport(layout=grid.layout(nrows, ncols)))
for(i in seq_along(chroms)){
    pushViewport(viewport(layout.pos.col=((i-1)%%ncols)+1, layout.pos.row=(((i)-1)%/%ncols)+1))
    plotTracks(list(itrack, maTrack, mdTrack, mgTrack), chromosome=chroms[i], add=TRUE)
    popViewport(1)
}

## ----multPlot4, results='hide', fig.width=7.5, fig.height=4-------------------
library(lattice)
chroms <- data.frame(chromosome=chroms)
xyplot(1~chromosome|chromosome, data=chroms, panel=function(x){plotTracks(list(itrack , maTrack, mdTrack, mgTrack), chromosome=x, add=TRUE, showId=FALSE)},
       scales=list(draw=FALSE), xlab=NULL, ylab=NULL)

## ----biocStruct1, echo=FALSE, results='asis'----------------------------------
dt <- data.frame(`Gviz class` = rep(c("AnnotationTrack","GeneRegionTrack","DataTrack","SequenceTrack"), c(4,5,3,2)),
                 `Bioconductor class`=c("data.frame","IRanges","GRanges","GRangesList",
                                        "data.frame","IRanges","GRanges","GRangesList","TxDb",
                                        "data.frame","IRanges","GRanges",
                                        "DNAStringSet", "BSgenome"),
                 `Method`=c("Constructor","Constructor + additional arguments","Constructor or setAs method, additional data in metadata columns","Constructor or setAs method",
                            "Constructor","Constructor + additional arguments","Constructor or setAs method, additional data in metadata columns","Constructor or setAs method, additional data in metadata columns", "Constructor or setAs method",
                             "Constructor","Constructor + additional data matrix","Constructor or setAs method, numeric data in metadata columns",
                            "DNAStringSet & Constructor", "Constructor"), 
                 stringsAsFactors = FALSE, check.names=FALSE)
dt[duplicated(dt[,1]),1] <- ""
if (out_type == "html") {
  kable(dt) #%>% kable_styling(full_width = FALSE) %>%
    #column_spec(1, bold = TRUE) %>% collapse_rows(columns = 1, valign = "top")
} else if (out_type == "latex") {
  kable(dt, "latex", booktabs=TRUE, longtable=TRUE) #%>% kable_styling(full_width = FALSE, latex_options = "hold_position") %>%
    #column_spec(1, bold = TRUE) %>% collapse_rows(columns = 1, valign = "top")
}

## ----biocStruct2, echo=FALSE, results='asis'----------------------------------
dt <- data.frame(`Gviz class`=rep(c("AnnotationTrack","GeneRegionTrack","DataTrack","SequenceTrack","AlignmentsTrack"), c(5, 4, 4, 2, 1)),
                 `File type`=c("BED","GFF","GFF2","GFF3","BAM",
                               "GTF","GFF","GFF2","GFF3",
                               "BedGraph","WIG","BigWig","BAM",
                               "FASTA","2Bit",
                               "BAM"),
                 `Extension`=c(".bed",".gff, .gff1, ",".gff2",".gff3",".bam",
                               ".gtf",".gff, .gff1",".gff2",".gff3",
                               ".bedGraph",".wig",".bigWig",".bam",
                               ".fa, .fasta",".2bit",
                               ".bam"),
                 `Streaming`=c("no","no","no","no","YES",
                               "no","no","no","no",
                               "no","no","YES","YES",
                               "YES","YES",
                               "YES"),
                 `Details`=c("Genomic locations from the mandatory `chrom`, `chromStart` and `chromEnd` fields, and optionally the strand from the strand field. If present, the information in the field is mapped to track item ids, and is mapped to track item feature type. All other fields are currently ignored.", "Only the following basic GFF fields are recognized: `seqname`, `start`, `end`, `strand`, (mapped to track item feature type) and `group` (to allow for track item grouping).", "Same as above, but feature grouping information may be provided either as `Group` or `Parent` attribute. Feature ids are mapped to one of the ID, Name or Alias attributes.", "Same as above, but feature grouping information has to be provided as the `Parent` attribute.", "Only start and end locations as well as the strand information for the reads are used. Read identifiers are used for track item grouping.", 
                             "A somewhat looser format definition for `gtf` files is applied here where gene, transcript and exon identifiers and names can be parsed from the `gene_id`, `gene_name`, `transcript_id`, `transcript_name`, `exon_id`, or `exon_id attributes`", "This only supports very limited item grouping and thus complete gene models can not be properly encoded.", "In most instances this is identical to the `GTF` standard and it could make sense to rename the file accordingly.", "The gene-to-transcript and transcript-to- exon relationships are encoded in the parent and `type` attributes and the parser tries to accommodate most of the existing `GFF3` variants.",
                             "", "", "", "Read coverage only is extracted from the bam file.",
                             "Streaming only possible if an index file is found in the same directory as the original fasta file.", "",
                             "Always needs an index file is found in the same directory as the original `BAM` file."),
                 stringsAsFactors = FALSE, check.names=FALSE)
dt[duplicated(dt[,1]),1] <- ""
if (out_type == "html") {
  kable(dt) #%>% kable_styling(full_width = FALSE) %>%
    #column_spec(1, bold = TRUE) %>% collapse_rows(columns = 1, valign = "top")
} else if (out_type == "latex") {
  kable(dt, "latex", booktabs=TRUE, longtable=TRUE) #%>% kable_styling(full_width = FALSE, latex_options = "hold_position") %>%
    #column_spec(1, bold = TRUE) %>% collapse_rows(columns = 1, valign = "top")
}

## ----session-info-------------------------------------------------------------
sessionInfo()