## ----include=FALSE------------------------------------------------------------
knitr::opts_chunk$set(eval = FALSE)
library("sevenbridges")

## -----------------------------------------------------------------------------
# if (!require("devtools", quietly = TRUE)) install.packages("devtools")
# install.packages("BiocManager")
# 
# devtools::install_github(
#   "sbg/sevenbridges-r",
#   repos = BiocManager::repositories(),
#   build_vignettes = TRUE, dependencies = TRUE
# )

## -----------------------------------------------------------------------------
# browseVignettes(package = "sevenbridges")

## -----------------------------------------------------------------------------
# a <- Auth(token = "your_token", platform = "cgc")

## -----------------------------------------------------------------------------
# a <- Auth(from = "file", profile_name = "cgc")
# # # remove old project
# # a$project(id = "tengfei/hackathon")$delete()

## -----------------------------------------------------------------------------
# sbg_set_env("https://cgc-api.sbgenomics.com/v2", "your_token")

## -----------------------------------------------------------------------------
# a <- Auth(from = "env")

## -----------------------------------------------------------------------------
# (b <- a$billing())
# # a single billing group is showing

## -----------------------------------------------------------------------------
# (p <- a$project_new("hackathon",
#   billing_group_id = b$id,
#   description = "This project is for CGC hackathon"
# ))

## -----------------------------------------------------------------------------
# # p$delete()

## ----comment = "", eval = TRUE------------------------------------------------
rbx <- Tool(
  id = "runif",
  label = "runif",
  hints = requirements(docker(pull = "rocker/r-base"), cpu(1), mem(2000)),
  baseCommand = "Rscript -e 'runif(100)'",
  stdout = "output.txt",
  outputs = output(id = "random", glob = "*.txt")
)
rbx$toJSON(pretty = TRUE)

## ----eval = TRUE--------------------------------------------------------------
# provide scripts
# make a new script file
fd <- fileDef(
  name = "runif.R",
  content = "set.seed(1); runif(100)"
)
rbx <- Tool(
  id = "runif",
  label = "runif",
  hints = requirements(docker(pull = "rocker/r-base"), cpu(1), mem(2000)),
  requirements = requirements(fd),
  baseCommand = "Rscript runif.R", # run script you created.
  stdout = "output.txt",
  outputs = output(id = "random", glob = "*.txt")
)

## ----eval = TRUE--------------------------------------------------------------
fl <- system.file("docker/rnaseqGene", "Dockerfile",
  package = "sevenbridges"
)

## ----comment='', eval = TRUE--------------------------------------------------
cat(readLines(fl), sep = "\n")

## ----eval = TRUE--------------------------------------------------------------
fl <- system.file("docker/rnaseqGene/src", "performDE.R",
  package = "sevenbridges"
)

## ----comment='', eval = TRUE--------------------------------------------------
cat(readLines(fl), sep = "\n")

## ----eval = TRUE--------------------------------------------------------------
fl <- system.file("docker/rnaseqGene/report", "rnaseqGene.Rmd",
  package = "sevenbridges"
)

## ----comment = "", eval = TRUE------------------------------------------------
cat(readLines(fl, n = 50), sep = "\n")

## ----eval = TRUE--------------------------------------------------------------
rbx <- Tool(
  id = "rnaseqGene",
  label = "rnaseqgene",
  description = "A RNA-seq Differiencial Expression Flow and Report",
  hints = requirements(docker(pull = "tengfei/rnaseqgene"), cpu(1), mem(2000)),
  baseCommand = "performDE.R",
  inputs = list(
    input(
      id = "bamfiles", label = "bam files",
      description = "a list of bam files",
      type = "File...", ## or type = ItemArray("File")
      prefix = "--bamfiles",
      itemSeparator = ","
    ),
    input(
      id = "design", label = "design matrix",
      type = "File",
      prefix = "--design"
    ),
    input(
      id = "gtffile", label = "gene feature files",
      type = "File",
      prefix = "--gtffile"
    ),
    input(
      id = "format", label = "report foramt html or pdf",
      type = enum("format", c("pdf", "html")),
      prefix = "--format"
    )
  ),
  outputs = list(
    output(
      id = "report", label = "report",
      description = "A reproducible report created by Rmarkdown",
      glob = Expression(
        engine = "#cwl-js-engine",
        script = "x = $job[['inputs']][['format']]; if(x == 'undefined' || x == null){x = 'html';};'rnaseqGene.' +  x"
      )
    ),
    output(
      id = "heatmap", label = "heatmap",
      description = "A heatmap plot to show the Euclidean distance between samples",
      glob = "heatmap.pdf"
    ),
    output(
      id = "count", label = "count",
      description = "Reads counts matrix",
      glob = "count.csv"
    ),
    output(
      id = "de", label = "Differential expression table",
      description = "Differential expression table",
      glob = "de.csv"
    )
  )
)

