Snakemake: Как эффективно использовать конфигурационный файл - PullRequest
0 голосов
/ 02 мая 2018

Я использую следующий формат файла конфигурации в snakemake для некоторой практики анализа последовательности (у меня есть множество выборок, каждый из которых содержит 2 файла fastq:

samples:
Sample1_XY:
    - fastq_files/SRR4356728_1.fastq.gz
    - fastq_files/SRR4356728_2.fastq.gz
Sample2_AB:
    - fastq_files/SRR6257171_1.fastq.gz
    - fastq_files/SRR6257171_2.fastq.gz 

Я использую следующие правила в начале моего конвейера для запуска fastqc и для выравнивания файлов fastqc:

import os
# read config info into this namespace
configfile: "config.yaml"

rule all:
    input:
    expand("FastQC/{sample}_fastqc.zip", sample=config["samples"]),
    expand("bam_files/{sample}.bam", sample=config["samples"]),
    "FastQC/fastq_multiqc.html"

rule fastqc:
    input:
        sample=lambda wildcards: config['samples'][wildcards.sample]
    output:
        # Output needs to end in '_fastqc.html' for multiqc to work
        html="FastQC/{sample}_fastqc.html",
        zip="FastQC/{sample}_fastqc.zip"
    params: ""
        wrapper:
        "0.21.0/bio/fastqc"

rule bowtie2:
    input:
         sample=lambda wildcards: config['samples'][wildcards.sample]
    output:
         "bam_files/{sample}.bam"
    log:
         "logs/bowtie2/{sample}.txt"
    params:
         index=config["index"],  # prefix of reference genome index (built with bowtie2-build),
    extra=""
         threads: 8
    wrapper:
         "0.21.0/bio/bowtie2/align"

 rule multiqc_fastq:
    input:
         expand("FastQC/{sample}_fastqc.html", sample=config["samples"])
    output:
         "FastQC/fastq_multiqc.html"
    params:
    log:
         "logs/multiqc.log"
    wrapper:
         "0.21.0/bio/multiqc"

Моя проблема связана с правилом fastqc.

В настоящее время и правило fastqc, и правило bowtie2 создают один выходной файл, сгенерированный с использованием двух входных данных SRRXXXXXXX_1.fastq.gz и SRRXXXXXXX_2.fastq.gz.

Мне нужно правило fastq для создания двух файлов, по отдельности для каждого из файлов fastq.gz, но я не уверен, как правильно индексировать файл конфигурации из оператора ввода правила fastqc или как объединить расширение и подстановочные знаки команды, чтобы решить это. Я могу получить отдельный файл fastq, добавив [0] или [1] в конец оператора ввода, но не запускать оба отдельно или отдельно.

Я возился, пытаясь найти правильный формат индексации для доступа к каждому файлу отдельно. Текущий формат - единственный, которым я управлял, который позволяет snakemake -np генерировать список заданий.

Любые советы будут с благодарностью.

1 Ответ

0 голосов
/ 03 мая 2018

Похоже, что в каждом примере будет два файла fastq, и они имеют имена в формате ***_1.fastq.gz и ***_2.fastq.gz. В этом случае, настройки и код ниже будет работать.

config.yaml:

samples:
    Sample_A: fastq_files/SRR4356728
    Sample_B: fastq_files/SRR6257171

Snakefile:

# read config info into this namespace
configfile: "config.yaml"
print (config['samples'])

rule all:
    input:
        expand("FastQC/{sample}_{num}_fastqc.zip", sample=config["samples"], num=['1', '2']),
        expand("bam_files/{sample}.bam", sample=config["samples"]),
        "FastQC/fastq_multiqc.html"

rule fastqc:
    input:
        sample=lambda wildcards: f"{config['samples'][wildcards.sample]}_{wildcards.num}.fastq.gz"
    output:
        # Output needs to end in '_fastqc.html' for multiqc to work
        html="FastQC/{sample}_{num}_fastqc.html",
        zip="FastQC/{sample}_{num}_fastqc.zip"
    wrapper:
        "0.21.0/bio/fastqc"

rule bowtie2:
    input:
         sample=lambda wildcards: expand(f"{config['samples'][wildcards.sample]}_{{num}}.fastq.gz", num=[1,2])
    output:
         "bam_files/{sample}.bam"
    wrapper:
         "0.21.0/bio/bowtie2/align"

rule multiqc_fastq:
    input:
        expand("FastQC/{sample}_{num}_fastqc.html", sample=config["samples"], num=['1', '2'])
    output:
        "FastQC/fastq_multiqc.html"
    wrapper:
        "0.21.0/bio/multiqc"
...