Yaml 使用snakemake映射读取

Yaml 使用snakemake映射读取,yaml,snakemake,Yaml,Snakemake,我正在尝试使用snakemake运行hisat2映射。 基本上,我使用的config.yaml文件如下: reads: set1: /path/to/set1/samplelist.tab hisat2: database: genome genome: genome.fa nodes: 2 memory: 8G arguments: --dta executables: hisat2: /Tools/hisat2-2.1.0/hisat2

我正在尝试使用snakemake运行hisat2映射。 基本上,我使用的config.yaml文件如下:

reads:
    set1: /path/to/set1/samplelist.tab
hisat2:
    database: genome
    genome: genome.fa
    nodes: 2
    memory: 8G
    arguments: --dta
executables:
    hisat2: /Tools/hisat2-2.1.0/hisat2
    samtools: /Tools/samtools-1.3/samtools
id  reads1  reads2
set1a set1a_R1.fastq.gz set1a_R2.fastq.gz
set1b set1b_R1.fastq.gz set1b_R2.fastq.gz
import pandas as pd

reads = pd.read_csv(config["reads"]['set1'], sep='\t', index_col=0)
def get_fastq(wildcards):
    return list(reads.loc[wildcards.sample].values)

rule hisat2:
    input:
          get_fastq
    ...
然后蛇形档案:

configfile: "config.yaml"
workdir: "/path/to/working_dir/"
# Hisat2
rule hisat2:
    input:
          reads = lambda wildcards: config["reads"][wildcards.sample]
    output:
        bam = "{sample}/{sample}.bam"
    params:
        idx=config["hisat2"]["database"],
        executable = config["executables"]["hisat2"],
        nodes = config["hisat2"]["nodes"],
        memory = config["hisat2"]["memory"],
        executable2 = config["executables"]["samtools"]
    run:
        shell("{params.executable} --dta -p {params.nodes} -x {params.idx} {input.reads} |"
        "{params.executable2} view -Sbh -o {output.bam} -")
# all
rule all:
    input:
        lambda wildcards: [sample + "/" + sample + ".bam"
        for sample in config["reads"].keys()]
我的samplelist.tab如下所示:

reads:
    set1: /path/to/set1/samplelist.tab
hisat2:
    database: genome
    genome: genome.fa
    nodes: 2
    memory: 8G
    arguments: --dta
executables:
    hisat2: /Tools/hisat2-2.1.0/hisat2
    samtools: /Tools/samtools-1.3/samtools
id  reads1  reads2
set1a set1a_R1.fastq.gz set1a_R2.fastq.gz
set1b set1b_R1.fastq.gz set1b_R2.fastq.gz
import pandas as pd

reads = pd.read_csv(config["reads"]['set1'], sep='\t', index_col=0)
def get_fastq(wildcards):
    return list(reads.loc[wildcards.sample].values)

rule hisat2:
    input:
          get_fastq
    ...

有什么提示可以让它工作吗?我对一个混乱的脚本表示歉意,因为它刚刚开始使用snakemake。

您必须执行以下操作:

reads:
    set1: /path/to/set1/samplelist.tab
hisat2:
    database: genome
    genome: genome.fa
    nodes: 2
    memory: 8G
    arguments: --dta
executables:
    hisat2: /Tools/hisat2-2.1.0/hisat2
    samtools: /Tools/samtools-1.3/samtools
id  reads1  reads2
set1a set1a_R1.fastq.gz set1a_R2.fastq.gz
set1b set1b_R1.fastq.gz set1b_R2.fastq.gz
import pandas as pd

reads = pd.read_csv(config["reads"]['set1'], sep='\t', index_col=0)
def get_fastq(wildcards):
    return list(reads.loc[wildcards.sample].values)

rule hisat2:
    input:
          get_fastq
    ...
首先,您需要加载samplelist并存储它(我将它作为一个数据帧)。然后可以查找属于该示例名称的文件

编辑

