#snakemake
Вопрос:
Я пишу конвейер змеиного змея, чтобы в конечном итоге идентифицировать варианты коронавируса.
Ниже приведен минимальный пример с тремя шагами:
LOGDIR = '/path/to/logDir'
barcodes = ['barcode49', 'barcode50', 'barcode51']
rule all:
input:
expand([
# guppyplex
"out/guppyplex/{barcode}/{barcode}.fastq",
# catFasta
"out/catFasta/cat_consensus.fasta",
], barcode = barcodes)
rule guppyplex:
input:
FQ = f"fastq/{{barcode}}" # FASTQ_PATH is parsed from config.yaml
output:
"out/guppyplex/{barcode}/{barcode}.fastq"
shell:
"touch {output}" # variables in CAPITALS are parsed from config.yaml
rule minion:
input:
INFQ = rules.guppyplex.output,
FAST5 = f"fasta/{{barcode}}"
params:
OUTDIR = "out/nanopolish/{barcode}"
output:
"out/nanopolish/{barcode}/{barcode}.consensus.fasta"
shell:
"""
touch {output} amp;amp; echo {wildcards.barcode} > {output}
"""
rule catFasta:
input:
expand("out/nanopolish/{barcode}/{barcode}.consensus.fasta", barcode = barcodes)
output:
"out/catFasta/cat_consensus.fasta"
shell:
"cat {input} > {output}"
Если я запускаю snakemake локально, позвонив snakemake -p --cores 1 all
, все работает. Тем не менее, моя конечная цель-использовать qsub
для выполнения заданий в кластере. Я также хочу, чтобы stderr и stdout из qsub имели значимые имена, которые включают подстановочные знаки и имена правил для каждого задания.
Однако, если я позвоню змеюку с
snakemake -p --cluster "qsub -q onlybngs05b -e {LOGDIR} -o {LOGDIR} -j y" -j 5 --jobname "{wildcards.barcode}.{rule}.{jobid}" all
Я получу следующую ошибку:
AttributeError: 'Wildcards' object has no attribute 'barcode'
Недавно я прочитал документацию snakemake, в которой, как представляется, я мог бы заменить параметры командной строки ( --cluster "qsub -q onlybngs05b -e {LOGDIR} -o {LOGDIR} -j y" -j 5 --jobname "{wildcards.barcode}.{rule}.{jobid}"
) файлом yaml. Хотя в документации для меня не все так ясно.
Я создал config.yaml
файл, /home/user/.config/snakemake
который выглядит так:
cluster: 'qsub'
q: 'onlybngs05b'
e: '/home/ngs/tempOutSnakemake'
o: '/home/ngs/tempOutSnakemake'
j: 5
jobname: "{wildcards.barcode}.{rule}.{jobid}
Но затем выясняется, что snakemake неправильно анализирует config.yaml
. Я получаю
snakemake: error: ambiguous option: --o=/home/ngs/tempOutSnakemake could match --omit-from, --output-wait, --overwrite-shellcmd
Я также попытался заменить o
в конфигурационном файле stdout
(своего рода длинную версию параметра ( -h
vs --help
для нескольких программ)), хотя это не работает.
Поэтому мой вопрос заключается в том, как я могу заменить параметры командной строки --cluster "qsub -q onlybngs05b -e {LOGDIR} -o {LOGDIR} -j y" -j 5 --jobname "{wildcards.barcode}.{rule}.{jobid}"
config.yaml
файлом, который принимает подстановочные знаки?
Ответ №1:
Я думаю, проблема в том, что правило catFasta
не содержит подстановочного barcode
знака . Если вы подумаете об этом, на какую должность вы бы рассчитывали {wildcards.barcode}.{rule}.{jobid}
?
Возможно, решением может быть добавление в каждое правило jobname
параметра, который может быть {barcode}
для guppyplex
и minion
и 'all_barcodes'
для catFasta
. Затем используйте --jobname "{params.jobname}.{rule}.{jobid}"
Комментарии:
1. имеет смысл, что для правила карФаста не было бы точного названия, я не смотрел с этой точки зрения, хотя это именно то, что мне было нужно, большое спасибо