以下类历来用于处理点突变图:
type
TVCFRec = record
id, alt, filter, info:string;
qual: double;
<...>
end;
TVCFRef = TDictionary<string,TVCFRec>; // #reference
TVCFPos = TDictionary<integer,TVCFRef>; // #position
TVCFFile = class (TDictionary<string,TVCFPos>) // #chr
private
<...>
protected
<...>
public
<...>
end;
事实上,这是一个三级 TDictionary,它从设备/设备/档案中获取原始数据并将所有内容放在货架上,提供快速访问(非常快,选择 TDictionary 是因为它的速度和便利性工作)、搜索、记录、处理,甚至输出到 3d 打印机 :)
它的三级特性允许您快速找到向量 {染色体、染色体中的位置、参考中的替换类型}(chr、位置, 参考)
直到现在,载体对于一位患者来说一直是唯一的,即 向量中所有三个变量的组合只能在一个人中出现一次。
现在有关于新突变的数据,而且我们已经扩展了我们的能力。结果,丢失了第三个参数的唯一性,即 在给定染色体上的给定位置,可以有不同的参考替换。TVCFRef不能再使用,因为其中的字符串键可能不是唯一的。
转到数据库,另一种方法等。行不通-很多已经与类似的方法相关联。生产第四层也不是一种选择。有必要完成该类的第三级,以便它允许您使用相同的引用引用相同位置的多个突变选项。
我想到的唯一选择是像这样定义 TVCFRec:
type
TVCFR = record
id, alt, filter, info:string;
qual: double;
<...>
end;
TVCFRec = array of TVCFR;
也就是说,如果突变不明确,则数组的长度将不同于一,我们将能够通过枚举处理所有突变。
解决方案对我来说似乎不正确。也许有替代品?
我将回答我自己的问题,因为对于生物信息学家来说,类似的任务可能会越来越频繁地发生。
我们试图模拟未来几年的情况(改进仪器,直到远离 NGS,增加追踪突变的数量,增加对自己基因组分析的兴趣)。在关键变体中,我们发现密钥的非唯一性出现在 26.2% 的情况下。这是预期的最大值。基于此,最合乎逻辑的做法是不引入第 4 级 TDictionary,而是按预期使用数组。
不过,如果找到更优化的解决方案,我想保留这个问题。