snakemake отсутствует выходное исключение после завершения задания - PullRequest
0 голосов
/ 21 апреля 2020

Я запускаю DASTool через snakemake, и по какой-то причине, хотя я получаю выходные лотки, следующая ошибка обрезает нас. Хотя это немного раздражает, так как у меня есть выход, он сразу же убивает мой змейский ход. Змеиный файл выглядит следующим образом:

rule DAS_Tool:
    input:
            da1="{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}_metabat.scaffolds2bin.tsv",
            da2="{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}_maxbin.scaffolds2bin.tsv",
            da3="{datadir}/{sample}.fna",
            db=config["dastool_database"]
    threads:config["threads"]
    conda:"binning.yml"
    output:
            daout=directory("{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}")
    shell:
            """
            date
            DAS_Tool -i {input.da1},{input.da2} -c {input.da3} -o {output.daout} --search_engine diamond -l maxbin2,metabat2 --write_bins 1 --write_bin_evals 1 --threads {threads} --db_directory {input.db} --create_plots 1 &&\
            2> >(tee {log}.stderr) > >(tee {log}.stdout)
            touch das_tool.done
            date

Ошибка выглядит так:

Waiting at most 120 seconds for missing files.
MissingOutputException in line 277 of /mnt/lscratch/users/sbusi/ONT/cedric_ont_basecalling/Binning/metaspades_binning_snakefile:
Job completed successfully, but some output files are missing. Missing files after 120 seconds:
/scratch/users/sbusi/ONT/cedric_ont_basecalling/Binning/bwa_sr_metaspades/dastool_output/metaspades
This might be due to filesystem latency. If that is the case, consider to increase the wait time with --latency-wait.
Shutting down, this might take some time.
Exiting because a job execution failed. Look above for error message

Какие еще файлы могут отсутствовать из-за завершения задания? Я пробовал опцию --latency-wait до 900 секунд, но пока не повезло.

Спасибо!

РЕДАКТИРОВАТЬ: основываясь на комментарии Gajapathy, я отредактировал файл для просмотра итак:

rule DAS_Tool:
    input:
            da1="{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}_metabat.scaffolds2bin.tsv",
            da2="{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}_maxbin.scaffolds2bin.tsv",
            da3="{datadir}/{sample}.fna",
            db=config["dastool_database"]
    threads:config["threads"]
    conda:"/home/users/sbusi/apps/environments/base.yml"
    params:
            basename="{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}"
    output:
            daout=directory("{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}_DASTool_bins"),
            dafile="{datadir}/{mapper}_{reads}_{sample}/dastool_output/{sample}_proteins.faa",
            damfile=touch("{datadir}/{mapper}_{reads}_{sample}_das_tool.done")
    shell:
            """
            date
            DAS_Tool -i {input.da1},{input.da2} -c {input.da3} -o {params.basename} --search_engine diamond -l maxbin2,metabat2 --write_bins 1 --write_bin_evals 1 --threads {threads} --db_directory {input.db} --create_plots 1 &&\
            2> >(tee {log}.stderr) > >(tee {log}.stdout)
            touch {output.damfile}
            date
            """

Работает !! спасибо @Gajapathy!

1 Ответ

1 голос
/ 21 апреля 2020

В соответствии с do DAS_Tool c, -o - для определения базового имени выходных файлов; не выходная папка.

   -o, --outputbasename       Basename of output files.

Так что обобщенное правило c будет выглядеть так:

rule DAS_Tool:
    output: 'path/to/outdir/basename_proteins.faa`
    params: basename = 'path/to/outdir/basename'
    shell: "DAS_Tool .... -o {params.basename} ...."

Если вы не хотите жестко задавать базовое имя в params, вы можете использовать python lambda magi c чтобы получить его из выходных файлов в параметре.

...