优雅地处理工作流程中数据不足的样本?

Elegantly handle samples with insufficient data in workflow?

我已经设置 a Snakemake pipeline 对来自我们实验室的浅层鸟枪法宏基因组学样本进行一些简单的 QC 和分析。

当数据量较少的样本作为输入交付时,管道中的某些工具会失败或出错——但这有时无法从原始输入数据中获知,因为中间过滤步骤(例如适配器修整)和宿主基因组去除)可以去除不同数量的读数。

理想情况下,我希望能够通过对某些输入规则进行某种检查来处理这些情况,这可以评估输入文件中的读取次数并选择是否继续该部分工作流图。有没有人成功实施过类似的东西?

非常感谢, -乔恩

我不知道基于工作流内部发生的某些计算无法完成工作流的可能性。要执行的规则是根据最终需要的输出来决定的,如果不能产生这个最终的输出就会失败。

一种方法可能是捕获特定工具故障(try ... exceptrun 部分中构造或 return 在 [=13] 中处理代码=] 部分)并为相应的规则生成一个虚拟输出文件,并根据将规则的输入识别为此类虚拟文件的测试生成下游规则 "propagate" 虚拟文件。

另一种方法可能是在 snakemake 工作流程之外预处理数据以确定要跳过的输入,然后按照此处所述对通配符组合使用一些过滤:.

我也一直在努力寻找解决这个问题的方法。

到目前为止,我认为我已经确定了一些潜在的解决方案,但尚未能够正确实施它们。

我用seqkit stats快速生成一个txt文件,用num_seqs列过滤。您可以编写一个快速 pandas 函数来 return 一个通过您的阈值的文件列表,我使用 config.yaml 来通过最小读取阈值:

def get_passing_fastq_files(wildcards):
    qc = pd.read_table('fastq.stats.txt').fillna(0)
    passing = list(qc[qc['num_seqs'] > config['minReads']]['file'])
    return passing

老实说,试图将其作为 Snakemake 中的输入函数来实现是一个深奥的噩梦。可能是我自己对 Wildcards 对象缺乏细致入微的理解。

我认为在过滤掉样本后强制Snakemake重新计算DAG的过程中使用检查点也是必要的。然而,还没有能够连接所有的点,我正在努力避免使用令牌文件等的简陋解决方案。