![](/img/trans.png)
[英]Snakemake scatter-gather with wildcard AmbiguousRuleException
[英]In snakemake, how do you use wildcards with scatter-gather processes?
我正在嘗試使用snakemake 的分散收集功能來並行化我工作流程中的緩慢步驟。 但是,我無法弄清楚如何在使用通配符的情況下應用它。 例如,我在rule all
中定義了通配符library
,但是,這似乎不適用於ScatterIntervals
中的 scatter 函數:
import re
SCATTER_COUNT = 100
scattergather:
split=SCATTER_COUNT
rule all:
input:
expand("{library}_output.txt", library=["FC19271512", "FC19271513"])
rule ScatterIntervals:
input:
"{library}_baits.interval_list"
output:
temp(scatter.split("tmp/{library}_baits.scatter_{scatteritem}.interval_list"))
params:
output_prefix = (
lambda wildcards, output:
re.sub("\.scatter_\d+\.interval_list", "", output[0])
),
scatter_count = SCATTER_COUNT
shell:
"""
python ScatterIntervals.py \
-i {input} \
-o {params.output_prefix} \
-s {params.scatter_count}
"""
rule ProcessIntervals:
input:
bam = "{library}.bam",
baits = "tmp/{library}_baits.scatter_{scatteritem}.interval_list"
output:
temp("tmp/{library}_output.scatter_{scatteritem}.txt")
shell:
"""
python ProcessIntervals.py \
-b {input.bam} \
-l {input.baits} \
-o {output}
"""
rule GatherIntervals:
input:
gather.split("tmp/{library}_output.scatter_{scatteritem}.txt")
output:
"{library}_output.txt"
run:
inputs = "-i ".join(input)
command = f"python GatherOutputs.py {inputs} -o {output[0]}"
shell(command)
WildcardError in line 16 of Snakefile:
No values given for wildcard 'library'.
顯然,這類似於expand
,因為如果您希望 DAG 解析來處理它們,您可以引用不是scatteritem
的通配符:
temp(scatter.split("tmp/{{library}}_baits.scatter_{scatteritem}.interval_list"))
相同的邏輯適用於gather.split
。
我像這樣修改我的代碼。
rule fastq_fasta:
input:rules.trimmomatic.output.out_file
output:"data/trimmed/{sample}.fasta"
shell:"sed -n '1~4s/^@/>/p;2~4p' {input} > {output}"
rule split:
input:
"data/trimmed/{sample}.fasta"
params:
scatter_count=config["scatter_count"],
scatter_item = lambda wildcards: wildcards.scatteritem
output:
temp(scatter.split("data/trimmed/{{sample}}_{scatteritem}.fasta"))
script:
"scripts/split_files.py"
rule process:
input:"data/trimmed/{sample}_{scatteritem}.fasta"
output:"data/processed/{sample}_{scatteritem}.csv"
script:
"scripts/split_files.py"
rule gather:
input:
gather.split("data/processed/{{sample}}_{scatteritem}.csv")
output:
"data/processed/{sample}.csv"
shell:
"cat {input} > {output}"
但是,我得到AmbiguousRuleException: Rules fastq_to_fasta(which is previous rule) and split are ambiguous for the file data/trimmed/Ornek_411-of-81-of-81-of-81-of-81-of-81-of-81-of-81-of-81-of-8.fasta
我嘗試了很多東西,但要么規則沒有調用,要么采用 AmbiguousRuleException。 我錯過了什么,有人可以幫忙嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.