snakemake输入函数奇怪的结果

时间:2018-02-09 20:36:06

标签: snakemake

我有这个规则。我尝试使用案例与控制。

CASE1,CONTROL1
CASE2,CONTROL2
CASE3,CONTROL3

rule macs2:
    input:   get_files
    output: "ALIGN/result/macs2/{case}_vs_{control}/",
            "ALIGN/result/macs2/{case}_vs_{control}/{case}_peaks.xls",
            "ALIGN/result/macs2/{case}_vs_{control}/{case}_summits.bed"
    log: "log/{case}_vs_{control}.macs2"
    threads: 2
    conda:
        "envs/macs.yaml"
    message: "macs2 comparison"
    params:
        size="hs",
        name="{case}"
    shell:
          """
             macs2 callpeak -t {input[0]} -c {input[1]} -f BAM -g hs -n {params.name}  --nomodel -B -q 0.01 --outdir {output[0]} -m 3 50 -g {params.size} --extsize 147 2>{log}
          """

所以这就是功能:

def get_files(wildcards):
   case = wildcards.case
   control = aCondition[case][0]
   return ["ALIGN/result/{}_filter_dup.bam".format(case), "ALIGN/result/{}_filter_dup.bam".format(control)]

如果我有这个规则。我对一个样本与所有输入进行了比较。

expand("ALIGN/result/macs2/{case}_vs_{control}/",case=CASE,control=CONTROL),

示例:

CASE1,CONTROL2
CASE1,CONTROL3
CASE1,CONTROL1
...

我希望只有

CASE1,CONTROL1
CASE2,CONTROL2
CASE3,CONTROL3

一般情况:如何在规则中使用输入函数的地方编写规则?

1 个答案:

答案 0 :(得分:0)

我不确定你在问什么。您是否尝试制定一条规则,要求您感兴趣的输出文件?

rule all:
    input: 
        expand(
            "ALIGN/result/macs2/{case}_vs_{control}/{case}_peaks.xls",
            case=["case1", "case2", "case3"],
            control=["control1", "control2", "control3"]
        )