我写了下面的蛇文件来运行Busco。
fasta_files = ["seq1", "seq2"]
rule all:
input:
expand('run_{file}/short_summary_{file}.txt', file = fasta_files)
rule run_busco:
input:
fa="{file}.fasta",
lineage="home/nagaraap/Downloads/Softwares/busco-master/metazoa_odb9"
output: "{file}"
params:
threads = 30
log:
"logs/{file}.log"
shell: "run_BUSCO.py -i {input.fa} -c {params.threads} -o {output} -m geno -l {input.lineage} &> {log}"
我得到的错误如下:
* .smk第9行中的PeriodicWildcardError:通配符中的值.fasta 文件定期重复 (run_seq1 / short_summary_seq1.fasta.fasta.fasta.fasta.fasta.fasta)。 这将导致无限递归。为了避免这种情况,例如限制 将此规则中的通配符设置为某些值。
这是什么意思?
谢谢。
答案 0 :(得分:1)
假设您正在运行run_busco
来生成sample.fasta。这意味着该文件的输出等于该字符串,因此通配符file
变为sample.fasta。
您指定了该规则需要{file} .fasta作为输入,当我们扩展通配符时,它将变成sample.fasta.fasta。唯一允许生成此文件的规则是run_busco
,这意味着通配符file
变为sample.fasta.fasta。然后,如果我们用这个字符串填充{file} .fasta,它将变成...
您所要做的就是更改输出以在通配符文件中不包含.fasta:
rule run_busco:
input:
fa="{file}.fasta",
lineage="home/nagaraap/Downloads/Softwares/busco-master/metazoa_odb9"
output: "{file}.fasta" <---- This should help!
params:
threads = 30
log:
"logs/{file}.log"
shell: "run_BUSCO.py -i {input.fa} -c {params.threads} -o {output} -m geno -l {input.lineage} &> {log}"
编辑:
rule run_busco:
input:
fa="{file}.fasta",
lineage="home/nagaraap/Downloads/Softwares/busco-master/metazoa_odb9"
output: directory("run_{file}")
params:
threads = 30
log:
"logs/{file}.log"
shell: "run_BUSCO.py -i {input.fa} -c {params.threads} -o {output} -m geno -l {input.lineage} &> {log}"