2022-02-18 06:55:14 +00:00
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
VALIDATE INPUTS
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/
def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params)
// Validate input parameters
WorkflowTaxprofiler.initialise(params, log)
// TODO nf-core: Add all file path parameters for the pipeline to the list below
// Check input path parameters to see if they exist
2022-04-03 05:58:40 +00:00
def checkPathParamList = [ params.input, params.databases, params.shortread_hostremoval_reference,
params.shortread_hostremoval_index, params.multiqc_config
]
2022-02-18 06:55:14 +00:00
for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } }
// Check mandatory parameters
2022-02-19 11:36:08 +00:00
if (params.input ) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' }
if (params.databases) { ch_databases = file(params.databases) } else { exit 1, 'Input database sheet not specified!' }
2022-04-05 11:14:06 +00:00
if (params.shortread_clipmerge_mergepairs && params.run_malt ) log.warn "[nf-core/taxprofiler] warning: MALT does not accept uncollapsed paired-reads. Pairs will be profiled as separate files."
2022-04-01 19:36:22 +00:00
if (params.shortread_clipmerge_excludeunmerged && !params.shortread_clipmerge_mergepairs) exit 1, "[nf-core/taxprofiler] error: cannot include unmerged reads when merging not turned on. Please specify --shortread_clipmerge_mergepairs"
2022-02-18 06:55:14 +00:00
2022-04-03 05:58:40 +00:00
// TODO Add check if index but no reference exit 1
2022-04-03 15:23:14 +00:00
if (params.shortread_hostremoval && !params.shortread_hostremoval_reference) { exit 1, "[nf-core/taxprofiler] error: --shortread_hostremoval requested but no --shortread_hostremoval_reference FASTA supplied. Check input." }
if (!params.shortread_hostremoval_reference && params.shortread_hostremoval_reference_index) { exit 1, "[nf-core/taxprofiler] error: --shortread_hostremoval_index provided but no --shortread_hostremoval_reference FASTA supplied. Check input." }
if (params.shortread_hostremoval_reference ) { ch_reference = file(params.shortread_hostremoval_reference) } else { ch_reference = [] }
if (params.shortread_hostremoval_index ) { ch_reference_index = file(params.shortread_hostremoval_index ) } else { ch_reference_index = [] }
2022-04-03 05:58:40 +00:00
2022-02-18 06:55:14 +00:00
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
CONFIG FILES
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/
2022-03-23 13:57:56 +00:00
ch_multiqc_config = file("$projectDir/assets/multiqc_config.yml", checkIfExists: true)
2022-02-18 06:55:14 +00:00
ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty()
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
IMPORT LOCAL MODULES/SUBWORKFLOWS
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/
//
// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules
//
2022-03-26 05:45:16 +00:00
include { INPUT_CHECK } from '../subworkflows/local/input_check'
2022-02-19 11:36:08 +00:00
2022-04-02 15:02:05 +00:00
include { DB_CHECK } from '../subworkflows/local/db_check'
include { SHORTREAD_PREPROCESSING } from '../subworkflows/local/shortread_preprocessing'
include { LONGREAD_PREPROCESSING } from '../subworkflows/local/longread_preprocessing'
2022-04-07 12:00:10 +00:00
include { SHORTREAD_HOSTREMOVAL } from '../subworkflows/local/shortread_hostremoval'
2022-04-02 15:02:05 +00:00
include { SHORTREAD_COMPLEXITYFILTERING } from '../subworkflows/local/shortread_complexityfiltering'
2022-04-10 04:43:30 +00:00
include { PROFILING } from '../subworkflows/local/profiling'
2022-02-18 06:55:14 +00:00
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
IMPORT NF-CORE MODULES/SUBWORKFLOWS
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/
//
// MODULE: Installed directly from nf-core/modules
//
include { FASTQC } from '../modules/nf-core/modules/fastqc/main'
include { MULTIQC } from '../modules/nf-core/modules/multiqc/main'
include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main'
2022-02-18 15:51:01 +00:00
include { CAT_FASTQ } from '../modules/nf-core/modules/cat/fastq/main'
2022-02-18 06:55:14 +00:00
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
RUN MAIN WORKFLOW
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/
// Info required for completion email and summary
def multiqc_report = []
workflow TAXPROFILER {
ch_versions = Channel.empty()
2022-03-26 20:54:50 +00:00
/*
SUBWORKFLOW: Read in samplesheet, validate and stage input files
*/
2022-02-18 06:55:14 +00:00
INPUT_CHECK (
ch_input
)
ch_versions = ch_versions.mix(INPUT_CHECK.out.versions)
2022-02-19 11:36:08 +00:00
DB_CHECK (
ch_databases
)
2022-04-10 05:26:20 +00:00
ch_versions = ch_versions.mix(DB_CHECK.out.versions)
2022-02-19 11:36:08 +00:00
2022-03-26 20:54:50 +00:00
/*
MODULE: Run FastQC
*/
2022-04-02 15:07:30 +00:00
ch_input_for_fastqc = INPUT_CHECK.out.fastq.mix( INPUT_CHECK.out.nanopore )
2022-03-28 16:20:10 +00:00
2022-02-18 06:55:14 +00:00
FASTQC (
2022-03-24 14:35:09 +00:00
ch_input_for_fastqc
2022-02-18 06:55:14 +00:00
)
2022-03-28 16:20:10 +00:00
2022-02-18 06:55:14 +00:00
ch_versions = ch_versions.mix(FASTQC.out.versions.first())
2022-03-26 20:54:50 +00:00
/*
SUBWORKFLOW: PERFORM PREPROCESSING
*/
2022-03-21 18:52:50 +00:00
if ( params.shortread_clipmerge ) {
2022-04-10 05:26:20 +00:00
2022-03-21 19:28:09 +00:00
ch_shortreads_preprocessed = SHORTREAD_PREPROCESSING ( INPUT_CHECK.out.fastq ).reads
} else {
ch_shortreads_preprocessed = INPUT_CHECK.out.fastq
2022-02-18 15:51:01 +00:00
}
2022-03-21 18:52:50 +00:00
if ( params.longread_clip ) {
2022-03-21 17:17:08 +00:00
ch_longreads_preprocessed = LONGREAD_PREPROCESSING ( INPUT_CHECK.out.nanopore ).reads
.map { it -> [ it[0], [it[1]] ] }
2022-04-03 15:23:14 +00:00
ch_versions = ch_versions.mix(LONGREAD_PREPROCESSING.out.versions.first())
2022-03-21 17:17:08 +00:00
} else {
ch_longreads_preprocessed = INPUT_CHECK.out.nanopore
}
2022-04-07 12:00:10 +00:00
2022-04-02 15:02:05 +00:00
/*
SUBWORKFLOW: COMPLEXITY FILTERING
*/
if ( params.shortread_complexityfilter ) {
ch_shortreads_filtered = SHORTREAD_COMPLEXITYFILTERING ( ch_shortreads_preprocessed ).reads
} else {
ch_shortreads_filtered = ch_shortreads_preprocessed
}
2022-04-07 12:00:10 +00:00
/*
SUBWORKFLOW: HOST REMOVAL
*/
2022-03-18 14:12:07 +00:00
2022-04-03 15:23:14 +00:00
if ( params.shortread_hostremoval ) {
2022-04-07 12:00:10 +00:00
ch_shortreads_hostremoved = SHORTREAD_HOSTREMOVAL ( ch_shortreads_filtered, ch_reference, ch_reference_index ).reads
2022-04-03 15:23:14 +00:00
ch_versions = ch_versions.mix(SHORTREAD_HOSTREMOVAL.out.versions.first())
} else {
2022-04-07 12:00:10 +00:00
ch_shortreads_hostremoved = ch_shortreads_filtered
2022-04-03 15:23:14 +00:00
}
2022-04-11 11:36:03 +00:00
2022-03-26 20:54:50 +00:00
/*
2022-04-10 04:43:30 +00:00
SUBWORKFLOW: PROFILING
2022-03-26 20:54:50 +00:00
*/
2022-02-19 11:36:08 +00:00
2022-04-11 11:36:03 +00:00
PROFILING ( ch_shortreads_hostremoved ch_longreads_preprocessed, DB_CHECK.out.dbs )
2022-04-10 04:48:25 +00:00
ch_versions = ch_versions.mix( PROFILING.out.versions )
2022-03-18 15:01:33 +00:00
2022-03-26 20:54:50 +00:00
/*
MODULE: MultiQC
*/
2022-04-02 15:02:05 +00:00
CUSTOM_DUMPSOFTWAREVERSIONS (
ch_versions.unique().collectFile(name: 'collated_versions.yml')
)
2022-02-18 06:55:14 +00:00
workflow_summary = WorkflowTaxprofiler.paramsSummaryMultiqc(workflow, summary_params)
ch_workflow_summary = Channel.value(workflow_summary)
ch_multiqc_files = Channel.empty()
ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config))
ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([]))
ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect())
ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([]))
2022-03-21 18:52:50 +00:00
if (params.shortread_clipmerge) {
2022-04-05 11:14:06 +00:00
ch_multiqc_files = ch_multiqc_files.mix( SHORTREAD_PREPROCESSING.out.mqc.collect{it[1]}.ifEmpty([]) )
2022-04-02 15:02:05 +00:00
ch_versions = ch_versions.mix( SHORTREAD_PREPROCESSING.out.versions )
2022-02-18 15:51:01 +00:00
}
2022-04-03 15:23:14 +00:00
2022-03-21 18:52:50 +00:00
if (params.longread_clip) {
2022-04-05 11:14:06 +00:00
ch_multiqc_files = ch_multiqc_files.mix( LONGREAD_PREPROCESSING.out.mqc.collect{it[1]}.ifEmpty([]) )
2022-04-02 15:02:05 +00:00
ch_versions = ch_versions.mix( LONGREAD_PREPROCESSING.out.versions )
2022-04-03 15:23:14 +00:00
}
2022-04-02 15:02:05 +00:00
if (params.shortread_complexityfilter){
2022-04-05 11:17:54 +00:00
ch_multiqc_files = ch_multiqc_files.mix( SHORTREAD_COMPLEXITYFILTERING.out.mqc.collect{it[1]}.ifEmpty([]) )
2022-04-02 15:02:05 +00:00
ch_versions = ch_versions.mix( SHORTREAD_COMPLEXITYFILTERING.out.versions )
2022-03-21 18:52:50 +00:00
}
2022-04-02 15:02:05 +00:00
2022-04-07 12:00:10 +00:00
if (params.shortread_hostremoval) {
ch_multiqc_files = ch_multiqc_files.mix(SHORTREAD_HOSTREMOVAL.out.mqc.collect{it[1]}.ifEmpty([]))
2022-03-21 18:52:50 +00:00
}
2022-04-11 11:36:03 +00:00
2022-04-10 04:43:30 +00:00
ch_multiqc_files = ch_multiqc_files.mix( PROFILING.out.mqc )
2022-04-03 15:23:14 +00:00
2022-04-02 12:44:48 +00:00
// TODO create multiQC module for metaphlan
2022-02-18 06:55:14 +00:00
MULTIQC (
ch_multiqc_files.collect()
)
multiqc_report = MULTIQC.out.report.toList()
ch_versions = ch_versions.mix(MULTIQC.out.versions)
}
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
COMPLETION EMAIL AND SUMMARY
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/
workflow.onComplete {
if (params.email || params.email_on_fail) {
NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report)
}
NfcoreTemplate.summary(workflow, params, log)
}
/*
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
THE END
2022-03-15 21:05:37 +00:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-02-18 06:55:14 +00:00
*/