Add germline_v4.0.0.zip from <https://github.com/biowdl/germline-DNA/releases/tag...
[GalaxyCodeBases.git] / etc / gatk-wdl / fm2gatk / BamMetrics / tasks / common.wdl
blobe96cc1c814fc7294a2b5c0da7befa5adcedd974c
1 version 1.0
3 # Copyright (c) 2017 Leiden University Medical Center
5 # Permission is hereby granted, free of charge, to any person obtaining a copy
6 # of this software and associated documentation files (the "Software"), to deal
7 # in the Software without restriction, including without limitation the rights
8 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 # copies of the Software, and to permit persons to whom the Software is
10 # furnished to do so, subject to the following conditions:
12 # The above copyright notice and this permission notice shall be included in
13 # all copies or substantial portions of the Software.
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 # SOFTWARE.
23 task AppendToStringArray {
24     input {
25         Array[String] array
26         String string
27     }
29     command {
30         echo "~{sep='\n' array}
31         ~{string}"
32     }
34     output {
35         Array[String] outArray = read_lines(stdout())
36     }
38     runtime {
39         memory: "1G"
40     }
43 # This task will fail if the MD5sum doesn't match the file.
44 task CheckFileMD5 {
45     input {
46         File file
47         String md5
48         # By default cromwell expects /bin/bash to be present in the container
49         # The 'bash' container does not fill this requirement. (It is in /usr/local/bin/bash)
50         # Use a stable version of debian:stretch-slim for this. (Smaller than ubuntu)
51         String dockerImage = "debian@sha256:f05c05a218b7a4a5fe979045b1c8e2a9ec3524e5611ebfdd0ef5b8040f9008fa"
52     }
54     command {
55         bash -c '
56         set -e -o pipefail
57         echo "~{md5}  ~{file}" | md5sum -c
58         '
59     }
61     runtime {
62         docker: dockerImage
63     }
66 task ConcatenateTextFiles {
67     input {
68         Array[File] fileList
69         String combinedFilePath
70         Boolean unzip = false
71         Boolean zip = false
72     }
74     # When input and output is both compressed decompression is not needed
75     String cmdPrefix = if (unzip && !zip) then "zcat " else "cat "
76     String cmdSuffix = if (!unzip && zip) then " | gzip -c " else ""
78     command {
79         set -e -o pipefail
80         mkdir -p "$(dirname ~{combinedFilePath})"
81         ~{cmdPrefix} ~{sep=" " fileList} ~{cmdSuffix} > ~{combinedFilePath}
82     }
84     output {
85         File combinedFile = combinedFilePath
86     }
88     runtime {
89         memory: "1G"
90     }
93 task Copy {
94     input {
95         File inputFile
96         String outputPath
97         Boolean recursive = false
99         # Version not that important as long as it is stable.
100         String dockerImage = "debian@sha256:f05c05a218b7a4a5fe979045b1c8e2a9ec3524e5611ebfdd0ef5b8040f9008fa"
101     }
103     command {
104         set -e
105         mkdir -p "$(dirname ~{outputPath})"
106         cp ~{true="-r" false="" recursive} ~{inputFile} ~{outputPath}
107     }
109     output {
110         File outputFile = outputPath
111     }
113     runtime {
114         docker: dockerImage
115     }
118 task CreateLink {
119     # Making this of type File will create a link to the copy of the file in the execution
120     # folder, instead of the actual file.
121     # This cannot be propperly call-cached or used within a container.
122     input {
123         String inputFile
124         String outputPath
125     }
127     command {
128         ln -sf ~{inputFile} ~{outputPath}
129     }
131     output {
132         File link = outputPath
133     }
136 task MapMd5 {
137     input {
138         Map[String,String] map
140         String dockerImage = "debian@sha256:f05c05a218b7a4a5fe979045b1c8e2a9ec3524e5611ebfdd0ef5b8040f9008fa"
141     }
143     command {
144         set -e -o pipefail
145         md5sum "~{write_map(map)}" | cut -f 1 -d ' '
146     }
148     output {
149         String md5sum = read_string(stdout())
150     }
152     runtime {
153         memory: "1G"
154         docker: dockerImage
155     }
159 task StringArrayMd5 {
160     input {
161         Array[String] stringArray
163         String dockerImage = "debian@sha256:f05c05a218b7a4a5fe979045b1c8e2a9ec3524e5611ebfdd0ef5b8040f9008fa"
164     }
166     command {
167         set -eu -o pipefail
168         echo ~{sep=',' stringArray} | md5sum - | sed -e 's/  -//'
169     }
171     output {
172         String md5sum = read_string(stdout())
173     }
175     runtime {
176         memory: "1G"
177         docker: dockerImage
178     }
181 task TextToFile {
182     input {
183         String text
184         String outputFile = "out.txt"
185         Int timeMinutes = 1
186         String dockerImage = "debian@sha256:f05c05a218b7a4a5fe979045b1c8e2a9ec3524e5611ebfdd0ef5b8040f9008fa"
187     }
189     command <<<
190         echo ~{text} > ~{outputFile}
191     >>>
193     output {
194         File out = outputFile
195     }
197     parameter_meta {
198         text: {description: "The text to print", category: "required"}
199         outputFile: {description: "The name of the output file", category: "common"}
200         timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
201         dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
202                       category: "advanced"}
203     }
204     runtime {
205         memory: "1G"
206         time_minutes: timeMinutes
207         docker: dockerImage
208     }
211 task YamlToJson {
212     input {
213         File yaml
214         String outputJson = basename(yaml, "\.ya?ml$") + ".json"
216         Int timeMinutes = 1
217         String  memory = "128M"
218         # biowdl-input-converter has python and pyyaml.
219         String dockerImage = "quay.io/biocontainers/biowdl-input-converter:0.2.1--py_0"
220     }
221     command {
222         set -e
223         mkdir -p "$(dirname ~{outputJson})"
224         python <<CODE
225         import json
226         import yaml
227         with open("~{yaml}", "r") as input_yaml:
228             content = yaml.load(input_yaml)
229         with open("~{outputJson}", "w") as output_json:
230             json.dump(content, output_json)
231         CODE
232     }
233     output {
234         File json = outputJson
235     }
237     runtime {
238         memory: memory
239         time_minutes: timeMinutes
240         docker: dockerImage
241     }
243     parameter_meta {
244         yaml: {description: "The YAML file to convert.", category: "required"}
245         outputJson: {description: "The location the output JSON file should be written to.", category: "advanced"}
246         memory: {description: "The maximum amount of memory the job will need.", category: "advanced"}
247         timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
248         dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.",
249                       category: "advanced"}
250     }
253 struct Reference {
254     File fasta
255     File fai
256     File dict
259 struct IndexedVcfFile {
260     File file
261     File index
262     String? md5sum
265 struct IndexedBamFile {
266     File file
267     File index
268     String? md5sum
271 struct FastqPair {
272     File R1
273     String? R1_md5
274     File? R2
275     String? R2_md5
278 struct CaseControl {
279     String inputName
280     IndexedBamFile inputFile
281     String controlName
282     IndexedBamFile controlFile
285 struct CaseControls {
286     Array[CaseControl] caseControls