Snakemake с несколькими выходными каталогами

#linux #bash #shell #snakemake

#linux #bash #оболочка #snakemake

Вопрос:

Я новичок в использовании snakemake. Я написал скрипт bash для анализа некоторых данных последовательности парных конечных ампликонов. Мне посоветовали использовать snakemake для повторения моего скрипта по парным чтениям для каждого образца. Мой скрипт генерирует множество различных выходных файлов (различные bams, vcfs, html и txt файлы) в разных каталогах (qc, выравнивание, варианты, консенсус и повторы).

Я прочитал руководство и попытался написать Snakefile, как показано ниже. Я не знал, что вводить в выходные данные, поскольку создано много разных выходных каталогов и файлов, поэтому я подумал, что ввода и скрипта будет достаточно.

 rule othello_call:
    input:
        R1="/Users/michaelflower/Documents/ACL/Research/Projects/Illumina amplicon sequencing/2021.03.23 MiSeq test/run_othello/data/{sample}_R1_001.fastq.gz"
        R2="/Users/michaelflower/Documents/ACL/Research/Projects/Illumina amplicon sequencing/2021.03.23 MiSeq test/run_othello/data/{sample}_R2_001.fastq.gz"
        GEN="hg38"
        REF="/Users/michaelflower/refs/hg38/hg38.fa"
        REPREF="/Users/michaelflower/refs/monckton/Supplementary_Data.fasta"
        CON="/Users/michaelflower/opt/anaconda3"
        OUT="/Users/michaelflower/Documents/ACL/Research/Projects/Illumina amplicon sequencing/2021.03.23 MiSeq test/run_othello"
    output:
    shell:
        ./othello.sh R1={input.R1} 
            R2={input.R2} 
            GEN={input.GEN} 
            REF={input.REF} 
            REPREF={input.REPREF} 
            CON={input.CON} 
            OUT={input.OUT}
 

Но когда я запускаю его, я получаю:

 $ snakemake -np
SyntaxError in line 8 of /Users/michaelflower/bin/othello/Snakefile:
invalid syntax (Snakefile, line 8)
 

Любая помощь в настройке правил ввода и вывода будет высоко оценена!

Ответ №1:

В вашем snakemake есть несколько ошибок:

  1. Входные и выходные данные должны быть разделены запятыми ,
  2. Входными и выходными данными являются файлы (или папки). «hg38» должно быть в params разделе.
  3. Выходные данные являются обязательными, поскольку snakemake — это менеджер рабочих процессов «сверху вниз». Именно по их выходам запускаются правила.
  4. В именах ваших папок есть пробелы, что вообще не рекомендуется, поскольку команды оболочки будут рассматривать их как несколько аргументов.
  5. shell раздел должен быть заключен в кавычки " или блок тройных кавычек """

Ошибки, которые приводят к «недопустимому синтаксису», вероятно, связаны с отсутствием запятых для разделения ваших входных данных.

Я думаю, ваш Snakefile должен выглядеть примерно так:

 SAMPLES = ["SAMPLE1","SAMPLE2","SAMPLE3"]

rule all:
    input: expand("/Users/michaelflower/Documents/ACL/Research/Projects/Illumina_amplicon_sequencing/2021.03.23_MiSeq_test/run_othello/results/{sample}/fileProducedByOthello.txt", sample=SAMPLES)

rule othello_call:
    input:
        R1="/Users/michaelflower/Documents/ACL/Research/Projects/Illumina_amplicon_sequencing/2021.03.23_MiSeq_test/run_othello/data/{sample}_R1_001.fastq.gz",
        R2="/Users/michaelflower/Documents/ACL/Research/Projects/Illumina_amplicon_sequencing/2021.03.23_MiSeq_test/run_othello/data/{sample}_R2_001.fastq.gz",
        REF="/Users/michaelflower/refs/hg38/hg38.fa",
        REPREF="/Users/michaelflower/refs/monckton/Supplementary_Data.fasta",
        CON="/Users/michaelflower/opt/anaconda3",
    output:
        OUT="/Users/michaelflower/Documents/ACL/Research/Projects/Illumina_amplicon_sequencing/2021.03.23_MiSeq_test/run_othello/{sample}/fileProducedByOthello.txt"
    params: 
        GEN="hg38"
    shell:
        """
        ./othello.sh R1={input.R1} 
            R2={input.R2} 
            GEN={params.GEN} 
            REF={input.REF} 
            REPREF={input.REPREF} 
            CON={input.CON} 
            OUT={output.OUT}
        """
 

Этот код здесь только для того, чтобы помочь вам в создании вашего рабочего процесса.

  • Обратите внимание, что snakemake может управлять вашими средами conda. Если вы определяете основной путь установки в качестве входных данных, snakemake захочет повторно запускать ваше правило каждый раз, когда обновляется временная метка (т. Е. При создании / изменении среды).
  • Основные выходные файлы должны быть перечислены в outputs , поскольку snakemake запускает правила в соответствии с файлами там.
  • Более того, ваша программа «отелло» выглядит как рабочий процесс сама по себе, если она создает много файлов. Возможно, вам следует подумать о разделении шагов ваших программ на несколько правил snakemake.

Продолжайте использовать snakemake, и я уверен, что вам понравится 😉