annotate 1.0.0/lib/routines.nf @ 0:801b85b03a17 draft default tip

planemo upload
author galaxytrakr
date Thu, 28 May 2026 20:31:42 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
1 // Hold methods to print:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
2 // 1. Colored logo.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
3 // 2. Summary of parameters.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
4 // 3. Single dashed line.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
5 // 4. Double dashed line.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
6 //
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
7
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
8 import groovy.json.JsonSlurper
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
9 import groovy.util.ConfigSlurper
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
10 // import nextflow.config.ConfigParser
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
11 // import nextflow.config.ConfigBuilder
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
12 // import groovy.json.JsonOutput
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
13
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
14 // ASCII logo
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
15 def pipelineBanner() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
16
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
17 def padding = (params.pad) ?: 30
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
18 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
19
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
20 def banner = [
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
21 name: "${fgcolors.magenta}${workflow.manifest.name}${fgcolors.reset}",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
22 author: "${fgcolors.cyan}${workflow.manifest.author}${fgcolors.reset}",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
23 // workflow: "${fgcolors.magenta}${params.pipeline}${fgcolors.reset}",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
24 version: "${fgcolors.green}${workflow.manifest.version}${fgcolors.reset}",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
25 center: "${fgcolors.green}${params.center}${fgcolors.reset}",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
26 pad: padding
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
27 ]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
28
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
29 manifest = addPadding(banner)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
30
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
31 return """${fgcolors.white}${dashedLine(type: '=')}${fgcolors.magenta}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
32 (o)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
33 ___ _ __ _ _ __ ___ ___
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
34 / __|| '_ \\ | || '_ \\ / _ \\/ __|
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
35 | (__ | |_) || || |_) || __/\\__ \\
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
36 \\___|| .__/ |_|| .__/ \\___||___/
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
37 | | | |
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
38 |_| |_|${fgcolors.reset}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
39 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
40 ${fgcolors.blue}A collection of modular pipelines at CFSAN, FDA.${fgcolors.reset}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
41 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
42 ${manifest}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
43 ${dashedLine(type: '=')}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
44 """.stripIndent()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
45 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
46
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
47 // Add padding to keys so that
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
48 // they indent nicely on the
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
49 // terminal
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
50 def addPadding(values) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
51
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
52 def pad = (params.pad) ?: 30
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
53 values.pad = pad
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
54
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
55 def padding = values.pad.toInteger()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
56 def nocapitalize = values.nocapitalize
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
57 def stopnow = values.stopNow
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
58 def help = values.help
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
59
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
60 values.removeAll {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
61 k, v -> [
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
62 'nocapitalize',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
63 'pad',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
64 'stopNow',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
65 'help'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
66 ].contains(k)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
67 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
68
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
69 values.keySet().each { k ->
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
70 v = values[k]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
71 s = params.linewidth - (pad + 5)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
72 if (v.toString().size() > s && !stopnow) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
73 def sen = ''
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
74 // v.toString().findAll(/.{1,${s}}\b(?:\W*|\s*)/).each {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
75 // sen += ' '.multiply(padding + 2) + it + '\n'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
76 // }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
77 v.toString().eachMatch(/.{1,${s}}(?=.*)\b|\w+/) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
78 sen += ' '.multiply(padding + 2) + it.trim() + '\n'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
79 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
80 values[k] = (
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
81 help ? sen.replaceAll(/^(\n|\s)*/, '') : sen.trim()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
82 )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
83 } else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
84 values[k] = (help ? v + "\n" : v)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
85 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
86 k = k.replaceAll(/\./, '_')
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
87 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
88
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
89 return values.findResults {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
90 k, v -> nocapitalize ?
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
91 k.padRight(padding) + ': ' + v :
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
92 k.capitalize().padRight(padding) + ': ' + v
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
93 }.join("\n")
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
94 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
95
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
96 // Method for error messages
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
97 def stopNow(msg) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
98
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
99 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
100 Map errors = [:]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
101
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
102 if (msg == null) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
103 msg = "Unknown error"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
104 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
105
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
106 errors['stopNow'] = true
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
107 errors["${params.cfsanpipename} - ${params.pipeline} - ERROR"] = """
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
108 ${fgcolors.reset}${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
109 ${fgcolors.red}${msg}${fgcolors.reset}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
110 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
111 """.stripIndent()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
112 // println dashedLine() // defaults to stdout
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
113 // log.info addPadding(errors) // prints to stdout
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
114 exit 1, "\n" + dashedLine() +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
115 "${fgcolors.red}\n" + addPadding(errors)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
116 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
117
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
118 // Method to validate 4 required parameters
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
119 // if input for entry point is FASTQ files
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
120 def validateParamsForFASTQ() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
121 switch (params) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
122 case { params.metadata == null && params.input == null }:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
123 stopNow("Either metadata CSV file with 5 required columns\n" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
124 "in order: sample, fq1, fq2, strandedness, single_end or \n" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
125 "input directory of only FASTQ files (gzipped or unzipped) should be provided\n" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
126 "using --metadata or --input options.\n" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
127 "None of these two options were provided!")
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
128 break
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
129 case { params.metadata != null && params.input != null }:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
130 stopNow("Either metadata or input directory of FASTQ files\n" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
131 "should be provided using --metadata or --input options.\n" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
132 "Using both these options is not allowed!")
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
133 break
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
134 case { params.output == null }:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
135 stopNow("Please mention output directory to store all results " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
136 "using --output option!")
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
137 break
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
138 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
139 return 1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
140 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
141
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
142 // Method to print summary of parameters
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
143 // before running
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
144 def summaryOfParams() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
145
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
146 // def pipeline_specific_config = pipeline_specific_config = new ConfigParser().setIgnoreIncludes(true).parse(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
147 // file("${params.workflowsconf}${params.fs}${params.pipeline}.config").text
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
148 // )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
149 def pipeline_specific_config = new ConfigSlurper().parse(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
150 file("${params.workflowsconf}${params.fs}${params.pipeline}.config").text
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
151 )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
152
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
153 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
154 Map globalparams = [:]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
155 Map localparams = params.subMap(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
156 pipeline_specific_config.params.keySet().toList() + params.logtheseparams
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
157 )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
158
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
159 if (localparams !instanceof Map) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
160 stopNow("Need a Map of paramters. We got: " + localparams.getClass())
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
161 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
162
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
163 if (localparams.size() != 0) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
164 localparams['nocapitalize'] = true
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
165 globalparams['nocapitalize'] = true
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
166 globalparams['nextflow_version'] = "${nextflow.version}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
167 globalparams['nextflow_build'] = "${nextflow.build}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
168 globalparams['nextflow_timestamp'] = "${nextflow.timestamp}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
169 globalparams['workflow_projectDir'] = "${workflow.projectDir}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
170 globalparams['workflow_launchDir'] = "${workflow.launchDir}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
171 globalparams['workflow_workDir'] = "${workflow.workDir}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
172 globalparams['workflow_container'] = "${workflow.container}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
173 globalparams['workflow_containerEngine'] = "${workflow.containerEngine}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
174 globalparams['workflow_runName'] = "${workflow.runName}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
175 globalparams['workflow_sessionId'] = "${workflow.sessionId}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
176 globalparams['workflow_profile'] = "${workflow.profile}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
177 globalparams['workflow_start'] = "${workflow.start}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
178 globalparams['workflow_commandLine'] = "${workflow.commandLine}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
179 return """${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
180 Summary of the current workflow (${fgcolors.magenta}${params.pipeline}${fgcolors.reset}) parameters
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
181 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
182 ${addPadding(localparams)}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
183 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
184 ${fgcolors.cyan}N E X T F L O W${fgcolors.reset} - ${fgcolors.magenta}${params.cfsanpipename}${fgcolors.reset} - Runtime metadata
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
185 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
186 ${addPadding(globalparams)}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
187 ${dashedLine()}""".stripIndent()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
188 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
189 return 1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
190 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
191
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
192 // Method to display
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
193 // Return dashed line either '-'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
194 // type or '=' type
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
195 def dashedLine(Map defaults = [:]) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
196
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
197 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
198 def line = [color: 'white', type: '-']
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
199
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
200 if (!defaults.isEmpty()) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
201 line.putAll(defaults)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
202 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
203
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
204 return fgcolors."${line.color}" +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
205 "${line.type}".multiply(params.linewidth) +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
206 fgcolors.reset
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
207 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
208
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
209 // Return slurped keys parsed from JSON
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
210 def slurpJson(file) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
211 def slurped = null
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
212 def jsonInst = new JsonSlurper()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
213
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
214 try {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
215 slurped = jsonInst.parse(new File ("${file}"))
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
216 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
217 catch (Exception e) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
218 log.error 'Please check your JSON schema. Invalid JSON file: ' + file
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
219 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
220
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
221 // Declare globals for the nanofactory
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
222 // workflow.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
223 return [keys: slurped.keySet().toList(), cparams: slurped]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
224 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
225
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
226 // Default help text in a map if the entry point
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
227 // to a pipeline is FASTQ files.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
228 def fastqEntryPointHelp() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
229
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
230 Map helptext = [:]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
231 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
232
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
233 helptext['Workflow'] = "${fgcolors.magenta}${params.pipeline}${fgcolors.reset}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
234 helptext['Author'] = "${fgcolors.cyan}${params.workflow_built_by}${fgcolors.reset}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
235 helptext['Version'] = "${fgcolors.green}${params.workflow_version}${fgcolors.reset}\n"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
236 helptext['Usage'] = "cpipes --pipeline ${params.pipeline} [options]\n"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
237 helptext['Required'] = ""
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
238 helptext['--input'] = "Absolute path to directory containing FASTQ files. " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
239 "The directory should contain only FASTQ files as all the " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
240 "files within the mentioned directory will be read. " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
241 "Ex: --input /path/to/fastq_pass"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
242 helptext['--output'] = "Absolute path to directory where all the pipeline " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
243 "outputs should be stored. Ex: --output /path/to/output"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
244 helptext['Other options'] = ""
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
245 helptext['--metadata'] = "Absolute path to metadata CSV file containing five " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
246 "mandatory columns: sample,fq1,fq2,strandedness,single_end. The fq1 and fq2 " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
247 "columns contain absolute paths to the FASTQ files. This option can be used in place " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
248 "of --input option. This is rare. Ex: --metadata samplesheet.csv"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
249 helptext['--fq_suffix'] = "The suffix of FASTQ files (Unpaired reads or R1 reads or Long reads) if " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
250 "an input directory is mentioned via --input option. Default: ${params.fq_suffix}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
251 helptext['--fq2_suffix'] = "The suffix of FASTQ files (Paired-end reads or R2 reads) if an input directory is mentioned via " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
252 "--input option. Default: ${params.fq2_suffix}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
253 helptext['--fq_filter_by_len'] = "Remove FASTQ reads that are less than this many bases. " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
254 "Default: ${params.fq_filter_by_len}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
255 helptext['--fq_strandedness'] = "The strandedness of the sequencing run. This is mostly needed " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
256 "if your sequencing run is RNA-SEQ. For most of the other runs, it is probably safe to use " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
257 "unstranded for the option. Default: ${params.fq_strandedness}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
258 helptext['--fq_single_end'] = "SINGLE-END information will be auto-detected but this option forces " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
259 "PAIRED-END FASTQ files to be treated as SINGLE-END so only read 1 information is included in " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
260 "auto-generated samplesheet. Default: ${params.fq_single_end}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
261 helptext['--fq_filename_delim'] = "Delimiter by which the file name is split to obtain sample name. " +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
262 "Default: ${params.fq_filename_delim}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
263 helptext['--fq_filename_delim_idx'] = "After splitting FASTQ file name by using the --fq_filename_delim option," +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
264 " all elements before this index (1-based) will be joined to create final sample name." +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
265 " Default: ${params.fq_filename_delim_idx}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
266
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
267 return helptext
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
268 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
269
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
270 // Show concise help text if configured within the main workflow.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
271 def conciseHelp(def tool = null) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
272 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
273
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
274 tool ?= "fastp"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
275 tools = tool?.tokenize(',')
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
276
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
277 return """
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
278 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
279 Show configurable CLI options for each tool within ${fgcolors.magenta}${params.pipeline}${fgcolors.reset}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
280 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
281 Ex: cpipes --pipeline ${params.pipeline} --help
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
282 """ + (tools.size() > 1 ? "Ex: cpipes --pipeline ${params.pipeline} --help ${tools[0]}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
283 + """
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
284 Ex: cpipes --pipeline ${params.pipeline} --help ${tools[0]},${tools[1]}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
285 ${dashedLine()}""".stripIndent() : """Ex: cpipes --pipeline ${params.pipeline} --help ${tool}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
286 ${dashedLine()}""".stripIndent())
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
287
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
288 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
289
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
290 // Wrap help text with the following options
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
291 def wrapUpHelp() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
292
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
293 return [
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
294 'Help options' : "",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
295 '--help': "Display this message.\n",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
296 'help': true,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
297 'nocapitalize': true
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
298 ]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
299 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
300
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
301 // Method to send email on workflow complete.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
302 def sendMail() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
303
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
304 if (params.user_email == null) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
305 return 1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
306 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
307
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
308 def pad = (params.pad) ?: 30
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
309 def contact_emails = [
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
310 stakeholder: (params.workflow_blueprint_by ?: 'Not defined'),
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
311 author: (params.workflow_built_by ?: 'Not defined')
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
312 ]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
313 def msg = """
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
314 ${pipelineBanner()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
315 ${summaryOfParams()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
316 ${params.cfsanpipename} - ${params.pipeline}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
317 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
318 Please check the following directory for N E X T F L O W
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
319 reports. You can view the HTML files directly by double clicking
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
320 them on your workstation.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
321 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
322 ${params.tracereportsdir}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
323 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
324 Please send any bug reports to CFSAN Dev Team or the author or
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
325 the stakeholder of the current pipeline.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
326 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
327 Error messages (if any)
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
328 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
329 ${workflow.errorMessage}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
330 ${workflow.errorReport}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
331 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
332 Contact emails
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
333 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
334 ${addPadding(contact_emails)}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
335 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
336 Thank you for using ${params.cfsanpipename} - ${params.pipeline}!
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
337 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
338 """.stripIndent()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
339
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
340 def mail_cmd = [
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
341 'sendmail',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
342 '-f', 'noreply@gmail.com',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
343 '-F', 'noreply',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
344 '-t', "${params.user_email}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
345 ]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
346
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
347 def email_subject = "${params.cfsanpipename} - ${params.pipeline}"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
348 Map fgcolors = getANSIColors()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
349
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
350 if (workflow.success) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
351 email_subject += ' completed successfully!'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
352 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
353 else if (!workflow.success) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
354 email_subject += ' has failed!'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
355 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
356
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
357 try {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
358 ['env', 'bash'].execute() << """${mail_cmd.join(' ')}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
359 Subject: ${email_subject}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
360 Mime-Version: 1.0
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
361 Content-Type: text/html
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
362 <pre>
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
363 ${msg.replaceAll(/\x1b\[[0-9;]*m/, '')}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
364 </pre>
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
365 """.stripIndent()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
366 } catch (all) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
367 def warning_msg = "${fgcolors.yellow}${params.cfsanpipename} - ${params.pipeline} - WARNING"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
368 .padRight(pad) + ':'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
369 log.info """
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
370 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
371 ${warning_msg}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
372 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
373 Could not send mail with the sendmail command!
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
374 ${dashedLine()}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
375 """.stripIndent()
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
376 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
377 return 1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
378 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
379
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
380 // Set ANSI colors for any and all
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
381 // STDOUT or STDERR
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
382 def getANSIColors() {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
383
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
384 Map fgcolors = [:]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
385
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
386 fgcolors['reset'] = "\033[0m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
387 fgcolors['black'] = "\033[0;30m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
388 fgcolors['red'] = "\033[0;31m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
389 fgcolors['green'] = "\033[0;32m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
390 fgcolors['yellow'] = "\033[0;33m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
391 fgcolors['blue'] = "\033[0;34m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
392 fgcolors['magenta'] = "\033[0;35m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
393 fgcolors['cyan'] = "\033[0;36m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
394 fgcolors['white'] = "\033[0;37m"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
395
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
396 return fgcolors
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
397 }