Рабочий процесс всегда приводит к «Ничего не делать», даже при форсировании правил - PullRequest
1 голос
/ 22 апреля 2020

Так как в заголовке написано, что я не могу заставить свой рабочий процесс выполнять что-либо, кроме правила all ... При выполнении правила all он корректно находит все входные файлы, поэтому с configfile все в порядке, каждый путь правильный.

при попытке запустить без дополнительных тегов я получаю

Building DAG of jobs...
Checking status of 0 jobs.
Nothing to be done

То, что я пробовал:

  1. -f rcorrector -> только все правило
  2. имя_файла R1.fcor_val1.fq -> MissingRuleException (без опечаток)
  3. - forceall -> только все правило
  4. Еще немного суеты, которую я не могу сформулировать четко

пожалуйста, помогите

from os import path

configfile:"config.yaml"

RNA_DIR = config["RAW_RNA_DIR"]
RESULT_DIR = config["OUTPUT_DIR"]

FILES = glob_wildcards(path.join(RNA_DIR, '{sample}R1.fastq.gz')).sample
############################################################################
rule all:
    input:
        r1=expand(path.join(RNA_DIR, '{sample}R1.fastq.gz'), sample=FILES),
        r2=expand(path.join(RNA_DIR, '{sample}R2.fastq.gz'), sample=FILES)


#############################################################################

rule rcorrector:
    input:
        r1=path.join(RNA_DIR, '{sample}R1.fastq.gz'),
        r2=path.join(RNA_DIR, '{sample}R2.fastq.gz')
    output:
        o1=path.join(RESULT_DIR, 'trimmed_reads/corrected/{sample}R1.cor.fq'),
        o2=path.join(RESULT_DIR, 'trimmed_reads/corrected/{sample}R2.cor.fq')
    #group: "cleaning"
    threads: 8
    params: "-t {threads}"
    envmodules:
        "bio/Rcorrector/1.0.4-foss-2019a"
    script:
        "scripts/Rcorrector.py"

############################################################################

rule FilterUncorrectabledPEfastq:
    input:
        r1=path.join(RESULT_DIR, 'trimmed_reads/corrected/{sample}R1.cor.fq'),
        r2=path.join(RESULT_DIR, 'trimmed_reads/corrected/{sample}R2.cor.fq')
    output:
        o1=path.join(RESULT_DIR, "trimmed_reads/filtered/{sample}R1.fcor.fq"),
        o2=path.join(RESULT_DIR, "trimmed_reads/filtered/{sample}R2.fcor.fq")
    #group: "cleaning"
    envmodules:
        "bio/Jellyfish/2.2.6-foss-2017a",
        "lang/Python/2.7.13-foss-2017a"
        #TODO: load as module
    script:
        "/scripts/filterUncorrectable.py"

#############################################################################

rule trim_galore:
    input:
        r1=path.join(RESULT_DIR, "trimmed_reads/filtered/{sample}R1.fcor.fq"),
        r2=path.join(RESULT_DIR, "trimmed_reads/filtered/{sample}R2.fcor.fq")
    output:
        o1=path.join(RESULT_DIR, "trimmed_reads/{sample}.fcor_val1.fq"),
        o2=path.join(RESULT_DIR, "trimmed_reads/{sample}.fcor_val2.fq")
    threads: 8
    #group: "cleaning"
    envmodules:
        "bio/Trim_Galore/0.6.5-foss-2019a-Python-3.7.4"
    params:
        "--paired --retain_unpaired --phred33 --length 36 -q 5 --stringency 1 -e 0.1 -j {threads}"
    script:
        "scripts/trim_galore.py"

1 Ответ

2 голосов
/ 22 апреля 2020

В snakemake вы определяете конечные выходные файлы конвейера как target files и определяете их как входные данные в первом правиле конвейера. Это правило традиционно называется all (совсем недавно targets в Snakemake do c).

В вашем коде rule all указывает входные файлы конвейера, который уже существует, и поэтому snakemake не видит, что делать. Вместо этого ему просто необходимо указать интересующие выходные файлы из конвейера.

rule all:
    input:
        expand(path.join(RESULT_DIR, "trimmed_reads/{sample}.fcor_val{read}.fq"), sample=FILES, read=[1,2]),

Почему ваши попытки не сработали?

  1. -f не работает:

Согласно do c:

--force, -f     

Force the execution of the selected target or the first rule regardless of already created output.

Default: False

В вашем коде это означает rule all, который не имеет output определено, и поэтому ничего не произошло.

filenameR1.fcor_val1.fq

Это не соответствует output любого из правил и, следовательно, ошибка MissingRuleException.

- forceall

Те же рассуждения, что и для флага -f в вашем случае.

--forceall, -F  

Force the execution of the selected (or the first) rule and all rules it is dependent on regardless of already created output.

Default: False
...