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