Previous changeset 1:c5c626653593 (2017-12-26) Next changeset 3:8354d118baab (2017-12-27) |
Commit message:
update |
added:
rmarkdown_samtools_flagstat.Rmd rmarkdown_samtools_flagstat.xml rmarkdown_samtools_flagstat_render.R |
removed:
rmarkdown_flagstat.Rmd rmarkdown_flagstat.xml rmarkdown_flagstat_render.R |
b |
diff -r c5c626653593 -r 77e8e7bc5b44 rmarkdown_flagstat.Rmd --- a/rmarkdown_flagstat.Rmd Tue Dec 26 20:42:47 2017 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 |
b |
@@ -1,25 +0,0 @@ ---- -title: 'samtools flagstat' -output: - html_document: - number_sections: true - toc: true - theme: cosmo - highlight: tango ---- - -```{r setup, include=FALSE, warning=FALSE, message=FALSE} -knitr::opts_chunk$set( - echo = ECHO -) -``` - - -# Code for computational analysis - -```{r 'run flagstat'} -command = paste0('samtools flagstat ', opt$input_bam, ' > report.txt') -system(command) -``` - - |
b |
diff -r c5c626653593 -r 77e8e7bc5b44 rmarkdown_flagstat.xml --- a/rmarkdown_flagstat.xml Tue Dec 26 20:42:47 2017 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 |
[ |
@@ -1,53 +0,0 @@ -<tool id="rmarkdown_flagstat" name="Flagstat" version="1.0.0"> - <requirements> - <requirement type="package" version="1.15.0.6-0">pandoc</requirement> - <requirement type="package" version="1.20.0">r-getopt</requirement> - <requirement type="package" version="1.3">r-rmarkdown</requirement> - <requirement type="package" version="0.3.5">r-htmltools</requirement> - <requirement type="package" version="0.5.0">r-dplyr</requirement> - <requirement type="package" version="1.4.1">samtools</requirement> - </requirements> - <description>Descriptive stats for BAM dataset</description> - <stdio> - <regex source="stderr" match="XXX" level="warning" description="Check the warnings_and_errors.txt file for more details."/> - </stdio> - <command><![CDATA[ Rscript '${__tool_directory__}/tool_template_render.R' - -e $echo - -b $input_bam - -r $report - -d $report.files_path - -s $sink_message - -t '${__tool_directory__}/tool_template.Rmd - ]]></command> - <inputs> - <param type="boolean" name="echo" label="Display analysis code in report?" optional="False" checked="False" truevalue="TRUE" falsevalue="FALSE"/> - <param type="data" name="input_bam" label="BAM file" optional="False" format="bam"/> - </inputs> - <outputs> - <data name="report" format="html" label="tool name report" hidden="false"/> - <data name="sink_message" format="txt" label="Warnings and Errors" from_work_dir="warnings_and_errors.txt" hidden="false"/> - </outputs> - <help><![CDATA[Provides counts for each of 13 categories based primarily on bit flags in the FLAG field. Each category in the output is broken down into QC pass and QC fail, which is presented as "#PASS + #FAIL" followed by a description of the category.]]></help> - <citations> - <citation><![CDATA[ - @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"><![CDATA[ -@article{li2009sequence, - title={The sequence alignment/map format and SAMtools}, - author={Li, Heng and Handsaker, Bob and Wysoker, Alec and Fennell, Tim and Ruan, Jue and Homer, Nils and Marth, Gabor and Abecasis, Goncalo and Durbin, Richard}, - journal={Bioinformatics}, - volume={25}, - number={16}, - pages={2078--2079}, - year={2009}, - publisher={Oxford University Press} -}]]></citation> - </citations> -</tool> |
b |
diff -r c5c626653593 -r 77e8e7bc5b44 rmarkdown_flagstat_render.R --- a/rmarkdown_flagstat_render.R Tue Dec 26 20:42:47 2017 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 |
b |
@@ -1,77 +0,0 @@ -library(getopt) -library(rmarkdown) -library(htmltools) -library(dplyr) - -##============ Sink warnings and errors to a file ============== -## use the sink() function to wrap all code within it. -##============================================================== -zz = file('warnings_and_errors.txt') -sink(zz) -sink(zz, type = 'message') - ##---------below is the code for rendering .Rmd templates----- - - ##=============STEP 1: handle command line arguments========== - ## - ##============================================================ - # 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. - #------------------------------------------------------------- - #++++++++++++++++++++ Best practice ++++++++++++++++++++++++++ - # 1. short flag alias should match the flag in the command section in the XML file. - # 2. long flag name can be any legal R variable names - # 3. two names in args_list can have common string but one name should not be a part of another name. - # for example, one name is "ECHO", if another name is "ECHO_XXX", it will cause problems. - #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - args_list=list() - ##------- 1. input data --------------------- - args_list$ECHO = c('echo', 'e', '1', 'character') - ##--------2. output report and outputs -------------- - args_list$REPORT_HTML = c('report_html', 'r', '1', 'character') - args_list$REPORT_DIR = c('report_dir', 'd', '1', 'character') - args_list$SINK_MESSAGE = c('sink_message', 's', '1', 'character') - ##--------3. .Rmd templates in the tool directory ---------- - args_list$TOOL_TEMPLATE_RMD = c('tool_template_rmd', 't', '1', 'character') - ##----------------------------------------------------------- - opt = getopt(t(as.data.frame(args_list))) - - - - ##=======STEP 2: create report directory (optional)========== - ## - ##=========================================================== - dir.create(opt$report_dir) - - ##=STEP 3: replace placeholders in .Rmd with argument values= - ## - ##=========================================================== - #++ need to replace placeholders with args values one by one+ - readLines(opt$tool_template_rmd) %>% - (function(x) { - gsub('ECHO', opt$echo, x) - }) %>% - (function(x) { - gsub('REPORT_DIR', opt$output_dir, x) - }) %>% - (function(x) { - fileConn = file('tool_template.Rmd') - writeLines(x, con=fileConn) - close(fileConn) - }) - - - ##=============STEP 4: render .Rmd templates================= - ## - ##=========================================================== - render('tool_template.Rmd', output_file = opt$report_html) - - - ##--------end of code rendering .Rmd templates---------------- -sink() -##=========== End of sinking output============================= |
b |
diff -r c5c626653593 -r 77e8e7bc5b44 rmarkdown_samtools_flagstat.Rmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rmarkdown_samtools_flagstat.Rmd Wed Dec 27 15:19:43 2017 -0500 |
b |
@@ -0,0 +1,32 @@ +--- +title: 'Reads alignment stats' +output: + html_document: + number_sections: true + toc: true + theme: cosmo + highlight: tango +--- + +```{r setup, include=FALSE, warning=FALSE, message=FALSE} +knitr::opts_chunk$set( + echo = ECHO, + error = TRUE +) +``` + + +# Reads alignment stats on `r opt$input_bam_name` + +```{r 'flagstat'} +command = paste0('samtools flagstat ', opt$input_bam, ' > ', paste0(opt$report_dir, '/report.txt')) +system(command) +df = readLines(paste0(opt$report_dir, '/report.txt')) %>% + str_replace('(\\d+\\s+\\+\\s+\\d+)\\s+', '\\1,') %>% + str_split(',') %>% + as.data.frame() %>% t() +rownames(df) = NULL +colnames(df) = c('PASS + FAIL', 'Description') +knitr::kable(df) +``` + |
b |
diff -r c5c626653593 -r 77e8e7bc5b44 rmarkdown_samtools_flagstat.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rmarkdown_samtools_flagstat.xml Wed Dec 27 15:19:43 2017 -0500 |
[ |
@@ -0,0 +1,55 @@ +<tool id="rmarkdown_samtools_flagstat" name="R Markdown samtools flagstat" version="1.0.0"> + <requirements> + <requirement type="package" version="1.15.0.6-0">pandoc</requirement> + <requirement type="package" version="1.20.0">r-getopt</requirement> + <requirement type="package" version="1.3">r-rmarkdown</requirement> + <requirement type="package" version="0.3.5">r-htmltools</requirement> + <requirement type="package" version="0.5.0">r-dplyr</requirement> + <requirement type="package" version="1.4.1">samtools</requirement> + </requirements> + <description>simple stats on BAM file</description> + <stdio> + <regex source="stderr" match="XXX" level="warning" description="Check the warnings_and_errors.txt file for more details."/> + </stdio> + <command><![CDATA[ Rscript '${__tool_directory__}/rmarkdown_samtools_flagstat_render.R' + -e $echo + -b $input_bam + -n $input_bam.name + -r $report + -d $report.files_path + -s $sink_message + -t '${__tool_directory__}/rmarkdown_samtools_flagstat.Rmd' + ]]></command> + <inputs> + <param type="boolean" name="echo" label="Display analysis code in report?" optional="False" checked="False" truevalue="TRUE" falsevalue="FALSE"/> + <param type="data" name="input_bam" label="BAM file" optional="False"/> + </inputs> + <outputs> + <data name="report" format="html" label="tool name report" hidden="false"/> + <data name="sink_message" format="txt" label="Warnings and Errors" from_work_dir="warnings_and_errors.txt" hidden="false"/> + </outputs> + <help><![CDATA[<code>samtools flagstat in.sam|in.bam|in.cram</code> + +Does a full pass through the input file to calculate and print statistics to stdout]]></help> + <citations> + <citation><![CDATA[ + @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"><![CDATA[@article{li2009sequence, + title={The sequence alignment/map format and SAMtools}, + author={Li, Heng and Handsaker, Bob and Wysoker, Alec and Fennell, Tim and Ruan, Jue and Homer, Nils and Marth, Gabor and Abecasis, Goncalo and Durbin, Richard}, + journal={Bioinformatics}, + volume={25}, + number={16}, + pages={2078--2079}, + year={2009}, + publisher={Oxford University Press} +}]]></citation> + </citations> +</tool> |
b |
diff -r c5c626653593 -r 77e8e7bc5b44 rmarkdown_samtools_flagstat_render.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rmarkdown_samtools_flagstat_render.R Wed Dec 27 15:19:43 2017 -0500 |
b |
@@ -0,0 +1,80 @@ +library(getopt) +library(rmarkdown) +library(htmltools) +library(dplyr) +library(stringr) + +##============ Sink warnings and errors to a file ============== +## use the sink() function to wrap all code within it. +##============================================================== +zz = file('warnings_and_errors.txt') +sink(zz) +sink(zz, type = 'message') + ##---------below is the code for rendering .Rmd templates----- + + ##=============STEP 1: handle command line arguments========== + ## + ##============================================================ + # 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. + #------------------------------------------------------------- + #++++++++++++++++++++ Best practice ++++++++++++++++++++++++++ + # 1. short flag alias should match the flag in the command section in the XML file. + # 2. long flag name can be any legal R variable names + # 3. two names in args_list can have common string but one name should not be a part of another name. + # for example, one name is "ECHO", if another name is "ECHO_XXX", it will cause problems. + #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + args_list=list() + ##------- 1. input data --------------------- + args_list$ECHO = c('echo', 'e', '1', 'character') + args_list$INPUT_BAM = c('input_bam', 'b', '1', 'character') + args_list$INPUT_BAM_NAME = c('input_bam_name', 'n', '1', 'character') + ##--------2. output report and outputs -------------- + args_list$REPORT_HTML = c('report_html', 'r', '1', 'character') + args_list$REPORT_DIR = c('report_dir', 'd', '1', 'character') + args_list$SINK_MESSAGE = c('sink_message', 's', '1', 'character') + ##--------3. .Rmd templates in the tool directory ---------- + args_list$TOOL_TEMPLATE_RMD = c('tool_template_rmd', 't', '1', 'character') + ##----------------------------------------------------------- + opt = getopt(t(as.data.frame(args_list))) + + + + ##=======STEP 2: create report directory (optional)========== + ## + ##=========================================================== + dir.create(opt$report_dir) + + ##=STEP 3: replace placeholders in .Rmd with argument values= + ## + ##=========================================================== + #++ need to replace placeholders with args values one by one+ + readLines(opt$tool_template_rmd) %>% + (function(x) { + gsub('ECHO', opt$echo, x) + }) %>% + (function(x) { + gsub('REPORT_DIR', opt$report_dir, x) + }) %>% + (function(x) { + fileConn = file('rmarkdown_samtools_flagstat.Rmd') + writeLines(x, con=fileConn) + close(fileConn) + }) + + + ##=============STEP 4: render .Rmd templates================= + ## + ##=========================================================== + render('rmarkdown_samtools_flagstat.Rmd', output_file = opt$report_html) + + + ##--------end of code rendering .Rmd templates---------------- +sink() +##=========== End of sinking output============================= |