snakemake中规则和检查点的嵌套重新评估

2024-10-02 12:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设置一个工作流,在该工作流中,当给定一个文件FIRST时,该文件被拆分为$k$separate files,其中k未知SECOND_1, SECOND_2,...,SECOND_k以进行并行处理

然后对每个文件SECOND_i(i=1…k)进行处理以生成额外的i_n文件,也就是说,在该过程结束时,我们将为SECOND_1创建1_n文件,为SECOND_2创建2_n文件,依此类推,其中,数字i_n也是未知和不同的

此步骤生成一组文件THIRD_ij,其中i=1…k和j=1…i\n

现在我希望合并(cat)具有相同索引j的所有文件,以获得文件FOURTH_1, FOURTH_2,...,FOURTH_m 其中FOURTH_2例如是存在的所有文件THIRD_i2的串联

我曾尝试使用snakemake来实现这一点,但我遇到了一些奇怪的错误

我当前的代码如下所示

rule split1:
    input: "FIRST"
    output: "first.done"
    shell: 
        "[splitting_function1] {input} ;"
        "touch {output}"

checkpoint split2:
    input: "SECOND_{i}"
    output: "{i}/second.done"
    shell: 
        "[splitting_function2] {input} ; # makes a subdirectory {i} with the output"
        "touch {output}"

def aggregate(wildcards):
    out = checkpoints.split2.get(**wildcards).output[0]
    out = out.replace("second.out","")
    exp = expand(
            "{i}/THIRD_{{j}}",
            i= glob_wildcards(os.path.join(out, "THIRD_{j}")).i,
            j = glob_wildcards(os.path.join(out, "THIRD_{j}")).j
        )

rule merge:
    input: aggregate
    output: "{j}/third.done"
    shell: 
        "cat {input} > {j}/FOURTH ;"
        "touch {output}"

我不断得到WorkflowErrors,并且缺少I的通配符值。我很想弄明白


Tags: 文件inputoutputshelloutrulecatfirst

热门问题