使用扩展功能时,如何阻止snakemake将非文件结尾添加到通配符? (.g.vcf失败,.vcf起作用)

时间:2019-07-01 13:29:30

标签: snakemake

在扩展规则中的变量之后添加.g.vcf而不是.vcf,从而将.g添加到另一个模块的通配符中

我在所有规则中都尝试了以下方法:

{stuff}.g.vcf 
{stuff}"+"g.vcf" 
{stuff}_var"+".g.vcf"
{stuff}.t.vcf 

全部失败,但{stuff} .gvcf或{stuff} .vcf正常

错误:

snake_modules / mark_duplicates.snakefile的第21行中的

InputFunctionException: KeyError:“ Mother.g” 通配符: lane = Mother.g

代码:

LANES = config["list2"].split()

rule all:
    input:
         expand(projectDir+"results/alignments/variants/{stuff}.g.vcf", stuff=LANES)


rule mark_duplicates:
    """ this will mark duplicates for bam files from the same sample and library """
    input:
        get_lanes
    output:
        projectDir+"results/alignments/markdups/{lane}.markdup.bam"
    log:
        projectDir+"logs/"+stamp+"_{lane}_markdup.log"
    shell:
        " input=$(echo '{input}' |sed -e s'/ / I=/g') && java -jar /home/apps/pipelines/picard-tools/CURRENT MarkDuplicates I=$input O={projectDir}results/alignments/markdups/{wildcards.lane}.markdup.bam M={projectDir}results/alignments/markdups/{wildcards.lane}.markdup_metrics.txt &> {log}"

我希望我的最终输出具有{stuff} .g.vcf表示法。请注意,此输出是在另一个蛇模块中创建的,但是错误出现在另一个模块之前的重复标记中。

我尝试了多次更改,但是导致问题的全部规则是.g.vcf。

1 个答案:

答案 0 :(得分:0)

我的猜测{lane}被解释为正则表达式,并且捕获的内容超出了其应有的范围。尝试在rule all之前添加:

wildcard_constraints:
    stuff= '|'.join([re.escape(x) for x in LANES]),
    lane= '|'.join([re.escape(x) for x in LANES])

(另请参见此线程https://groups.google.com/forum/#!topic/snakemake/wVlJW9X-9EU