Skip to content
Snippets Groups Projects
Commit 49a71f1e authored by Gervaise Henry's avatar Gervaise Henry 🤠
Browse files

Merge branch '35-ShinyApp' into 'develop'

Resolve "MultiQC error"

Closes #36

See merge request !56
parents 7a8d4bc2 6b8418d3
2 merge requests!57Develop,!56Resolve "MultiQC error"
Pipeline #4691 passed with stages
in 18 minutes and 2 seconds
......@@ -2,6 +2,7 @@
**User Facing**
* Add Cellranger Version 3.1.0
* Add CI Artifacts
* Add Vizapp
**Background**
......
......@@ -27,7 +27,7 @@ To Run:
* path to the fastq location
* R1 and R2 only necessary but can include I2
* only fastq's in designFile (see below) are used, not present will be ignored
* eg: **--fastq '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r100k/\*.fastq.gz'**
* eg: **--fastq '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r10k/\*.fastq.gz'**
* **--designFile**
* path to design file (csv format) location
* column 1 = "Sample"
......@@ -35,7 +35,7 @@ To Run:
* column 3 = "fastq_R2"
* can have repeated "Sample" if there are multiple fastq R1/R2 pairs for the samples
* can be downloaded [HERE](https://git.biohpc.swmed.edu/BICF/Astrocyte/cellranger_count/blob/master/docs/design.csv)
* eg: **--designFile '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r100k/design.csv'**
* eg: **--designFile '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r10k/design.csv'**
* **--genome**
* reference genome
* requires workflow/conf/biohpc.config to work
......@@ -94,7 +94,7 @@ To Run:
* eg: **--outDir 'test'**
* FULL EXAMPLE:
```
nextflow run workflow/main.nf --fastq '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r100k/*.fastq.gz' --designFile '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r100k/design.csv' --genome 'GRCh38-3.0.0' --kitVersion 'three' --version '3.1.0' --outDir 'test'
nextflow run workflow/main.nf --fastq '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r10k/*.fastq.gz' --designFile '/project/shared/bicf_workflow_ref/workflow_testdata/cellranger/cellranger_count/hu.v3s2r10k/design.csv' --genome 'GRCh38-3.0.0' --kitVersion 'three' --version '3.1.0' --outDir 'test'
```
* Design example:
......
LoadData <- function(dim=c("pca","tsne","umap"),dir,samp){
exp <- readMM(paste0(dir,samp,"/outs/filtered_feature_bc_matrix/matrix.mtx.gz"))
features <- read.table(paste0(dir,samp,"/outs/filtered_feature_bc_matrix/features.tsv.gz"),quote="\t")
barcodes <- read.table(paste0(dir,samp,"/outs/filtered_feature_bc_matrix/barcodes.tsv.gz"),quote="\t")
exp.raw <- readMM(paste0(dir,samp,"/outs/raw_feature_bc_matrix/matrix.mtx.gz"))
features.raw <- read.table(paste0(dir,samp,"/outs/filtered_feature_bc_matrix/features.tsv.gz"),quote="\t")
barcodes.raw <- read.table(paste0(dir,samp,"/outs/raw_feature_bc_matrix/barcodes.tsv.gz"),quote="\t")
dr <- list()
for (i in dim){
if (i=="pca"){
dr[[i]] <- read.csv(paste0(dir,samp,"/outs/analysis/",i,"/10_components/projection.csv"))
dr[[i]] <- dr[[i]][,1:3]
} else {
dr[[i]] <- read.csv(paste0(dir,samp,"/outs/analysis/",i,"/2_components/projection.csv"))
}
}
rm(i)
cl <- c("graphclust",paste0("kmeans_",2:10,"_clusters"))
cluster <- list()
deg <- list()
for (i in cl){
cluster[[i]] <- read.csv(paste0(dir,samp,"/outs/analysis/clustering/",i,"/clusters.csv"))
deg[[i]] <- read.csv(paste0(dir,samp,"/outs/analysis/diffexp/",i,"/differential_expression.csv"))
}
rm(i)
qc <- read.csv(paste0(dir,samp,"/outs/metrics_summary.csv"))
qc <- data.frame(t(qc))
qc[,2] <- qc[,1]
qc[,1] <- rownames(qc)
qc <- qc[-1,]
colnames(qc) <- c("Metric","Value")
results <- list(
sample=samp,
exp=exp,
features=features,
barcodes=barcodes,
exp.raw=exp.raw,
features.raw=features.raw,
barcodes.raw=barcodes.raw,
dr=dr,
cluster=cluster,
deg=deg,
qc=qc
)
return(results)
}
Plot.cluster <- function(dr,cluster){
pl <-merge(dr,cluster,by="Barcode",all.x=TRUE)
axis.labs <- colnames(pl)[2:3]
colnames(pl)[2:3] <- c("dim1","dim2")
plot.out <- ggplot(pl,aes(x=dim1,y=dim2,col=factor(Cluster)))+geom_point()+scale_color_viridis(discrete=TRUE)+xlab(axis.labs[1])+ylab(axis.labs[2])+labs(col="Cluster")+theme_cowplot()
return(plot.out)
}
Plot.feature <- function(dr,ft){
dr$exp <- ft
axis.labs <- colnames(dr)[2:3]
colnames(dr)[2:3] <- c("dim1","dim2")
if (sum(dr$exp) != 0){
plot.out <- ggplot(dr,aes(x=dim1,y=dim2,col=exp))+geom_point()+scale_color_viridis(option="inferno")+xlab(axis.labs[1])+ylab(axis.labs[2])+labs(col="Expression")+theme_cowplot()
} else {
plot.out <- ggplot(dr,aes(x=dim1,y=dim2,col=exp))+geom_point()+scale_color_gradient(low="black",high="black")+xlab(axis.labs[1])+ylab(axis.labs[2])+labs(col="Expression")+theme_cowplot()
}
return(plot.out)
}
Plot.violinbox <- function(ft,cluster){
cluster$exp <- ft
cluster$Cluster <- factor(cluster$Cluster)
plot.out <- ggplot(cluster,aes(x=Cluster,y=exp,fill=Cluster))+geom_violin(scale="width",trim=TRUE)+geom_boxplot(width=0.25,fill="white",outlier.shape=NA)+scale_fill_viridis(discrete=TRUE)+ylab("Expression")+theme_cowplot()+theme(axis.text.x=element_text(angle=45))
return(plot.out)
}
Plot.cliffknee <- function(barcodes.raw,exp.raw,barcodes){
umi <- matrix(nrow=length(barcodes.raw[,1]),ncol=4)
umi[,1] <- t(colSums(exp.raw))
umi[,2] <- as.character(barcodes.raw[,1])
umi <- as.data.frame(umi)
umi[,1] <- as.numeric(levels(umi[,1]))[umi[,1]]
colnames(umi) <- c("nUMI","barcodes","rank","Cell")
umi <- umi[order(umi$nUMI,decreasing=TRUE),]
umi$rank <- 1:nrow(umi)
umi$Cell <- factor(as.character(umi$barcodes %in% barcodes[,1]))
umi$Cell <- factor(umi$Cell,levels(umi$Cell)[c(2,1)])
plot.out <- ggplot(umi,aes(x=rank,y=nUMI,col=Cell))+geom_point()+scale_color_manual(values=c("darkgreen","darkred"))+
scale_x_log10(breaks=trans_breaks("log10",function(x) 10^x),labels=trans_format("log10",math_format(10^.x)))+
scale_y_log10(breaks=trans_breaks("log10",function(x) 10^x),labels=trans_format("log10",math_format(10^.x)))+
annotation_logticks()+xlab("Barcode Rank")+ylab("nUMI")+theme_cowplot()
return(plot.out)
}
library(shiny)
library(shinythemes)
library(Matrix)
library(ggplot2)
library(RColorBrewer)
library(viridis)
library(cowplot)
library(scales)
setwd("../")
source("./vizapp/functions.R")
#load data
dir.shared <- "/work/BICF/s189701/cellranger_count/workflow/output/count310/"
samples <- list.dirs(dir.shared,full.names=FALSE,recursive=FALSE)
results <- LoadData(dim=c("umap","tsne","pca"),dir=dir.shared,samp=samples[1])
# This example implements a simple file browser for accessing results.
library(shiny)
library(shinyFiles)
# Results are available in the directory specified by the outputDir environment
# variable, red by Sys.getenv
rootdir <- Sys.getenv('outputDir')
shinyServer(function(input, output, session) {
# The backend for a simple file chooser, restricted to the
# rootdir we obtained above.
# See https://github.com/thomasp85/shinyFiles
shinyFileChoose(input, 'files', roots=c('workflow'=rootdir), filetypes=c('', 'bed', 'xls','wig'), session=session)
library(shinythemes)
library(Matrix)
library(ggplot2)
library(RColorBrewer)
library(viridis)
library(cowplot)
library(scales)
shinyServer(function(input,output,session){
#reactive inputs
values <- reactiveValues(
results=results,
dr.c="",cluster.c="",
dr.f="",feature.f="",
cluster.vb="",feature.vb="",
cluster.deg="",cluster.1.deg="",alpha.deg="",fc.deg="",direction.deg=""
)
values$results <- eventReactive(input$go.d,{
LoadData(dim=c("umap","tsne","pca"),dir=dir.shared,samp=input$sample)
})
output$loaded <- eventReactive(input$go.d,{
paste0("Sample ",values$results()$sample)
})
output$nav.analysis <- renderUI({
req(values$results()$sample)
tabsetPanel(type="tabs",
tabPanel("Cluster Plot",
sidebarPanel(
h3(textOutput("lab.sample.c")),
uiOutput("dr.c"),
uiOutput("cluster.c"),
actionButton("go.c","Submit")
),
mainPanel(
h3(textOutput("lab.dr.c")),
h4(textOutput("lab.cluster.c")),
plotOutput("plot.cluster.c"),
tags$br(),
uiOutput("button.download.c")
)
),
tabPanel("Feature Plot",
sidebarPanel(
h3(textOutput("lab.sample.f")),
uiOutput("dr.f"),
uiOutput("feature.f"),
actionButton("go.f","Submit")
),
mainPanel(
h3(textOutput("lab.feature.f")),
h4(textOutput("lab.dr.f")),
plotOutput("plot.feature"),
tags$br(),
uiOutput("button.download.f")
)
),
tabPanel("ViolinBox Plot",
sidebarPanel(
h3(textOutput("lab.sample.vb")),
uiOutput("cluster.vb"),
uiOutput("feature.vb"),
actionButton("go.vb","Submit"),
br(),
br(),
plotOutput("plot.cluster.vb")
),
mainPanel(
h3(textOutput("lab.feature.vb")),
h4(textOutput("lab.cluster.vb")),
plotOutput("plot.violinbox"),
tags$br(),
uiOutput("button.download.vb"),
tags$br(),
tags$br(),
tableOutput("table.expression.vb")
)
),
tabPanel("Differentially Expressed Features",
sidebarPanel(
h3(textOutput("lab.sample.deg")),
uiOutput("cluster.deg"),
uiOutput("cluster.1.deg"),
numericInput("alpha.deg","Maximum p-value",min=0,max =1,value=0.05,step=0.001),
numericInput("fc.deg","Minimum Fold Change",min=0,max =50,value=0,step=0.5),
radioButtons("direction.deg","Fold Change Direction",c("Positively Expressed"="up","Negatively Expressed"="down","Both"="both"),selected="up"),
actionButton("go.deg","Submit"),
br(),
br(),
plotOutput("plot.cluster.deg")
),
mainPanel(
h3(textOutput("lab.cluster.1.deg")),
h4(textOutput("lab.cluster.deg")),
h5(textOutput("lab.alpha.deg")),
h5(textOutput("lab.fc.deg")),
uiOutput("download.deg.button"),
tags$br(),
tags$br(),
tableOutput("table.deg")
)
)
)
})
output$nav.qc <- renderUI({
req(values$results()$sample)
tabPanel("Output",
sidebarPanel(
h3(textOutput("lab.sample.qc")),
h4(textOutput("lab.cell.count")),
br(),
tableOutput("qc")
),
mainPanel(
plotOutput("plot.cliffknee")
)
)
})
#sidebar input/outputs
output$lab.sample.c <- reactive({paste0("Sample ",values$results()$sample)})
output$dr.c <- renderUI({selectInput("dr.c","Dimentionality Reduction",names(values$results()$dr))})
output$cluster.c <- renderUI({selectInput("cluster.c","Clustering",names(values$results()$cluster))})
output$lab.sample.f <- reactive({paste0("Sample ",values$results()$sample)})
output$dr.f <- renderUI({selectInput("dr.f","Dimentionality Reduction",names(values$results()$dr))})
output$feature.f <- renderUI({textInput("feature.f","Feature",levels(values$results()$features[,2])[1])})
output$lab.sample.vb <- reactive({paste0("Sample ",values$results()$sample)})
output$cluster.vb <- renderUI({selectInput("cluster.vb","Clustering",names(values$results()$cluster))})
output$feature.vb <- renderUI({textInput("feature.vb","Feature",levels(values$results()$features[,2])[1])})
output$plot.cluster.vb <- renderPlot({
req(input$go.vb)
print(plot.cluster.vb())
})
output$lab.sample.deg <- reactive({paste0("Sample ",values$results()$sample)})
output$cluster.deg <- renderUI({selectInput("cluster.deg","Clustering",names(values$results()$cluster))})
output$cluster.1.deg <- renderUI({
clust <- levels(factor(values$results()$cluster[[req(input$cluster.deg)]]$Cluster))
selectInput("cluster.1.deg", "Specific Cluster",clust,clust[1])
})
observe({
if (!is.numeric(input$alpha.deg)) {
updateNumericInput(session,"alpha","Maximum p-value",min=0,max =1,value=0.05,step=0.001)
}
})
observe({
if (!is.numeric(input$fc.deg)) {
updateNumericInput(session,"fc","Minimum Fold Change",min=0,max =50,value=0,step=0.5)
}
})
output$lab.sample.qc <- reactive({paste0("Sample ",values$results()$sample)})
output$lab.cell.count <- renderText({paste0(nrow(values$results()$barcodes)," Cells Detected")})
output$qc <- renderTable(values$results()$qc)
#main input/outputs
output$lab.dr.c <- eventReactive(input$go.c,{
req(input$go.c)
paste0(toupper(req(input$dr.c))," Reduction")
},ignoreNULL=FALSE)
output$lab.cluster.c <- eventReactive(input$go.c,{
req(input$go.c)
paste0(toupper(req(input$cluster.c))," Clustering")
},ignoreNULL=FALSE)
output$plot.cluster.c <- renderPlot({
req(input$go.c)
print(plot.cluster.c())
})
output$lab.feature.f <- eventReactive(input$go.f,{
req(input$go.f)
if(toupper(req(input$feature.f)) %in% as.character(values$results()$features[,2])){
toupper(req(input$feature.f))
} else {
paste0(req(input$feature.f)," NOT PRESENT")
}
},ignoreNULL=FALSE)
output$lab.dr.f <- eventReactive(input$go.f,{
req(input$go.f)
paste0(toupper(req(input$dr.f))," Reduction")
},ignoreNULL=FALSE)
output$plot.feature <- renderPlot({
req(input$go.f)
print(plot.feature())
})
output$lab.feature.vb <- eventReactive(input$go.vb,{
req(input$go.vb)
if(toupper(req(input$feature.vb)) %in% as.character(values$results()$features[,2])){
toupper(req(input$feature.vb))
} else {
paste0(req(input$feature.vb)," NOT PRESENT")
}
},ignoreNULL=FALSE)
output$lab.cluster.vb <- eventReactive(input$go.vb,{
req(input$go.vb)
paste0(toupper(req(input$cluster.vb))," Clustering")
},ignoreNULL=FALSE)
output$plot.violinbox <- renderPlot({
req(input$go.vb)
print(plot.violinbox())
})
output$table.expression.vb <- renderTable({
req(input$go.vb)
table.expression.vb()
})
output$lab.cluster.1.deg <- eventReactive(input$go.deg,{
req(input$go.deg)
paste0("Cluster ",req(input$cluster.1.deg)," DEGs")
},ignoreNULL=FALSE)
output$lab.cluster.deg <- eventReactive(input$go.deg,{
req(input$go.deg)
paste0(toupper(req(input$cluster.deg))," Clustering")
},ignoreNULL=FALSE)
output$lab.alpha.deg <- eventReactive(input$go.deg,{
req(input$go.deg)
paste0("Maximum p-value <- ",req(input$alpha.deg))
},ignoreNULL=FALSE)
output$lab.fc.deg <- eventReactive(input$go.deg,{
req(input$go.deg)
if (req(input$direction.deg) == "up"){
paste0("Minimum fold-change difference <- ",req(input$fc.deg)," above the other cells")
} else if (req(input$direction.deg) == "down") {
paste0("Minimum fold-change difference <- ",req(input$fc.deg)," below the other cells")
} else {
paste0("Minimum fold-change difference <- ",req(input$fc.deg)," above & below the other cells")
}
},ignoreNULL=FALSE)
output$table.deg <- renderTable({
req(input$go.deg)
table.deg()
})
output$plot.cluster.deg <- renderPlot({
req(input$go.deg)
print(plot.cluster.deg())
})
output$download.deg.button <- renderUI({
req(input$go.deg)
downloadButton("download.deg","Download Table")
})
output$plot.cliffknee <- renderPlot({print(Plot.cliffknee(barcodes.raw=values$results()$barcodes.raw,exp.raw=values$results()$exp.raw,barcodes=values$results()$barcodes))})
#reactive download buttons
output$button.download.c <- renderUI({
req(input$go.c)
downloadButton("download.c","Download Figure")
})
output$button.download.f <- renderUI({
req(input$go.f)
downloadButton("download.f","Download Figure")
})
output$button.download.vb <- renderUI({
req(input$go.vb)
downloadButton("download.vb","Download Figure")
})
output$button.download.deg <- renderUI({
req(input$go.deg)
downloadButton("download.deg","Download Table")
})
#save current parameters
values$dr.c <- eventReactive(input$go.c,{input$dr.c})
values$cluster.c <- eventReactive(input$go.c,{input$cluster.c})
values$dr.f <- eventReactive(input$go.f,{input$dr.f})
values$feature.f <- eventReactive(input$go.f,{toupper(input$feature.f)})
values$cluster.vb <- eventReactive(input$go.vb,{input$cluster.vb})
values$feature.vb <- eventReactive(input$go.vb,{toupper(input$feature.vb)})
values$cluster.deg <- eventReactive(input$go.deg,{input$cluster.deg})
values$cluster.1.deg <- eventReactive(input$go.deg,{input$cluster.1.deg})
values$alpha.deg <- eventReactive(input$go.deg,{input$alpha.deg})
values$fc.deg <- eventReactive(input$go.deg,{input$fc.deg})
values$direction.deg <- eventReactive(input$go.deg,{input$direction.deg})
#plot functions
plot.cluster.c <- eventReactive(input$go.c,{
Plot.cluster(
values$results()$dr[[req(input$dr.c)]],values$results()$cluster[[req(input$cluster.c)]])
},ignoreNULL=FALSE)
plot.feature <- eventReactive(input$go.f,{
if(toupper(req(input$feature.f)) %in% as.character(values$results()$features[,2])){
Plot.feature(values$results()$dr[[req(input$dr.f)]],values$results()$exp[as.numeric(rownames(values$results()$features[values$results()$features[,2]==toupper(req(input$feature.f)),])),])
} else {
plot.new()
}
},ignoreNULL=FALSE)
plot.violinbox <- eventReactive(input$go.vb,{
if(toupper(req(input$feature.vb)) %in% as.character(values$results()$features[,2])){
Plot.violinbox(values$results()$exp[as.numeric(rownames(values$results()$features[values$results()$features[,2]==toupper(req(input$feature.vb)),])),],values$results()$cluster[[req(input$cluster.vb)]])
} else {
plot.new()
}
},ignoreNULL=FALSE)
plot.cluster.vb <- eventReactive(input$go.vb,{
Plot.cluster(
values$results()$dr[["umap"]],values$results()$cluster[[req(input$cluster.vb)]])
},ignoreNULL=FALSE)
plot.cluster.deg <- eventReactive(input$go.deg,{
req(input$cluster.1.deg)
Plot.cluster(
values$results()$dr[["umap"]],values$results()$cluster[[input$cluster.deg]])
},ignoreNULL=FALSE)
#table functions
table.expression.vb <- eventReactive(input$go.vb,{
if(toupper(req(input$feature.vb)) %in% as.character(values$results()$features[,2])){
tab <- values$results()$deg[[req(input$cluster.vb)]][values$results()$deg[[req(input$cluster.vb)]][,2]==toupper(req(input$feature.vb)),c(2,grep("Mean.Counts",names(values$results()$deg[[req(input$cluster.vb)]])))]
colnames(tab) <- c("Feature",gsub(".Mean.Counts","",names(tab[,-1])))
tab <- data.frame(t(tab))
tab[,2] <- tab[,1]
tab[,1] <- rownames(tab)
tab <- tab[-1,]
colnames(tab) <- c("Cluster",paste0("Ave ",req(input$feature.vb)," Expression"))
tab
} else {
""
}
},ignoreNULL=FALSE)
table.deg <- eventReactive(input$go.deg,{
tab <- values$results()$deg[[input$cluster.deg]]
tab <- tab[tab[paste0("Cluster.",req(input$cluster.1.deg),".Adjusted.p.value")]<=input$alpha.deg,]
if (input$fc.deg == 0){
fc <- 0
} else {
fc <- log2(input$fc.deg)
}
if (input$direction.deg=="up"){
tab <- tab[tab[paste0("Cluster.",req(input$cluster.1.deg),".Log2.fold.change")]>=fc,]
} else if (input$direction.deg=="down"){
tab <- tab[tab[paste0("Cluster.",req(input$cluster.1.deg),".Log2.fold.change")]<=-fc,]
} else {
tab <- tab[tab[paste0("Cluster.",req(input$cluster.1.deg),".Log2.fold.change")]>=fc | tab[paste0("Cluster.",req(input$cluster.1.deg),".Log2.fold.change")]<=-fc,]
}
tab <- tab[,c(colnames(values$results()$deg[[input$cluster.deg]])[2],paste0("Cluster.",req(input$cluster.1.deg),".Mean.Counts"),paste0("Cluster.",req(input$cluster.1.deg),".Log2.fold.change"),paste0("Cluster.",req(input$cluster.1.deg),".Adjusted.p.value"))]
tab <- tab[order(abs(tab[paste0("Cluster.",req(input$cluster.1.deg),".Log2.fold.change")]),decreasing=TRUE),]
tab
},ignoreNULL=FALSE)
#download
output$download.c <- downloadHandler(
filename <- function(){paste0("clusters_",values$dr.c(),"_",values$cluster.c(),".pdf")},
content <- function(file){
pdf(file,onefile=FALSE)
print(plot.cluster.c())
dev.off()
}
)
output$download.f <- downloadHandler(
filename <- function(){paste0("feature_",values$dr.f(),"_",toupper(values$feature.f()),".pdf")},
content <- function(file){
pdf(file,onefile=FALSE)
print(plot.feature())
dev.off()
}
)
output$download.vb <- downloadHandler(
filename <- function(){paste0("violinbox_",values$cluster.vb(),"_",toupper(values$feature.vb()),".pdf")},
content <- function(file){
pdf(file,onefile=FALSE)
print(plot.violinbox())
dev.off()
}
)
output$download.deg <- downloadHandler(
filename <- function(){paste0("deg_",values$cluster.deg(),"_cluster.",values$cluster.1.deg(),"_p",values$alpha.deg(),"_fc",values$fc.deg(),values$direction.deg(),".csv")},
content <- function(file){
write.csv(table.deg(),file,row.names=FALSE,quote=FALSE)
}
)
})
library(shiny)
library(shinyFiles)
shinyUI(fluidPage(
verticalLayout(
# Application title
titlePanel("Astrocyte Example"),
wellPanel(
helpText("This is a minimal example, demonstrating how
a Shiny visualization application can access the output of a workflow.
Here we provide a file browser using the shinyFiles package. Real
Astrocyte vizapps would provide custom methods to access and visualize
output."),
helpText("The workflow output is in the directory set in the
outputDir environment variable. this can be retrieved in R with the
command Sys.getenv('outputDir')"),
# A simple file browser within the workflow output directory
# See https://github.com/thomasp85/shinyFiles
shinyFilesButton('files', label='Browse workflow output', title='Please select a file', multiple=FALSE)
navbarPage(theme=shinytheme("slate"),"BICF Cellranger Count Analysis (cellranger 3.1.0 version)",
tabPanel("Select Data",
mainPanel(
selectInput("sample","Available Samples",samples),
actionButton("go.d","Load"),
br(),
br(),
h4("Please whait until the sample has been loaded and a message below displays this, it may take a few minutes"),
h3(textOutput("loaded"))
)
),
tabPanel("Analysis",
uiOutput("nav.analysis")
),
tabPanel("QC",
uiOutput("nav.qc")
)
))
)
......@@ -148,7 +148,7 @@ process count211 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --expect-cells=${expectCells211}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
else {
......@@ -157,7 +157,7 @@ process count211 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --force-cells=${forceCells211}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
......@@ -192,7 +192,7 @@ process count301 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --expect-cells=${expectCells301} --chemistry=${chemistryParam301}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
else {
......@@ -201,7 +201,7 @@ process count301 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --force-cells=${forceCells301} --chemistry=${chemistryParam301}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
......@@ -236,7 +236,7 @@ process count302 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --expect-cells=${expectCells302} --chemistry=${chemistryParam302}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
else {
......@@ -245,7 +245,7 @@ process count302 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --force-cells=${forceCells302} --chemistry=${chemistryParam302}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
......@@ -280,7 +280,7 @@ process count310 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --expect-cells=${expectCells310} --chemistry=${chemistryParam310}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
else {
......@@ -289,7 +289,7 @@ process count310 {
ulimit -a
bash ${baseDir}/scripts/filename_check.sh -r ${ref}
cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --force-cells=${forceCells310} --chemistry=${chemistryParam310}
sed -E 's/("([^"]*)")?,/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
"""
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment