我有这个规则。我尝试使用案例与控制。
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
一般情况:如何在规则中使用输入函数的地方编写规则?
答案 0 :(得分:0)
我不确定你在问什么。您是否尝试制定一条规则,要求您感兴趣的输出文件?
rule all:
input:
expand(
"ALIGN/result/macs2/{case}_vs_{control}/{case}_peaks.xls",
case=["case1", "case2", "case3"],
control=["control1", "control2", "control3"]
)