Привет сообщество Snakemake,
У меня возникли некоторые проблемы с правильным определением функции в Snakemake и вызовом ее в разделе params .Вывод функции представляет собой список, и моя цель - использовать каждый элемент списка в качестве параметра команды оболочки.Другими словами, я хотел бы запустить несколько заданий параллельно одной и той же команды оболочки с другим параметром.
Это функция:
import os, glob
def get_scontigs_names(wildcards):
scontigs = glob.glob(os.path.join("reference", "Supercontig*"))
files = [os.path.basename(s) for s in scontigs]
return name
вывод представляет собой список, который выглядит следующим образом:
['Supercontig0', 'Supercontig100', 'Supercontig2', ...]
Правила Snakemake:
rule all:
input:
"updated/all_supercontigs.sorted.vcf.gz"
rule update_vcf:
input:
len="genome/genome_contigs_len_cumsum.txt",
vcf="filtered/all.vcf.gz"
output:
cat="updated/all_supercontigs.updated.list"
params:
scaf=get_scontigs_names
shell:
"""
python 3.7 scripts/update_genomic_reg.py -len {input.len} -vcf {input.vcf} -scaf {params.scaf}
ls updated/*.updated.vcf.gz > {output.cat}
"""
Этот код неверен, поскольку все элементы списка загруженыв команду оболочки, когда я вызываю {params.scaf}
.Текущие команды оболочки выглядят так:
python 3.7 scripts/update_genomic_reg.py -len genome/genome_contigs_len_cumsum.txt -vcf filtered/all.vcf.gz -scaf Supercontig0 Supercontig100 Supercontig2 ...
Я хотел бы получить: *
python 3.7 scripts/update_genomic_reg.py -len genome/genome_contigs_len_cumsum.txt -vcf filtered/all.vcf.gz -scaf Supercontig0
python 3.7 scripts/update_genomic_reg.py -len genome/genome_contigs_len_cumsum.txt -vcf filtered/all.vcf.gz -scaf Supercontig100
и т. Д.
Я пытался использовать wildcards
внутри функции, но мне не удалось дать ей правильный атрибут.
ТамЕсть несколько постов о функциях ввода и символах подстановки, а также документы по змеиному мейкеру, но я не смог применить их к своему делу.Может кто-нибудь помочь мне с этим, пожалуйста?