отображение читает с использованием змеиного мейкера - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь запустить отображение 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

Затем Snakefile:

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 выглядит так:

id  reads1  reads2
set1a set1a_R1.fastq.gz set1a_R2.fastq.gz
set1b set1b_R1.fastq.gz set1b_R2.fastq.gz

Любые советы, как сделать это работает? Я извиняюсь за грязный скрипт, только что начал использовать змеиный мейк.

1 Ответ

2 голосов
/ 06 ноября 2019

Вам нужно будет сделать что-то вроде этого:

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
    ...

Сначала вам нужно будет загрузить список сэмплов и сохранить его (я сделал это как фрейм данных pandas). Затем вы можете посмотреть, какие файлы принадлежат этому образцу имени.

Редактировать :

Переписать код так, чтобы он выглядел так, на мой взгляд, гораздо удобнее (на мой взгляд).

rule hisat2:
    input:
          [{sample}_R1.fastq.gz,
           {sample}_R2.fastq.gz]
    ...
...