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