kkonganti@0
|
1 // Define any required imports for this specific workflow
|
kkonganti@0
|
2 import java.nio.file.Paths
|
kkonganti@0
|
3 import nextflow.file.FileHelper
|
kkonganti@0
|
4
|
kkonganti@0
|
5 // Include any necessary methods
|
kkonganti@0
|
6 include { \
|
kkonganti@0
|
7 summaryOfParams; stopNow; fastqEntryPointHelp; sendMail; \
|
kkonganti@0
|
8 addPadding; wrapUpHelp } from "${params.routines}"
|
kkonganti@0
|
9 include { dpubmlstpyHelp } from "${params.toolshelp}${params.fs}dpubmlstpy"
|
kkonganti@0
|
10 include { checkm2predictHelp } from "${params.toolshelp}${params.fs}checkm2predict"
|
kkonganti@0
|
11 include { guncrunHelp } from "${params.toolshelp}${params.fs}guncrun"
|
kkonganti@0
|
12 include { mlstHelp } from "${params.toolshelp}${params.fs}mlst"
|
kkonganti@0
|
13
|
kkonganti@0
|
14 // Exit if help requested before any subworkflows
|
kkonganti@0
|
15 if (params.help) {
|
kkonganti@0
|
16 log.info help()
|
kkonganti@0
|
17 exit 0
|
kkonganti@0
|
18 }
|
kkonganti@0
|
19
|
kkonganti@0
|
20 // Include any necessary modules and subworkflows
|
kkonganti@0
|
21 include { DOWNLOAD_PDG_METADATA } from "${params.modules}${params.fs}download_pdg_metadata${params.fs}main"
|
kkonganti@0
|
22 include { DOWNLOAD_PUBMLST_SCHEME } from "${params.modules}${params.fs}download_pubmlst_scheme${params.fs}main"
|
kkonganti@0
|
23 include { FILTER_PDG_METADATA } from "${params.modules}${params.fs}filter_pdg_metadata${params.fs}main"
|
kkonganti@0
|
24 include { GUNC_RUN } from "${params.modules}${params.fs}gunc${params.fs}run${params.fs}main"
|
kkonganti@0
|
25 include { CHECKM2_PREDICT } from "${params.modules}${params.fs}checkm2${params.fs}predict${params.fs}main"
|
kkonganti@0
|
26 include { QUAL_PASSED_GENOMES } from "${params.modules}${params.fs}custom${params.fs}qual_passed_genomes${params.fs}main"
|
kkonganti@0
|
27 include { SCAFFOLD_GENOMES } from "${params.modules}${params.fs}scaffold_genomes${params.fs}main"
|
kkonganti@0
|
28 include { MLST } from "${params.modules}${params.fs}mlst${params.fs}main"
|
kkonganti@0
|
29 include { INDEX_PDG_METADATA } from "${params.modules}${params.fs}index_pdg_metadata${params.fs}main"
|
kkonganti@0
|
30 include { MASH_SKETCH } from "${params.modules}${params.fs}mash${params.fs}sketch${params.fs}main"
|
kkonganti@0
|
31 include { MASH_PASTE } from "${params.modules}${params.fs}mash${params.fs}paste${params.fs}main"
|
kkonganti@0
|
32 include { DUMP_SOFTWARE_VERSIONS } from "${params.modules}${params.fs}custom${params.fs}dump_software_versions${params.fs}main"
|
kkonganti@0
|
33
|
kkonganti@0
|
34 /*
|
kkonganti@0
|
35 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
36 INPUTS AND ANY CHECKS FOR THE CRONOLOGY_DB WORKFLOW
|
kkonganti@0
|
37 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
38 */
|
kkonganti@0
|
39
|
kkonganti@0
|
40 if (!params.output) {
|
kkonganti@0
|
41 stopNow("Please mention the absolute UNIX path to store the DB flat files\n" +
|
kkonganti@0
|
42 "using the --output option.\n" +
|
kkonganti@0
|
43 "Ex: --output /path/to/cronology/db_files")
|
kkonganti@0
|
44 }
|
kkonganti@0
|
45
|
kkonganti@0
|
46 checkDBPathExists(params.guncrun_dbpath, 'GUNC')
|
kkonganti@0
|
47 checkDBPathExists(params.checkm2predict_dbpath, 'CheckM2')
|
kkonganti@0
|
48
|
kkonganti@0
|
49 /*
|
kkonganti@0
|
50 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
51 RUN THE CRONOLOGY_DB WORKFLOW
|
kkonganti@0
|
52 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
53 */
|
kkonganti@0
|
54
|
kkonganti@0
|
55 workflow CRONOLOGY_DB {
|
kkonganti@0
|
56 main:
|
kkonganti@0
|
57 log.info summaryOfParams()
|
kkonganti@0
|
58
|
kkonganti@0
|
59 DOWNLOAD_PDG_METADATA ( params.pdg_release ?: null )
|
kkonganti@0
|
60
|
kkonganti@0
|
61 DOWNLOAD_PDG_METADATA.out.versions
|
kkonganti@0
|
62 .set { software_versions }
|
kkonganti@0
|
63
|
kkonganti@0
|
64 DOWNLOAD_PUBMLST_SCHEME ( params.dpubmlstpy_org ?: null )
|
kkonganti@0
|
65
|
kkonganti@0
|
66 FILTER_PDG_METADATA (
|
kkonganti@0
|
67 DOWNLOAD_PDG_METADATA.out.accs
|
kkonganti@0
|
68 .splitText(by: params.genomes_chunk, file: true)
|
kkonganti@0
|
69 )
|
kkonganti@0
|
70
|
kkonganti@0
|
71 FILTER_PDG_METADATA.out.accs_chunk_tbl
|
kkonganti@0
|
72 .collectFile(sort: { acc_f -> acc_f.simpleName })
|
kkonganti@0
|
73 .multiMap { acc_chunk_file ->
|
kkonganti@0
|
74 def meta = [:]
|
kkonganti@0
|
75 meta.id = 'AssemblyQC'
|
kkonganti@0
|
76 meta.phone_ncbi = true
|
kkonganti@0
|
77 gunc: [ meta, params.guncrun_dbpath, acc_chunk_file ]
|
kkonganti@0
|
78 checkm2: [ meta, params.checkm2predict_dbpath, acc_chunk_file ]
|
kkonganti@0
|
79 }
|
kkonganti@0
|
80 .set { ch_run_qual_on_these_accs }
|
kkonganti@0
|
81
|
kkonganti@0
|
82 CHECKM2_PREDICT ( ch_run_qual_on_these_accs.checkm2 )
|
kkonganti@0
|
83
|
kkonganti@0
|
84 GUNC_RUN ( ch_run_qual_on_these_accs.gunc )
|
kkonganti@0
|
85
|
kkonganti@0
|
86 QUAL_PASSED_GENOMES (
|
kkonganti@0
|
87 CHECKM2_PREDICT.out.quality_report_passed
|
kkonganti@0
|
88 .map { meta, qual ->
|
kkonganti@0
|
89 [ qual ]
|
kkonganti@0
|
90 }
|
kkonganti@0
|
91 .collect()
|
kkonganti@0
|
92 .flatten()
|
kkonganti@0
|
93 .collectFile(name: 'checkm2_quality_passed.txt'),
|
kkonganti@0
|
94 GUNC_RUN.out.quality_report_passed
|
kkonganti@0
|
95 .map { meta, qual ->
|
kkonganti@0
|
96 [ qual ]
|
kkonganti@0
|
97 }
|
kkonganti@0
|
98 .collect()
|
kkonganti@0
|
99 .flatten()
|
kkonganti@0
|
100 .collectFile(name: 'gunc_quality_passed.txt')
|
kkonganti@0
|
101 )
|
kkonganti@0
|
102
|
kkonganti@0
|
103 SCAFFOLD_GENOMES (
|
kkonganti@0
|
104 QUAL_PASSED_GENOMES.out.accs
|
kkonganti@0
|
105 .splitText(by: params.genomes_chunk, file: true)
|
kkonganti@0
|
106 )
|
kkonganti@0
|
107
|
kkonganti@0
|
108 SCAFFOLD_GENOMES.out.scaffolded
|
kkonganti@0
|
109 .multiMap { scaffolded ->
|
kkonganti@0
|
110 def meta = [:]
|
kkonganti@0
|
111 meta.id = (params.pdg_release ?: 'NCBI Pathogen Genomes')
|
kkonganti@0
|
112 mlst: [ meta, scaffolded ]
|
kkonganti@0
|
113 mash: [ meta, scaffolded ]
|
kkonganti@0
|
114 }
|
kkonganti@0
|
115 .set { ch_scaffolded_genomes }
|
kkonganti@0
|
116
|
kkonganti@0
|
117 MLST (
|
kkonganti@0
|
118 ch_scaffolded_genomes.mlst
|
kkonganti@0
|
119 .combine( DOWNLOAD_PUBMLST_SCHEME.out.pubmlst_dir )
|
kkonganti@0
|
120 )
|
kkonganti@0
|
121
|
kkonganti@0
|
122 MLST.out.tsv
|
kkonganti@0
|
123 .map { meta, tsv ->
|
kkonganti@0
|
124 tsv
|
kkonganti@0
|
125 }
|
kkonganti@0
|
126 .collectFile(
|
kkonganti@0
|
127 name: 'mlst_results.tsv',
|
kkonganti@0
|
128 keepHeader: true,
|
kkonganti@0
|
129 skip: 1
|
kkonganti@0
|
130 )
|
kkonganti@0
|
131 .set { ch_mlst_results }
|
kkonganti@0
|
132
|
kkonganti@0
|
133 INDEX_PDG_METADATA (
|
kkonganti@0
|
134 DOWNLOAD_PDG_METADATA.out.pdg_metadata,
|
kkonganti@0
|
135 DOWNLOAD_PDG_METADATA.out.snp_cluster_metadata,
|
kkonganti@0
|
136 DOWNLOAD_PDG_METADATA.out.accs,
|
kkonganti@0
|
137 ch_mlst_results
|
kkonganti@0
|
138 )
|
kkonganti@0
|
139
|
kkonganti@0
|
140 MASH_SKETCH (
|
kkonganti@0
|
141 ch_scaffolded_genomes.mash
|
kkonganti@0
|
142 .map { it -> tuple ( it[0], it[1].flatten() ) }
|
kkonganti@0
|
143 )
|
kkonganti@0
|
144
|
kkonganti@0
|
145 MASH_PASTE (
|
kkonganti@0
|
146 MASH_SKETCH.out.sketch
|
kkonganti@0
|
147 .map { meta, sketch ->
|
kkonganti@0
|
148 [ [id: (params.pdg_release ?: 'NCBI Pathogen Genomes')], sketch ]
|
kkonganti@0
|
149 }
|
kkonganti@0
|
150 .groupTuple(by: [0])
|
kkonganti@0
|
151 )
|
kkonganti@0
|
152
|
kkonganti@0
|
153 DUMP_SOFTWARE_VERSIONS (
|
kkonganti@0
|
154 software_versions
|
kkonganti@0
|
155 .mix (
|
kkonganti@0
|
156 DOWNLOAD_PDG_METADATA.out.versions,
|
kkonganti@0
|
157 DOWNLOAD_PUBMLST_SCHEME.out.versions,
|
kkonganti@0
|
158 FILTER_PDG_METADATA.out.versions,
|
kkonganti@0
|
159 CHECKM2_PREDICT.out.versions,
|
kkonganti@0
|
160 GUNC_RUN.out.versions,
|
kkonganti@0
|
161 QUAL_PASSED_GENOMES.out.versions,
|
kkonganti@0
|
162 SCAFFOLD_GENOMES.out.versions,
|
kkonganti@0
|
163 MLST.out.versions,
|
kkonganti@0
|
164 INDEX_PDG_METADATA.out.versions,
|
kkonganti@0
|
165 MASH_SKETCH.out.versions,
|
kkonganti@0
|
166 MASH_PASTE.out.versions
|
kkonganti@0
|
167 )
|
kkonganti@0
|
168 .unique()
|
kkonganti@0
|
169 .collectFile(name: 'collected_versions.yml')
|
kkonganti@0
|
170 )
|
kkonganti@0
|
171 }
|
kkonganti@0
|
172
|
kkonganti@0
|
173 /*
|
kkonganti@0
|
174 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
175 ON COMPLETE, SHOW GORY DETAILS OF ALL PARAMS WHICH WILL BE HELPFUL TO DEBUG
|
kkonganti@0
|
176 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
177 */
|
kkonganti@0
|
178
|
kkonganti@0
|
179 workflow.onComplete {
|
kkonganti@0
|
180 if (workflow.success) {
|
kkonganti@0
|
181 sendMail()
|
kkonganti@0
|
182 }
|
kkonganti@0
|
183 }
|
kkonganti@0
|
184
|
kkonganti@0
|
185 workflow.onError {
|
kkonganti@0
|
186 sendMail()
|
kkonganti@0
|
187 }
|
kkonganti@0
|
188
|
kkonganti@0
|
189 /*
|
kkonganti@0
|
190 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
191 METHOD TO CHECK IF DB PATHS EXIST
|
kkonganti@0
|
192 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
193 */
|
kkonganti@0
|
194
|
kkonganti@0
|
195 def checkDBPathExists(db_path, msg) {
|
kkonganti@0
|
196 db_path_obj = file( db_path )
|
kkonganti@0
|
197
|
kkonganti@0
|
198 if (!db_path_obj.exists()) {
|
kkonganti@0
|
199 stopNow("Please check if the database path for ${msg}\n" +
|
kkonganti@0
|
200 "[ ${db_path} ]\nexists.")
|
kkonganti@0
|
201 }
|
kkonganti@0
|
202 }/*
|
kkonganti@0
|
203
|
kkonganti@0
|
204 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
205 HELP TEXT METHODS FOR CRONOLOGY WORKFLOW
|
kkonganti@0
|
206 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
kkonganti@0
|
207 */
|
kkonganti@0
|
208
|
kkonganti@0
|
209 def help() {
|
kkonganti@0
|
210
|
kkonganti@0
|
211 Map helptext = [:]
|
kkonganti@0
|
212
|
kkonganti@0
|
213 helptext.putAll (
|
kkonganti@0
|
214 fastqEntryPointHelp().findAll {
|
kkonganti@0
|
215 it.key =~ /Required|output|Other|Workflow|Author|Version/
|
kkonganti@0
|
216 } +
|
kkonganti@0
|
217 dpubmlstpyHelp(params).text +
|
kkonganti@0
|
218 checkm2predictHelp(params).text +
|
kkonganti@0
|
219 guncrunHelp(params).text +
|
kkonganti@0
|
220 wrapUpHelp()
|
kkonganti@0
|
221 )
|
kkonganti@0
|
222
|
kkonganti@0
|
223 return addPadding(helptext)
|
kkonganti@0
|
224 } |