kkonganti@11: // Define any required imports for this specific workflow kkonganti@11: import java.nio.file.Paths kkonganti@11: import nextflow.file.FileHelper kkonganti@11: kkonganti@11: kkonganti@11: // Include any necessary methods kkonganti@11: include { \ kkonganti@11: fastqEntryPointHelp; summaryOfParams; stopNow; sendMail; \ kkonganti@11: addPadding; wrapUpHelp } from "${params.routines}" kkonganti@11: include { wcompHelp } from "${params.toolshelp}${params.fs}wcomp" kkonganti@11: include { wsnpHelp } from "${params.toolshelp}${params.fs}wsnp" kkonganti@11: include { mashsketchHelp } from "${params.toolshelp}${params.fs}mashsketch" kkonganti@11: kkonganti@11: kkonganti@11: // Exit if help requested before any subworkflows kkonganti@11: if (params.help) { kkonganti@11: log.info help() kkonganti@11: exit 0 kkonganti@11: } kkonganti@11: kkonganti@11: kkonganti@11: // Include any necessary modules and subworkflows kkonganti@11: include { DOWNLOAD_PDG_METADATA } from "${params.modules}${params.fs}download_pdg_metadata${params.fs}main" kkonganti@11: include { FILTER_PDG_METADATA } from "${params.modules}${params.fs}filter_pdg_metadata${params.fs}main" kkonganti@11: include { DB_PER_COMPUTED_SEROTYPE } from "${params.modules}${params.fs}db_per_computed_serotype${params.fs}main" kkonganti@11: include { DB_PER_SNP_CLUSTER } from "${params.modules}${params.fs}db_per_snp_cluster${params.fs}main" kkonganti@11: include { INDEX_METADATA } from "${params.modules}${params.fs}index_metadata${params.fs}main" kkonganti@11: include { SCAFFOLD_GENOMES } from "${params.modules}${params.fs}scaffold_genomes${params.fs}main" kkonganti@11: include { MASH_SKETCH } from "${params.modules}${params.fs}mash${params.fs}sketch${params.fs}main" kkonganti@11: include { DUMP_SOFTWARE_VERSIONS } from "${params.modules}${params.fs}custom${params.fs}dump_software_versions${params.fs}main" kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: INPUTS AND ANY CHECKS FOR THE BETTERCALLSAL_DB WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: if (!params.output) { kkonganti@11: stopNow("Please mention the absolute UNIX path to store the DB flat files\n" + kkonganti@11: "using the --output option.\n" + kkonganti@11: "Ex: --output /path/to/bettercallsal/db_files") kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: RUN THE BETTERCALLSAL_DB WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: workflow BETTERCALLSAL_DB { kkonganti@11: main: kkonganti@11: log.info summaryOfParams() kkonganti@11: kkonganti@11: DOWNLOAD_PDG_METADATA ( params.pdg_release ?: null ) kkonganti@11: kkonganti@11: DOWNLOAD_PDG_METADATA kkonganti@11: .out kkonganti@11: .versions kkonganti@11: .set { software_versions } kkonganti@11: kkonganti@11: FILTER_PDG_METADATA ( kkonganti@11: DOWNLOAD_PDG_METADATA.out.accs kkonganti@11: .splitText(by: params.genomes_chunk.toInteger() * 10, file: true) kkonganti@11: ) kkonganti@11: kkonganti@11: DB_PER_COMPUTED_SEROTYPE ( kkonganti@11: FILTER_PDG_METADATA.out.accs_chunk_tbl kkonganti@11: .collectFile(name: 'per_comp_db_accs.txt'), kkonganti@11: DOWNLOAD_PDG_METADATA.out.pdg_metadata kkonganti@11: ) kkonganti@11: kkonganti@11: DB_PER_SNP_CLUSTER ( kkonganti@11: FILTER_PDG_METADATA.out.accs_chunk_tbl kkonganti@11: .collectFile(name: 'per_snp_db_accs.txt'), kkonganti@11: DOWNLOAD_PDG_METADATA.out.pdg_metadata, kkonganti@11: DOWNLOAD_PDG_METADATA.out.snp_cluster_metadata kkonganti@11: ) kkonganti@11: kkonganti@11: DB_PER_COMPUTED_SEROTYPE.out.genome_paths kkonganti@11: .map { query -> kkonganti@11: kv = [:] kkonganti@11: kv['id'] = 'comp' kkonganti@11: [ kv, query ] kkonganti@11: } kkonganti@11: .concat( kkonganti@11: DB_PER_SNP_CLUSTER.out.genome_paths kkonganti@11: .map { query -> kkonganti@11: kv = [:] kkonganti@11: kv['id'] = 'snp' kkonganti@11: [ kv, query ] kkonganti@11: } kkonganti@11: ) kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .set { ch_mash_these_genomes } kkonganti@11: kkonganti@11: DB_PER_SNP_CLUSTER kkonganti@11: .out kkonganti@11: .asm_chunk_snp_tbl kkonganti@11: .concat( DB_PER_COMPUTED_SEROTYPE.out.asm_chunk_comp_tbl ) kkonganti@11: .map { acc -> [ acc.name.find(/\_comp|\_snp/), acc ] } kkonganti@11: .set { ch_index_metadata } kkonganti@11: kkonganti@11: INDEX_METADATA ( ch_index_metadata ) kkonganti@11: kkonganti@11: DB_PER_COMPUTED_SEROTYPE.out.accs_comp kkonganti@11: .concat( DB_PER_SNP_CLUSTER.out.accs_snp ) kkonganti@11: .splitText() kkonganti@11: .collect() kkonganti@11: .flatten() kkonganti@11: .unique() kkonganti@11: .collectFile(name: 'accs_to_download.txt') kkonganti@11: .splitText(by: params.genomes_chunk, file: true) kkonganti@11: .set { ch_accs_to_download } kkonganti@11: kkonganti@11: SCAFFOLD_GENOMES ( ch_accs_to_download ) kkonganti@11: kkonganti@11: SCAFFOLD_GENOMES kkonganti@11: .out kkonganti@11: .genomes_dir kkonganti@11: .toSortedList() kkonganti@11: .flatten() kkonganti@11: .unique() kkonganti@11: .set { ch_genomes_dir } kkonganti@11: kkonganti@11: MASH_SKETCH ( kkonganti@11: ch_mash_these_genomes.combine( ch_genomes_dir ) kkonganti@11: ) kkonganti@11: kkonganti@11: DUMP_SOFTWARE_VERSIONS ( kkonganti@11: software_versions kkonganti@11: .mix ( kkonganti@11: DOWNLOAD_PDG_METADATA.out.versions, kkonganti@11: FILTER_PDG_METADATA.out.versions, kkonganti@11: DB_PER_COMPUTED_SEROTYPE.out.versions, kkonganti@11: DB_PER_SNP_CLUSTER.out.versions, kkonganti@11: INDEX_METADATA.out.versions, kkonganti@11: SCAFFOLD_GENOMES.out.versions, kkonganti@11: MASH_SKETCH.out.versions, kkonganti@11: ) kkonganti@11: .unique() kkonganti@11: .collectFile(name: 'collected_versions.yml') kkonganti@11: ) kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: ON COMPLETE, SHOW GORY DETAILS OF ALL PARAMS WHICH WILL BE HELPFUL TO DEBUG kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: workflow.onComplete { kkonganti@11: if (workflow.success) { kkonganti@11: sendMail() kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: workflow.onError { kkonganti@11: sendMail() kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: HELP TEXT METHODS FOR BETTERCALLSAL_DB WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def help() { kkonganti@11: kkonganti@11: Map helptext = [:] kkonganti@11: kkonganti@11: helptext.putAll ( kkonganti@11: fastqEntryPointHelp().findAll { kkonganti@11: it.key =~ /Required|output|Other|Workflow|Author|Version/ kkonganti@11: } + kkonganti@11: wcompHelp(params).text + kkonganti@11: wsnpHelp(params).text + kkonganti@11: mashsketchHelp(params).text + kkonganti@11: wrapUpHelp() kkonganti@11: ) kkonganti@11: kkonganti@11: return addPadding(helptext) kkonganti@11: }