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: // Include any necessary methods kkonganti@11: include { \ kkonganti@11: summaryOfParams; stopNow; fastqEntryPointHelp; sendMail; \ kkonganti@11: addPadding; wrapUpHelp } from "${params.routines}" kkonganti@11: include { dpubmlstpyHelp } from "${params.toolshelp}${params.fs}dpubmlstpy" kkonganti@11: include { checkm2predictHelp } from "${params.toolshelp}${params.fs}checkm2predict" kkonganti@11: include { guncrunHelp } from "${params.toolshelp}${params.fs}guncrun" kkonganti@11: include { mlstHelp } from "${params.toolshelp}${params.fs}mlst" 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: // 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 { DOWNLOAD_PUBMLST_SCHEME } from "${params.modules}${params.fs}download_pubmlst_scheme${params.fs}main" kkonganti@11: include { FILTER_PDG_METADATA } from "${params.modules}${params.fs}filter_pdg_metadata${params.fs}main" kkonganti@11: include { GUNC_RUN } from "${params.modules}${params.fs}gunc${params.fs}run${params.fs}main" kkonganti@11: include { CHECKM2_PREDICT } from "${params.modules}${params.fs}checkm2${params.fs}predict${params.fs}main" kkonganti@11: include { QUAL_PASSED_GENOMES } from "${params.modules}${params.fs}custom${params.fs}qual_passed_genomes${params.fs}main" kkonganti@11: include { SCAFFOLD_GENOMES } from "${params.modules}${params.fs}scaffold_genomes${params.fs}main" kkonganti@11: include { MLST } from "${params.modules}${params.fs}mlst${params.fs}main" kkonganti@11: include { INDEX_PDG_METADATA } from "${params.modules}${params.fs}index_pdg_metadata${params.fs}main" kkonganti@11: include { MASH_SKETCH } from "${params.modules}${params.fs}mash${params.fs}sketch${params.fs}main" kkonganti@11: include { MASH_PASTE } from "${params.modules}${params.fs}mash${params.fs}paste${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 CRONOLOGY_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/cronology/db_files") kkonganti@11: } kkonganti@11: kkonganti@11: checkDBPathExists(params.guncrun_dbpath, 'GUNC') kkonganti@11: checkDBPathExists(params.checkm2predict_dbpath, 'CheckM2') kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: RUN THE CRONOLOGY_DB WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: workflow CRONOLOGY_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.out.versions kkonganti@11: .set { software_versions } kkonganti@11: kkonganti@11: DOWNLOAD_PUBMLST_SCHEME ( params.dpubmlstpy_org ?: null ) kkonganti@11: kkonganti@11: FILTER_PDG_METADATA ( kkonganti@11: DOWNLOAD_PDG_METADATA.out.accs kkonganti@11: .splitText(by: params.genomes_chunk, file: true) kkonganti@11: ) kkonganti@11: kkonganti@11: FILTER_PDG_METADATA.out.accs_chunk_tbl kkonganti@11: .collectFile(sort: { acc_f -> acc_f.simpleName }) kkonganti@11: .multiMap { acc_chunk_file -> kkonganti@11: def meta = [:] kkonganti@11: meta.id = 'AssemblyQC' kkonganti@11: meta.phone_ncbi = true kkonganti@11: gunc: [ meta, params.guncrun_dbpath, acc_chunk_file ] kkonganti@11: checkm2: [ meta, params.checkm2predict_dbpath, acc_chunk_file ] kkonganti@11: } kkonganti@11: .set { ch_run_qual_on_these_accs } kkonganti@11: kkonganti@11: CHECKM2_PREDICT ( ch_run_qual_on_these_accs.checkm2 ) kkonganti@11: kkonganti@11: GUNC_RUN ( ch_run_qual_on_these_accs.gunc ) kkonganti@11: kkonganti@11: QUAL_PASSED_GENOMES ( kkonganti@11: CHECKM2_PREDICT.out.quality_report_passed kkonganti@11: .map { meta, qual -> kkonganti@11: [ qual ] kkonganti@11: } kkonganti@11: .collect() kkonganti@11: .flatten() kkonganti@11: .collectFile(name: 'checkm2_quality_passed.txt'), kkonganti@11: GUNC_RUN.out.quality_report_passed kkonganti@11: .map { meta, qual -> kkonganti@11: [ qual ] kkonganti@11: } kkonganti@11: .collect() kkonganti@11: .flatten() kkonganti@11: .collectFile(name: 'gunc_quality_passed.txt') kkonganti@11: ) kkonganti@11: kkonganti@11: SCAFFOLD_GENOMES ( kkonganti@11: QUAL_PASSED_GENOMES.out.accs kkonganti@11: .splitText(by: params.genomes_chunk, file: true) kkonganti@11: ) kkonganti@11: kkonganti@11: SCAFFOLD_GENOMES.out.scaffolded kkonganti@11: .multiMap { scaffolded -> kkonganti@11: def meta = [:] kkonganti@11: meta.id = (params.pdg_release ?: 'NCBI Pathogen Genomes') kkonganti@11: mlst: [ meta, scaffolded ] kkonganti@11: mash: [ meta, scaffolded ] kkonganti@11: } kkonganti@11: .set { ch_scaffolded_genomes } kkonganti@11: kkonganti@11: MLST ( kkonganti@11: ch_scaffolded_genomes.mlst kkonganti@11: .combine( DOWNLOAD_PUBMLST_SCHEME.out.pubmlst_dir ) kkonganti@11: ) kkonganti@11: kkonganti@11: MLST.out.tsv kkonganti@11: .map { meta, tsv -> kkonganti@11: tsv kkonganti@11: } kkonganti@11: .collectFile( kkonganti@11: name: 'mlst_results.tsv', kkonganti@11: keepHeader: true, kkonganti@11: skip: 1 kkonganti@11: ) kkonganti@11: .set { ch_mlst_results } kkonganti@11: kkonganti@11: INDEX_PDG_METADATA ( kkonganti@11: DOWNLOAD_PDG_METADATA.out.pdg_metadata, kkonganti@11: DOWNLOAD_PDG_METADATA.out.snp_cluster_metadata, kkonganti@11: DOWNLOAD_PDG_METADATA.out.accs, kkonganti@11: ch_mlst_results kkonganti@11: ) kkonganti@11: kkonganti@11: MASH_SKETCH ( kkonganti@11: ch_scaffolded_genomes.mash kkonganti@11: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@11: ) kkonganti@11: kkonganti@11: MASH_PASTE ( kkonganti@11: MASH_SKETCH.out.sketch kkonganti@11: .map { meta, sketch -> kkonganti@11: [ [id: (params.pdg_release ?: 'NCBI Pathogen Genomes')], sketch ] kkonganti@11: } kkonganti@11: .groupTuple(by: [0]) 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: DOWNLOAD_PUBMLST_SCHEME.out.versions, kkonganti@11: FILTER_PDG_METADATA.out.versions, kkonganti@11: CHECKM2_PREDICT.out.versions, kkonganti@11: GUNC_RUN.out.versions, kkonganti@11: QUAL_PASSED_GENOMES.out.versions, kkonganti@11: SCAFFOLD_GENOMES.out.versions, kkonganti@11: MLST.out.versions, kkonganti@11: INDEX_PDG_METADATA.out.versions, kkonganti@11: MASH_SKETCH.out.versions, kkonganti@11: MASH_PASTE.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: METHOD TO CHECK IF DB PATHS EXIST kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def checkDBPathExists(db_path, msg) { kkonganti@11: db_path_obj = file( db_path ) kkonganti@11: kkonganti@11: if (!db_path_obj.exists()) { kkonganti@11: stopNow("Please check if the database path for ${msg}\n" + kkonganti@11: "[ ${db_path} ]\nexists.") kkonganti@11: } kkonganti@11: }/* kkonganti@11: kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: HELP TEXT METHODS FOR CRONOLOGY 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: dpubmlstpyHelp(params).text + kkonganti@11: checkm2predictHelp(params).text + kkonganti@11: guncrunHelp(params).text + kkonganti@11: wrapUpHelp() kkonganti@11: ) kkonganti@11: kkonganti@11: return addPadding(helptext) kkonganti@11: }