RabbitBio / RabbitQCPlus

A more efficient quality control tool for sequencing data
MIT License
21 stars 2 forks source link

多线程下输出fq输出乱序问题 #3

Closed imDpeng closed 1 year ago

imDpeng commented 1 year ago

您好: 在我对RabbitQCPlus学习测试过程中,发现如下现象: 在多线程环境下,即-w参数>1时,RabbitQCPlus输出的fq丢失了输入时的顺序,使用相同参数进行多次运行时,会得到不同顺序的fq。 在单线程环境下,即-w参数=1时,RabbitQCPlus输出的fq可以保持输入时的顺序。

再继续对fastp进行测试,发现: fastp v.0.19存在与RabbitQCPlus相同的问题。 fastp v.0.23解决了输出乱序的问题,即无论单线程还是多线程都能保证得到与输入fq完全相同的顺序

由于下游比对软件(BWA)对序列输入顺序敏感,不同顺序的fq输入至BWA会得到不同的比对结果,请问开发组是否有开发计划满足上述需求。

ZekunYin commented 1 year ago

您好,

欢迎提出宝贵建议,根据我们的经验采用顺序输出的方式会带来一定的性能损失。我们团队在讨论过后认为大多数情况下序列顺序可能不会影响数据分析的结果,因此最后更偏向于多线程时采用性能更好的乱序输出模式。请问“由于下游比对软件(BWA)对序列输入顺序敏感,不同顺序的fq输入至BWA会得到不同的比对结果”这个结论是否有相关文献或者实验数据佐证?据我所知比对软件如bwa比对之后进行下游分析(比如变异检测等)需要对bam文件进行sort,请问在您的数据分析场景中不同的序列顺序是否影响bam sort之后的结果? 如果确实有相关需求,项目团队可以考虑加入顺序输出选项。 期待您的回复!

祝好, 泽坤

imDpeng commented 1 year ago

您好, 关于“fq输入顺序不一致导致BWA比对结果不一致”这一结论,我没有发现现有文献对此进行讨论,更大可能性是我在文献的角度关注不足。我是通过阅读BWA源码和运行BWA软件并比对结果获得了上述结论。 关于对BWA结果bam的排序问题。我已经确保我比较的结果是排序之后的结果,的确存在不一致现象。另外,bam的排序是指对文件中的每一个bam1_t(这是BWA和htslib源码中表示一条比对结果的结构体)进行排序,不涉及对bam1_t本身的修改,我发现的不一致问题是qname完全相同的两个bam1_t内部不同,所以推断为是来自BWA本身产生的不一致。 关于不一致的内容,我做了一些简单分类,1. bam1_t中的flag字段的ProperPair属性不一致。2. 比对质量(Mapping Quality)较低的情况,经有经验的同事从比对逻辑的角度观察,无论通过有序输入与无序输入哪种方式,这个read的比对结果的比对质量都不好,没有绝对逻辑能证明哪个版本的比对结果是对的或是错的。 关于从BWA源码上的观察,1. 关于bam1_t中的flag字段的ProperPair属性。从代码上观察,BWA会以chunk(默认100W)为单位进行并行调度,同时会对chunk内比对结果进行统计分析,针对某指标在整个chunk维度找到四分之一和四分之三两个位置,再分别对chunk中的每一个比对结果进行判断,如果该指标在上述区间内则设为ProperPair,否则不设该值。从上述逻辑表述,可以给出以下结论,ProperPair属性会受到与该比对上下游100W的比对结果的影响。2. 针对低比对质量的源码阅读工作正在进行,暂未从源码上找到原因。

祝好, dpeng

ZekunYin commented 1 year ago

您好, 为了稳妥起见,我们目前已经更新软件输出逻辑,目前默认情况下多线程输出与输入文件的顺序一致,欢迎您测试和使用新版软件。 多谢您宝贵的建议!如果后续使用中出现任何问题请您随时提出新的issue。 祝好, 泽坤