kkonganti@11: // Define any required imports for this specific workflow kkonganti@11: import java.nio.file.Paths kkonganti@11: import java.util.zip.GZIPInputStream kkonganti@11: import java.io.FileInputStream kkonganti@11: import nextflow.file.FileHelper kkonganti@11: kkonganti@11: kkonganti@11: // Include any necessary methods kkonganti@11: include { \ kkonganti@11: summaryOfParams; stopNow; fastqEntryPointHelp; sendMail; conciseHelp; \ kkonganti@11: addPadding; wrapUpHelp } from "${params.routines}" kkonganti@11: include { bbmergeHelp } from "${params.toolshelp}${params.fs}bbmerge" kkonganti@11: include { fastpHelp } from "${params.toolshelp}${params.fs}fastp" kkonganti@11: include { mashscreenHelp } from "${params.toolshelp}${params.fs}mashscreen" kkonganti@11: include { tuspyHelp } from "${params.toolshelp}${params.fs}tuspy" kkonganti@11: include { sourmashsketchHelp } from "${params.toolshelp}${params.fs}sourmashsketch" kkonganti@11: include { sourmashgatherHelp } from "${params.toolshelp}${params.fs}sourmashgather" kkonganti@11: include { sourmashsearchHelp } from "${params.toolshelp}${params.fs}sourmashsearch" kkonganti@11: include { sfhpyHelp } from "${params.toolshelp}${params.fs}sfhpy" kkonganti@11: include { kmaindexHelp } from "${params.toolshelp}${params.fs}kmaindex" kkonganti@11: include { kmaalignHelp } from "${params.toolshelp}${params.fs}kmaalign" kkonganti@11: include { megahitHelp } from "${params.toolshelp}${params.fs}megahit" kkonganti@11: include { mlstHelp } from "${params.toolshelp}${params.fs}mlst" kkonganti@11: include { abricateHelp } from "${params.toolshelp}${params.fs}abricate" kkonganti@11: include { salmonidxHelp } from "${params.toolshelp}${params.fs}salmonidx" kkonganti@11: include { gsrpyHelp } from "${params.toolshelp}${params.fs}gsrpy" 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 { PROCESS_FASTQ } from "${params.subworkflows}${params.fs}process_fastq" kkonganti@11: include { CAT_CAT } from "${params.modules}${params.fs}cat_cat${params.fs}main" kkonganti@11: include { FASTQC } from "${params.modules}${params.fs}fastqc${params.fs}main" kkonganti@11: include { BBTOOLS_BBMERGE } from "${params.modules}${params.fs}bbtools${params.fs}bbmerge${params.fs}main" kkonganti@11: include { FASTP } from "${params.modules}${params.fs}fastp${params.fs}main" kkonganti@11: include { MASH_SCREEN } from "${params.modules}${params.fs}mash${params.fs}screen${params.fs}main" kkonganti@11: include { TOP_UNIQUE_SEROVARS } from "${params.modules}${params.fs}top_unique_serovars${params.fs}main" kkonganti@11: include { SOURMASH_SKETCH } from "${params.modules}${params.fs}sourmash${params.fs}sketch${params.fs}main" kkonganti@11: include { SOURMASH_GATHER } from "${params.modules}${params.fs}sourmash${params.fs}gather${params.fs}main" kkonganti@11: include { SOURMASH_SEARCH } from "${params.modules}${params.fs}sourmash${params.fs}search${params.fs}main" kkonganti@11: include { KMA_INDEX } from "${params.modules}${params.fs}kma${params.fs}index${params.fs}main" kkonganti@11: include { KMA_ALIGN } from "${params.modules}${params.fs}kma${params.fs}align${params.fs}main" kkonganti@11: include { OTF_GENOME } from "${params.modules}${params.fs}otf_genome${params.fs}main" kkonganti@11: include { MEGAHIT_ASSEMBLE } from "${params.modules}${params.fs}megahit${params.fs}assemble${params.fs}main" kkonganti@11: include { MLST } from "${params.modules}${params.fs}mlst${params.fs}main" kkonganti@11: include { ABRICATE_RUN } from "${params.modules}${params.fs}abricate${params.fs}run${params.fs}main" kkonganti@11: include { ABRICATE_SUMMARY } from "${params.modules}${params.fs}abricate${params.fs}summary${params.fs}main" kkonganti@11: include { TABLE_SUMMARY } from "${params.modules}${params.fs}cat${params.fs}tables${params.fs}main" kkonganti@11: include { SALMON_INDEX } from "${params.modules}${params.fs}salmon${params.fs}index${params.fs}main" kkonganti@11: include { SALMON_QUANT } from "${params.modules}${params.fs}salmon${params.fs}quant${params.fs}main" kkonganti@11: include { SOURMASH_COMPARE } from "${params.modules}${params.fs}custom${params.fs}sourmash${params.fs}compare${params.fs}main" kkonganti@11: include { BCS_DISTANCE_MATRIX } from "${params.modules}${params.fs}bcs_distance_matrix${params.fs}main" kkonganti@11: include { BCS_RESULTS } from "${params.modules}${params.fs}bcs_results${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: include { MULTIQC } from "${params.modules}${params.fs}multiqc${params.fs}main" kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: INPUTS AND ANY CHECKS FOR THE BETTERCALLSAL WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def reads_platform = 0 kkonganti@11: def salmon_idx_decoys = file ( "${params.salmonidx_decoys}" ) kkonganti@11: def abricate_dbs = [ 'ncbiamrplus', 'resfinder', 'megares', 'argannot' ] kkonganti@11: kkonganti@11: reads_platform += (params.input ? 1 : 0) kkonganti@11: kkonganti@11: if (reads_platform < 1 || reads_platform == 0) { kkonganti@11: stopNow("Please mention at least one absolute path to input folder which contains\n" + kkonganti@11: "FASTQ files sequenced using the --input option.\n" + kkonganti@11: "Ex: --input (Illumina or Generic short reads in FASTQ format)") kkonganti@11: } kkonganti@11: kkonganti@11: checkMetadataExists(params.mash_sketch, 'MASH sketch') kkonganti@11: checkMetadataExists(params.tuspy_ps, 'ACC2SERO pickle') kkonganti@11: checkMetadataExists(params.gsrpy_snp_clus_metadata, 'PDG reference target cluster metadata') kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: RUN THE BETTERCALLSAL WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: workflow BETTERCALLSAL { kkonganti@11: main: kkonganti@11: log.info summaryOfParams() kkonganti@11: kkonganti@11: PROCESS_FASTQ() kkonganti@11: kkonganti@11: PROCESS_FASTQ kkonganti@11: .out kkonganti@11: .versions kkonganti@11: .set { software_versions } kkonganti@11: kkonganti@11: PROCESS_FASTQ kkonganti@11: .out kkonganti@11: .processed_reads kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: if (params.bbmerge_run && !params.fq_single_end) { kkonganti@11: ch_processed_reads kkonganti@11: .map { meta, fastq -> kkonganti@11: meta.adapters = (params.bbmerge_adapters ?: params.dummyfile) kkonganti@11: [ meta, fastq ] kkonganti@11: } kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: BBTOOLS_BBMERGE( ch_processed_reads ) kkonganti@11: kkonganti@11: BBTOOLS_BBMERGE kkonganti@11: .out kkonganti@11: .fastq kkonganti@11: .map { meta, fastq -> [ meta, [ fastq ] ] } kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( BBTOOLS_BBMERGE.out.versions ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: if (params.fastp_run) { kkonganti@11: FASTP ( ch_processed_reads ) kkonganti@11: kkonganti@11: FASTP kkonganti@11: .out kkonganti@11: .passed_reads kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: FASTP kkonganti@11: .out kkonganti@11: .json kkonganti@11: .map { meta, json -> [ json ] } kkonganti@11: .collect() kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( FASTP.out.versions ) kkonganti@11: .set { software_versions } kkonganti@11: } else { kkonganti@11: FASTQC ( ch_processed_reads ) kkonganti@11: kkonganti@11: FASTQC kkonganti@11: .out kkonganti@11: .zip kkonganti@11: .map { meta, zip -> [ zip ] } kkonganti@11: .collect() kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( FASTQC.out.versions ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: if (params.bcs_concat_pe && !params.fq_single_end && !params.bbmerge_run) { kkonganti@11: CAT_CAT ( ch_processed_reads ) kkonganti@11: kkonganti@11: CAT_CAT kkonganti@11: .out kkonganti@11: .concatenated_reads kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( CAT_CAT.out.versions ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: ch_processed_reads kkonganti@11: .map { meta, fastq -> kkonganti@11: meta.sequence_sketch = params.mash_sketch kkonganti@11: meta.get_kma_hit_accs = true kkonganti@11: meta.single_end = true kkonganti@11: meta.salmon_decoys = params.dummyfile kkonganti@11: meta.salmon_lib_type = (params.salmonalign_libtype ?: false) kkonganti@11: [ meta, fastq ] kkonganti@11: } kkonganti@11: .filter { meta, fastq -> kkonganti@11: fq_file = ( fastq.getClass().toString() =~ /ArrayList/ ? fastq : [ fastq ] ) kkonganti@11: fq_gzip = new GZIPInputStream( new FileInputStream( fq_file[0].toString() ) ) kkonganti@11: fq_gzip.read() != -1 kkonganti@11: } kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: MASH_SCREEN ( ch_processed_reads ) kkonganti@11: kkonganti@11: TOP_UNIQUE_SEROVARS ( MASH_SCREEN.out.screened ) kkonganti@11: kkonganti@11: TOP_UNIQUE_SEROVARS.out.genomes_fasta kkonganti@11: .set { ch_genomes_fasta } kkonganti@11: kkonganti@11: TOP_UNIQUE_SEROVARS.out.failed kkonganti@11: .set { ch_bcs_calls_failed } kkonganti@11: kkonganti@11: if (params.sourmashgather_run || params.sourmashsearch_run) { kkonganti@11: SOURMASH_SKETCH ( kkonganti@11: ch_processed_reads kkonganti@11: .join ( ch_genomes_fasta ) kkonganti@11: ) kkonganti@11: kkonganti@11: if (params.sourmashgather_run) { kkonganti@11: SOURMASH_GATHER ( kkonganti@11: SOURMASH_SKETCH.out.signatures, kkonganti@11: [], [], [], [] kkonganti@11: ) kkonganti@11: kkonganti@11: SOURMASH_GATHER kkonganti@11: .out kkonganti@11: .genomes_fasta kkonganti@11: .set { ch_genomes_fasta } kkonganti@11: kkonganti@11: ch_bcs_calls_failed kkonganti@11: .concat ( SOURMASH_GATHER.out.failed ) kkonganti@11: .set { ch_bcs_calls_failed } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( SOURMASH_GATHER.out.versions.ifEmpty(null) ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: if (params.sourmashsearch_run) { kkonganti@11: SOURMASH_SEARCH ( kkonganti@11: SOURMASH_SKETCH.out.signatures, kkonganti@11: [] kkonganti@11: ) kkonganti@11: kkonganti@11: SOURMASH_SEARCH kkonganti@11: .out kkonganti@11: .genomes_fasta kkonganti@11: .set { ch_genomes_fasta } kkonganti@11: kkonganti@11: ch_bcs_calls_failed kkonganti@11: .concat ( SOURMASH_SEARCH.out.failed ) kkonganti@11: .set { ch_bcs_calls_failed } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( SOURMASH_SEARCH.out.versions.ifEmpty(null) ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: KMA_INDEX ( ch_genomes_fasta ) kkonganti@11: kkonganti@11: KMA_ALIGN ( kkonganti@11: ch_processed_reads kkonganti@11: .join ( KMA_INDEX.out.idx ) kkonganti@11: ) kkonganti@11: kkonganti@11: OTF_GENOME ( kkonganti@11: KMA_ALIGN.out.hits kkonganti@11: .join ( KMA_ALIGN.out.frags ) kkonganti@11: ) kkonganti@11: kkonganti@11: OTF_GENOME.out.failed kkonganti@11: .concat ( ch_bcs_calls_failed ) kkonganti@11: .collectFile( name: 'BCS_NO_CALLS.txt' ) kkonganti@11: .set { ch_bcs_no_calls } kkonganti@11: kkonganti@11: SALMON_INDEX ( OTF_GENOME.out.genomes_fasta ) kkonganti@11: kkonganti@11: SALMON_QUANT ( kkonganti@11: ch_processed_reads kkonganti@11: .join ( SALMON_INDEX.out.idx ) kkonganti@11: ) kkonganti@11: kkonganti@11: SALMON_QUANT kkonganti@11: .out kkonganti@11: .results kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> tuple ( it[1].flatten() ) } kkonganti@11: .mix ( ch_bcs_no_calls ) kkonganti@11: .collect() kkonganti@11: .set { ch_salmon_res_dirs } kkonganti@11: kkonganti@11: if (params.sourmashsketch_run) { kkonganti@11: SOURMASH_SKETCH kkonganti@11: .out kkonganti@11: .signatures kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { meta, qsigs, dsigs -> [ qsigs ] } kkonganti@11: .collect() kkonganti@11: .flatten() kkonganti@11: .collect() kkonganti@11: .set { ch_query_sigs } kkonganti@11: kkonganti@11: KMA_ALIGN kkonganti@11: .out kkonganti@11: .hits kkonganti@11: .map { meta, hits -> [ hits ] } kkonganti@11: .collect() kkonganti@11: .flatten() kkonganti@11: .collectFile(name: 'accessions.txt') kkonganti@11: .set { ch_otf_genomes } kkonganti@11: kkonganti@11: if (params.megahit_run) { kkonganti@11: kkonganti@11: MEGAHIT_ASSEMBLE ( OTF_GENOME.out.reads_extracted ) kkonganti@11: kkonganti@11: MEGAHIT_ASSEMBLE kkonganti@11: .out kkonganti@11: .assembly kkonganti@11: .set { ch_asm_filtered_contigs } kkonganti@11: kkonganti@11: MLST ( ch_asm_filtered_contigs ) kkonganti@11: kkonganti@11: MLST.out.tsv kkonganti@11: .map { meta, tsv -> [ 'mlst', tsv] } kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@11: .set { ch_mqc_custom_tbl } kkonganti@11: kkonganti@11: ABRICATE_RUN ( kkonganti@11: ch_asm_filtered_contigs, kkonganti@11: abricate_dbs kkonganti@11: ) kkonganti@11: kkonganti@11: ABRICATE_RUN kkonganti@11: .out kkonganti@11: .abricated kkonganti@11: .map { meta, abres -> [ abricate_dbs, abres ] } kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@11: .set { ch_abricated } kkonganti@11: kkonganti@11: ABRICATE_SUMMARY ( ch_abricated ) kkonganti@11: kkonganti@11: ch_mqc_custom_tbl kkonganti@11: .concat ( kkonganti@11: ABRICATE_SUMMARY.out.ncbiamrplus.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ABRICATE_SUMMARY.out.resfinder.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ABRICATE_SUMMARY.out.megares.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ABRICATE_SUMMARY.out.argannot.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ) kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> [ it[0], it[1].flatten() ]} kkonganti@11: .set { ch_mqc_custom_tbl } kkonganti@11: kkonganti@11: TABLE_SUMMARY ( ch_mqc_custom_tbl ) kkonganti@11: kkonganti@11: ch_multiqc kkonganti@11: .concat ( TABLE_SUMMARY.out.mqc_yml ) kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( kkonganti@11: MEGAHIT_ASSEMBLE.out.versions.ifEmpty(null), kkonganti@11: MLST.out.versions.ifEmpty(null), kkonganti@11: ABRICATE_RUN.out.versions.ifEmpty(null), kkonganti@11: ABRICATE_SUMMARY.out.versions.ifEmpty(null), kkonganti@11: TABLE_SUMMARY.out.versions.ifEmpty(null) kkonganti@11: ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: SOURMASH_COMPARE ( ch_query_sigs, ch_otf_genomes ) kkonganti@11: kkonganti@11: BCS_DISTANCE_MATRIX ( kkonganti@11: SOURMASH_COMPARE.out.matrix, kkonganti@11: SOURMASH_COMPARE.out.labels kkonganti@11: ) kkonganti@11: kkonganti@11: ch_multiqc kkonganti@11: .concat ( BCS_DISTANCE_MATRIX.out.mqc_yml ) kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix ( kkonganti@11: SOURMASH_SKETCH.out.versions.ifEmpty(null), kkonganti@11: SOURMASH_COMPARE.out.versions.ifEmpty(null), kkonganti@11: BCS_DISTANCE_MATRIX.out.versions.ifEmpty(null), kkonganti@11: ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: BCS_RESULTS ( ch_salmon_res_dirs ) kkonganti@11: kkonganti@11: DUMP_SOFTWARE_VERSIONS ( kkonganti@11: software_versions kkonganti@11: .mix ( kkonganti@11: MASH_SCREEN.out.versions, kkonganti@11: TOP_UNIQUE_SEROVARS.out.versions, kkonganti@11: KMA_INDEX.out.versions, kkonganti@11: KMA_ALIGN.out.versions, kkonganti@11: OTF_GENOME.out.versions.ifEmpty(null), kkonganti@11: SALMON_INDEX.out.versions, kkonganti@11: SALMON_QUANT.out.versions, kkonganti@11: BCS_RESULTS.out.versions kkonganti@11: ) kkonganti@11: .unique() kkonganti@11: .collectFile(name: 'collected_versions.yml') kkonganti@11: ) kkonganti@11: kkonganti@11: DUMP_SOFTWARE_VERSIONS kkonganti@11: .out kkonganti@11: .mqc_yml kkonganti@11: .concat ( kkonganti@11: ch_multiqc, kkonganti@11: BCS_RESULTS.out.mqc_yml, kkonganti@11: BCS_RESULTS.out.mqc_json kkonganti@11: ) kkonganti@11: .collect() kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: MULTIQC ( ch_multiqc ) 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 METADATA EXISTENCE kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def checkMetadataExists(file_path, msg) { kkonganti@11: file_path_obj = file( file_path ) kkonganti@11: kkonganti@11: if (!file_path_obj.exists() || file_path_obj.size() == 0) { kkonganti@11: stopNow("Please check if your ${msg} file\n" + kkonganti@11: "[ ${file_path} ]\nexists and is not of size 0.") kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: HELP TEXT METHODS FOR BETTERCALLSAL WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def help() { kkonganti@11: kkonganti@11: Map helptext = [:] kkonganti@11: Map bcsConcatHelp = [:] kkonganti@11: Map fastpAdapterHelp = [:] kkonganti@11: Map nH = [:] kkonganti@11: def uHelp = (params.help.getClass().toString() =~ /String/ ? params.help.tokenize(',').join(' ') : '') kkonganti@11: kkonganti@11: Map defaultHelp = [ kkonganti@11: '--help bbmerge' : 'Show bbmerge.sh CLI options', kkonganti@11: '--help fastp' : 'Show fastp CLI options', kkonganti@11: '--help mash' : 'Show mash `screen` CLI options', kkonganti@11: '--help tuspy' : 'Show get_top_unique_mash_hit_genomes.py CLI options', kkonganti@11: '--help sourmashsketch' : 'Show sourmash `sketch` CLI options', kkonganti@11: '--help sourmashgather' : 'Show sourmash `gather` CLI options', kkonganti@11: '--help sourmashsearch' : 'Show sourmash `search` CLI options', kkonganti@11: '--help sfhpy' : 'Show sourmash_filter_hits.py CLI options', kkonganti@11: '--help kmaindex' : 'Show kma `index` CLI options', kkonganti@11: '--help kmaalign' : 'Show kma CLI options', kkonganti@11: '--help megahit' : 'Show megahit CLI options', kkonganti@11: '--help mlst' : 'Show mlst CLI options', kkonganti@11: '--help abricate' : 'Show abricate CLI options', kkonganti@11: '--help salmon' : 'Show salmon `index` CLI options', kkonganti@11: '--help gsrpy' : 'Show gen_salmon_res_table.py CLI options\n' kkonganti@11: ] kkonganti@11: kkonganti@11: bcsConcatHelp['--bcs_concat_pe'] = "Concatenate paired-end files. " + kkonganti@11: "Default: ${params.bcs_concat_pe}" kkonganti@11: kkonganti@11: fastpAdapterHelp['--fastp_use_custom_adapaters'] = "Use custom adapter FASTA with fastp on top of " + kkonganti@11: "built-in adapter sequence auto-detection. Enabling this option will attempt to find and remove " + kkonganti@11: "all possible Illumina adapter and primer sequences but will make the workflow run slow. " + kkonganti@11: "Default: ${params.fastp_use_custom_adapters}" kkonganti@11: kkonganti@11: if (params.help.getClass().toString() =~ /Boolean/ || uHelp.size() == 0) { kkonganti@11: println conciseHelp('fastp,mash') kkonganti@11: helptext.putAll(defaultHelp) kkonganti@11: } else { kkonganti@11: params.help.tokenize(',').each { h -> kkonganti@11: if (defaultHelp.keySet().findAll{ it =~ /(?i)\b${h}\b/ }.size() == 0) { kkonganti@11: println conciseHelp('fastp,mash') kkonganti@11: stopNow("Tool [ ${h} ] is not a part of ${params.pipeline} pipeline.") kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: helptext.putAll( kkonganti@11: fastqEntryPointHelp() + kkonganti@11: bcsConcatHelp + kkonganti@11: (uHelp =~ /(?i)\bbbmerge/ ? bbmergeHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bfastp/ ? fastpHelp(params).text + fastpAdapterHelp : nH) + kkonganti@11: (uHelp =~ /(?i)\bmash/ ? mashscreenHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\btuspy/ ? tuspyHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bsourmashsketch/ ? sourmashsketchHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bsourmashgather/ ? sourmashgatherHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bsourmashsearch/ ? sourmashsearchHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bsfhpy/ ? sfhpyHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bkmaindex/ ? kmaindexHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bkmaalign/ ? kmaalignHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bmegahit/ ? megahitHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bmlst/ ? mlstHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\babricate/ ? abricateHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bsalmon/ ? salmonidxHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bgsrpy/ ? gsrpyHelp(params).text : nH) + kkonganti@11: wrapUpHelp() kkonganti@11: ) kkonganti@11: } kkonganti@11: kkonganti@11: return addPadding(helptext) kkonganti@11: }