diff --git a/conf/modules.config b/conf/modules.config index e367a67..d4bd038 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -327,7 +327,7 @@ process { ] } - withName: METAPHLAN3 { + withName: METAPHLAN3_METAPHLAN3 { ext.args = { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { "${meta.id}-${meta.db_name}" } : { "${meta.id}-${meta.run_accession}-${meta.db_name}" } publishDir = [ @@ -337,6 +337,15 @@ process { ] } + withName: METAPHLAN3_MERGEMETAPHLANTABLES { + ext.prefix = { "${meta.id}_combined_reports" } + publishDir = [ + path: { "${params.outdir}/metaphlan3/" }, + mode: params.publish_dir_mode, + pattern: '*.{txt}' + ] + } + withName: CENTRIFUGE_CENTRIFUGE { publishDir = [ path: { "${params.outdir}/centrifuge/${meta.db_name}/" }, diff --git a/modules.json b/modules.json index 3b8cab2..cbbae85 100644 --- a/modules.json +++ b/modules.json @@ -94,6 +94,10 @@ "branch": "master", "git_sha": "2d38566eca4cc15142b2ffa7c11837569b39aece" }, + "metaphlan3/mergemetaphlantables": { + "branch": "master", + "git_sha": "940d7fe9d63962e0e2ba0987e2893fb0aff832e3" + }, "metaphlan3/metaphlan3": { "branch": "master", "git_sha": "940d7fe9d63962e0e2ba0987e2893fb0aff832e3" diff --git a/modules/nf-core/modules/metaphlan3/mergemetaphlantables/main.nf b/modules/nf-core/modules/metaphlan3/mergemetaphlantables/main.nf new file mode 100644 index 0000000..6fd05e3 --- /dev/null +++ b/modules/nf-core/modules/metaphlan3/mergemetaphlantables/main.nf @@ -0,0 +1,33 @@ +process METAPHLAN3_MERGEMETAPHLANTABLES { + label 'process_single' + + conda (params.enable_conda ? 'bioconda::metaphlan=3.0.12' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/metaphlan:3.0.12--pyhb7b1952_0' : + 'quay.io/biocontainers/metaphlan:3.0.12--pyhb7b1952_0' }" + + input: + path(profiles) + + output: + tuple path("${prefix}.txt") , emit: txt + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "merged_abundance_table" + """ + merge_metaphlan_tables.py \\ + $args \\ + -o ${prefix}.txt \\ + ${profiles} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + metaphlan3: \$(metaphlan --version 2>&1 | awk '{print \$3}') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/metaphlan3/mergemetaphlantables/meta.yml b/modules/nf-core/modules/metaphlan3/mergemetaphlantables/meta.yml new file mode 100644 index 0000000..c94be25 --- /dev/null +++ b/modules/nf-core/modules/metaphlan3/mergemetaphlantables/meta.yml @@ -0,0 +1,34 @@ +name: "metaphlan3_mergemetaphlantables" +description: Merges output abundance tables from MetaPhlAn3 +keywords: + - metagenomics + - classification + - merge + - table + - profiles +tools: + - metaphlan3: + description: Identify clades (phyla to species) present in the metagenome obtained from a microbiome sample and their relative abundance + homepage: https://huttenhower.sph.harvard.edu/metaphlan/ + documentation: https://github.com/biobakery/MetaPhlAn + doi: "10.7554/eLife.65088" + licence: ["MIT License"] + +input: + - profiles: + type: file + description: List of per-sample MetaPhlAn3 taxonomic abundance tables + pattern: "*" + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - txt: + type: txt + description: Combined MetaPhlAn3 table + pattern: "*.txt" + +authors: + - "@jfy133" diff --git a/subworkflows/local/standardisation_profiles.nf b/subworkflows/local/standardisation_profiles.nf index 8be6020..6d404be 100644 --- a/subworkflows/local/standardisation_profiles.nf +++ b/subworkflows/local/standardisation_profiles.nf @@ -2,8 +2,9 @@ // Standardise output files e.g. aggregation // -include { KAIJU_KAIJU2TABLE } from '../../modules/nf-core/modules/kaiju/kaiju2table/main' -include { MOTUS_MERGE } from '../../modules/nf-core/modules/motus/merge/main' +include { KAIJU_KAIJU2TABLE } from '../../modules/nf-core/modules/kaiju/kaiju2table/main' +include { MOTUS_MERGE } from '../../modules/nf-core/modules/motus/merge/main' +include { METAPHLAN3_MERGEMETAPHLANTABLES } from '../../modules/nf-core/modules/metaphlan3/mergemetaphlantables/main' workflow STANDARDISATION_PROFILES { take: @@ -23,6 +24,7 @@ workflow STANDARDISATION_PROFILES { ch_input_profiles = profiles .branch { motus: it[0]['tool'] == 'motus' + metaphlan3: it[0]['tool'] == 'metaphlan3' unknown: true } @@ -58,6 +60,21 @@ workflow STANDARDISATION_PROFILES { ch_multiqc_files = ch_multiqc_files.mix( KAIJU_KAIJU2TABLE.out.summary ) ch_versions = ch_versions.mix( KAIJU_KAIJU2TABLE.out.versions ) + // MetaPhlAn3 + ch_profiles_for_metaphlan3 = ch_input_profiles.metaphlan3 + .map { [it[0]['db_name'], it[1]] } + .groupTuple() + .map { + [it[1]] + } + + METAPHLAN3_MERGEMETAPHLANTABLES ( ch_profiles_for_metaphlan3 ) + ch_standardised_tables = ch_standardised_tables.mix( METAPHLAN3_MERGEMETAPHLANTABLES.out.txt ) + ch_multiqc_files = ch_multiqc_files.mix( METAPHLAN3_MERGEMETAPHLANTABLES.out.txt ) + ch_versions = ch_versions.mix( METAPHLAN3_MERGEMETAPHLANTABLES.out.versions ) + + // mOTUs + // mOTUs has a 'single' database, and cannot create custom ones. // Therefore removing db info here, and publish merged at root mOTUs results // directory