diff --git a/lib/Sample.groovy b/lib/Sample.groovy new file mode 100644 index 0000000..e66a53d --- /dev/null +++ b/lib/Sample.groovy @@ -0,0 +1,14 @@ + +import java.nio.file.Path +import nextflow.io.ValueObject +import nextflow.util.KryoHelper + +@ValueObject +class Sample { + String id + List reads + + static { + KryoHelper.register(Sample) + } +} diff --git a/main.nf b/main.nf index 77d2d70..f473f83 100755 --- a/main.nf +++ b/main.nf @@ -50,10 +50,11 @@ include { MULTIQC } from './modules/multiqc' /* * main script flow */ -workflow { - read_pairs_ch = channel.fromFilePairs( params.reads, checkIfExists: true ) - RNASEQ( params.transcriptome, read_pairs_ch ) - MULTIQC( RNASEQ.out, params.multiqc ) +@WorkflowFn(main=true) +def MAIN() { + read_pairs_ch = channel.fromFilePairs( params.reads, checkIfExists: true ).map { args -> new Sample(*args) } + RNASEQ( file(params.transcriptome), read_pairs_ch ) + MULTIQC( RNASEQ.out, file(params.multiqc) ) } /* diff --git a/modules/fastqc/main.nf b/modules/fastqc/main.nf index cd58cbb..bc49aed 100644 --- a/modules/fastqc/main.nf +++ b/modules/fastqc/main.nf @@ -1,18 +1,22 @@ params.outdir = 'results' -process FASTQC { - tag "FASTQC on $sample_id" - conda 'fastqc=0.12.1' - publishDir params.outdir, mode:'copy' - - input: - tuple val(sample_id), path(reads) - - output: - path "fastqc_${sample_id}_logs" - - script: +@ProcessFn( + directives={ + tag { "FASTQC on $sample.id" } + conda 'fastqc=0.12.1' + publishDir params.outdir, mode:'copy' + }, + inputs={ + path { sample.reads } + }, + outputs={ + path '$file0', { "fastqc_${sample.id}_logs" } + emit { path('$file0') } + }, + script=true +) +def FASTQC(Sample sample) { """ - fastqc.sh "$sample_id" "$reads" + fastqc.sh "$sample.id" "$sample.reads" """ } diff --git a/modules/index/main.nf b/modules/index/main.nf index de55e46..b6dee3a 100644 --- a/modules/index/main.nf +++ b/modules/index/main.nf @@ -1,15 +1,19 @@ -process INDEX { - tag "$transcriptome.simpleName" - conda 'salmon=1.10.2' - - input: - path transcriptome - - output: - path 'index' - - script: +@ProcessFn( + directives={ + tag { transcriptome.simpleName } + conda 'salmon=1.10.2' + }, + inputs={ + path { transcriptome } + }, + outputs={ + path '$file0', 'index' + emit { path('$file0') } + }, + script=true +) +def INDEX(Path transcriptome) { """ salmon index --threads $task.cpus -t $transcriptome -i index """ diff --git a/modules/multiqc/main.nf b/modules/multiqc/main.nf index a390282..44e4144 100644 --- a/modules/multiqc/main.nf +++ b/modules/multiqc/main.nf @@ -1,17 +1,21 @@ params.outdir = 'results' -process MULTIQC { - conda 'multiqc=1.17' - publishDir params.outdir, mode:'copy' - - input: - path('*') - path(config) - - output: - path('multiqc_report.html') - - script: +@ProcessFn( + directives={ + conda 'multiqc=1.17' + publishDir params.outdir, mode:'copy' + }, + inputs={ + path { files }, stageAs: '*' + path { config } + }, + outputs={ + path '$file0', 'multiqc_report.html' + emit { path('$file0') } + }, + script=true +) +def MULTIQC(List files, Path config) { """ cp $config/* . echo "custom_logo: \$PWD/logo.png" >> multiqc_config.yaml diff --git a/modules/quant/main.nf b/modules/quant/main.nf index 8459597..97522d7 100644 --- a/modules/quant/main.nf +++ b/modules/quant/main.nf @@ -1,17 +1,21 @@ -process QUANT { - tag "$pair_id" - conda 'salmon=1.10.2' - - input: - path index - tuple val(pair_id), path(reads) - - output: - path pair_id - - script: +@ProcessFn( + directives={ + tag { pair.id } + conda 'salmon=1.10.2' + }, + inputs={ + path { index } + path { pair.reads } + }, + outputs={ + path '$file0', { pair.id } + emit { path('$file0') } + }, + script=true +) +def QUANT(Path index, Sample pair) { """ - salmon quant --threads $task.cpus --libType=U -i $index -1 ${reads[0]} -2 ${reads[1]} -o $pair_id + salmon quant --threads $task.cpus --libType=U -i $index -1 ${pair.reads[0]} -2 ${pair.reads[1]} -o $pair.id """ } diff --git a/modules/rnaseq.nf b/modules/rnaseq.nf index 2f607c1..79c6a07 100644 --- a/modules/rnaseq.nf +++ b/modules/rnaseq.nf @@ -4,16 +4,11 @@ include { INDEX } from './index' include { QUANT } from './quant' include { FASTQC } from './fastqc' -workflow RNASEQ { - take: - transcriptome - read_pairs_ch - - main: - INDEX(transcriptome) - FASTQC(read_pairs_ch) - QUANT(INDEX.out, read_pairs_ch) - - emit: - QUANT.out | concat(FASTQC.out) | collect +@WorkflowFn +def RNASEQ(transcriptome, read_pairs_ch) { + INDEX(transcriptome) + FASTQC(read_pairs_ch) + QUANT(INDEX.out, read_pairs_ch) + | concat(FASTQC.out) + | collect } \ No newline at end of file