From d177113e4a57ff8fe980212e51fe4317cf0fcb5a Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Tue, 26 Jan 2021 14:45:32 -0500 Subject: [PATCH] Add more background to lesson 1. Add answers to each section. Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- README.md | 2 +- lesson1/RNAseqWorkflow.png | Bin 0 -> 90279 bytes lesson1/answers/main.cwl | 48 +++++++++++++++ lesson1/lesson1.md | 77 ++++++++++++++++++------ lesson3/answers/featureCounts.cwl | 29 +++++++++ lesson3/answers/main.cwl | 58 ++++++++++++++++++ lesson3/lesson3.md | 19 +++--- lesson4/answers/part1/alignment.cwl | 56 +++++++++++++++++ lesson4/answers/part1/featureCounts.cwl | 23 +++++++ lesson4/answers/part1/main.cwl | 32 ++++++++++ lesson4/answers/part2/alignment.cwl | 56 +++++++++++++++++ lesson4/answers/part2/featureCounts.cwl | 23 +++++++ lesson4/answers/part2/main.cwl | 34 +++++++++++ lesson4/answers/part4/alignment.cwl | 42 +++++++++++++ lesson4/answers/part4/featureCounts.cwl | 26 ++++++++ lesson4/answers/part4/main.cwl | 47 +++++++++++++++ lesson4/lesson4.md | 18 +++--- lesson5/answers/alignment.cwl | 47 +++++++++++++++ lesson5/answers/featureCounts.cwl | 25 ++++++++ lesson5/answers/main.cwl | 50 +++++++++++++++ lesson5/answers/subdirs.cwl | 22 +++++++ lesson5/lesson5.md | 1 + 22 files changed, 696 insertions(+), 39 deletions(-) create mode 100644 lesson1/RNAseqWorkflow.png create mode 100644 lesson1/answers/main.cwl create mode 100644 lesson3/answers/featureCounts.cwl create mode 100644 lesson3/answers/main.cwl create mode 100644 lesson4/answers/part1/alignment.cwl create mode 100644 lesson4/answers/part1/featureCounts.cwl create mode 100644 lesson4/answers/part1/main.cwl create mode 100644 lesson4/answers/part2/alignment.cwl create mode 100644 lesson4/answers/part2/featureCounts.cwl create mode 100644 lesson4/answers/part2/main.cwl create mode 100644 lesson4/answers/part4/alignment.cwl create mode 100644 lesson4/answers/part4/featureCounts.cwl create mode 100644 lesson4/answers/part4/main.cwl create mode 100644 lesson5/answers/alignment.cwl create mode 100644 lesson5/answers/featureCounts.cwl create mode 100644 lesson5/answers/main.cwl create mode 100644 lesson5/answers/subdirs.cwl diff --git a/README.md b/README.md index 48ad847..510d494 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ rnaseq. | Lesson | Description | |----------|-------------| -| [Lesson 1](lesson1/lesson1.md) | Turning a shell script into a workflow from existing tool wrappers | +| [Lesson 1](lesson1/lesson1.md) | Turning a shell script into a workflow by composing existing tools | | [Lesson 2](lesson2/lesson2.md) | Running and debugging a workflow | | [Lesson 3](lesson3/lesson3.md) | Writing a tool wrapper | | [Lesson 4](lesson4/lesson4.md) | Analyzing multiple samples | diff --git a/lesson1/RNAseqWorkflow.png b/lesson1/RNAseqWorkflow.png new file mode 100644 index 0000000000000000000000000000000000000000..1878db4836dd7c6d6570e9ace843f774bc44967c GIT binary patch literal 90279 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�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 literal 0 HcmV?d00001 diff --git a/lesson1/answers/main.cwl b/lesson1/answers/main.cwl new file mode 100644 index 0000000..bad27f4 --- /dev/null +++ b/lesson1/answers/main.cwl @@ -0,0 +1,48 @@ +### 1. File header +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +### 2. Workflow Inputs +inputs: + fq: File + genome: Directory + gtf: File + +### 3. Workflow Steps +steps: + fastqc: + run: bio-cwl-tools/fastqc/fastqc_2.cwl + in: + reads_file: fq + out: [html_file] + + ### 4. Running alignment with STAR + STAR: + requirements: + ResourceRequirement: + ramMin: 6000 + run: bio-cwl-tools/STAR/STAR-Align.cwl + in: + RunThreadN: {default: 4} + GenomeDir: genome + ForwardReads: fq + OutSAMtype: {default: BAM} + OutSAMunmapped: {default: Within} + out: [alignment] + + ### 5. Running samtools + samtools: + run: bio-cwl-tools/samtools/samtools_index.cwl + in: + bam_sorted: STAR/alignment + out: [bam_sorted_indexed] + +### 7. Workflow Outputs +outputs: + qc_html: + type: File + outputSource: fastqc/html_file + bam_sorted_indexed: + type: File + outputSource: samtools/bam_sorted_indexed diff --git a/lesson1/lesson1.md b/lesson1/lesson1.md index 8677c10..5c45265 100644 --- a/lesson1/lesson1.md +++ b/lesson1/lesson1.md @@ -1,31 +1,47 @@ -# Turning a shell script into a workflow using existing tools +# Turning a shell script into a workflow by composing existing tools -In this lesson we will turn `rnaseq_analysis_on_input_file.sh` into a workflow. +## Introduction -## Setting up +The goal of this training is to walk through the development of a +best-practices CWL workflow by translating an existing bioinformatics +shell script into CWL. Specific knowledge of the biology of RNA-seq +is *not* a prerequisite for these lessons. -We will create a new git repository and import a library of existing -tool definitions that will help us build our workflow. +These lessons are based on "Introduction to RNA-seq using +high-performance computing (HPC)" lessons developed by members of the +teaching team at the Harvard Chan Bioinformatics Core (HBC). The +original training, which includes additional lectures about the +biology of RNA-seq can be found here: -Create a new git repository to hold our workflow with this command: +https://github.com/hbctraining/Intro-to-rnaseq-hpc-O2 -``` -git init rnaseq-cwl-training-exercises -``` +## Background -On Arvados use this: +RNA-seq is the process of sequencing RNA in a biological sample. From +the sequence reads, we want to measure the relative number of RNA +molecules appearing in the sample that were produced by particular +genes. This analysis is called "differential gene expression". -``` -git clone https://github.com/arvados/arvados-vscode-cwl-template.git rnaseq-cwl-training-exercises -``` +The entire process looks like this: -Next, import bio-cwl-tools with this command: +![](RNAseqWorkflow.png) -``` -git submodule add https://github.com/common-workflow-library/bio-cwl-tools.git -``` +For this training, we are only concerned with the middle analytical +steps (skipping adapter trimming). + +* Quality control (FASTQC) +* Alignment (mapping) +* Counting reads associated with genes -## The shell script +## Analysis shell script + +This analysis is already available as a Unix shell script, which we +will refer to in order to build the workflow. + +Some of the reasons to use CWL over a plain shell script: portability, +scalability, ability to run on platforms that are not traditional HPC. + +rnaseq_analysis_on_input_file.sh ``` #!/bin/bash @@ -81,6 +97,29 @@ samtools index $counts_input_bam featureCounts -T $cores -s 2 -a $gtf -o $counts $counts_input_bam ``` +## Setting up + +We will create a new git repository and import a library of existing +tool definitions that will help us build our workflow. + +Create a new git repository to hold our workflow with this command: + +``` +git init rnaseq-cwl-training-exercises +``` + +On Arvados use this: + +``` +git clone https://github.com/arvados/arvados-vscode-cwl-template.git rnaseq-cwl-training-exercises +``` + +Next, import bio-cwl-tools with this command: + +``` +git submodule add https://github.com/common-workflow-library/bio-cwl-tools.git +``` + ## Writing the workflow ### 1. File header @@ -160,7 +199,7 @@ steps: fastqc: run: bio-cwl-tools/fastqc/fastqc_2.cwl in: - reads_file: fq + reads_file: fq out: [html_file] ``` diff --git a/lesson3/answers/featureCounts.cwl b/lesson3/answers/featureCounts.cwl new file mode 100644 index 0000000..9653391 --- /dev/null +++ b/lesson3/answers/featureCounts.cwl @@ -0,0 +1,29 @@ +### 1. File header +cwlVersion: v1.2 +class: CommandLineTool + +### 2. Command line tool inputs +inputs: + gtf: File + counts_input_bam: File + +### 3. Specifying the program to run +baseCommand: featureCounts + +### 4. Command arguments +arguments: [-T, $(runtime.cores), + -a, $(inputs.gtf), + -o, featurecounts.tsv, + $(inputs.counts_input_bam)] + +### 5. Outputs section +outputs: + featurecounts: + type: File + outputBinding: + glob: featurecounts.tsv + +### 6. Running in a container +hints: + DockerRequirement: + dockerPull: quay.io/biocontainers/subread:1.5.0p3--0 diff --git a/lesson3/answers/main.cwl b/lesson3/answers/main.cwl new file mode 100644 index 0000000..7eaf62e --- /dev/null +++ b/lesson3/answers/main.cwl @@ -0,0 +1,58 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File + genome: Directory + gtf: File + +steps: + fastqc: + run: bio-cwl-tools/fastqc/fastqc_2.cwl + in: + reads_file: fq + out: [html_file] + + STAR: + requirements: + ResourceRequirement: + ramMin: 6000 + run: bio-cwl-tools/STAR/STAR-Align.cwl + in: + RunThreadN: {default: 4} + GenomeDir: genome + ForwardReads: fq + OutSAMtype: {default: BAM} + OutSAMunmapped: {default: Within} + out: [alignment] + + samtools: + run: bio-cwl-tools/samtools/samtools_index.cwl + in: + bam_sorted: STAR/alignment + out: [bam_sorted_indexed] + + ### 8. Adding it to the workflow + featureCounts: + requirements: + ResourceRequirement: + ramMin: 500 + run: featureCounts.cwl + in: + counts_input_bam: samtools/bam_sorted_indexed + gtf: gtf + out: [featurecounts] + +outputs: + qc_html: + type: File + outputSource: fastqc/html_file + bam_sorted_indexed: + type: File + outputSource: samtools/bam_sorted_indexed + + ### 8. Adding it to the workflow + featurecounts: + type: File + outputSource: featureCounts/featurecounts diff --git a/lesson3/lesson3.md b/lesson3/lesson3.md index 622f446..9bd5a70 100644 --- a/lesson3/lesson3.md +++ b/lesson3/lesson3.md @@ -64,8 +64,8 @@ describes the resources allocated to running the program. Here we use ``` arguments: [-T, $(runtime.cores), -a, $(inputs.gtf), - -o, featurecounts.tsv, - $(inputs.counts_input_bam)] + -o, featurecounts.tsv, + $(inputs.counts_input_bam)] ``` ### 5. Outputs section @@ -89,8 +89,8 @@ output directory called `featurecounts.tsv` outputs: featurecounts: type: File - outputBinding: - glob: featurecounts.tsv + outputBinding: + glob: featurecounts.tsv ``` ### 6. Running in a container @@ -162,10 +162,10 @@ steps: ResourceRequirement: ramMin: 500 run: featureCounts.cwl - in: - counts_input_bam: samtools/bam_sorted_indexed - gtf: gtf - out: [featurecounts] + in: + counts_input_bam: samtools/bam_sorted_indexed + gtf: gtf + out: [featurecounts] ``` We will add the result from featurecounts to the output: @@ -175,8 +175,7 @@ outputs: ... featurecounts: type: File - outputSource: featureCounts/featurecounts - + outputSource: featureCounts/featurecounts ``` You should now be able to re-run the workflow and it will run the diff --git a/lesson4/answers/part1/alignment.cwl b/lesson4/answers/part1/alignment.cwl new file mode 100644 index 0000000..c46b568 --- /dev/null +++ b/lesson4/answers/part1/alignment.cwl @@ -0,0 +1,56 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File + genome: Directory + gtf: File + +steps: + fastqc: + run: bio-cwl-tools/fastqc/fastqc_2.cwl + in: + reads_file: fq + out: [html_file] + + STAR: + requirements: + ResourceRequirement: + ramMin: 6000 + run: bio-cwl-tools/STAR/STAR-Align.cwl + in: + RunThreadN: {default: 4} + GenomeDir: genome + ForwardReads: fq + OutSAMtype: {default: BAM} + OutSAMunmapped: {default: Within} + out: [alignment] + + samtools: + run: bio-cwl-tools/samtools/samtools_index.cwl + in: + bam_sorted: STAR/alignment + out: [bam_sorted_indexed] + + featureCounts: + requirements: + ResourceRequirement: + ramMin: 500 + run: featureCounts.cwl + in: + counts_input_bam: samtools/bam_sorted_indexed + gtf: gtf + out: [featurecounts] + +outputs: + qc_html: + type: File + outputSource: fastqc/html_file + bam_sorted_indexed: + type: File + outputSource: samtools/bam_sorted_indexed + + featurecounts: + type: File + outputSource: featureCounts/featurecounts diff --git a/lesson4/answers/part1/featureCounts.cwl b/lesson4/answers/part1/featureCounts.cwl new file mode 100644 index 0000000..4407ec9 --- /dev/null +++ b/lesson4/answers/part1/featureCounts.cwl @@ -0,0 +1,23 @@ +cwlVersion: v1.2 +class: CommandLineTool + +inputs: + gtf: File + counts_input_bam: File + +baseCommand: featureCounts + +arguments: [-T, $(runtime.cores), + -a, $(inputs.gtf), + -o, featurecounts.tsv, + $(inputs.counts_input_bam)] + +outputs: + featurecounts: + type: File + outputBinding: + glob: featurecounts.tsv + +hints: + DockerRequirement: + dockerPull: quay.io/biocontainers/subread:1.5.0p3--0 diff --git a/lesson4/answers/part1/main.cwl b/lesson4/answers/part1/main.cwl new file mode 100644 index 0000000..33e0f05 --- /dev/null +++ b/lesson4/answers/part1/main.cwl @@ -0,0 +1,32 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File + genome: Directory + gtf: File + +### 1. Subworkflows +steps: + alignment: + run: alignment.cwl + in: + fq: fq + genome: genome + gtf: gtf + out: [qc_html, bam_sorted_indexed, featurecounts] + +outputs: + qc_html: + type: File + outputSource: alignment/qc_html + bam_sorted_indexed: + type: File + outputSource: alignment/bam_sorted_indexed + featurecounts: + type: File + outputSource: alignment/featurecounts + +requirements: + SubworkflowFeatureRequirement: {} diff --git a/lesson4/answers/part2/alignment.cwl b/lesson4/answers/part2/alignment.cwl new file mode 100644 index 0000000..c46b568 --- /dev/null +++ b/lesson4/answers/part2/alignment.cwl @@ -0,0 +1,56 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File + genome: Directory + gtf: File + +steps: + fastqc: + run: bio-cwl-tools/fastqc/fastqc_2.cwl + in: + reads_file: fq + out: [html_file] + + STAR: + requirements: + ResourceRequirement: + ramMin: 6000 + run: bio-cwl-tools/STAR/STAR-Align.cwl + in: + RunThreadN: {default: 4} + GenomeDir: genome + ForwardReads: fq + OutSAMtype: {default: BAM} + OutSAMunmapped: {default: Within} + out: [alignment] + + samtools: + run: bio-cwl-tools/samtools/samtools_index.cwl + in: + bam_sorted: STAR/alignment + out: [bam_sorted_indexed] + + featureCounts: + requirements: + ResourceRequirement: + ramMin: 500 + run: featureCounts.cwl + in: + counts_input_bam: samtools/bam_sorted_indexed + gtf: gtf + out: [featurecounts] + +outputs: + qc_html: + type: File + outputSource: fastqc/html_file + bam_sorted_indexed: + type: File + outputSource: samtools/bam_sorted_indexed + + featurecounts: + type: File + outputSource: featureCounts/featurecounts diff --git a/lesson4/answers/part2/featureCounts.cwl b/lesson4/answers/part2/featureCounts.cwl new file mode 100644 index 0000000..4407ec9 --- /dev/null +++ b/lesson4/answers/part2/featureCounts.cwl @@ -0,0 +1,23 @@ +cwlVersion: v1.2 +class: CommandLineTool + +inputs: + gtf: File + counts_input_bam: File + +baseCommand: featureCounts + +arguments: [-T, $(runtime.cores), + -a, $(inputs.gtf), + -o, featurecounts.tsv, + $(inputs.counts_input_bam)] + +outputs: + featurecounts: + type: File + outputBinding: + glob: featurecounts.tsv + +hints: + DockerRequirement: + dockerPull: quay.io/biocontainers/subread:1.5.0p3--0 diff --git a/lesson4/answers/part2/main.cwl b/lesson4/answers/part2/main.cwl new file mode 100644 index 0000000..9abc5a9 --- /dev/null +++ b/lesson4/answers/part2/main.cwl @@ -0,0 +1,34 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +### 2. Scattering +inputs: + fq: File[] + genome: Directory + gtf: File + +steps: + alignment: + run: alignment.cwl + scatter: fq + in: + fq: fq + genome: genome + gtf: gtf + out: [qc_html, bam_sorted_indexed, featurecounts] + +outputs: + qc_html: + type: File[] + outputSource: alignment/qc_html + bam_sorted_indexed: + type: File[] + outputSource: alignment/bam_sorted_indexed + featurecounts: + type: File[] + outputSource: alignment/featurecounts + +requirements: + SubworkflowFeatureRequirement: {} + ScatterFeatureRequirement: {} diff --git a/lesson4/answers/part4/alignment.cwl b/lesson4/answers/part4/alignment.cwl new file mode 100644 index 0000000..df31e9b --- /dev/null +++ b/lesson4/answers/part4/alignment.cwl @@ -0,0 +1,42 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File + genome: Directory + gtf: File + +steps: + fastqc: + run: bio-cwl-tools/fastqc/fastqc_2.cwl + in: + reads_file: fq + out: [html_file] + + STAR: + requirements: + ResourceRequirement: + ramMin: 6000 + run: bio-cwl-tools/STAR/STAR-Align.cwl + in: + RunThreadN: {default: 4} + GenomeDir: genome + ForwardReads: fq + OutSAMtype: {default: BAM} + OutSAMunmapped: {default: Within} + out: [alignment] + + samtools: + run: bio-cwl-tools/samtools/samtools_index.cwl + in: + bam_sorted: STAR/alignment + out: [bam_sorted_indexed] + +outputs: + qc_html: + type: File + outputSource: fastqc/html_file + bam_sorted_indexed: + type: File + outputSource: samtools/bam_sorted_indexed diff --git a/lesson4/answers/part4/featureCounts.cwl b/lesson4/answers/part4/featureCounts.cwl new file mode 100644 index 0000000..38ace83 --- /dev/null +++ b/lesson4/answers/part4/featureCounts.cwl @@ -0,0 +1,26 @@ +cwlVersion: v1.2 +class: CommandLineTool + +### 4. Combining results +inputs: + gtf: File + counts_input_bam: + - File + - File[] + +baseCommand: featureCounts + +arguments: [-T, $(runtime.cores), + -a, $(inputs.gtf), + -o, featurecounts.tsv, + $(inputs.counts_input_bam)] + +outputs: + featurecounts: + type: File + outputBinding: + glob: featurecounts.tsv + +hints: + DockerRequirement: + dockerPull: quay.io/biocontainers/subread:1.5.0p3--0 diff --git a/lesson4/answers/part4/main.cwl b/lesson4/answers/part4/main.cwl new file mode 100644 index 0000000..fcbb235 --- /dev/null +++ b/lesson4/answers/part4/main.cwl @@ -0,0 +1,47 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +### 2. Scattering +inputs: + fq: File[] + genome: Directory + gtf: File + +steps: + alignment: + run: alignment.cwl + scatter: fq + in: + fq: fq + genome: genome + gtf: gtf + out: [qc_html, bam_sorted_indexed, featurecounts] + + ### 4. Combining results + featureCounts: + requirements: + ResourceRequirement: + ramMin: 500 + run: featureCounts.cwl + in: + counts_input_bam: alignment/bam_sorted_indexed + gtf: gtf + out: [featurecounts] + +outputs: + qc_html: + type: File[] + outputSource: alignment/qc_html + bam_sorted_indexed: + type: File[] + outputSource: alignment/bam_sorted_indexed + + ### 4. Combining results + featurecounts: + type: File + outputSource: featureCounts/featurecounts + +requirements: + SubworkflowFeatureRequirement: {} + ScatterFeatureRequirement: {} diff --git a/lesson4/lesson4.md b/lesson4/lesson4.md index 6aa45de..91df9bd 100644 --- a/lesson4/lesson4.md +++ b/lesson4/lesson4.md @@ -17,10 +17,10 @@ steps: alignment: run: alignment.cwl in: - fq: fq - genome: genome - gtf: gtf - out: [qc_html, bam_sorted_indexed, featurecounts] + fq: fq + genome: genome + gtf: gtf + out: [qc_html, bam_sorted_indexed, featurecounts] ``` In the outputs section, all the output sources are from the alignment step: @@ -71,12 +71,12 @@ run `alignment.cwl` for each value in the list in the `fq` parameter. steps: alignment: run: alignment.cwl - scatter: fq + scatter: fq in: - fq: fq - genome: genome - gtf: gtf - out: [qc_html, bam_sorted_indexed, featurecounts] + fq: fq + genome: genome + gtf: gtf + out: [qc_html, bam_sorted_indexed, featurecounts] ``` Because the scatter produces multiple outputs, each output parameter diff --git a/lesson5/answers/alignment.cwl b/lesson5/answers/alignment.cwl new file mode 100644 index 0000000..8a54fe4 --- /dev/null +++ b/lesson5/answers/alignment.cwl @@ -0,0 +1,47 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File + genome: Directory + gtf: File + +requirements: + StepInputExpressionRequirement: {} + +steps: + fastqc: + run: bio-cwl-tools/fastqc/fastqc_2.cwl + in: + reads_file: fq + out: [html_file] + + STAR: + requirements: + ResourceRequirement: + ramMin: 6000 + run: bio-cwl-tools/STAR/STAR-Align.cwl + in: + RunThreadN: {default: 4} + GenomeDir: genome + ForwardReads: fq + OutSAMtype: {default: BAM} + OutSAMunmapped: {default: Within} + ### 1. Expressions on step inputs + OutFileNamePrefix: {valueFrom: "$(inputs.ForwardReads.nameroot)."} + out: [alignment] + + samtools: + run: bio-cwl-tools/samtools/samtools_index.cwl + in: + bam_sorted: STAR/alignment + out: [bam_sorted_indexed] + +outputs: + qc_html: + type: File + outputSource: fastqc/html_file + bam_sorted_indexed: + type: File + outputSource: samtools/bam_sorted_indexed diff --git a/lesson5/answers/featureCounts.cwl b/lesson5/answers/featureCounts.cwl new file mode 100644 index 0000000..681697e --- /dev/null +++ b/lesson5/answers/featureCounts.cwl @@ -0,0 +1,25 @@ +cwlVersion: v1.2 +class: CommandLineTool + +inputs: + gtf: File + counts_input_bam: + - File + - File[] + +baseCommand: featureCounts + +arguments: [-T, $(runtime.cores), + -a, $(inputs.gtf), + -o, featurecounts.tsv, + $(inputs.counts_input_bam)] + +outputs: + featurecounts: + type: File + outputBinding: + glob: featurecounts.tsv + +hints: + DockerRequirement: + dockerPull: quay.io/biocontainers/subread:1.5.0p3--0 diff --git a/lesson5/answers/main.cwl b/lesson5/answers/main.cwl new file mode 100644 index 0000000..e934079 --- /dev/null +++ b/lesson5/answers/main.cwl @@ -0,0 +1,50 @@ +cwlVersion: v1.2 +class: Workflow +label: RNAseq CWL practice workflow + +inputs: + fq: File[] + genome: Directory + gtf: File + +steps: + alignment: + run: alignment.cwl + scatter: fq + in: + fq: fq + genome: genome + gtf: gtf + out: [qc_html, bam_sorted_indexed, featurecounts] + + featureCounts: + requirements: + ResourceRequirement: + ramMin: 500 + run: featureCounts.cwl + in: + counts_input_bam: alignment/bam_sorted_indexed + gtf: gtf + out: [featurecounts] + + ### 2. Organizing output files into Directories + output-subdirs: + run: subdirs.cwl + in: + fq: fq + bams: alignment/bam_sorted_indexed + qc: alignment/qc_html + out: [dirs] + +outputs: + dirs: + type: Directory[] + outputSource: output-subdirs/dirs + + featurecounts: + type: File + outputSource: featureCounts/featurecounts + +requirements: + SubworkflowFeatureRequirement: {} + ScatterFeatureRequirement: {} diff --git a/lesson5/answers/subdirs.cwl b/lesson5/answers/subdirs.cwl new file mode 100644 index 0000000..fc4fe7d --- /dev/null +++ b/lesson5/answers/subdirs.cwl @@ -0,0 +1,22 @@ +cwlVersion: v1.2 +class: ExpressionTool +requirements: + InlineJavascriptRequirement: {} +inputs: + fq: File[] + bams: File[] + qc: File[] +outputs: + dirs: Directory[] +expression: |- + ${ + var dirs = []; + for (var i = 0; i < inputs.bams.length; i++) { + dirs.push({ + "class": "Directory", + "basename": inputs.fq[i].nameroot, + "listing": [inputs.bams[i], inputs.qc[i]] + }); + } + return {"dirs": dirs}; + } diff --git a/lesson5/lesson5.md b/lesson5/lesson5.md index 4567620..6640176 100644 --- a/lesson5/lesson5.md +++ b/lesson5/lesson5.md @@ -22,6 +22,7 @@ filename. ``` requirements: StepInputExpressionRequirement: {} + steps: ... STAR: -- 2.30.2