## ----comment = "", eval = TRUE------------------------------------------------
rbx
rbx$toJSON(pretty = TRUE)
rbx$toJSON()
# # or write to an external file
# fl <- "~/Downloads/rnaseqGene.json"
# write(rbx$toJSON(pretty = TRUE), fl)

## -----------------------------------------------------------------------------
# # add App you just created
# (rna.app <- p$app_add("rnaseqgene", rbx))

## -----------------------------------------------------------------------------
# fl <- system.file("extdata", "sample1.fastq", package = "sevenbridges")
# (p <- a$project(id = "tengfei/quickstart"))
# # by default load .meta for the file
# p$upload(fl, overwrite = TRUE)
# # pass metadata
# p$upload(fl, overwrite = TRUE, metadata = list(library_id = "testid2", platform = "Illumina x11"))
# # rename
# p$upload(fl,
#   overwrite = TRUE, name = "sample_new_name.fastq",
#   metadata = list(library_id = "new_id")
# )
# 
# # upload folder
# dir.ext <- system.file("extdata", package = "sevenbridges")
# p$upload(dir.ext, overwrite = TRUE)
# 
# # upload file list
# fls <- list.files(dir.ext, recursive = TRUE, full.names = TRUE)
# p$upload(fls, overwrite = TRUE)

## ----comment = "", eval = TRUE------------------------------------------------
download.fl <- system.file("extdata/download.txt", package = "sevenbridges")
cat(readLines(download.fl), sep = "\n")

## -----------------------------------------------------------------------------
# td <- tempfile()
# dir.create(td)
# for (f in readLines(download.fl)) {
#   download.file(f, file.path(td, basename(f)))
# }
# # double check
# list.files(td)
# # upload to the project you created
# p$upload(td)

## -----------------------------------------------------------------------------
# # get file id you need as inout
# (bamfiles.in <- p$file(".bam"))
# (design.in <- p$file("sample_table.csv"))
# (gtf.in <- p$file("Homo_sapiens.GRCh37.75_subset.gtf"))

## -----------------------------------------------------------------------------
# bam1 <- p$file("SRR1039516_subset.bam")
# bam2 <- p$file("SRR1039512_subset.bam")
# bamfiles.in2 <- list(bam1, bam2)

## -----------------------------------------------------------------------------
# # add a new Task
# (tsk <- p$task_add(
#   name = "RNA DE report new",
#   description = "RNA DE analysis report",
#   app = rna.app$id,
#   inputs = list(
#     bamfiles = bamfiles.in,
#     design = design.in,
#     gtffile = gtf.in
#   )
# ))
# 
# # don't forget to run a draft task
# tsk$run()

## -----------------------------------------------------------------------------
# # # monitor the task
# # tsk$monitor()

## -----------------------------------------------------------------------------
# setTaskHook("completed", function() {
#   tsk$download("~/Downloads")
# })
# tsk$monitor()

## -----------------------------------------------------------------------------
# tsk$download("~/Downloads")

## -----------------------------------------------------------------------------
# # batch by items
# (tsk <- p$task_add(
#   name = "RNA DE report new batch 2",
#   description = "RNA DE analysis report",
#   app = rna.app$id,
#   batch = batch(input = "bamfiles"),
#   inputs = list(
#     bamfiles = bamfiles.in,
#     design = design.in,
#     gtffile = gtf.in
#   )
# ))
# 
# # batch by metadata, input files has to have metadata fields specified
# (tsk <- p$task_add(
#   name = "RNA DE report new batch 3",
#   description = "RNA DE analysis report",
#   app = rna.app$id,
#   batch = batch(
#     input = "fastq",
#     c("metadata.sample_id", "metadata.library_id")
#   ),
#   inputs = list(
#     bamfiles = bamfiles.in,
#     design = design.in,
#     gtffile = gtf.in
#   )
# ))

## ----comment = "", eval = TRUE------------------------------------------------
fl <- system.file("docker/reporttool/rabix/reporttool.json",
  package = "sevenbridges"
)
cat(readLines(fl), sep = "\n")

## -----------------------------------------------------------------------------
# # directly add json file
# p <- a$project(id = "tengfei/hackathon")
# (report.app <- p$app_add("report-tool", fl))

## ----comment = "", eval = TRUE------------------------------------------------
fl <- system.file("docker/reporttool/Dockerfile",
  package = "sevenbridges"
)
cat(readLines(fl), sep = "\n")

## ----comment = "", eval = FALSE-----------------------------------------------
# fl <- system.file("docker/reporttool/src/report.R",
#   package = "sevenbriges"
# )
# cat(readLines(fl), sep = "\n")

## ----comment = "", eval = FALSE-----------------------------------------------
# fl <- system.file("docker/reporttool/rabix/generator.R",
#   package = "sevenbriges"
# )
# cat(readLines(fl), sep = "\n")

## -----------------------------------------------------------------------------
# browseVignettes("sevenbridges")