Snakemake:从配置表中提取特定于样本的信息

时间:2018-02-22 10:17:00

标签: snakemake

在我的工作流程中,我有一个样本表,其中包含应该分析的所有样本+找到输入文件的路径+应该使用的参考基因组。所有这些都是特定于样本的。

在我的配置文件中,我有一个参考基因组列表,每个参考基因组都有一个文件路径列表,具体取决于工具。

在执行每个样本对齐的规则中,我需要以特定于样本的方式加载其中一些文件,因为参考基因组可能与所有样本不同。

以下是我试图解决的问题:

  params:  reference=lambda wildcards: table_samples['reference'][wildcards.sample],
           chrom_sizes=config[reference]['chrom_sizes']

但是,当我尝试像这样运行时,我收到一个错误(直接在运行Snakemake时),说明referencechrom_sizes=...未定义。

有人知道解决方法吗?

编辑:更多信息,因为我想我的意思并不是很清楚。这是我的配置文件的相关部分。

hg19:
  bwa: 'path/to/hg19/bwa/reference'
  samtools: 'path/to/hg19/samtools/reference'
  chrom_sizes: '...'

mm9:
  bwa: 'path/to/mm9/bwa/reference'
  samtools: 'path/to/mm9/samtools/reference'
  chrom_sizes: '...'

以下是样本表的一个示例。

name    path            reference
sample1 path/to/sample1 mm9

因此,在行reference=lambda wildcards: table_samples['reference'][wildcards.sample]中,我加载了用于当前样本的相应引用。然后,在chrom_sizes=config[reference]['chrom_sizes']中,我需要使用reference作为变量来获取正确参考基因组的chrom_sizes

我希望这会让它更加清晰。

3 个答案:

答案 0 :(得分:1)

这可能是一个丑陋的解决方案,但应该有效。

params:
    reference = table_samples['reference']['{sample}']
    chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']

您在params下定义了一个变量,并尝试在params本身内传递其值;我不确定Snakemake可以做到这一点。

答案 1 :(得分:0)

您忘记在reference键周围加上引号。就像你编写它一样,Python将它解释为一个变量。

chrom_sizes=config['reference']['chrom_sizes']

答案 2 :(得分:0)

好的,从您的评论中获取信息,我能够使其发挥作用。我只需要稍微修改它们。

当我添加到原始帖子中时,我实际上需要reference作为变量才能单独提取每个样本的信息。

正如@JeeYem建议的那样,我试图做到以下几点:

chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']

但是,似乎无法在此上下文中使用{sample}。相反,我改变了它:

chrom_sizes = lambda wildcards: config[table_samples['reference'][wildcards.sample]]['chrom_sizes']

现在,它有效!感谢大家的贡献!