重写代码使其看起来更具可读性(在我看来)


您必须执行以下操作:

reads:
    set1: /path/to/set1/samplelist.tab
hisat2:
    database: genome
    genome: genome.fa
    nodes: 2
    memory: 8G
    arguments: --dta
executables:
    hisat2: /Tools/hisat2-2.1.0/hisat2
    samtools: /Tools/samtools-1.3/samtools
id  reads1  reads2
set1a set1a_R1.fastq.gz set1a_R2.fastq.gz
set1b set1b_R1.fastq.gz set1b_R2.fastq.gz
import pandas as pd

reads = pd.read_csv(config["reads"]['set1'], sep='\t', index_col=0)
def get_fastq(wildcards):
    return list(reads.loc[wildcards.sample].values)

rule hisat2:
    input:
          get_fastq
    ...
首先,您需要加载samplelist并存储它(我将它作为一个数据帧)。然后可以查找属于该示例名称的文件

编辑

重写代码使其看起来更具可读性(在我看来)



什么不起作用?基本上,我不确定它需要read1和read2,我必须为此创建两个不同的输入文件吗?我对脚本进行了一些编辑…这是它给我的错误:错误:reads文件看起来不像FASTQ文件。所以我认为它没有很好地读取samplelist.tab文件…reads应该是读取的实际路径,而不是tab分隔的文件。samplelist.tab是什么样子的?问题中有一个samplelist.tab的例子。你能给我举个例子吗?我怎样才能把路径放在能同时读取r1和r2的路径上?还有一组我有超过1个fastq.gz文件。什么不起作用?基本上,我不确定它是否需要read1和read2,我是否必须为此创建两个不同的输入文件?我对脚本进行了一些编辑…这是它给我的错误:错误:reads文件看起来不像fastq文件。所以我认为它没有很好地读取samplelist.tab文件…reads应该是读取的实际路径,而不是tab分隔的文件。samplelist.tab是什么样子的?问题中有一个samplelist.tab的例子。你能给我举个例子吗?我怎样才能把路径放在能同时读取r1和r2的路径上?还有一组我有不止一个fastq.gz文件。谢谢,我还有另外两个问题,如果你愿意的话,我可以在这里开始一个新的讨论或发布。如果我在config.yaml中列出我的所有文件,比如:set1:set1a_R1.fastq.gz,set1a_R2.fastq.gz,set1b set1b_R1.fastq.gz,set1b_R2.fastq.gz,会怎么样。然后在规则中我定义r1和r2如下:r1=lambda通配符:config[“reads”][wildcards.sample]\u r1.fastq.gz r2=lambda通配符:config[“reads”][wildcards.sample]\u r2.fastq.gz。ISo我的问题:1。如何在config.yaml中列出fastq.gz文件?逗号分隔?2.错误提示r1和r2行中存在语法错误。是否确实需要指定两个文件路径?您可以给出一个基本路径,并在最后填写R1.fastq.gz和R2.fastq.gz。类似的内容:set1:set1a,set1b?我发现错误语法无效,所以可能是出了问题:((谢谢,如果你愿意,我还有两个问题,我可以在这里开始一个新的讨论或发布。如果我在config.yaml中列出我的所有文件,比如:set1:set1a_R1.fastq.gz,set1a_R2.fastq.gz,set1b set1b_R1.fastq.gz,set1b_R2.fastq.gz。然后在规则中我这样定义R1和R2:R1=lambda通配符:config[“reads”][wildcards.sample]_R1.fastq.gz r2=lambda通配符:配置[“读取”][wildcards.sample]_ISo我的问题:1.如何在config.yaml中列出fastq.gz文件?逗号分隔?2.错误我认为r1和R2行中存在语法错误。您是否确实需要指定两个文件路径?您可以给出一个基本路径,并在最后填写r1.fastq.gz和R2.fastq.gz。类似的内容:set1:set1a,set1b?我得到e error无效语法,因此可能有问题:((