Snakemake 多个输入文件扩展但没有重复

Snakemake multiple input files with expand but no repetitions

我是 snakemake 的新手,我不知道如何解决这个问题。

我的规则有两个输入:

rule test
    input_file1=f1
    input_file2=f2

f1 在 [A{1}$, A{2}£, B{1}€, B{2}¥]

f2 在 [C{1}, C{2}]

这些数字是来自展开调用的通配符。我需要找到一种方法将一对与数字完全匹配的文件传递给文件 f1 和 f2。例如:

f1 = A1

f2 = C1

f1 = B1

f2 = C1

我必须避免组合,例如:

f1 = A1

f2 = C2

我会创建一个函数来在文件之间进行这种匹配,但它应该同时管理 input_file1 和 input_file2。我想创建一个函数来创建一个包含不同允许组合的字典,但我如何 "iterate" 在展开期间覆盖它?

谢谢

假设规则 test 在输出中为您提供了一个名为 {f1}.{f2}.txt 的文件,那么您需要某种机制来正确配对 f1 和 f2 并创建一个 {f1}.{f2}.txt 文件列表。

如何创建此列表由您决定,expand 只是一个方便的功能,但在这种情况下您可能希望避免使用它。

这是一个超级简单的例子:

fin1 = ['A1$', 'A2£', 'B1€', 'B2¥']
fin2 = ['C1', 'C2']

outfiles = []
for x in fin1:
    for y in fin2:
        ## Here you pair f1 and f2. This is a very trivial way of doing it:
        if y[1] in x:
            outfiles.append('%s.%s.txt' % (x, y))

wildcard_constraints:
    f1 = '|'.join([re.escape(x) for x in fin1]),
    f2 = '|'.join([re.escape(x) for x in fin2]),

rule all:
    input:
        outfiles,        

rule test: 
    input:
        input_f1 = '{f1}.txt',
        input_f2 = '{f2}.txt',
    output:
        '{f1}.{f2}.txt',
    shell:
        r"""
        cat {input} > {output}
        """

此管道将执行以下命令

cat A2£.txt C2.txt > A2£.C2.txt
cat A1$.txt C1.txt > A1$.C1.txt
cat B1€.txt C1.txt > B1€.C1.txt
cat B2¥.txt C2.txt > B2¥.C2.txt

如果您使用 touch 'A1$.txt' 'A2£.txt' 'B1€.txt' 'B2¥.txt' 'C1.txt' 'C2.txt' 触摸起始输入文件,您应该能够 运行 这个例子。