写WDL时,调用目录作为参数传入
需求
WDL里用到了kraken2,其中有个参数--db需要数据库目录作为参数。
- 无法直接传目录。
WDL的数据类型只有File,没有Directory。WDL Version 1.1有Directory类型,但目前的Cromwell版本目前不支持WDL Version 1.1。
- 目录路径每次分析都会改变。
数据库没有放在镜像内,所以每次Cromwell投递都会将WDL中列出的一堆数据库文件硬链接到call-task中inputs的随机命名的目录,如86***2571-f*7b-476c-b3be-0bf***fe6cfe/call-Kraken2/inputs/-159***78150。
错误方案
Task中声明kraken2_db变量,然后通过command<<<`dirname 原数据库路径`>>>
,再赋值kraken2_db变量。
不行,kraken2_db没有被修改,还是一开始声明的值。
正确方案
--db传参时,直接用dirname
传入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| # WDL
task Kraken2{
input { String Sample File Read1 File Read2 Int Threads = 1 }
File kraken2_db_hash = "/***/Database/Kraken2/hash.k2d" File kraken2_db_inspect = "/***/Database/Kraken2/inspect.txt" File kraken2_db_opts = "/***/Database/Kraken2/opts.k2d" File kraken2_db_seqid2taxid = "/***/Database/Kraken2/seqid2taxid.map" File kraken2_db_taxo = "/***/Database/Kraken2/taxo.k2d" File kraken2_db_kmer_distrib = "/***/Database/Kraken2/database150mers.kmer_distrib" command <<< kraken2 \ --threads ~{Threads} \ --confidence 0.8 \ --minimum-base-quality 20 \ --db `dirname ~{kraken2_db_hash}` \ --output ~{Sample}.output \ --report ~{Sample}.report \ --paired \ ~{Read1} \ ~{Read2}
bracken \ -r 150 \ -l S \ -t ~{Threads} \ -d `dirname ~{kraken2_db_hash}` \ -i ~{Sample}.report \ -o ~{Sample}.bracken >>> output { File k2_output = "~{Sample}.output" File k2_report = "~{Sample}.report" File bracken = "~{Sample}.report" }
runtime { docker: "***/kraken2:v2.1.2" cpus: threads } }
|