Скажем, я начинаю с таких файлов:
group_1_in.txt, group_2_in.txt, group_3_in.txt
Я обрабатываю их, используя правило, которое генерирует структуру каталогов, показанную ниже.
rule process_group_files:
input: 'group_{num}_in.txt'
output: directory('group_{num}')
shell: "some_command {input} {output}'
## directory structure produced:
group_1
sample1_content.txt
sample2_content.txt
sample3_content.txt
group_2
sample2_content.txt
sample3_content.txt
sample4_content.txt
group_3
sample1_content.txt
sample2_content.txt
sample5_content.txt
Затем у меня есть правило, которое обрабатывает их для агрегирования файлов по образцу:
rule aggregate_by_sample:
input: expand('{group}/{sample}_content.txt')
output: '{sample}_allcontent.txt'
shell: "cat {input} | some_command > {output}"
Я ожидаю, что входные данные для этого правила будут:
group_1/sample1_content.txt, group_3/sample1_content.txt
group_1/sample2_content.txt, group_2/sample2_content.txt, group_3/sample2_content.txt
group_1/sample3_content.txt, group_2/sample3_content.txt
group_2/sample4_content.txt
group_3/sample5_content.txt
и создайте следующие выходные файлы:
sample1_allcontent.txt
sample2_allcontent.txt
sample3_allcontent.txt
sample4_allcontent.txt
sample5_allcontent.txt
На данный момент я хочу работать с этими выходными файлами. Итак, правило для этого может быть примерно таким:
rule process_by_sample:
input: <list of all sample_allcontent files>
output: final_output.txt
shell: "cat {input} | some_other_command > {output}"
Мой вопрос таков: как я могу сказать snakemake ждать, пока он не завершит обработку всех файлов в правиле aggregate_by_sample
, затем используйте этот набор выходных файлов для правила process_by_sample
? Я изучил идею контрольных точек, сделав aggregate_by_sample
контрольной точкой, но я должен использовать «каталог» в качестве вывода, так как я не знаю apriori сколько выходных файлов будет создано. Но я не могу этого сделать, потому что в именах моих выходных файлов используются символы подстановки, а snakemake жалуется, что Wildcards in input files cannot be determined from output files
.
РЕДАКТИРОВАТЬ - Увидев ответ @ troy-comi, я понял, что упростил свою проблему. Я обновил свой вопрос, включив в него первое правило process_group_files
. Все, что я знаю в начале конвейера, это сколько у меня групп и какой список подстановочных знаков «число».