Я не уверен насчет конфигурации кластера, но в отношении общего использования змеиного мата вещи, определенные на уровне правил, не имеют такого же использования, как вещи, которые вы определили бы в разделе params
.
Я бы сказал, что самым важным отличием является то, что змеиный мейк "игнорирует" то, что определено как часть раздела params
, при решении, какие экземпляры правил следует запускать, в то время как он использует вещи, определенные на уровне правил, чтобы решить, какие правила следует или может быть запущен в данный момент.
Вы можете определить все, что вы хотите в разделе params
, и это используется только для определения действий правила (и вы можете управлять этим в разделе run
или shell
).
В отличие от этого, существует фиксированный список вещей, которые вы можете определить на уровне правил, например threads
, ressources
и priority
, и snakemake «знает», как их использовать, чтобы определить, какие правила должны быть запущены. Эти вещи могут влиять или не влиять на действие правила, в зависимости от того, как и как вы их используете.
Способ использования вещей на уровне правил и вещей, определенных на params
, отличается тем, что что-то, определенное в params
, должно использоваться как атрибут объекта params
(с использованием точечного синтаксиса Python). threads
, определенный на уровне правила, может использоваться напрямую. Это позволяет избежать неясностей. Например:
rule foo:
# [...]
params:
threads=8
threads:
4
shell:
"""my_command -j {params.threads} -p {threads} -i {input} -o {output}"""
«Уровень правила» threads
используется, чтобы не запускать больше правил, чем следует (учитывая общее количество «потоков», которые вы назначаете с помощью опции -j
).
Обратите внимание, что это не мешает действию правила использовать больше потоков. Все зависит от того, как вы используете (или нет) переменную threads
, и как программа, с которой вы работаете, работает с этим параметром.
Уровень правила ressources
служит аналогичной цели. Snakemake учитывает их при принятии решения о том, какие правила запускать, учитывая общую сумму, предоставленную с помощью параметра командной строки --resources
. Я не знаю, можете ли вы использовать их в действиях правила, но если это так, то, скорее всего, то же самое, что и с threads
: фактический эффект будет зависеть от вызываемой программы и от того, как она вызывается. .
Аналогично, уровень правил priority
будет использоваться snakemake, который решит, какие правила следует запускать, но не влияет на действие правила (если в разделе run
или shell
не имеется соответствующего объекта). и вы используете это явно для управления чем-либо в вызываемой вами программе).
Подведем итог:
- Вещи уровня правил принадлежат ограниченному набору, предопределенному snakemake, и автоматически используются для управления потоком выполнения правил .
params
-определенные вещи могут иметь любое имя, и их действие ограничено действием правила . Эффект зависит от того, как вы используете их в определении действия (run
или shell
).
- Уровень правила
threads
также может использоваться для воздействия на действие правила. Необходимы дальнейшие исследования в отношении возможного использования на уровне действий priority
или ressources
.