Снейкмейк не может определить правило - PullRequest
0 голосов
/ 17 апреля 2020

Я пишу конвейер с помощью Snakemake, и программа не может определить правило stringt ie. Я не могу найти, что я делаю неправильно. Я уже запустил правило fastp и star, проблема заключается в том, что c с правилом stringt ie.

include:
'config.py'

rule all:
    input:
        expand(FASTP_DIR + "{sample}R{read_no}.fastq",sample=SAMPLES ,read_no=['1', '2']), #fastp       
        expand(STAR_DIR + STAR_DIR + "output/{sample}/{sample}Aligned.sortedByCoord.out.bam",sample=SAMPLES), #STAR
        expand(STRINGTIE_DIR + "/{sample}/{sample}Aligned.sortedByCoord.out.gtf", sample=SAMPLES),
        GTF_DIR + "path_samplesGTF.txt"

rule fastp:
    input:
        R1= DATA_DIR + "{sample}R1_001.fastq.gz",
        R2= DATA_DIR + "{sample}R2_001.fastq.gz"
    output:
        R1out= FASTP_DIR + "{sample}R1.fastq",
        R2out= FASTP_DIR + "{sample}R2.fastq"
    params:
        data_dir = DATA_DIR,
        name_sample = "{sample}"
    log: FASTP_LOG + "{sample}.html"
    message: "Executando o programa FASTP"
    run:
        shell('fastp -i {input.R1} -I {input.R2} -o {output.R1out} -O {output.R2out} \
    -h {log} -j {log}')
    shell("find {params.data_dir} -type f -name '{params.name_sample}*' -delete ")

rule star:
    input:
        idx_star = IDX_DIR,
        R1 = FASTP_DIR + "{sample}R1.fastq",
        R2 = FASTP_DIR + "{sample}R2.fastq",
        parameters = "parameters.txt",

    params:
        outdir = STAR_DIR + "output/{sample}/{sample}",
        star_dir = STAR_DIR,
        star_sample = '{sample}'
    # threads: 18
    output:
        out = STAR_DIR + "output/{sample}/{sample}Aligned.sortedByCoord.out.bam"
        #run_time = STAR + "log/star_run.time"
    #  log: STAR_LOG
    # benchmark: BENCHMARK + "star/{sample_star}"
    run:
        shell("STAR --runThreadN 12 --genomeDir {input.idx_star} \
        --readFilesIn {input.R1} {input.R2} --outFileNamePrefix {params.outdir}\
        --parametersFiles {input.parameters} \
        --quantMode TranscriptomeSAM GeneCounts \
        --genomeChrBinNbits 12")
        # shell("find {params.star_dir} -type f ! -name 
'{params.star_sample}Aligned.sortedByCoord.out.bam' -delete")

rule stringtie:
    input:
        star_output = STAR_DIR + "output/{sample}/{sample}Aligned.sortedByCoord.out.bam"
    output:
        stringtie_output = STRINGTIE_DIR + "/{sample}/{sample}Aligned.sortedByCoord.out.gtf"
    run:
        shell("stringtie {input.star_output} -o {output.stringtie_output} \
        -v -p 12 ")

rule grep_gtf:
    input:
        list_gtf = STRINGTIE_DIR
    output:
        paths = GTF_DIR + "path_samplesGTF.txt"
    shell:
        "find {input.list_gtf} | grep .gtf > {output.paths}"

Это вывод, который я получаю с опцией dry -run (flag - n)

Building DAG of jobs...
Job counts:
    count   jobs
    1   all
    1   grep_gtf
    2

[Fri Apr 17 15:59:24 2020]
rule grep_gtf:
    input: /homelocal/boralli/workdir/pipeline_v4/STRINGTIE/
    output: /homelocal/boralli/workdir/pipeline_v4/GTF/path_samplesGTF.txt
    jobid: 1

find /homelocal/boralli/workdir/pipeline_v4/STRINGTIE/ | grep .gtf > 
/homelocal/boralli/workdir/pipeline_v4/GTF/path_samplesGTF.txt

[Fri Apr 17 15:59:24 2020]
localrule all:
    input: /homelocal/boralli/workdir/pipeline_v4/GTF/path_samplesGTF.txt
    jobid: 0

Job counts:
    count   jobs
    1   all
    1   grep_gtf
    2
This was a dry-run (flag -n). The order of jobs does not reflect the order of execution.

Я действительно не знаю, что происходит. Тот же конвейер работал раньше.

1 Ответ

0 голосов
/ 20 апреля 2020

В дополнение к комментарию Троя:

Вы указываете в качестве ввода своего правила grep_gtf каталог. Поскольку этот каталог, вероятно, уже существует, правило stringtie не нужно выполнять перед запуском grep_gtf.

Использование каталога в качестве входных данных не очень хорошая идея. Если вам нужны выходные данные правила stringtie перед выполнением правила grep_gtf, я предлагаю указать выходные файлы правила stringtie в качестве ввода правила grep_gtf.

Так что ваше правило grep_gtf должно быть что-то вроде:

    rule grep_gtf:
        input:
            expand(STRINGTIE_DIR + "/{sample}/{sample}Aligned.sortedByCoord.out.gtf", sample=SAMPLES)
        output:
            paths = GTF_DIR + "path_samplesGTF.txt"
        shell:
            "find {STRINGTIE_DIR} | grep .gtf > {output.paths}"

РЕДАКТИРОВАТЬ:

Я думаю, что есть плохая копия / вставка в правиле all, где есть дважды STAR_DIR:

expand(STAR_DIR + STAR_DIR + "output/{sample}/{sample}Aligned.sortedByCoord.out.bam",sample=SAMPLES), #STAR

Я также думаю, что существует недопонимание концепции «рабочего процесса» змеиного мастера. Вам не нужно указывать выходные данные всех правил в правиле all. Вам нужно только указать последний файл рабочего процесса. Snakemake решит, какие правила нужно запустить, чтобы добиться создания окончательного файла. Я не очень понимаю, почему ваш змейщик не хочет создавать файлы gtf, поскольку вы запрашиваете их в правиле all, но я понимаю, почему правилу grep_gtf не требуется вывод правила stringtie для запуска.

...