Python 使用蛇形对端bwa对齐

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

我在使用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/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}"