#python #snakemake #lsf
#python #snakemake #lsf
Вопрос:
Я пытаюсь использовать snakemake в LSF с профилем LSF, но при использовании подстановочного знака отправляется только одно задание.
Submitted job 1 with external jobid '660343 logs/cluster/try_expand/unique/jobid1_4530cab3-d29c-485d-8d46-871fb7042e50.out'.
Ниже приведен минимальный пример запуска с
snakemake --profile lsf -s try.smk 2> `date "%Y%m%d_%H%M"`_snakemake_try.log --latency-wait 20
CHROMOSOMES = [ 20, 21, 22]
rule targets:
input:
expand("try/chr{chromosome}.GATK_calls.indels.PASS.common_var_2.bcf", chromosome=CHROMOSOMES)
log:
"try_logs/targets.log"
rule try_expand:
threads: 6
output:
expand("try/chr{chromosome}.GATK_calls.indels.PASS.common_var_2.bcf", chromosome=CHROMOSOMES)
shell:"""
touch {output}
"""
Файл журнала приведенной выше команды находится здесь. Я подозреваю, что это стало причиной исключения OutputException при выполнении более крупных задач, для выполнения которых требуется много времени для завершения первого подстановочного знака.
Waiting at most 20 seconds for missing files.
MissingOutputException in line 22 of extraction.smk:
Missing files after 20 seconds:
chr21.GATK_calls.indels.PASS.common_var.bcf
chr22.GATK_calls.indels.PASS.common_var.bcf
Как я могу избежать исключения OutputException и отправить каждый элемент с подстановочными знаками в качестве задания? Спасибо!
Ответ №1:
Вы путаете подстановочный знак и переменную функции expand . В вашем правиле try_expand
есть три файла, определенные в выводе, поэтому оно будет запущено только один раз для создания всех ваших целей. На выходе {chromosome}
это не подстановочный знак, а заполнитель для второго аргумента функции expand .
Вероятно, вы хотите:
CHROMOSOMES = [ 20, 21, 22]
rule targets:
input:
expand("try/chr{chromosome}.GATK_calls.indels.PASS.common_var_2.bcf", chromosome=CHROMOSOMES)
log:
"try_logs/targets.log"
rule try_expand:
threads: 6
output:
"try/chr{chromosome}.GATK_calls.indels.PASS.common_var_2.bcf"
shell:
"""
touch {output}
"""
Обратите внимание, что если вам нужно использовать подстановочный знак в функции expand, вы должны удвоить {}
.
пример:
output: expand("{path}/chr{{chromosome}}.GATK_calls.indels.PASS.common_var_2.bcf", path="/my/path")
Здесь — {path}
держатель места, определенный во втором аргументе функции expand, {{chromosome}}
является подстановочным знаком.