snakefile中的PeriodicWildCardError

时间:2019-08-27 12:34:29

标签: python-3.x snakemake

我写了下面的蛇文件来运行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)。   这将导致无限递归。为了避免这种情况,例如限制   将此规则中的通配符设置为某些值。

这是什么意思?

谢谢。

1 个答案:

答案 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}"

看看directories as output