Конфигурация YAML
Это связано с вложением файлов YAML, см. Пример здесь.
Запрос config ["samples"] вернет и "A", и "B". Я в своей голове, я думаю о том, что он возвращает список, но я не уверен в типе переменной.
Используя файл конфигурации, указанный здесь: https://snakemake.readthedocs.io/en/latest/tutorial/advanced.html
Вы можете сделать ссылку в следующих файлах конфигурации YAML в формате YAML.
settings / config.yaml:
samples:
A
B
OR
settings / config.yaml:
sampleID:
123
124
125
baseDIR:
data
Результирующий вызов с доступом к конфигурации YAML
Snakefile:
configfile: "settings/config.yaml"
rule all:
input:
expand("{baseDIR}/{ID}.bam", baseDIR=config["baseDIR"], ID=config["sampleID"]),
rule fastq2bam:
input:
expand("{{baseDIR}}/{{ID}}.{readDirection}.fastq", readDirection=['1','2'])
output:
"{baseDIR}/{ID}.bam"
#Note different number of {}, 1 for wildcards not in expand.
#Equivalent line with 'useless' expand call would be:
#expand("{{baseDIR}}/{{ID}}.bam")
shell:
"""
bwa mem {input[0]} {input[1]} > {output}
"""
Пустые примеры, просто пытаюсь проиллюстрировать использование разных строк и переменных конфигурации. Я использую подстановочные знаки в правиле fastq2bam. Обычно я использую только переменные конфигурации, чтобы установить в своем правиле «все», когда это возможно, это лучшая практика. Я не могу сказать, действительно ли вызов оболочки работает для bwa mem, но я думаю, вы понимаете, о чем я говорю.
Увеличенную версию Snakefile можно увидеть здесь
После настройки файла конфигурации, чтобы ссылаться на что-либо в нем, используйте config. Его можно использовать для доступа к YAML по мере необходимости. Здесь я спущусь на 3 гипотетических уровня, вот так:
hypothetical_var = config["yamlVarLvl1"]["yamlVarLvl2"]["yamlVarLvl3"]
Приравнивается к (Я НЕ ПОЛОЖИТЕЛЬНО насчет набора текста, я думаю, что он преобразуется в строки)
hypothetical_var = ['124', '125', '126', '127', '128', '129']
Если YAML:
yamlVarLvl1:
yamlVarLvl2:
yamlVarLvl3:
'124'
'125'
'126'
'127'
'128'
'129'
Организация кода
Код Python и Snakemake по большей части может чередоваться в определенных местах. Я бы не советовал этого делать, так как это затруднит поддержку кода. Пользователь сам решает, как это реализовать. Например, использование директивы run или shell изменяет способ доступа к переменным.
Файлы YAML и JSON являются предпочтительными файлами переменных конфигурации, поскольку я считаю, что они обеспечивают некоторую поддержку редактирования и отмены переменных в интерфейсе командной строки. Это было бы не так чисто, если бы оно было реализовано с использованием переменных Python, импортированных извне. Также это помогает моему мозгу, зная, что файлы Python делают что-то, а файлы YAML хранят вещи.
YAML - это всегда внешний файл, но ...
- Если вы используете один файл Snakefile, поместите вспомогательный питон вверху?
- Если вы используете многофайловую систему, рассмотрите возможность использования внешних сценариев Python.
Учебники
Я думаю, что создать идеальную виньетку сложно. Я пытаюсь рассказать своей группе о Snakemake, и у меня есть более 40 страниц лично написанной документации, я провел три презентации продолжительностью более 1 часа со слайд-шоу PowerPoint, я прочитал почти все руководство ReadTheDocs.io для Snakemake, и я просто недавно закончил просмотр списка дополнительных ресурсов, но я ' Я тоже учусь!
Замечание: мне тоже очень понравилось это руководство.
Обеспечивает ли это достаточный контекст?
person
TBoyarski
schedule
03.08.2017