蛇形通配符或扩展命令

mau*_*who 4 snakemake

我想要一个规则来执行正常和肿瘤之间的重新排列。主要问题是我不知道如何管理这个问题。它是通配符还是扩展我的问题的答案?

这是我的样品清单:

conditions:
   pair1:
        tumor: "432"
        normal: "433"
Run Code Online (Sandbox Code Playgroud)

所以规则需要是这样的

rule gatk_RealignerTargetCreator:
    input:
        expand("mapped_reads/merged_samples/{sample}.sorted.dup.reca.bam",sample=config['conditions']['pair1']['tumor']),
        "mapped_reads/merged_samples/{sample}.sorted.dup.reca.bam",sample=config['conditions']['pair1']['normal']),

    output:
        "mapped_reads/merged_samples/{pair1}.realign.intervals"
Run Code Online (Sandbox Code Playgroud)

如何在条件下对所有键执行此操作?(我想有更多的一对)

我试过这个代码:

    input:
        lambda wildcards: config["conditions"][wildcards.condition],
        tumor= expand("mapped_reads/merged_samples/{tumor}.sorted.dup.reca.bam",tumor=config['conditions'][wildcards.condition]['tumor']),
        normal = expand("mapped_reads/merged_samples/{normal}.sorted.dup.reca.bam",normal=config['conditions'][wildcards.condition]['normal']),

    output:
        "mapped_reads/merged_samples/{tumor}/{tumor}_{normal}.realign.intervals"
Run Code Online (Sandbox Code Playgroud)

名称“通配符”未定义

??

bli*_*bli 6

wildcards不是在规则输入中“直接”定义的。你需要使用一个函数来wildcards代替。我不确定我是否完全理解您想要做什么,但您可以尝试类似的操作。

def condition2tumorsamples(wildcards):
    return expand(
        "mapped_reads/merged_samples/{sample}.sorted.dup.reca.bam",
        sample=config['conditions'][wildcards.condition]['tumor'])

def condition2normalsamples(wildcards):
    return expand(
        "mapped_reads/merged_samples/{sample}.sorted.dup.reca.bam",
        sample=config['conditions'][wildcards.condition]['normal'])

rule gatk_RealignerTargetCreator:
    input:
        tumor = condition2tumorsamples,
        normal = condition2normalsamples,    
    output:
        "mapped_reads/merged_samples/{condition}.realign.intervals"
    # remainder of the rule here...
Run Code Online (Sandbox Code Playgroud)