Вложенная переоценка правил и контрольных точек в змейке - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь настроить рабочий процесс, в котором при получении файла FIRST файл разделяется на $ k $ отдельных файлов , где k неизвестно , SECOND_1, SECOND_2,...,SECOND_k для параллельной обработки.

Каждый файл SECOND_i (i = 1 ... k) затем обрабатывается для получения дополнительных файлов i_n, то есть в конце процесса у нас будет 1_n файлов для SECOND_1, 2_n для SECOND_2 и так далее, где, опять же, числа i_n неизвестны и различны.

На этом шаге создается набор файлов THIRD_ij, где i = 1 ... k и j = 1 ... i_n.

Теперь я должен sh объединить (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}"

Я продолжаю получать WorkflowError s и пропущенные подстановочные значения для i. Я хотел бы понять это!

...