最近在学习基于DL的药靶相互作用预测方法,该方法将氨基酸contact map作为机器学习、训练的原始数据之一。首先从PDB中获得每个蛋白质的三维原子坐标,如果Ca原子之间的距离小于10°A,则在两个节点之间添加一条边。认为两个氨基酸有相互接触,大于10埃则没有相互作用,假如蛋白质有n个氨基酸,那么通过距离计算,将会产生n*n维的接触矩阵。
一、读取PDB文件,并获取每个位置氨基酸CA原子的三维坐标
f = open("8dtd.pdb","r") D = [] i = 0 for a in f.readlines(): b = a.split() if b[0] == "ATOM": if b[2] == "CA": D.append((float(b[6]),float(b[7]),float(b[8]))) print(D)
二、计算每个氨基酸与任意一个氨基酸CA原子距离
dis1 = [] for b in range(len(D)): dis2 = [] for c in range(len(D)): dis = ((D[b][0] - D[c][0]) ** 2 + (D[b][1] - D[c][1]) ** 2 + (D[b][2] - D[c][2]) ** 2) ** 0.5 if dis == 0.: dis2.append(0) elif (dis <= 8.) & (dis != 0.): dis2.append(round(float(dis),3)) elif dis > 8.: dis2.append(0) dis1.append(dis2)
上述代码获得了任意一个氨基酸与其他氨基酸的距离矩阵,氨基酸CA原子之间距离大于10埃,视为没有接触,记为0,小于10埃视为有接触,将距离值保存。