diff --git a/data_structures/flag_filter.wdl b/data_structures/flag_filter/flag_filter.wdl similarity index 100% rename from data_structures/flag_filter.wdl rename to data_structures/flag_filter/flag_filter.wdl diff --git a/data_structures/flag_filter/module.json b/data_structures/flag_filter/module.json new file mode 100644 index 000000000..4ee5db210 --- /dev/null +++ b/data_structures/flag_filter/module.json @@ -0,0 +1,11 @@ +{ + "name": "flag_filter", + "version": "1.0.0", + "license": "MIT", + "description": "The `flag_filter` WDL module.", + "authors": [ + "Ari Frantz " + ], + "entrypoint": "flag_filter.wdl", + "repository": "https://github.com/stjudecloud/workflows.git" +} diff --git a/docker/mako/Dockerfile b/docker/mako/Dockerfile new file mode 100644 index 000000000..19bc0c5b2 --- /dev/null +++ b/docker/mako/Dockerfile @@ -0,0 +1,3 @@ +FROM rust:1.97 + +RUN cargo install fg-mako@0.1.3 diff --git a/docker/mako/package.json b/docker/mako/package.json new file mode 100644 index 000000000..578e02e7d --- /dev/null +++ b/docker/mako/package.json @@ -0,0 +1,5 @@ +{ + "name": "mako", + "version": "0.1.3", + "revision": "0" +} \ No newline at end of file diff --git a/tools/bwa.wdl b/tools/alignment/bwa.wdl similarity index 100% rename from tools/bwa.wdl rename to tools/alignment/bwa.wdl diff --git a/tools/alignment/module.json b/tools/alignment/module.json new file mode 100644 index 000000000..6c450494a --- /dev/null +++ b/tools/alignment/module.json @@ -0,0 +1,31 @@ +{ + "name": "alignment", + "version": "1.0.0", + "license": "MIT", + "authors": [ + { + "name": "Ari Frantz", + "email": "Ari.Frantz@STJUDE.ORG" + }, + { + "name": "Andrew Thrasher", + "email": "Andrew.Thrasher@STJUDE.ORG" + } + ], + "description": "Module for handling SAM/BAM files", + "repository": "https://github.com/stjudecloud/workflows", + "tools": [ + { + "name": "bwa", + "version": "0.7.17", + "license": "MIT", + "homepage": "https://github.com/lh3/bwa" + }, + { + "name": "star", + "version": "2.7.11b", + "license": "MIT", + "homepage": "https://github.com/alexdobin/STAR" + } + ] +} \ No newline at end of file diff --git a/tools/star.wdl b/tools/alignment/star.wdl similarity index 100% rename from tools/star.wdl rename to tools/alignment/star.wdl diff --git a/tools/arriba.wdl b/tools/arriba/index.wdl similarity index 100% rename from tools/arriba.wdl rename to tools/arriba/index.wdl diff --git a/tools/arriba/module.json b/tools/arriba/module.json new file mode 100644 index 000000000..3f1b6360c --- /dev/null +++ b/tools/arriba/module.json @@ -0,0 +1,19 @@ +{ + "name": "arriba", + "version": "1.0.0", + "license": "MIT", + "description": "Module for gene fusion detection in RNA-Seq", + "authors": [ + "Andrew Thrasher ", + "Ari Frantzz " + ], + "repository": "https://github.com/stjudecloud/workflows.git", + "tools": [ + { + "name": "arriba", + "version": "2.4.0", + "license": "MIT", + "homepage": "https://github.com/suhrig/arriba" + } + ] +} diff --git a/tools/fq.wdl b/tools/fq/fq.wdl similarity index 100% rename from tools/fq.wdl rename to tools/fq/fq.wdl diff --git a/tools/fq/module.json b/tools/fq/module.json new file mode 100644 index 000000000..c2ebd99dc --- /dev/null +++ b/tools/fq/module.json @@ -0,0 +1,20 @@ +{ + "name": "fq", + "version": "1.0.0", + "license": "MIT", + "authors": [ + "Ari Frantz ", + "Andrew Thrasher " + ], + "description": "Module for handling FASTQ files", + "repository": "https://github.com/stjudecloud/workflows", + "entrypoint": "fq.wdl", + "tools": [ + { + "name": "fq", + "version": "0.12.0", + "license": "MIT", + "homepage": "https://github.com/stjude-rust-labs/fq" + } + ] +} diff --git a/tools/test/fq.yaml b/tools/fq/test/fq.yaml similarity index 100% rename from tools/test/fq.yaml rename to tools/fq/test/fq.yaml diff --git a/tools/mako.wdl b/tools/mako.wdl new file mode 100644 index 000000000..11966a748 --- /dev/null +++ b/tools/mako.wdl @@ -0,0 +1,69 @@ +version 1.4 + +enum SortOrder[String] { + queryname = "queryname", + coordinate = "coordinate", + queryname_natural = "queryname::natural", + template_coordinate = "template-coordinate", +} + +task sort { + meta { + description: "Sorts the input BAM file" + outputs: { + sorted_bam: "The input BAM after it has been sorted according to `sort_order`", + } + } + + parameter_meta { + bam: "Input BAM format file to sort" + sort_order: { + description: "Order by which to sort the input BAM", + choices: [ + "queryname", + "coordinate", + "queryname::natural", + "template-coordinate", + ], + group: "Common", + } + prefix: "Prefix for the sorted BAM file and accessory files. The extension `.bam` will be added." + verify: "Only verify sort order. Does not sort the BAM file." + memory_gb: "RAM to allocate for task, specified in GB" + modify_disk_size_gb: "Add to or subtract from dynamic disk space allocation. Default disk size is determined by the size of the inputs. Specified in GB." + } + + input { + File bam + String sort_order = "coordinate" + String prefix = basename(bam, ".bam") + ".sorted" + Boolean verify = false + Int memory_gb = 25 + Int modify_disk_size_gb = 0 + } + + Float bam_size = size(bam, "GB") + Int disk_size_gb = ceil(bam_size * 4) + 10 + modify_disk_size_gb + + String outfile_name = prefix + ".bam" + + command <<< + set -euo pipefail + + mako sort \ + -i "~{bam}" \ + ~{if verify then "--verify" else "-o \"~{outfile_name}\""} \ + --order "~{sort_order}" + >>> + + output { + File sorted_bam = outfile_name + } + + requirements { + memory: "~{memory_gb} GB" + disks: "~{disk_size_gb} GB" + container: "ghcr.io/stjudecloud/mako:0.1.3-0" + maxRetries: 1 + } +} \ No newline at end of file diff --git a/tools/samtools/module.json b/tools/samtools/module.json new file mode 100644 index 000000000..84b71be96 --- /dev/null +++ b/tools/samtools/module.json @@ -0,0 +1,25 @@ +{ + "name": "samtools", + "version": "1.0.0", + "license": "MIT", + "authors": [ + "Ari Frantz ", + "Andrew Thrasher " + ], + "description": "Module for handling SAM/BAM files", + "repository": "https://github.com/stjudecloud/workflows", + "entrypoint": "samtools.wdl", + "tools": [ + { + "name": "samtools", + "version": "1.19.2", + "license": "MIT", + "homepage": "https://www.htslib.org/" + } + ], + "dependencies": { + "flag_filter": { + "path": "../../data_structures/flag_filter" + } + } +} diff --git a/tools/samtools.wdl b/tools/samtools/samtools.wdl similarity index 99% rename from tools/samtools.wdl rename to tools/samtools/samtools.wdl index ace383ece..d8ca94acc 100755 --- a/tools/samtools.wdl +++ b/tools/samtools/samtools.wdl @@ -1,7 +1,8 @@ ## [Homepage](http://samtools.sourceforge.net/) -version 1.1 +version 1.4 -import "../data_structures/flag_filter.wdl" +#import "../../data_structures/flag_filter.wdl" +import * from flag_filter task quickcheck { meta { diff --git a/tools/test/samtools.yaml b/tools/samtools/test/samtools.yaml similarity index 100% rename from tools/test/samtools.yaml rename to tools/samtools/test/samtools.yaml diff --git a/workflows/chipseq/chipseq-standard.wdl b/workflows/chipseq/chipseq-standard.wdl index 5f7296726..cea805720 100755 --- a/workflows/chipseq/chipseq-standard.wdl +++ b/workflows/chipseq/chipseq-standard.wdl @@ -5,9 +5,9 @@ import "../../tools/deeptools.wdl" import "../../tools/fastp.wdl" as fp import "../../tools/md5sum.wdl" import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" +import "../../tools/samtools/samtools.wdl" import "../../tools/util.wdl" -import "../general/bam-to-fastqs.wdl" as b2fq +import "../general/bam-to-fastqs/bam-to-fastqs.wdl" as b2fq import "https://raw.githubusercontent.com/stjude/seaseq/2.3/workflows/workflows/mapping.wdl" as seaseq_map import "https://raw.githubusercontent.com/stjude/seaseq/3.0/workflows/tasks/samtools.wdl" diff --git a/workflows/dnaseq/dnaseq-core.wdl b/workflows/dnaseq/dnaseq-core.wdl index 21a1d3990..f30a7164a 100644 --- a/workflows/dnaseq/dnaseq-core.wdl +++ b/workflows/dnaseq/dnaseq-core.wdl @@ -1,10 +1,10 @@ ## **WARNING:** this workflow is experimental! Use at your own risk! -version 1.1 +version 1.4 -import "../../tools/bwa.wdl" +import "../../tools/alignment/bwa.wdl" import "../../tools/fastp.wdl" as fp import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" +import {index} from samtools import "../../tools/util.wdl" import "../general/samtools-merge.wdl" as samtools_merge_wf @@ -138,7 +138,7 @@ workflow dnaseq_core_experimental { use_all_cores, } - call samtools.index { input: + call index { input: bam = merge.merged_bam, } diff --git a/workflows/dnaseq/dnaseq-standard-fastq.wdl b/workflows/dnaseq/dnaseq-standard-fastq.wdl index fdf48606b..4dbc098bc 100644 --- a/workflows/dnaseq/dnaseq-standard-fastq.wdl +++ b/workflows/dnaseq/dnaseq-standard-fastq.wdl @@ -1,8 +1,8 @@ ## **WARNING:** this workflow is experimental! Use at your own risk! -version 1.1 +version 1.4 import "../../data_structures/read_group.wdl" -import "../../tools/fq.wdl" +import {fqlint, subsample} from fq import "./dnaseq-core.wdl" as dnaseq_core_wf import "./dnaseq-standard.wdl" as dnaseq_standard @@ -77,7 +77,7 @@ workflow dnaseq_standard_fastq_experimental { if (validate_input) { scatter (reads in zip(read_one_fastqs_gz, read_two_fastqs_gz)) { - call fq.fqlint after read_group_to_string { input: + call fqlint after read_group_to_string { input: read_one_fastq = reads.left, read_two_fastq = reads.right, } @@ -87,7 +87,7 @@ workflow dnaseq_standard_fastq_experimental { if (subsample_n_reads > 0) { Int reads_per_pair = ceil(subsample_n_reads / length(read_one_fastqs_gz)) scatter (reads in zip(read_one_fastqs_gz, read_two_fastqs_gz)) { - call fq.subsample after fqlint { input: + call subsample after fqlint { input: read_one_fastq = reads.left, read_two_fastq = reads.right, record_count = reads_per_pair, diff --git a/workflows/dnaseq/dnaseq-standard.wdl b/workflows/dnaseq/dnaseq-standard.wdl index f0a481509..6628e96b0 100644 --- a/workflows/dnaseq/dnaseq-standard.wdl +++ b/workflows/dnaseq/dnaseq-standard.wdl @@ -1,10 +1,10 @@ ## **WARNING:** this workflow is experimental! Use at your own risk! -version 1.1 +version 1.4 import "../../data_structures/read_group.wdl" import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" -import "../general/bam-to-fastqs.wdl" as bam_to_fastqs_wf +import {subsample} from samtools +import "../general/bam-to-fastqs/bam-to-fastqs.wdl" as bam_to_fastqs_wf import "./dnaseq-core.wdl" as dnaseq_core_wf workflow dnaseq_standard_experimental { @@ -64,7 +64,7 @@ workflow dnaseq_standard_experimental { } if (subsample_n_reads > 0) { - call samtools.subsample after validate_input_bam { input: + call subsample after validate_input_bam { input: bam, desired_reads = subsample_n_reads, use_all_cores, diff --git a/workflows/dnaseq/module.json b/workflows/dnaseq/module.json new file mode 100644 index 000000000..2e04c527c --- /dev/null +++ b/workflows/dnaseq/module.json @@ -0,0 +1,22 @@ +{ + "name": "dnaseq", + "version": "1.0.0", + "license": "MIT", + "authors": [ + "Ari Frantz ", + "Andrew Thrasher " + ], + "description": "DNAseq analysis workflow", + "repository": "https://github.com/stjudecloud/workflows", + "dependencies": { + "samtools": { + "path": "../../tools/samtools" + }, + "fq": { + "path": "../../tools/fq" + } + }, + "exclude": [ + "dnaseq-core.wdl" + ] +} diff --git a/workflows/general/alignment-post.wdl b/workflows/general/alignment-post.wdl index 618871b9d..177863259 100644 --- a/workflows/general/alignment-post.wdl +++ b/workflows/general/alignment-post.wdl @@ -2,7 +2,7 @@ version 1.1 import "../../tools/md5sum.wdl" import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" +import "../../tools/samtools/samtools.wdl" import "https://raw.githubusercontent.com/stjude/XenoCP/4.0.0-alpha/wdl/workflows/xenocp.wdl" as xenocp_wf diff --git a/workflows/general/bam-to-fastqs.wdl b/workflows/general/bam-to-fastqs/bam-to-fastqs.wdl similarity index 95% rename from workflows/general/bam-to-fastqs.wdl rename to workflows/general/bam-to-fastqs/bam-to-fastqs.wdl index e5bcbedc9..0ca863c4e 100644 --- a/workflows/general/bam-to-fastqs.wdl +++ b/workflows/general/bam-to-fastqs/bam-to-fastqs.wdl @@ -1,7 +1,7 @@ -version 1.1 +version 1.4 -import "../../tools/fq.wdl" -import "../../tools/samtools.wdl" +import "../../../tools/fq/fq.wdl" +import "../../../tools/samtools/samtools.wdl" workflow bam_to_fastqs { meta { diff --git a/workflows/general/bam-to-fastqs/module.json b/workflows/general/bam-to-fastqs/module.json new file mode 100644 index 000000000..23da563d8 --- /dev/null +++ b/workflows/general/bam-to-fastqs/module.json @@ -0,0 +1,30 @@ +{ + "name": "bam-to-fastqs", + "version": "1.0.0", + "license": "MIT", + "authors": [ + { + "name": "Ari Frantz", + "email": "Ari.Frantz@STJUDE.ORG" + }, + { + "name": "Andrew Thrasher", + "email": "Andrew.Thrasher@STJUDE.ORG" + } + ], + "description": "Convert BAM files to FASTQ(s) with Samtools", + "repository": "https://github.com/stjudecloud/workflows", + "entrypoint": "bam-to-fastqs.wdl", + "dependencies": { + "fq": { + "git": "https://github.com/stjudecloud/workflows", + "branch": "main", + "path": "tools/fq" + }, + "samtools": { + "git": "https://github.com/stjudecloud/workflows", + "branch": "main", + "path": "tools/samtools" + } + } +} \ No newline at end of file diff --git a/workflows/general/samtools-merge.wdl b/workflows/general/samtools-merge.wdl index de9053218..a2993df20 100644 --- a/workflows/general/samtools-merge.wdl +++ b/workflows/general/samtools-merge.wdl @@ -1,7 +1,7 @@ ## **WARNING:** this workflow is experimental! Use at your own risk! -version 1.1 +version 1.4 -import "../../tools/samtools.wdl" +import "../../tools/samtools/samtools.wdl" workflow samtools_merge { meta { diff --git a/workflows/qc/markdups-post.wdl b/workflows/qc/markdups-post.wdl index 2e0420fa5..acf78dea6 100644 --- a/workflows/qc/markdups-post.wdl +++ b/workflows/qc/markdups-post.wdl @@ -9,7 +9,7 @@ version 1.1 import "../../tools/mosdepth.wdl" import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" +import "../../tools/samtools/samtools.wdl" workflow markdups_post { meta { diff --git a/workflows/qc/quality-check-standard.wdl b/workflows/qc/quality-check-standard.wdl index 8d80458c1..83d1a0851 100644 --- a/workflows/qc/quality-check-standard.wdl +++ b/workflows/qc/quality-check-standard.wdl @@ -2,7 +2,7 @@ version 1.1 import "../../data_structures/flag_filter.wdl" import "../../tools/fastp.wdl" as fp -import "../../tools/fq.wdl" +import "../../tools/fq/fq.wdl" import "../../tools/kraken2.wdl" import "../../tools/librarian.wdl" as libraran_tasks import "../../tools/md5sum.wdl" @@ -11,7 +11,7 @@ import "../../tools/multiqc.wdl" as multiqc_tasks import "../../tools/ngsderive.wdl" import "../../tools/picard.wdl" import "../../tools/qualimap.wdl" -import "../../tools/samtools.wdl" +import "../../tools/samtools/samtools.wdl" import "../../tools/util.wdl" import "./markdups-post.wdl" as markdups_post_wf diff --git a/workflows/reference/bwa-db-build.wdl b/workflows/reference/bwa-db-build.wdl index 579385f1c..e3362ac3c 100644 --- a/workflows/reference/bwa-db-build.wdl +++ b/workflows/reference/bwa-db-build.wdl @@ -1,6 +1,6 @@ version 1.1 -import "../../tools/bwa.wdl" +import "../../tools/alignment/bwa.wdl" import "../../tools/util.wdl" workflow bwa_db_build { diff --git a/workflows/reference/gatk-reference.wdl b/workflows/reference/gatk-reference.wdl index 2cf2e4087..2feabec32 100644 --- a/workflows/reference/gatk-reference.wdl +++ b/workflows/reference/gatk-reference.wdl @@ -1,7 +1,7 @@ version 1.1 import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" +import "../../tools/samtools/samtools.wdl" import "../../tools/util.wdl" workflow gatk_reference { diff --git a/workflows/reference/star-db-build.wdl b/workflows/reference/star-db-build.wdl index d2d14b2a1..c62a7532a 100644 --- a/workflows/reference/star-db-build.wdl +++ b/workflows/reference/star-db-build.wdl @@ -1,6 +1,6 @@ version 1.1 -import "../../tools/star.wdl" +import "../../tools/alignment/star.wdl" import "../../tools/util.wdl" workflow star_db_build { diff --git a/workflows/rnaseq/rnaseq-core.wdl b/workflows/rnaseq/rnaseq-core.wdl index 5dbf385f5..1e081f432 100644 --- a/workflows/rnaseq/rnaseq-core.wdl +++ b/workflows/rnaseq/rnaseq-core.wdl @@ -4,7 +4,7 @@ import "../../tools/deeptools.wdl" import "../../tools/fastp.wdl" as fp import "../../tools/htseq.wdl" import "../../tools/ngsderive.wdl" -import "../../tools/star.wdl" +import "../../tools/alignment/star.wdl" import "../../tools/util.wdl" import "../general/alignment-post.wdl" as alignment_post_wf diff --git a/workflows/rnaseq/rnaseq-standard-fastq.wdl b/workflows/rnaseq/rnaseq-standard-fastq.wdl index 29ff3bfc6..16bcc11d8 100644 --- a/workflows/rnaseq/rnaseq-standard-fastq.wdl +++ b/workflows/rnaseq/rnaseq-standard-fastq.wdl @@ -1,7 +1,7 @@ version 1.1 import "../../data_structures/read_group.wdl" -import "../../tools/fq.wdl" +import "../../tools/fq/fq.wdl" import "./rnaseq-core.wdl" as rnaseq_core_wf import "./rnaseq-standard.wdl" as rnaseq_standard diff --git a/workflows/rnaseq/rnaseq-standard.wdl b/workflows/rnaseq/rnaseq-standard.wdl index ae5c53641..e388134bd 100755 --- a/workflows/rnaseq/rnaseq-standard.wdl +++ b/workflows/rnaseq/rnaseq-standard.wdl @@ -2,8 +2,8 @@ version 1.1 import "../../data_structures/read_group.wdl" import "../../tools/picard.wdl" -import "../../tools/samtools.wdl" -import "../general/bam-to-fastqs.wdl" as bam_to_fastqs_wf +import "../../tools/samtools/samtools.wdl" +import "../general/bam-to-fastqs/bam-to-fastqs.wdl" as bam_to_fastqs_wf import "./rnaseq-core.wdl" as rnaseq_core_wf workflow rnaseq_standard {