Pengelly样本追踪
#default
背景
在进行人类二代测序的Panel设计时,往往需要在Panel中加入一些SNP位点,用于区分样本,或者说检测样本间污染。
Pengelly的方案是使用24个SNP进行样本追踪。
他们设计了一个SNP的选择要求:
1,不包含互补碱基的替换,即A↔️T、G↔️C;
2,不在重复序列中,侧翼250bp的GC比例在40%~55%范围,50bp范围内不允许有其他变异;
3,在多个人种中,明确人群频率都在0.2~0.8之间;
4,不改变编码蛋白的以及序列,或在OMIM中没有记录。
我在以往的设计里,挑选的方案有所不同,因为我还会考虑将位点用作分析染色体结构变异的骨架。现在参考这个方案进行调整。
一个大的差异是,为了不影响检测Panel,我在挑选位点时会特地选择在内含子中的位点,但这个方案为了直接嵌入现有的WES试剂盒中,会选择外显子中同义突变(被常见Panel覆盖,或者选择UTR,或者WES可覆盖的Intron)的位点,因此,不需要额外增加探针。
因为最终挑选出的SNP数目仅24个,所以不能用作染色体结构变异分析(当然人家是在WES里设计的,WES本身的覆盖范围是足够做染色体结构变异分析了)。
结果
Chromosome | Position (Hg19) | rsID (dbSNP137) | Gene |
---|---|---|---|
1 | 179520506 | rs1410592 | NPHS2 |
1 | 67861520 | rs2229546 | IL12RB2 |
2 | 169789016 | rs497692 | ABCB11 |
2 | 227896976 | rs10203363 | COL4A4 |
3 | 4403767 | rs2819561 | SUMF1 |
4 | 5749904 | rs4688963 | EVC |
5 | 82834630 | rs309557 | VCAN |
6 | 146755140 | rs2942 | GRM1 |
7 | 48450157 | rs17548783 | ABCA13 |
8 | 94935937 | rs4735258 | PDP1 |
9 | 100190780 | rs1381532 | TDRD7 |
10 | 100219314 | rs10883099 | HPSE2 |
11 | 16133413 | rs4617548 | SOX6 |
12 | 993930 | rs7300444 | WNK1 |
13 | 39433606 | rs9532292 | FREM2 |
14 | 50769717 | rs2297995 | L2HGDH |
15 | 34528948 | rs4577050 | SLC12A6 |
16 | 70303580 | rs2070203 | AARS |
17 | 71197748 | rs1037256 | COG1 |
18 | 21413869 | rs9962023 | LAMA3 |
19 | 10267077 | rs2228611 | DNMT1 |
20 | 6100088 | rs10373 | FERMT1 |
21 | 44323590 | rs4148973 | NDUFV3 |
22 | 21141300 | rs4675 | SERPIND1 |
验证方案
Pengelly的方案中模拟了一个10000人的数据集,数据集的这些位点的AF分布符合HapMap的人群频率。最后得到的结论是平均约每40个10000人的数据集中会出现1对重复的个体。
怎么做
脑海中过了一遍,方案就是把每个人的这24个位点的基因型都检测出来,然后进行匹配即可。具体的说,我大概会把这24个位点固定排序,然后将每个人的基因型生成一条固定的序列。
伪代码
from collections import Counter
counts = Counter(profile_list)
duplicates = [profile for profile, count in counts.items() if count > 1]
if duplicates:
print("Duplicates found:", duplicates)
else:
print("No duplicates found")
思考
将原本的一批次SNP同时用于样本识别和结构变异分析分开,让样本识别回归样本识别,结构变异回归结构变异。