Snakemake: как эффективно использовать файл конфигурации

Я использую следующий формат файла конфигурации в 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 создавать список заданий.

Будем признательны за любые советы.


person Darren    schedule 02.05.2018    source источник
comment
Как насчет использования fastq_files/SRR вместо fastq_files/SRR_[1|2].fastq.gz в файле конфигурации и явного указания 1 и 2 во вводе и выводе правил?   -  person Manavalan Gajapathy    schedule 03.05.2018
comment
Привет, JeeYem, спасибо за предложение. Я пробовал это, но это не сработало, так как мои имена файлов немного сложнее, чем то, что было сказано в моем исходном сообщении, и у меня всего около 50 файлов fastq с уникальными именами fastq и уникальными именами образцов. Я исправил это сейчас. Я также попытался добавить [0|1] в конец моего оператора ввода fastqc, но он запустил только SRRXXXXXXX_2 files. Если я использую [0] или [1] по отдельности, я получаю каждый отдельный файл, но мне нужен способ, чтобы оба они запускались в отдельном экземпляре правила. Надеюсь, теперь измененный вопрос проясняет проблему.   -  person Darren    schedule 03.05.2018


Ответы (1)


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

config.yaml:

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

Змеиный файл:

# 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"
person Manavalan Gajapathy    schedule 03.05.2018
comment
Привет, JeeYem, большое спасибо за это. Это сработало. Я думаю, что ваше структурирование файла конфигурации намного более эффективно, чем мое. - person Darren; 03.05.2018