Можно ли определить правило ввода змеиного меха с разными путями / подстановочными знаками - PullRequest
2 голосов
/ 04 июня 2019

Я хочу знать, можно ли определить правило ввода, которое зависит от различных подстановочных знаков.

Чтобы уточнить, я запускаю этот конвейер Snakemake для разных файлов fastq, используя qsub, который отправляет каждое задание на другой узел:

  1. fastqc на оригинальном fastq - нет зависимости от других заданий *
  2. адаптер / качественная обрезка для создания усеченного fastq
  3. fastqc_after при усеченном fastq (вывод из шага 2) и отсутствие зависимости вниз по потоку
  4. конвейер «звезда-ршем» на усеченном фастк
  5. rsem и tximport (вывод из шага 4)
  6. Выполнить multiqc

MultiQC - https://multiqc.info/ - запускается в папке результатов, в которой есть результаты fastqc, star, rsem и т. Д. Однако, поскольку каждое задание выполняется на отдельном узле, иногда Шаг 3 (fastqc и / или fastqc_after) все еще работает на узлах, в то время как другие этапы заканчиваются (шаги 2, 4 и 5) ИЛИ наоборот.

В настоящее время я могу создать правило MultiQc, которое ожидает результатов из шагов 2, 4, 5, потому что они связаны друг с другом правилами ввода / вывода.

Я прикрепил свой конвейер как png к этому сообщению. Любые предложения помогут.

Что мне нужно: я хочу создать «сортирующий» шаг, на котором я хочу, чтобы MultiQC дождался завершения всех шагов (от 1 до 5). Другими словами, используя мой прикрепленный png в качестве руководства, я хочу определить несколько правил ввода для MultiQC, которые также ожидают результатов от fastqc

Заранее спасибо.

My current Snakemake pipeline as png Примечание : Основываясь на комментариях, которые я получил от ' colin ' и ' bli ' после моего исходного поста, я поделился кодом для различных правил здесь.

Шаг 1 - fastqc

rule fastqc:
    input:  "raw_fastq/{sample}.fastq"
    output: "results/fastqc/{sample}_fastqc.zip"
    log: "results/logs/fq_before/{sample}.fastqc.log"
    params: ...
    shell: ...

Шаг 2 - bbduk

rule bbduk:
    input: R1 = "raw_fastq/{sample}.fastq"
    output: R1 = "results/bbduk/{sample}_trimmed.fastq",
    params: ...
    log: "results/logs/bbduk/{sample}.bbduk.log"
    priority:95
    shell: ....

Шаг 3 - fastqc_after

rule fastqc_after:
    input:  "results/bbduk/{sample}_trimmed.fastq"
    output: "results/bbduk/{sample}_trimmed_fastqc.zip"
    log: "results/logs/fq_after/{sample}_trimmed.fastqc.log"
    priority: 70
    params: ...
    shell: ...

Шаг 4 - star_align

rule star_align:
    input: R1 = "results/bbduk/{sample}_trimmed.fastq"
    output:
        out_1 = "results/bam/{sample}_Aligned.toTranscriptome.out.bam",
        out_2 = "results/bam/{sample}_ReadsPerGene.out.tab"
    params: ...
    log: "results/logs/star/{sample}.star.log"
    priority:90
    shell: ...

Шаг 5 - rsem_norm

rule rsem_norm:
    input:
        bam = "results/bam/{sample}_Aligned.toTranscriptome.out.bam"
    output:
        genes = "results/quant/{sample}.genes.results"
    params: ...
    threads = 16
    priority:85
    shell: ...

Шаг 6 - rsem_model

rule rsem_model:
    input: "results/quant/{sample}.genes.results"
    output: "results/quant/{sample}_diagnostic.pdf"
    params: ...      
    shell: ...

Шаг 7 - tximport_rsem

rule tximport_rsem:
        input: expand("results/quant/{sample}_diagnostic.pdf",sample=samples)
        output: "results/rsem_tximport/RSEM_GeneLevel_Summarization.csv"
        shell: ...

Шаг 8 - multiqc

rule multiqc:
    input: expand("results/quant/{sample}.genes.results",sample=samples)
    output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
    log: "results/log/multiqc"
    shell: ...

1 Ответ

1 голос
/ 06 июня 2019

Если вы хотите, чтобы правило multiqc происходило только после завершения fastqc, вы можете добавить вывод fastqc к вводу multiqc:

rule multiqc:
    input:
        expand("results/quant/{sample}.genes.results",sample=samples),
        expand("results/fastqc/{sample}_fastqc.zip", sample=samples)
    output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
    log: "results/log/multiqc"
    shell: ...

Или, если вам нужночтобы иметь возможность ссылаться на вывод rsem_norm в вашем shell разделе:

rule multiqc:
    input:
        rsem_out = expand("results/quant/{sample}.genes.results",sample=samples),
        fastqc_out = expand("results/fastqc/{sample}_fastqc.zip", sample=samples)
    output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
    log: "results/log/multiqc"
    shell: "... {input.rsem_out} ..."

В одном из ваших комментариев вы написали:

MultiQC нужен каталог какinput - я даю ему каталог 'results' в моей команде оболочки.

Если я правильно понимаю, это означает, что results/quant/{sample}.genes.results являются каталогами, а не простыми файлами.Если это так, вы должны убедиться, что никакое нижестоящее правило не записывает файлы в эти каталоги.В противном случае каталоги будут считаться обновленными после вывода multiqc, а multiqc будет перезапускаться при каждом запуске конвейера.

...