2017-09-19 115 views
0

我创建这个规则:Snakemake:规则产生奇怪的结果

rule picard_addRG2: 
    input: 
     "mapped_reads/merged_samples/{sample}.dedup.bam" 
    output: 
     "mapped_reads/merged_samples/{sample}_rg.dedup.bam" 
    params: 
     sample_idi = config['samples'], 
     library = "library00" 

    shell: 
     """picard AddOrReplaceReadGroups I={input} O={output} RGID={params.sample_id} RGLB={params.library} RGPL=illumina RGPU=unit1 RGSM=20 RGPU=MP""" 

我添加ØSnakemake文件规则:

expand("mapped_reads/merged_samples/{sample}_rg.dedup.bam",sample=config['samples']) 

我发现了另一个规则这个奇怪的结果:

snakemake --configfile exome.yaml -np 
InputFunctionException in line 17 of /illumina/runs/FASTQ/test_play/rules/samfiles.rules: 
KeyError: '445_rg' 
Wildcards: 
sample=445_rg 

我做错了什么?

如果我改变这样的规则完美的作品:

rule picard_addRG2: 
    input: 
     "mapped_reads/merged_samples/{sample}.dedup.bam" 
    output: 
     "mapped_reads/merged_samples/{sample}.dedup_rg.bam" 
    params: 
     sample_id = config['samples'], 
     library = "library00" 

    shell: 
     """picard AddOrReplaceReadGroups I={input} O={output} RGID={params.sample_id} RGLB={params.library} RGPL=illumina RGPU=unit1 RGSM=20 RGPU=MP""" 
+0

由于“samfiles.rules”正在抛出错误,您是否也能够发布此规则的代码? – TBoyarski

回答

1

因为它写的输出第二种方式完美的作品,我会建议使用这一个。这是怎么回事如下:

因为在规则皮卡德输入为:
"mapped_reads/merged_samples/{sample}.dedup.bam"
您必须创建此文件作为输出的规则。 并在规则皮卡德输出为: "mapped_reads/merged_samples/{sample}_rg.dedup.bam"

所以,当你在问你的扩展:
"mapped_reads/merged_samples/{sample}_rg.dedup.bam"
snakemake不知道是否有使用您的规则皮卡德与sample作为通配符或您的其他规则与sample_rg作为通配符,因为它们都以相同模式结束并开始。

重新开始:尽量不要使用带有可扩展通配符的两个输出。在这里你输出:
"mapped_reads/merged_samples/{sample}.dedup.bam"
"mapped_reads/merged_samples/{sample}_rg.dedup.bam"
开始和结束与完全相同的模式。

当你使用: "mapped_reads/merged_samples/{sample}.dedup_rg.bam"
作为输出,通配符不能扩大!