snakemake: как работать с переменным количеством выходных данных правила

Я хочу запустить bcl2fastq для создания файлов fastq из формата bcl.

В зависимости от настройки последовательности в отношении режима последовательности и количества использованных индексов, он может генерировать либо read1, read2, index1, либо read1, read2, index1, index2 и т. Д.

Что я хочу сделать, так это поместить информацию о номере вывода чтения в файл config.yaml следующим образом:

readids: ['I1','I2','R1','R2']

и пусть правило автоматически определяет, сколько результатов чтения (файлов fastq.gz) оно должно сгенерировать.

Как мне написать секцию вывода для этого?

Ниже приведено то, что у меня есть, и он каким-то образом может каждый раз выводить только один файл из этого правила. Таким образом, он фактически запускает это правило 4 раза, каждый для I1, I2, R1 и R2, чего я не хочу. Как исправить в строке 45? в строке 45 {readid} должен быть одним из I1,I2,R1,R2.

 39 rule bcl2fastq:                                                                                                                                                 
 40     input:
 41         "/data/MiniSeq/test"
 42     params:
 43         prefix="0_fastq"
 44     output:
 45         "0_fastq/{runid}_S0_L001_{readid}_001.fastq.gz"
 46     log:
 47         "0_fastq/bcl2fastq_log.txt"
 48     shell:
 49         """
 50         bcl2fastq -R {input} -o {params.prefix} --create-fastq-for-index-reads --barcode-mismatches 1 --use-bases-mask {config[bcl2mask]} --minimum-trimmed
    -read-length 1 --mask-short-adapter-reads 1 --no-bgzf-compression &> {log}
 52        
 53         """

person olala    schedule 18.11.2016    source источник


Ответы (1)


вы ищете функцию expand (), которая в основном заполняет заданные переменные, возвращающие список выходных файлов. Вам просто нужно быть осторожным, чтобы избежать подстановочных знаков, которые должны «пережить форматирование» (используйте двойные фигурные скобки):

Так что в вашем случае

output:
      expand("0_fastq/{{runid}}_S0_L001_{readid}_001.fastq.gz", readid=config['readids'])

Это заменит readid значениями, указанными в config ['readids'], и сохранит runid wilcard.

Андреас

person Andreas    schedule 21.11.2016
comment
Спасибо за ответ. Я пропустил использование двойных фигурных скобок в документации. Это важный момент, и, возможно, лучше добавить еще несколько предложений, чтобы лучше объяснить его использование. - person olala; 21.11.2016