aDict = {"B":"inputG1", "A":"inputG1", "C":"inputG2"} rule all: input: ["C.bed", "A.bed", "B.bed"] def get_files(wildcards): case = wildcards.case control = aDict[case] return [case + ".sorted.bam", control + ".sorted.bam"] rule call_peak: input: get_files output: "{case}.bed" run: case = input[0] control = input[1] shell("echo macs14 -t {case} -c {control} -n {wildcards.case}") shell("touch {output}")