我在使用snakemake是新手,在snakemake中做映射时有一个简单的问题。我有几对1。速成gz&;\u 2。速成gz我想对大约10对速成gz. 所以我写了一个蛇形文件。在
import os
import snakemake.io
import glob
(SAMPLES,READS,) = glob_wildcards("raw/{sample}_{read}.fastq.gz")
READS=["1","2"]
REF="/data/data/reference/refs/ucsc.hg19.fasta.gz"
rule all:
input: expand("raw/{sample}.bam",sample=SAMPLES)
rule bwa_map:
input:
ref=REF,
r1=expand("raw/{sample}_{read}.fastq.gz",sample=SAMPLES,read=READS),
r2=expand("raw/{sample}_{read}.fastq.gz",sample=SAMPLES,read=READS)
output: "raw/{sample}.bam"
shell: "bwa mem -M -t 8 {input.ref} {input.r1} {input.r2} | samtools view -Sbh - > {output}"
错误:
^{pr2}$我想要的输出是生成所有10个bam文件
子1.bam 子2.bam sub3.bam公司 ... 在
看起来像是把所有的fastq文件放到一个命令中。如何将它们分开并自动成对运行而不使用硬代码方法呢。请指教。在
第一个规则(这里是
rule all
)指定要在snakemake工作流期间创建的文件。在对于给定的文件
f
,在rule all::input
中,snakemake将查看所有规则并尝试找到一个可以创建f
(基于每个规则的output
段上的模式匹配)。在假设
f = raw/my_sample.bam
一旦
snakemake
找到可以创建f
的规则,它将确定生成该文件所需的所有输入文件。在所以在这里,snakemake发现}所需的文件。在
f = raw/my_sample.bam
可以由rule bwa_map
创建(因为f
与模式raw/<anything>.bam
匹配),然后根据input
段确定生成{Snakemake认为:我可以做
raw/my_sample.bam
,如果我有 文件ref="/data/data/reference/refs/ucsc.hg19.fasta.gz"
文件r1=expand("raw/{sample}_{read}.fastq.gz",sample=SAMPLES,read=READS)
文件r2=expand("raw/{sample}_{read}.fastq.gz",sample=SAMPLES,read=READS)
在
expand
中,r1
将sample
扩展到示例中的每个值,read
扩展到读取中的每个值。但是在SAMPLES中有10个值,READS中有2个值,因此r1
将为它试图生成的每个输出文件扩展到20个不同的文件路径。它忽略了sample
子句中的sample
通配符(因为您在expand
调用中重写了它)。在必须让output子句中定义的通配符冒泡到input子句:
我建议您看看
bwa
对齐规则是如何在snakemake wrappers资源中编写的(您也可以考虑使用包装器):https://snakemake-wrappers.readthedocs.io/en/stable/wrappers/bwa/mem.html主题外:从代码评审的角度来看,我质疑您为什么要将对齐的数据输出到您的
raw
目录?将对齐的数据输出到align
或aligned
会更有意义吗?您似乎还从不使用的包中导入。在相关问题 更多 >
编程相关推荐