Snakemake:规则生成奇怪的结果

Snakemake: rule generate strange results

我创建了这条规则:

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"""

我添加 o 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"""

由于它与第二种写入输出的方式完美配合,我建议使用这种方式。发生的情况如下:

因为在您的规则 picard 中输入是:
"mapped_reads/merged_samples/{sample}.dedup.bam"
您必须有一个将此文件创建为输出的规则。 在您的规则 picard 中,输出是: "mapped_reads/merged_samples/{sample}_rg.dedup.bam"

所以当你在扩展中询问时:
"mapped_reads/merged_samples/{sample}_rg.dedup.bam"
snakemake 不知道它是否必须使用带有 sample 作为通配符的规则 picard 或带有 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"
作为输出,通配符不能展开!