The Nextflow subworkflows and modules

We can have a look at the different modules and sub-workflows files in the subworkflows folder.

FastQC

/*
*  Fastqc module.
*/

// Parameter definitions
params.CONTAINER = "quay.io/biocontainers/fastqc:0.11.9--0"
params.OUTPUT = "fastqc_output"

process fastqc {
    
    // where to store the results and in which way
    publishDir(params.OUTPUT, mode: 'copy') 

    // indicates to use as container the value indicated in the parameter
    container params.CONTAINER

    // show in the log which input file is analysed
    tag "${reads}" 
    
    input:
    path(reads)

    output:
    path("*_fastqc*")

    script:
    """
        fastqc ${reads}
    """
}

multiQC

/*
*  multiqc module
*/

// Parameter definitions
params.CONTAINER = "quay.io/biocontainers/multiqc:1.9--pyh9f0ad1d_0"
params.OUTPUT = "multiqc_output"

process multiqc {

    // where to store the results and in which way
    publishDir(params.OUTPUT, mode: 'copy')

    // indicates to use as a container the value indicated in the parameter
    container params.CONTAINER

    input:
    path (inputfiles)

    output:
    path "multiqc_report.html"

    script:
    """
         multiqc .
    """
}

Bowtie

The subworkflows/bowtie.nf file contains the modules Align and Index and the sub-workflow BOWTIE

/*
*  Bowtie workflow and corresponding modules
*/

// Parameter definitions for both modules and workflow
params.CONTAINER = "quay.io/biocontainers/bowtie:1.2.3--py37hc9558a2_0"
params.OUTPUT = "bowtie_output"
params.LABEL = ""

/*
 * Bowtie module for indexing
 */
 
process Index {

    // indicates to use as a container the value indicated in the parameter
    container params.CONTAINER

    // show in the log which input file is analysed
    tag "${ref}"
    							
    input:
    path ref   							

    output:									
    tuple val("${ref}"), path ("${ref}*.ebwt")

    script:									
    """
        gunzip -c ${ref} > reference.fa
        bowtie-build reference.fa ${ref}
        rm reference.fa
    """
}

/*
 * Bowtie module for alignment
 */
 
process Align {

    // where to store the results and in which way
    publishDir(params.OUTPUT, pattern: '*.sam')

    // indicates to use as a container the value indicated in the parameter
    container params.CONTAINER

    // indicates to use as a label the value indicated in the parameter
    label (params.LABEL)


    tag "${reads}" 							

    input:
    tuple val(refname), path (ref_files)
    path reads  							

    output:									
    path "${reads}.sam", emit: samples_sam
    path "${reads}.log", emit: samples_log

    script:									
    """
        bowtie -p ${task.cpus} ${refname} -q ${reads} -S > ${reads}.sam 2> ${reads}.log
    """
}

/*
 * Bowtie workflow connecting both indexing and alignment
 */

workflow BOWTIE {
 
    // definition of input
    take: 
    ref_file
    input_reads

    // main part where we connect two modules, indexing and alignment
    main:
	bow_index = Index(ref_file)
	Align(bow_index, input_reads)
	
    // definition of workflow outputs derived from the alignment module outputs
    emit:
    	sam = Align.out.samples_sam
    	logs = Align.out.samples_log
}