优雅地处理工作流程中数据不足的样本?
Elegantly handle samples with insufficient data in workflow?
我已经设置 a Snakemake pipeline 对来自我们实验室的浅层鸟枪法宏基因组学样本进行一些简单的 QC 和分析。
当数据量较少的样本作为输入交付时,管道中的某些工具会失败或出错——但这有时无法从原始输入数据中获知,因为中间过滤步骤(例如适配器修整)和宿主基因组去除)可以去除不同数量的读数。
理想情况下,我希望能够通过对某些输入规则进行某种检查来处理这些情况,这可以评估输入文件中的读取次数并选择是否继续该部分工作流图。有没有人成功实施过类似的东西?
非常感谢,
-乔恩
我不知道基于工作流内部发生的某些计算无法完成工作流的可能性。要执行的规则是根据最终需要的输出来决定的,如果不能产生这个最终的输出就会失败。
一种方法可能是捕获特定工具故障(try
... except
在 run
部分中构造或 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的过程中使用检查点也是必要的。然而,还没有能够连接所有的点,我正在努力避免使用令牌文件等的简陋解决方案。
我已经设置 a Snakemake pipeline 对来自我们实验室的浅层鸟枪法宏基因组学样本进行一些简单的 QC 和分析。
当数据量较少的样本作为输入交付时,管道中的某些工具会失败或出错——但这有时无法从原始输入数据中获知,因为中间过滤步骤(例如适配器修整)和宿主基因组去除)可以去除不同数量的读数。
理想情况下,我希望能够通过对某些输入规则进行某种检查来处理这些情况,这可以评估输入文件中的读取次数并选择是否继续该部分工作流图。有没有人成功实施过类似的东西?
非常感谢, -乔恩
我不知道基于工作流内部发生的某些计算无法完成工作流的可能性。要执行的规则是根据最终需要的输出来决定的,如果不能产生这个最终的输出就会失败。
一种方法可能是捕获特定工具故障(try
... except
在 run
部分中构造或 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的过程中使用检查点也是必要的。然而,还没有能够连接所有的点,我正在努力避免使用令牌文件等的简陋解决方案。