snakemake:如何处理规则的可变输出数量

ola*_*ala 3 snakemake

我想运行bcl2fastq从bcl格式生成fastq文件.

根据关于排序模式的排序设置和使用的索引数量,它可以生成read1,read2,index1或read1,read2,index1,index2等.

我想要做的是,将读取输出编号信息放在config.yaml文件中,如下所示:

readids: ['I1','I2','R1','R2']
Run Code Online (Sandbox Code Playgroud)

并让规则自动计算它应该生成多少读取输出(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         """
Run Code Online (Sandbox Code Playgroud)

And*_*eas 6

你正在寻找expand()函数,它基本上填充给定的变量,返回一个输出文件列表.你只需要小心逃脱应该"在格式化中存活"的通配符(使用双花括号):

所以在你的情况下

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

这将用config ['readids']中给出的值替换readid并保留runid wilcard.

安德烈亚斯

  • 谢谢你的回答.我错过了文档中的双花括号用法.这是一个重点,也许最好再添加一些句子来更好地解释它的用法. (3认同)