我有一个字典,可以将文件名与样本名映射到条形码:
dict = {'file_1': {'sample1': 'barcode1', 'sample2': 'barcode2'}}
我需要使用Snakemake来读取此命令,并使用键/值作为输入和输出
这就是我要找的:
Input:
file_1.fastq.gz
Output:
o1 = barcode1.fastq.gz,
o2 = barcode2.fastq.gz,
Shell:
"""
do something with {input} barcode1 barcode2
"""
我已经给出了一些我是如何尝试的结构,但是我没有成功
#get list of fq names based on multiplex name
def get_fq_names(wildcards):
fq = dict[wildcards.filename]
return(fq)
#create demux command line
def demux_cmd(wildcards):
cmd_line = multiplex_dict[wildcards.filename] + [LIST OF BARCODES]
return(cmd_line)
#rule to perform demux
rule demultiplex:
input:
f1 = get_fq_names
params:
cmd = demux_cmd,
output:
[list barcode1.fastq.gz, barcode2.fastq.gz]
shell:
"""
{params.cmd}
"""
谢谢大家!
#re-written to hopefully help clarify.
正如我从您添加的原型中了解到的,您的输出将包含在两个文件中,名称中包含条形码
我不明白为什么在您的实现尝试中会出现这种奇怪的语法:
您可能只需要在“原型”中这样做,但使用条形码作为通配符(请注意大括号和引号):
(如果您在
run
部分中不使用output.o1
和output.o2
,只要您确定该命令将生成具有给定条形码的所需名称的文件,则这不是问题。)通配符值将根据将最终所需文件(*)与规则的输出文件模式相匹配来确定。必须了解:通配符是根据输出文件名确定的。因此,“文件名”没有通配符。您必须在输入函数和字典中使用这些“条形码”通配符来确定相应的输入文件名
假设字典从文件名变为snakefile中定义的条形码:
输入函数可以使用循环“反转”字典中的查找,直到找到通配符中的条形码,如下所示:
可以使用类似的方法来构建命令
(*)您还需要一个“驱动”规则,输入最终所需文件的名称。您应该将此规则放在Snake文件中的其他规则之前:
(未测试)
相关问题 更多 >
编程相关推荐