Я использую snakemake для разработки конвейера анализа данных RNAseq. Хотя мне это удалось, я хочу сделать свой конвейер максимально адаптируемым и сделать его способным работать с данными одиночного чтения (SE) или данными парного конца (PE) в рамках одного и того же анализа, вместо анализа данных SE в одном прогоне и данных PE в другом.
Предполагается, что мой конвейер будет выглядеть так:
- загрузка набора данных, который дает 1 файл (данные SE) или 2 файла (данные PE) - ›
- набор правил для 1 файла ИЛИ набор правил B для 2 файлов - ›
- правило, которое берет 1 или 2 входных файла и объединяет их / их в один выходной - ›
- окончательный набор правил.
Примечание: все правила A имеют 1 вход и 1 выход, все правила B имеют 2 входа и 2 выхода, и их соответствующие команды выглядят так:
- 1 ввод:
somecommand -i {input} -o {output}
- 2 входа:
somecommand -i1 {input1} -i2 {input2} -o1 {output1} -o2 {output2}
Примечание 2: кроме различий во входах / выходах, все правила наборов A и B имеют одинаковые команды, параметры / и т. Д.
Другими словами, я хочу, чтобы мой конвейер имел возможность переключаться между выполнением набора правил A или набора правил B в зависимости от образца, либо предоставляя ему информацию об образце в файле конфигурации в начале (образец 1 является SE, образец 2 - PE ... это известно заранее) или запрос snakemake подсчитывает количество файлов после загрузки набора данных, чтобы выбрать правильный следующий набор правил для каждого образца. Если вы видите другой способ сделать это, можете рассказать об этом.
Я думал об использовании контрольных точек, функций ввода и оператора if / else, но мне не удалось решить с ними свою проблему.
Есть ли у вас какие-нибудь подсказки / советы / способы сделать это переключение возможным?