Next changeset 1:1fea15ac7532 (2017-08-08) |
Commit message:
planemo upload for repository https://github.com/statonlab/docker-GRReport/tree/master/my_tools/rmarkdown_fastqc_site commit ddb1f6aca7619aea2e660b1729367841b56ba4c9-dirty |
added:
01_evaluation_overview.Rmd 02_fastqc_original_reports.Rmd 1_per_base_quality_scores.Rmd 2_per_base_N_content.Rmd 3_per_sequence_quality_scores.Rmd 4_per_sequence_GC_content.Rmd 5_per_base_sequence_content.Rmd _site.yml fastqc_site.xml fastqc_site_render.R index.Rmd |
b |
diff -r 000000000000 -r d732d4526c6d 01_evaluation_overview.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/01_evaluation_overview.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,123 @@ +--- +title: "Evaluation Overview" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + +```{bash 'copy data from datasets directory to working directory', echo=FALSE} +# Copy uploaded data to the working directory +for f in $(echo READS | sed "s/,/ /g") +do + cp $f ./ +done +``` + +```{bash 'run fastqc', echo=FALSE} +# run fastqc and place outputs into the report directory +for r in $(ls *.dat) +do + fastqc -o REPORT_OUTPUT_DIR $r > /dev/null 2>&1 +done +``` + +```{bash 'parse fastqc results', echo=FALSE} +##==== copy fastqc generated zip files from report output directory to job work directory == +cp -r REPORT_OUTPUT_DIR/*zip ./ + +# create a file to store data file paths +echo "sample_id,file_path" > PWF_file_paths.txt # Pass, Warning, Fail +echo "sample_id,file_path" > PBQS_file_paths.txt # Per Base Quality Score +echo "sample_id,file_path" > PSQS_file_paths.txt # Per Sequence Quality Score +echo "sample_id,file_path" > PSGC_file_paths.txt # Per Sequence GC Content +echo "sample_id,file_path" > PBSC_file_paths.txt # Per Base Sequence Content +echo "sample_id,file_path" > PBNC_file_paths.txt # Per Base N Content +echo "sample_id,file_path" > SDL_file_paths.txt # Sequence Duplication Level +echo "sample_id,file_path" > SLD_file_paths.txt # Sequence Length Distribution +echo "sample_id,file_path" > KMC_file_paths.txt # Kmer Content + +for i in $(ls *.zip) +do + BASE=$(echo $i | sed 's/\(.*\)\.zip/\1/g') + echo $BASE + unzip ${BASE}.zip > /dev/null 2>&1 + + ##====== pass,warning,fail (WSF) ============= + awk '/^>>/ {print}' "$BASE"/fastqc_data.txt | grep -v 'END_MODULE' | sed 's/>>//' > "$BASE"-PWF.txt + echo "${BASE},${BASE}-PWF.txt" >> PWF_file_paths.txt + + ##====== per base quality scores (PBQS) ====== + awk '/^>>Per base sequence quality/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-PBQS.txt + echo "${BASE},${BASE}-PBQS.txt" >> PBQS_file_paths.txt + + ##====== per sequence quality scores (PSQS) + awk '/^>>Per sequence quality scores/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-PSQS.txt + echo "${BASE},${BASE}-PSQS.txt" >> PSQS_file_paths.txt + + ##====== Per sequence GC content (PSGC) + awk '/^>>Per sequence GC content/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-PSGC.txt + echo "${BASE},${BASE}-PSGC.txt" >> PSGC_file_paths.txt + + ##====== Per Base Sequence Content (PBSC) + awk '/^>>Per base sequence content/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-PBSC.txt + echo "${BASE},${BASE}-PBSC.txt" >> PBSC_file_paths.txt + + ##====== Per Base N Content (PBNC) + awk '/^>>Per base N content/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-PBNC.txt + echo "${BASE},${BASE}-PBNC.txt" >> PBNC_file_paths.txt + + ##====== Sequence Duplication Level (SDL) + awk '/^>>Sequence Duplication Levels/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-SDL.txt + echo "${BASE},${BASE}-SDL.txt" >> SDL_file_paths.txt + + ##====== Sequence Length Distribution (SLD) + awk '/^>>Sequence Length Distribution/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-SLD.txt + echo "${BASE},${BASE}-SLD.txt" >> SLD_file_paths.txt + + ##====== Kmer Content ============ + awk '/^>>Kmer Content/ {flag=1; next} /END_MODULE/ {flag=0} flag' "$BASE"/fastqc_data.txt >"$BASE"-KMC.txt + echo "${BASE},${BASE}-KMC.txt" >> KMC_file_paths.txt + +done +``` + + +## Evaluation Overview + +```{r 'overview'} +PWF_file_paths = read.csv('PWF_file_paths.txt', + header = TRUE, stringsAsFactors = FALSE) +rm('PWF_df') +for(i in 1:nrow(PWF_file_paths)) { + file_path = PWF_file_paths[i,2] + pwf_df = read.csv(file_path, + sep='\t', header=FALSE, stringsAsFactors = FALSE) + colnames(pwf_df) = c('item', PWF_file_paths[i,1]) + if (!exists('PWF_df')) { + PWF_df = pwf_df + } else { + PWF_df = cbind(PWF_df, pwf_df[,2,drop=FALSE]) + } +} +``` + + +```{r} +my_icon = c('ok', 'remove', 'star') +names(my_icon) = c('pass', 'fail', 'warn') +evaluate_list = list() +for (i in colnames(PWF_df)[-1]) { + evaluate_list[[i]] = formatter( + "span", + style = x ~ style("background-color" = ifelse(x =='pass', '#9CD027', ifelse(x == 'fail', '#CC0000', '#FF4E00')), + "color" = "white", + "width" = "50px", + "float" = "left", + "padding-right" = "5px") + ) +} + +formattable(PWF_df, evaluate_list) +``` \ No newline at end of file |
b |
diff -r 000000000000 -r d732d4526c6d 02_fastqc_original_reports.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/02_fastqc_original_reports.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,20 @@ +--- +title: "FastQC original reports" +output: html_document +--- + +```{r 'FastQC original reports', include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + + +Below are links to ***Fastqc*** original html reports. + +```{r 'html report links'} +html_report_list = list() +html_files = list.files('REPORT_OUTPUT_DIR', pattern = '.*html') +for (i in html_files) { + html_report_list[[i]] = tags$li(tags$a(href=i, i)) +} +tags$ul(html_report_list) +``` \ No newline at end of file |
b |
diff -r 000000000000 -r d732d4526c6d 1_per_base_quality_scores.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/1_per_base_quality_scores.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,62 @@ +--- +title: "Per Base Quality Scores" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + + +## Per Base Quality Scores + +```{r} +PBQS_df = data.frame() +PBQS_file_paths = read.csv('PBQS_file_paths.txt', + header = TRUE, stringsAsFactors = FALSE) +for(i in 1:nrow(PBQS_file_paths)) { + # file_path = paste0('REPORT_OUTPUT_DIR/', PBQS_file_paths[i,2]) + file_path = PBQS_file_paths[i,2] + pbqs_df = read.csv(file_path, + sep='\t', header=TRUE, stringsAsFactors = FALSE) %>% + mutate(Base1=as.numeric(str_split_fixed(X.Base, '-', 2)[,1]), + Base2=as.numeric(str_split_fixed(X.Base, '-', 2)[,2])) %>% + (function (df) { + df1 = select(df, -Base2) + df2 = select(df, -Base1) %>% filter(Base2 != '') + colnames(df1) = c(colnames(df1)[1:7], 'Base') + colnames(df2) = c(colnames(df2)[1:7], 'Base') + res = rbind(df1, df2) %>% arrange(Base) + return(res) + }) + pbqs_df$sample_id = rep(PBQS_file_paths[i,1], nrow(pbqs_df)) + PBQS_df = rbind(PBQS_df, pbqs_df) +} +``` + + +```{r} +# datatable(PBQS_df) +max_phred = max(PBQS_df$Mean) + 10 +hchart(PBQS_df, "line", hcaes(x = Base, y = Mean, group = sample_id)) %>% + hc_title( + text = "Per Base Quality Score" + ) %>% + hc_yAxis( + title = list(text = "Mean Base Quality Score"), + min = 0, + max = max_phred, + plotLines = list( + list(label = list(text = "Phred Score = 27"), + width = 2, + dashStyle = "dash", + color = "green", + value = 27), + list(label = list(text = "Phred Score = 20"), + width = 2, + color = "red", + value = 20) + ) + ) %>% + hc_exporting(enabled = TRUE) +``` |
b |
diff -r 000000000000 -r d732d4526c6d 2_per_base_N_content.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2_per_base_N_content.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,58 @@ +--- +title: "Per Base N Content" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + +## Per Base N Content + +```{r} +PBNC_df = data.frame() +PBNC_file_paths = read.csv('PBNC_file_paths.txt', + header = TRUE, stringsAsFactors = FALSE) +for(i in 1:nrow(PBNC_file_paths)) { + # file_path = paste0('REPORT_OUTPUT_DIR/', PBNC_file_paths[i,2]) + file_path = PBNC_file_paths[i,2] + pbnc_df = read.csv(file_path, + sep='\t', header=TRUE, stringsAsFactors = FALSE) %>% + mutate(Base1=as.numeric(str_split_fixed(X.Base, '-', 2)[,1]), + Base2=as.numeric(str_split_fixed(X.Base, '-', 2)[,2])) %>% + (function (df) { + df1 = select(df, -Base2) + df2 = select(df, -Base1) %>% filter(Base2 != '') + colnames(df1) = c(colnames(df1)[1:2], 'Base') + colnames(df2) = c(colnames(df2)[1:2], 'Base') + res = rbind(df1, df2) %>% arrange(Base) + return(res) + }) + pbnc_df$sample_id = rep(PBNC_file_paths[i,1], nrow(pbnc_df)) + PBNC_df = rbind(PBNC_df, pbnc_df) +} +``` + + +```{r} +PBNC_df$N.Count = PBNC_df$N.Count * 100 +max_phred = max(PBNC_df$N.Count) + 5 +hchart(PBNC_df, "line", hcaes(x = as.character(Base), y = N.Count, group = sample_id)) %>% + hc_title( + text = "Per Base N Content" + ) %>% + hc_xAxis( + title = list(text = "Base Position") + ) %>% + hc_yAxis( + title = list(text = "N %"), + plotLines = list( + list(label = list(text = "N = 5%"), + width = 2, + dashStyle = "dash", + color = "red", + value = 5) + ) + ) %>% + hc_exporting(enabled = TRUE) +``` |
b |
diff -r 000000000000 -r d732d4526c6d 3_per_sequence_quality_scores.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3_per_sequence_quality_scores.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,50 @@ +--- +title: "Per Sequence Quality Scores" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + +## Per Sequence Quality Scores + +```{r} +PSQS_df = data.frame() +PSQS_file_paths = read.csv('PSQS_file_paths.txt', + header = TRUE, stringsAsFactors = FALSE) +for(i in 1:nrow(PSQS_file_paths)) { + # file_path = paste0('REPORT_OUTPUT_DIR/', PSQS_file_paths[i,2]) + file_path = PSQS_file_paths[i,2] + psqs_df = read.csv(file_path, + sep='\t', header=TRUE, stringsAsFactors = FALSE) + psqs_df$sample_id = rep(PSQS_file_paths[i,1], nrow(psqs_df)) + PSQS_df = rbind(PSQS_df, psqs_df) +} +``` + + +```{r} +max_phred = max(PSQS_df$X.Quality) + 5 +hchart(PSQS_df, "line", hcaes(x = X.Quality, y = Count, group = sample_id)) %>% + hc_title( + text = "Per Sequence Quality Score" + ) %>% + hc_xAxis( + title = list(text = "Mean Sequence Quality Score"), + min = 0, + max = max_phred, + plotLines = list( + list(label = list(text = "Phred Score = 27"), + width = 2, + dashStyle = "dash", + color = "green", + value = 27), + list(label = list(text = "Phred Score = 20"), + width = 2, + color = "red", + value = 20) + ) + ) %>% + hc_exporting(enabled = TRUE) +``` |
b |
diff -r 000000000000 -r d732d4526c6d 4_per_sequence_GC_content.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4_per_sequence_GC_content.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,38 @@ +--- +title: "Per Sequence GC Content" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + +## Per Sequence GC Content + + +```{r} +PSGC_df = data.frame() +PSGC_file_paths = read.csv('PSGC_file_paths.txt', + header = TRUE, stringsAsFactors = FALSE) +for(i in 1:nrow(PSGC_file_paths)) { + # file_path = paste0('REPORT_OUTPUT_DIR/', PSGC_file_paths[i,2]) + file_path = PSGC_file_paths[i,2] + psgc_df = read.csv(file_path, + sep='\t', header=TRUE, stringsAsFactors = FALSE) + psgc_df$sample_id = rep(PSGC_file_paths[i,1], nrow(psgc_df)) + PSGC_df = rbind(PSGC_df, psgc_df) +} +``` + + +```{r} +max_phred = max(PSGC_df$Count) + 5 +hchart(PSGC_df, "line", hcaes(x = X.GC.Content, y = Count, group = sample_id)) %>% + hc_title( + text = "Per Sequence GC Content" + ) %>% + hc_xAxis( + title = list(text = "% GC") + ) %>% + hc_exporting(enabled = TRUE) +``` |
b |
diff -r 000000000000 -r d732d4526c6d 5_per_base_sequence_content.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/5_per_base_sequence_content.Rmd Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,45 @@ +--- +title: "Per Base Sequence Content" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = ECHO) +``` + +## Per Base Sequence Content + +```{r} +PBSC_df = data.frame() +PBSC_file_paths = read.csv('PBSC_file_paths.txt', + header = TRUE, stringsAsFactors = FALSE) +for(i in 1:nrow(PBSC_file_paths)) { + # file_path = paste0('REPORT_OUTPUT_DIR/', PBSC_file_paths[i,2]) + file_path = PBSC_file_paths[i,2] + pbsc_df = read.csv(file_path, + sep='\t', header=TRUE, stringsAsFactors = FALSE) %>% + mutate(Base1=as.numeric(str_split_fixed(X.Base, '-', 2)[,1]), + Base2=as.numeric(str_split_fixed(X.Base, '-', 2)[,2])) %>% + (function (df) { + df1 = select(df, -Base2) + df2 = select(df, -Base1) %>% filter(Base2 != '') + colnames(df1) = c(colnames(df1)[1:5], 'Base') + colnames(df2) = c(colnames(df2)[1:5], 'Base') + res = rbind(df1, df2) %>% arrange(Base) + return(res) + }) + pbsc_df$sample_id = rep(PBSC_file_paths[i,1], nrow(pbsc_df)) + PBSC_df = rbind(PBSC_df, pbsc_df) +} +``` + + +```{r out.width="100%"} +PBSC_df_2 = select(PBSC_df, -X.Base) %>% + melt(id = c('Base', 'sample_id'), value.name = 'base_percentage') +p = ggplot(data = PBSC_df_2, aes(x = Base, y = base_percentage, group = variable, color = variable)) + + geom_line() + + facet_wrap(~ sample_id) +ggplotly(p) +``` + |
b |
diff -r 000000000000 -r d732d4526c6d _site.yml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/_site.yml Tue Aug 08 10:14:46 2017 -0400 |
b |
@@ -0,0 +1,29 @@ +name: "FastQC Website" +output_dir: "my_site" +navbar: + title: "FastQC" + type: inverse + left: + - text: "Home" + icon: fa-home + href: index.html + - text: "Evaluation Overview" + href: 01_evaluation_overview.html + - text: "Evaluation Items" + menu: + - text: "Per Base Quality Scores" + href: 1_per_base_quality_scores.html + - text: "Per Base N Content" + href: 2_per_base_N_content.html + - text: "Per Sequence Quality Scores" + href: 3_per_sequence_quality_scores.html + - text: "Per Sequence GC Content" + href: 4_per_sequence_GC_content.html + - text: "Per Base Sequence Content" + href: 5_per_base_sequence_content.html + - text: "Original FastQC Reports" + href: 02_fastqc_original_reports.html +output: + html_document: + theme: cosmo + highlight: textmate \ No newline at end of file |
b |
diff -r 000000000000 -r d732d4526c6d fastqc_site.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fastqc_site.xml Tue Aug 08 10:14:46 2017 -0400 |
[ |
@@ -0,0 +1,125 @@ +<tool id="fastqc_site" name="Fastqc Site" version="1.0.0"> + <requirements> + <requirement type="package" version="1.15.2">pandoc</requirement> + <requirement type="package" version="1.14.1">bioconductor-deseq2</requirement> + <requirement type="package" version="1.20.0">r-getopt</requirement> + <requirement type="package" version="1.2">r-rmarkdown</requirement> + <requirement type="package" version="1.8.4">r-plyr</requirement> + <requirement type="package" version="1.1.0">r-stringr</requirement> + <requirement type="package" version="0.5.0">r-highcharter</requirement> + <requirement type="package" version="0.2">r-dt</requirement> + <requirement type="package" version="1.4.2">r-reshape2</requirement> + <requirement type="package" version="4.5.6">r-plotly</requirement> + <requirement type="package" version="0.2.0.1">r-formattable</requirement> + <requirement type="package" version="0.3.5">r-htmltools</requirement> + <requirement type="package" version="0.11.5">fastqc</requirement> + </requirements> + <description> + Implements FastQC analysis and display results in R Markdown website. + </description> + <stdio> + <regex match="Execution halted" + source="both" + level="fatal" + description="Execution halted." /> + <regex match="Error in" + source="both" + level="fatal" + description="An undefined error occured, please check your intput carefully and contact your administrator." /> + <regex match="Fatal error" + source="both" + level="fatal" + description="An undefined error occured, please check your intput carefully and contact your administrator." /> + </stdio> + <command> + <![CDATA[ + + Rscript '${__tool_directory__}/fastqc_site_render.R' + + ## 1. input data + -r $reads + -e $echo + + ## 2. output report and report site directory + -o $fastqc_site + -d $fastqc_site.files_path + + ## 3. Rmd templates sitting in the tool directory + + ## _site.yml and index.Rmd template files + -s '${__tool_directory__}/_site.yml' + -i '${__tool_directory__}/index.Rmd' + + ## other Rmd body template files + -p '${__tool_directory__}/01_evaluation_overview.Rmd' + -a '${__tool_directory__}/02_fastqc_original_reports.Rmd' + -b '${__tool_directory__}/1_per_base_quality_scores.Rmd' + -c '${__tool_directory__}/2_per_base_N_content.Rmd' + -f '${__tool_directory__}/3_per_sequence_quality_scores.Rmd' + -g '${__tool_directory__}/4_per_sequence_GC_content.Rmd' + -h '${__tool_directory__}/5_per_base_sequence_content.Rmd' + + ]]> + </command> + <inputs> + <param format="fastq,fastq.gz,fastq.bz2,bam,sam" multiple="true" name="reads" type="data" label="Short reads data from history" /> + <param type="boolean" name="echo" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Display analysis code in report?" /> + </inputs> + <outputs> + <data format="html" name="fastqc_site" label="fastqc site" /> + </outputs> + <citations> + <citation type="bibtex"> + @misc{bioinformatics2014fastqc, + title={FastQC}, + author={Bioinformatics, Babraham}, + year={2014} + } + </citation> + <citation type="bibtex"> + @article{allaire2016rmarkdown, + title={rmarkdown: Dynamic Documents for R, 2016}, + author={Allaire, J and Cheng, Joe and Xie, Yihui and McPherson, Jonathan and Chang, Winston and Allen, Jeff and Wickham, Hadley and Atkins, Aron and Hyndman, Rob}, + journal={R package version 0.9}, + volume={6}, + year={2016} + } + </citation> + <citation type="bibtex"> + @book{xie2015dynamic, + title={Dynamic Documents with R and knitr}, + author={Xie, Yihui}, + volume={29}, + year={2015}, + publisher={CRC Press} + } + </citation> + <citation type="bibtex"> + @Manual{, + title = {plotly: Create Interactive Web Graphics via 'plotly.js'}, + author = {Carson Sievert and Chris Parmer and Toby Hocking and Scott Chamberlain and Karthik Ram and Marianne Corvellec and Pedro Despouy}, + year = {2017}, + note = {R package version 4.6.0}, + url = {https://CRAN.R-project.org/package=plotly}, + } + </citation> + <citation type="bibtex"> + @Manual{, + title = {highcharter: A Wrapper for the 'Highcharts' Library}, + author = {Joshua Kunst}, + year = {2017}, + note = {R package version 0.5.0}, + url = {https://CRAN.R-project.org/package=highcharter}, + } + </citation> + <citation type="bibtex"> + @Manual{, + title = {formattable: Create 'Formattable' Data Structures}, + author = {Kun Ren and Kenton Russell}, + year = {2016}, + note = {R package version 0.2.0.1}, + url = {https://CRAN.R-project.org/package=formattable}, + } + </citation> + </citations> +</tool> \ No newline at end of file |
b |
diff -r 000000000000 -r d732d4526c6d fastqc_site_render.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fastqc_site_render.R Tue Aug 08 10:14:46 2017 -0400 |
b |
@@ -0,0 +1,196 @@ +##======= Handle arguments from command line ======== +# setup R error handline to go to stderr +options(show.error.messages=FALSE, + error=function(){ + cat(geterrmessage(), file=stderr()) + quit("no", 1, F) + }) + +# we need that to not crash galaxy with an UTF8 error on German LC settings. +loc = Sys.setlocale("LC_MESSAGES", "en_US.UTF-8") + +# suppress warning +options(warn = -1) + +options(stringsAsFactors=FALSE, useFancyQuotes=FALSE) +args = commandArgs(trailingOnly=TRUE) + +suppressPackageStartupMessages({ + library(getopt) + library(tools) +}) + +# column 1: the long flag name +# column 2: the short flag alias. A SINGLE character string +# column 3: argument mask +# 0: no argument +# 1: argument required +# 2: argument is optional +# column 4: date type to which the flag's argument shall be cast. +# possible values: logical, integer, double, complex, character. +spec_list=list() + +##------- 1. input data --------------------- +spec_list$READS = c('reads', 'r', '1', 'character') +spec_list$ECHO = c('echo', 'e', '1', 'character') + +##--------2. output report and report site directory -------------- +spec_list$FASTQC_SITE = c('fastqc_site', 'o', '1', 'character') +spec_list$FASTQC_SITE_DIR = c('fastqc_site_dir', 'd', '1', 'character') + +##--------3. Rmd templates sitting in the tool directory ---------- + + ## _site.yml and index.Rmd files + spec_list$SITE_YML = c('site_yml', 's', 1, 'character') + spec_list$INDEX_Rmd = c('index_rmd', 'i', 1, 'character') + + ## other Rmd body template files + spec_list$x01 = c('x01_evaluation_overview', 'p', '1', 'character') + spec_list$x02 = c('x02_fastqc_original_reports', 'a', '1', 'character') + spec_list$x1 = c('x1_per_base_quality_scores', 'b', '1', 'character') + spec_list$x2 = c('x2_per_base_N_content', 'c', '1', 'character') + spec_list$x3 = c('x3_per_sequence_quality_scores', 'f', '1', 'character') + spec_list$x4 = c('x4_per_sequence_GC_content', 'g', '1', 'character') + spec_list$x5 = c('x5_per_base_sequence_content', 'h', '1', 'character') + +##------------------------------------------------------------------ + +spec = t(as.data.frame(spec_list)) +opt = getopt(spec) +# arguments are accessed by long flag name (the first column in the spec matrix) +# NOT by element name in the spec_list +# example: opt$help, opt$expression_file +##====== End of arguments handling ========== + +#------ Load libraries --------- +library(rmarkdown) +library(plyr) +library(stringr) +library(dplyr) +library(highcharter) +library(DT) +library(reshape2) +library(Kmisc) +library(plotly) +library(formattable) +library(htmltools) + + +#----- 1. create the report directory ------------------------ +paste0('mkdir -p ', opt$fastqc_site_dir) %>% + system() + +#----- 2. generate Rmd files with Rmd templates -------------- +# a. templates without placeholder variables: +# copy templates from tool directory to the working directory. +# b. templates with placeholder variables: +# substitute variables with user input values and place them in the working directory. + + + #----- Copy index.Rmd and _site.yml files to job working direcotry ----- + file.copy(opt$index_rmd, 'index.Rmd', recursive=TRUE) + file.copy(opt$site_yml, '_site.yml', recursive=TRUE) + #--------------------------------------------------------- + + #----- 01_evaluation_overview.Rmd ----------------------- + readLines(opt$x01_evaluation_overview) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + gsub('READS', opt$reads, x) + }) %>% + (function(x) { + gsub('REPORT_OUTPUT_DIR', opt$fastqc_site_dir, x) + }) %>% + (function(x) { + fileConn = file('01_evaluation_overview.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + #----- 1_per_base_quality_scores.Rmd -------------------- + readLines(opt$x1_per_base_quality_scores) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + fileConn = file('1_per_base_quality_scores.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + #----- 2_per_base_N_content.Rmd ------------------------- + readLines(opt$x2_per_base_N_content) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + fileConn = file('2_per_base_N_content.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + #----- 3_per_sequence_quality_scores.Rmd ---------------- + readLines(opt$x3_per_sequence_quality_scores) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + fileConn = file('3_per_sequence_quality_scores.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + + #----- 4_per_sequence_GC_content.Rmd -------------------- + readLines(opt$x4_per_sequence_GC_content) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + fileConn = file('4_per_sequence_GC_content.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + + #----- 5_per_base_sequence_content.Rmd ------------------ + readLines(opt$x5_per_base_sequence_content) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + fileConn = file('5_per_base_sequence_content.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + #----- 02_fastqc_original_reports.Rmd ------------------- + readLines(opt$x02_fastqc_original_reports) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + gsub('REPORT_OUTPUT_DIR', opt$fastqc_site_dir, x) + }) %>% + (function(x) { + fileConn = file('02_fastqc_original_reports.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + + +#------ 3. render all Rmd files with render_site() -------- +render_site() + + +#-------4. manipulate outputs ----------------------------- +# a. copy index.html to the report output path +# b. copy all files in 'my_site' to the report output directory +file.copy('my_site/index.html', opt$fastqc_site, recursive=TRUE) +paste0('cp -r my_site/* ', opt$fastqc_site_dir) %>% + system() + + |
b |
diff -r 000000000000 -r d732d4526c6d index.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/index.Rmd Tue Aug 08 10:14:46 2017 -0400 |
b |
@@ -0,0 +1,20 @@ +--- +title: "FastQC Report" +output: html_document +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + + + +## References + +* Andrews, Simon. "FastQC: a quality control tool for high throughput sequence data." (2010): 175-176. +* Goecks, Jeremy, Anton Nekrutenko, and James Taylor. "Galaxy: a comprehensive approach for supporting accessible, reproducible, and transparent computational research in the life sciences." Genome biology 11.8 (2010): R86. +* Afgan, Enis, et al. "The Galaxy platform for accessible, reproducible and collaborative biomedical analyses: 2016 update." Nucleic acids research (2016): gkw343. +* Highcharts. https://www.highcharts.com/. (access by May 26, 2017). +* R Core Team (2017). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/. +* Joshua Kunst (2017). highcharter: A Wrapper for the 'Highcharts' Library. R package version 0.5.0. https://CRAN.R-project.org/package=highcharter +* Carson Sievert, Chris Parmer, Toby Hocking, Scott Chamberlain, Karthik Ram, Marianne Corvellec and Pedro Despouy (2017). plotly: Create Interactive Web Graphics via 'plotly.js'. R package version 4.6.0. https://CRAN.R-project.org/package=plotly |