kkonganti@0: // Define any required imports for this specific workflow kkonganti@0: import java.nio.file.Paths kkonganti@0: import nextflow.file.FileHelper kkonganti@0: kkonganti@0: // Include any necessary methods kkonganti@0: include { \ kkonganti@0: summaryOfParams; stopNow; fastqEntryPointHelp; sendMail; \ kkonganti@0: addPadding; wrapUpHelp } from "${params.routines}" kkonganti@0: include { dpubmlstpyHelp } from "${params.toolshelp}${params.fs}dpubmlstpy" kkonganti@0: include { checkm2predictHelp } from "${params.toolshelp}${params.fs}checkm2predict" kkonganti@0: include { guncrunHelp } from "${params.toolshelp}${params.fs}guncrun" kkonganti@0: include { mlstHelp } from "${params.toolshelp}${params.fs}mlst" kkonganti@0: kkonganti@0: // Exit if help requested before any subworkflows kkonganti@0: if (params.help) { kkonganti@0: log.info help() kkonganti@0: exit 0 kkonganti@0: } kkonganti@0: kkonganti@0: // Include any necessary modules and subworkflows kkonganti@0: include { DOWNLOAD_PDG_METADATA } from "${params.modules}${params.fs}download_pdg_metadata${params.fs}main" kkonganti@0: include { DOWNLOAD_PUBMLST_SCHEME } from "${params.modules}${params.fs}download_pubmlst_scheme${params.fs}main" kkonganti@0: include { FILTER_PDG_METADATA } from "${params.modules}${params.fs}filter_pdg_metadata${params.fs}main" kkonganti@0: include { GUNC_RUN } from "${params.modules}${params.fs}gunc${params.fs}run${params.fs}main" kkonganti@0: include { CHECKM2_PREDICT } from "${params.modules}${params.fs}checkm2${params.fs}predict${params.fs}main" kkonganti@0: include { QUAL_PASSED_GENOMES } from "${params.modules}${params.fs}custom${params.fs}qual_passed_genomes${params.fs}main" kkonganti@0: include { SCAFFOLD_GENOMES } from "${params.modules}${params.fs}scaffold_genomes${params.fs}main" kkonganti@0: include { MLST } from "${params.modules}${params.fs}mlst${params.fs}main" kkonganti@0: include { INDEX_PDG_METADATA } from "${params.modules}${params.fs}index_pdg_metadata${params.fs}main" kkonganti@0: include { MASH_SKETCH } from "${params.modules}${params.fs}mash${params.fs}sketch${params.fs}main" kkonganti@0: include { MASH_PASTE } from "${params.modules}${params.fs}mash${params.fs}paste${params.fs}main" kkonganti@0: include { DUMP_SOFTWARE_VERSIONS } from "${params.modules}${params.fs}custom${params.fs}dump_software_versions${params.fs}main" kkonganti@0: kkonganti@0: /* kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: INPUTS AND ANY CHECKS FOR THE CRONOLOGY_DB WORKFLOW kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: */ kkonganti@0: kkonganti@0: if (!params.output) { kkonganti@0: stopNow("Please mention the absolute UNIX path to store the DB flat files\n" + kkonganti@0: "using the --output option.\n" + kkonganti@0: "Ex: --output /path/to/cronology/db_files") kkonganti@0: } kkonganti@0: kkonganti@0: checkDBPathExists(params.guncrun_dbpath, 'GUNC') kkonganti@0: checkDBPathExists(params.checkm2predict_dbpath, 'CheckM2') kkonganti@0: kkonganti@0: /* kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: RUN THE CRONOLOGY_DB WORKFLOW kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: */ kkonganti@0: kkonganti@0: workflow CRONOLOGY_DB { kkonganti@0: main: kkonganti@0: log.info summaryOfParams() kkonganti@0: kkonganti@0: DOWNLOAD_PDG_METADATA ( params.pdg_release ?: null ) kkonganti@0: kkonganti@0: DOWNLOAD_PDG_METADATA.out.versions kkonganti@0: .set { software_versions } kkonganti@0: kkonganti@0: DOWNLOAD_PUBMLST_SCHEME ( params.dpubmlstpy_org ?: null ) kkonganti@0: kkonganti@0: FILTER_PDG_METADATA ( kkonganti@0: DOWNLOAD_PDG_METADATA.out.accs kkonganti@0: .splitText(by: params.genomes_chunk, file: true) kkonganti@0: ) kkonganti@0: kkonganti@0: FILTER_PDG_METADATA.out.accs_chunk_tbl kkonganti@0: .collectFile(sort: { acc_f -> acc_f.simpleName }) kkonganti@0: .multiMap { acc_chunk_file -> kkonganti@0: def meta = [:] kkonganti@0: meta.id = 'AssemblyQC' kkonganti@0: meta.phone_ncbi = true kkonganti@0: gunc: [ meta, params.guncrun_dbpath, acc_chunk_file ] kkonganti@0: checkm2: [ meta, params.checkm2predict_dbpath, acc_chunk_file ] kkonganti@0: } kkonganti@0: .set { ch_run_qual_on_these_accs } kkonganti@0: kkonganti@0: CHECKM2_PREDICT ( ch_run_qual_on_these_accs.checkm2 ) kkonganti@0: kkonganti@0: GUNC_RUN ( ch_run_qual_on_these_accs.gunc ) kkonganti@0: kkonganti@0: QUAL_PASSED_GENOMES ( kkonganti@0: CHECKM2_PREDICT.out.quality_report_passed kkonganti@0: .map { meta, qual -> kkonganti@0: [ qual ] kkonganti@0: } kkonganti@0: .collect() kkonganti@0: .flatten() kkonganti@0: .collectFile(name: 'checkm2_quality_passed.txt'), kkonganti@0: GUNC_RUN.out.quality_report_passed kkonganti@0: .map { meta, qual -> kkonganti@0: [ qual ] kkonganti@0: } kkonganti@0: .collect() kkonganti@0: .flatten() kkonganti@0: .collectFile(name: 'gunc_quality_passed.txt') kkonganti@0: ) kkonganti@0: kkonganti@0: SCAFFOLD_GENOMES ( kkonganti@0: QUAL_PASSED_GENOMES.out.accs kkonganti@0: .splitText(by: params.genomes_chunk, file: true) kkonganti@0: ) kkonganti@0: kkonganti@0: SCAFFOLD_GENOMES.out.scaffolded kkonganti@0: .multiMap { scaffolded -> kkonganti@0: def meta = [:] kkonganti@0: meta.id = (params.pdg_release ?: 'NCBI Pathogen Genomes') kkonganti@0: mlst: [ meta, scaffolded ] kkonganti@0: mash: [ meta, scaffolded ] kkonganti@0: } kkonganti@0: .set { ch_scaffolded_genomes } kkonganti@0: kkonganti@0: MLST ( kkonganti@0: ch_scaffolded_genomes.mlst kkonganti@0: .combine( DOWNLOAD_PUBMLST_SCHEME.out.pubmlst_dir ) kkonganti@0: ) kkonganti@0: kkonganti@0: MLST.out.tsv kkonganti@0: .map { meta, tsv -> kkonganti@0: tsv kkonganti@0: } kkonganti@0: .collectFile( kkonganti@0: name: 'mlst_results.tsv', kkonganti@0: keepHeader: true, kkonganti@0: skip: 1 kkonganti@0: ) kkonganti@0: .set { ch_mlst_results } kkonganti@0: kkonganti@0: INDEX_PDG_METADATA ( kkonganti@0: DOWNLOAD_PDG_METADATA.out.pdg_metadata, kkonganti@0: DOWNLOAD_PDG_METADATA.out.snp_cluster_metadata, kkonganti@0: DOWNLOAD_PDG_METADATA.out.accs, kkonganti@0: ch_mlst_results kkonganti@0: ) kkonganti@0: kkonganti@0: MASH_SKETCH ( kkonganti@0: ch_scaffolded_genomes.mash kkonganti@0: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@0: ) kkonganti@0: kkonganti@0: MASH_PASTE ( kkonganti@0: MASH_SKETCH.out.sketch kkonganti@0: .map { meta, sketch -> kkonganti@0: [ [id: (params.pdg_release ?: 'NCBI Pathogen Genomes')], sketch ] kkonganti@0: } kkonganti@0: .groupTuple(by: [0]) kkonganti@0: ) kkonganti@0: kkonganti@0: DUMP_SOFTWARE_VERSIONS ( kkonganti@0: software_versions kkonganti@0: .mix ( kkonganti@0: DOWNLOAD_PDG_METADATA.out.versions, kkonganti@0: DOWNLOAD_PUBMLST_SCHEME.out.versions, kkonganti@0: FILTER_PDG_METADATA.out.versions, kkonganti@0: CHECKM2_PREDICT.out.versions, kkonganti@0: GUNC_RUN.out.versions, kkonganti@0: QUAL_PASSED_GENOMES.out.versions, kkonganti@0: SCAFFOLD_GENOMES.out.versions, kkonganti@0: MLST.out.versions, kkonganti@0: INDEX_PDG_METADATA.out.versions, kkonganti@0: MASH_SKETCH.out.versions, kkonganti@0: MASH_PASTE.out.versions kkonganti@0: ) kkonganti@0: .unique() kkonganti@0: .collectFile(name: 'collected_versions.yml') kkonganti@0: ) kkonganti@0: } kkonganti@0: kkonganti@0: /* kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: ON COMPLETE, SHOW GORY DETAILS OF ALL PARAMS WHICH WILL BE HELPFUL TO DEBUG kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: */ kkonganti@0: kkonganti@0: workflow.onComplete { kkonganti@0: if (workflow.success) { kkonganti@0: sendMail() kkonganti@0: } kkonganti@0: } kkonganti@0: kkonganti@0: workflow.onError { kkonganti@0: sendMail() kkonganti@0: } kkonganti@0: kkonganti@0: /* kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: METHOD TO CHECK IF DB PATHS EXIST kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: */ kkonganti@0: kkonganti@0: def checkDBPathExists(db_path, msg) { kkonganti@0: db_path_obj = file( db_path ) kkonganti@0: kkonganti@0: if (!db_path_obj.exists()) { kkonganti@0: stopNow("Please check if the database path for ${msg}\n" + kkonganti@0: "[ ${db_path} ]\nexists.") kkonganti@0: } kkonganti@0: }/* kkonganti@0: kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: HELP TEXT METHODS FOR CRONOLOGY WORKFLOW kkonganti@0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@0: */ kkonganti@0: kkonganti@0: def help() { kkonganti@0: kkonganti@0: Map helptext = [:] kkonganti@0: kkonganti@0: helptext.putAll ( kkonganti@0: fastqEntryPointHelp().findAll { kkonganti@0: it.key =~ /Required|output|Other|Workflow|Author|Version/ kkonganti@0: } + kkonganti@0: dpubmlstpyHelp(params).text + kkonganti@0: checkm2predictHelp(params).text + kkonganti@0: guncrunHelp(params).text + kkonganti@0: wrapUpHelp() kkonganti@0: ) kkonganti@0: kkonganti@0: return addPadding(helptext) kkonganti@0: }