Python 使用蛇形对端bwa对齐
我在使用snakemake方面是新手,我在使用snakemake进行映射时遇到了一个简单的问题。我有几对_1.fastq.gz和_2.fastq.gz,我想为大约10对fastq.gz做对端映射。所以我写了一个蛇形文件Python 使用蛇形对端bwa对齐,python,bioinformatics,snakemake,snakeyaml,Python,Bioinformatics,Snakemake,Snakeyaml,我在使用snakemake方面是新手,我在使用snakemake进行映射时遇到了一个简单的问题。我有几对_1.fastq.gz和_2.fastq.gz,我想为大约10对fastq.gz做对端映射。所以我写了一个蛇形文件 import os import snakemake.io import glob (SAMPLES,READS,) = glob_wildcards("raw/{sample}_{read}.fastq.gz") READS=["1","2"] REF="/data/data
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}"
错误:
RuleException:
CalledProcessError in line 17 of /data/data/Samples/snakemake-example/WGS-test/step2.smk:
Command ' set -euo pipefail; bwa mem -M -t 8 /data/data/reference/refs/ucsc.hg19.fasta.gz raw/sub1_1.fastq.gz raw/sub1_2.fastq.gz raw/sub2_1.fastq.gz raw/sub2_2.fastq.gz raw/sub1_1.fastq.gz raw/sub1_2.fastq.gz raw/sub2_1.fastq.gz raw/sub2_2.fastq.gz raw/sub1_1.fastq.gz raw/sub1_2.fastq.gz raw/sub2_1.fastq.gz raw/sub2_2.fastq.gz raw/sub1_1.fastq.gz raw/sub1_2.fastq.gz raw/sub2_1.fastq.gz raw/sub2_2.fastq.gz | samtools view -Sbh - > raw/sub2.bam ' returned non-zero exit status 1.
File "/data/data/Samples/snakemake-example/WGS-test/step2.smk", line 17, in __rule_bwa_map
File "/root/miniconda3/envs/bioinfo/lib/python3.6/concurrent/futures/thread.py", line 56, in run
我想要的输出是生成所有10个bam文件,如
sub1.bam
sub2.bam
sub3.bam
看起来像是把所有的fastq文件放到一个命令中。如何在不使用硬代码方法的情况下将它们分开并自动成对运行。请注意。第一条规则(此处为规则all
)指定了您希望在snakemake工作流期间创建的文件
对于给定的文件,f
,在rule all::input
中,snakemake将查看所有规则,并尝试找到一个可以创建f
(基于每个规则的输出
段上的模式匹配)
假设f=raw/my\u sample.bam
一旦snakemake
找到可以创建f
的规则,它将确定创建该文件所需的所有输入文件
因此,snakemake在这里发现f=raw/my_sample.bam
可以通过规则bwa_map
创建(因为f
与模式raw匹配)/
离题:从代码审查的角度来看,我质疑您为什么要将对齐的数据输出到raw
目录?将对齐的数据输出到align
或aligned
是否更有意义?您似乎也在从不使用的包导入。第一条规则(此处rule all
)指定要在snakemake工作流期间创建的文件
对于给定的文件,f
,在rule all::input
中,snakemake将查看所有规则,并尝试找到一个可以创建f
(基于每个规则的输出
段上的模式匹配)
假设f=raw/my\u sample.bam
一旦snakemake
找到可以创建f
的规则,它将确定创建该文件所需的所有输入文件
因此,snakemake在这里发现f=raw/my_sample.bam
可以通过规则bwa_map
创建(因为f
与模式raw匹配)/
离题:从代码审查的角度来看,我质疑您为什么要将对齐的数据输出到raw
目录?将对齐的数据输出到align
或aligned
是否更有意义?您似乎也在从不使用的包中导入。这是snakemake Begin的常见问题ers(例如):expand
通常仅在需要从“上游”规则的多个实例收集结果的规则输入中需要。通常使用all
规则进行此收集。这是蛇形游戏初学者的常见问题(例如):expand
通常仅在需要从“上游”规则的多个实例收集结果的规则输入中需要。通常使用all
规则进行此收集。
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,
# determine `r1` based on the {sample} wildcard defined in `output`
# and the fixed value `1` to indicate the read direction
r1="raw/{sample}_1.fastq.gz",
# determine `r2` based on the {sample} wildcard similarly
r2="raw/{sample}_2.fastq.gz"
output: "raw/{sample}.bam"
# better to pass in the threads than to hardcode them in the shell command
threads: 8
shell: "bwa mem -M -t {threads} {input.ref} {input.r1} {input.r2} | samtools view -Sbh - > {output}"