snakemake - 使用 snakemake touch 使用 bwa 和 gatk 创建参考基因组索引
问题描述
我将读取与bwa
调用变体与gatk
. gatk
需要dict
为参考基因组创建一个,并且bwa
需要创建索引。当我对它们都使用触摸时,我得到了这个错误:
AmbiguousRuleException:
Rules bwa_index and gatk_refdict are ambiguous for the file ref.
Expected input files:
bwa_index: ref.fasta
gatk_refdict: ref.fasta
这是代码:
rule bwa_index:
input:
database="ref.fasta"
output:
done =touch("ref")
shell:
"""
bwa index -p ref {input.database}
"""
rule bwa_mem:
input:
bwa_index_done = "ref",
fastq1="{sample}_R1.trimmed.fastq.gz",
fastq2="{sample}_R2.trimmed.fastq.gz"
output:
bam = temp("{sample}.bam")
shell:
"""
bwa mem ref {input.fastq1} {input.fastq2} -o {output.bam}
"""
rule_gatk_refdict:
input:
ref="ref.fasta"
output:
done =touch("ref")
shell:
"""
java -jar gatk-package-4.1.9.0-local.jar CreateSequenceDictionary -R {input.ref} -O {output.done}
"""
rule gatk:
input:
gatk_refdict_done = "ref",
bam="bam_list"
output:
outf ="{chr}.vcf"
shell:
"""
java -jar gatk-package-4.1.9.0-local.jar HaplotypeCaller -L {wildcards.chr} -R ref -I {input.bam} --min-base-quality-score 20 -O {output.outf}
"""
或者,我指定了 index .dict
,但它也不起作用,因为 gatk 在创建 dict 之前调用了变体,所以我收到一个错误,即没有 dict 文件:
rule_gatk_refdict:
input:
ref="ref.fasta"
output:
outf ="ref.dict"
shell:
"""
java -jar gatk-package-4.1.9.0-local.jar CreateSequenceDictionary -R {input.ref} -O {output.outf}
"""
rule gatk:
input:
ref = "ref.fasta",
bam="bam_list"
output:
outf ="{chr}.vcf"
shell:
"""
java -jar gatk-package-4.1.9.0-local.jar HaplotypeCaller -L {wildcards.chr} -R {input.ref} -I {input.bam} --min-base-quality-score 20 -O {output.outf}
"""
如何解决这个问题?
解决方案
为什么不简单地将dict
文件定义为gatk 规则的输入,将ìindex 定义为bwa 规则的输入?
rule bwa_index:
input:
database="ref.fasta"
output:
done =touch("ref")
shell:
"""
bwa index -p ref {input.database}
"""
rule bwa_mem:
input:
bwa_index_done = "ref",
fastq1="{sample}_R1.trimmed.fastq.gz",
fastq2="{sample}_R2.trimmed.fastq.gz"
output:
bam = temp("{sample}.bam")
shell:
"""
bwa mem ref {input.fastq1} {input.fastq2} -o {output.bam}
"""
rule gatk_refdict:
input:
ref="ref.fasta"
output:
done = "ref.dict"
shell:
"""
java -jar gatk-package-4.1.9.0-local.jar CreateSequenceDictionary -R {input.ref} -O {output.done}
"""
rule gatk:
input:
ref = "ref.fasta",
dict = "ref.dict",
bam="bam_list"
output:
outf ="{chr}.vcf"
shell:
"""
java -jar gatk-package-4.1.9.0-local.jar HaplotypeCaller -L {wildcards.chr} -R {input.ref} -I {input.bam} --min-base-quality-score 20 -O {output.outf}
"""
你得到的AmbiguousRuleException
是因为snakemake不知道要运行哪个规则,因为两个规则具有相同的输出。不要忘记,snakemake 会尝试从所有规则开始构建 DAG。当涉及到 run 时rule gatk
,您将其定义"ref"
为输入。由于两个规则可以生成这个文件,snakemake 不知道它必须使用rule gatk_refdict
还是rule bwa_index
.
你有一个错字(“_”不应该在那里):
----v
rule_gatk_refdict:
input:
ref="ref.fasta"
...
推荐阅读
- node.js - "yarn add" 命令添加 package.json 中的所有库
- python - 无论单个用户在 python 中使用什么尺寸的监视器,如何使图像在我的窗口显示中保持其位置?
- python - NumPy 将函数应用于与另一个 numpy 数组对应的行组
- python - 当我在另一个函数上定义它时,为什么我会得到 Python 的 Name is not defined 错误?
- java - setOnItemClickListener 在片段中的 ListView 上不起作用
- python - 执行 Python 代码时出错“UnboundLocalError:分配前引用的局部变量‘sessionid’”
- python - Pytorch 模型:不同机器上的推理结果截然不同?
- swift - UISearchController:indexPath 不随原始数组改变
- android - 无法在后台启动服务
- database - 外键约束格式不正确的问题