手动创建snakemake通配符

时间:2018-02-21 15:09:26

标签: snakemake

我正努力将我的样本表(TSV)整合到我的管道中。具体来说,我想手动定义样本通配符,而不是从补丁中读取它。原因是不应该分析路径中的所有样本。相反,我制作了一个样本表,其中包含样本列表,找到的路径,参考基因组等等。

表格如下:

name    path                reference
sample1 path/to/fastq/files mm9
sample2 path/to/fastq/files mm9

我在snakefile

中加载了工作表
table_samples = pd.read_table(config["samples"], index_col="name")
SAMPLES = table_samples.index.values.tolist()

第一条规则应该在里面合并FASTQ文件,所以做这样的事情会很好:

rule merge_fastq:
  output:  "{sample}/{sample}.fastq.gz"
  params:  path = table_samples['path'][{sample}]
  shell:   """
           cat {params.path}/*.fastq.gz > {output}
           """

但如上所述,由于未定义样本通配符,因此无法正常工作。有没有办法可以说我上面定义的样本列表(SAMPLES)包含了应该执行规则的所有样本?

老实说,我觉得这个问题很愚蠢,但我已经花了几个小时寻找/搜索解决方案,此时我需要更多时间效率:D

谢谢!

1 个答案:

答案 0 :(得分:1)

您只需要一个目标规则,列出规则“merge_fastq”后您想要的所有具体文件:

rule all:
    input: expand("{sample}/{sample}.fastq.gz",sample=SAMPLES)

此规则必须放在其他规则的顶部。只有在工作流结束时定义所需的具体文件时,才能使用通配符。