Snakemake с использованием нескольких входов - PullRequest
0 голосов
/ 27 апреля 2018

Я начинаю писать конвейер для моего проекта по биоинформатике и использую Snakemake в качестве рабочего процесса. Я сделал все учебные пособия на официальном сайте, а я некоторые из документации.

Я хочу запустить одну команду оболочки, например: <b>fastp -i</b> input-1 <b>-I</b> input-2 <b>-o</b> output-1 <b>-O</b> output-2

Мой код в Snakefile:

SAMPLES = ['1', '2', '3', '4']
rule fastp:
    input:
        reads1=expand("sample{sample}.R1.fq.gz", sample=SAMPLES),
        reads2=expand("sample{sample}.R2.fq.gz", sample=SAMPLES)
    output:
        reads1out=expand("sample{sample}.R1.fq.gz.out", sample=SAMPLES),
        reads2out=expand("sample{sample}.R2.fq.gz.out", sample=SAMPLES)
    shell:
        "fastp -i {input.reads1} -I {input.reads2} -o {output.reads1out} -O {output.reads2out}"

Но программа запускает одну строчку кода: <b>fastp -i</b> sample1.R1.fq.gz sample2.R1.fq.gz sample3.R1.fq.gz sample4.R1.fq.gz <b>-I</b> sample1.R2.fq.gz sample2.R2.fq.gz sample3.R2.fq.gz sample4.R2.fq.gz <b>-o</b> sample1.R1.fq.gz.out sample2.R1.fq.gz.out sample3.R1.fq.gz.out sample4.R1.fq.gz.out <b>-O</b> sample1.R2.fq.gz.out sample2.R2.fq.gz.out sample3.R2.fq.gz.out sample4.R2.fq.gz.out

Как я могу написать программу для выполнения различных команд оболочки для каждого образца? Я попробовал for i in SAMPLES: после rule fastp:, но не сработало, и я не знаю, что я могу попробовать сейчас. Извините, если эта тема в некотором роде слишком проста, но я новичок в Python.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Это вывод команды snakemake -np с rule all: , как писал JeeYem:

λ fastp/testdata master ✗ snakemake -np rule fastp: input: sample1.R1.fq.gz, sample2.R1.fq.gz, sample3.R1.fq.gz, sample4.R1.fq.gz, sample1.R2.fq.gz, sample2.R2.fq.gz, sample3.R2.fq.gz, sample4.R2.fq.gz output: sample1.R1.fq.gz.out, sample2.R1.fq.gz.out, sample3.R1.fq.gz.out, sample4.R1.fq.gz.out, sample1.R2.fq.gz.out, sample2.R2.fq.gz.out, sample3.R2.fq.gz.out, sample4.R2.fq.gz.out jobid: 1 fastp -i sample1.R1.fq.gz sample2.R1.fq.gz sample3.R1.fq.gz sample4.R1.fq.gz -I sample1.R2.fq.gz sample2.R2.fq.gz sample3.R2.fq.gz sample4.R2.fq.gz -o sample1.R1.fq.gz.out sample2.R1.fq.gz.out sample3.R1.fq.gz.out sample4.R1.fq.gz.out -O sample1.R2.fq.gz.out sample2.R2.fq.gz.out sample3.R2.fq.gz.out sample4.R2.fq.gz.out localrule all: input: sample1.R1.fq.gz.out, sample1.R2.fq.gz.out, sample2.R1.fq.gz.out, sample2.R2.fq.gz.out, sample3.R1.fq.gz.out, sample3.R2.fq.gz.out, sample4.R1.fq.gz.out, sample4.R2.fq.gz.out jobid: 0 Job counts: count jobs 1 all 1 fastp 2

0 голосов
/ 27 апреля 2018

Вам необходимо определить целевые выходные файлы, используя rule all.

SAMPLES = ['1', '2', '3', '4']
rule all:
    input:
        expand("sample{sample}.R{read_no}.fq.gz.out", sample=SAMPLES, read_no=['1', '2'])

rule fastp:
    input:
        reads1="sample{sample}.R1.fq.gz",
        reads2="sample{sample}.R2.fq.gz"
    output:
        reads1out="sample{sample}.R1.fq.gz.out",
        reads2out="sample{sample}.R2.fq.gz.out"
    shell:
        "fastp -i {input.reads1} -I {input.reads2} -o {output.reads1out} -O {output.reads2out}"
...