def make_purine(residue, height = 0.4, scale = 1.2): """Creates vertices and normals for purines: Adenine Guanine""" atoms = residue.atoms names = [name.split("@")[0] for name in atoms.name] idx=names.index('N9'); N9 = Numeric.array(atoms[idx].coords) idx=names.index('C8'); C8 = Numeric.array(atoms[idx].coords) idx=names.index('N7'); N7 = Numeric.array(atoms[idx].coords) idx=names.index('C5'); C5 = Numeric.array(atoms[idx].coords) idx=names.index('C4'); C4 = Numeric.array(atoms[idx].coords) idx=names.index('C6'); C6 = Numeric.array(atoms[idx].coords) idx=names.index('N1'); N1 = Numeric.array(atoms[idx].coords) idx=names.index('C2'); C2 = Numeric.array(atoms[idx].coords) idx=names.index('N3'); N3 = Numeric.array(atoms[idx].coords) N9_C8 = C8-N9 N9_C4 = C4-N9 C8_C4 = height*norm(C4-C8) normal = height*Numeric.array(crossProduct(N9_C8, N9_C4, normal=True)) #center1 = (N9+C8+N7+C4+C5)/5.0 #center2 = (C4+C5+C6+N1+C2+N3)/6.0 center2 = (C4+C5+C6+N1+C2+N3+N9+C8+N7)/9.0 center1 = center2 vertices = Numeric.zeros((20,3),Numeric.Float) vertices[0] = scale*(C8 - normal - center1) + center1 vertices[1] = scale*(N7 - normal - center1) + center1 vertices[2] = scale*(C5 - normal - center2) + center2 vertices[3] = scale*(C4 - normal - center2) + center2 vertices[4] = scale*(C6 - normal - center2) + center2 vertices[5] = scale*(N1 - normal - center2) + center2 vertices[6] = scale*(C2 - normal - center2) + center2 vertices[7] = scale*(N3 - normal - center2) + center2 vertices[8] = scale*(C8 + normal - center1) + center1 vertices[9] = scale*(N7 + normal - center1) + center1 vertices[10] = scale*(C5 + normal - center2) + center2 vertices[11] = scale*(C4 + normal - center2) + center2 vertices[12] = scale*(C6 + normal - center2) + center2 vertices[13] = scale*(N1 + normal - center2) + center2 vertices[14] = scale*(C2 + normal - center2) + center2 vertices[15] = scale*(N3 + normal - center2) + center2 vertices[16] = scale*(N9 - C8_C4 - normal - center1) + center1 vertices[17] = scale*(N9 - C8_C4 + normal - center1) + center1 vertices[18] = scale*(N9 + C8_C4 + normal - center1) + center1 vertices[19] = scale*(N9 + C8_C4 - normal - center1) + center1 faces = Numeric.array([[19,3,2,1,0,16,16], [17,8,9,10,11,18,18], [3,7,6,5,4,2,2], [10,12,13,14,15,11,11], [16,0,8,17,17,17,17], [0,1,9,8,8,8,8], [1,2,10,9,9,9,9], [2,4,12,10,10,10,10], [4,5,13,12,12,12,12], [5,6,14,13,13,13,13], [6,7,15,14,14,14,14], [7,3,11,15,15,15,15], [3,19,18,11,11,11,11] ]) return vertices,faces
def make_pyrimidine(residue, height=0.4, scale=1.2): """Creates vertices and normals for pyrimidines:Thymine Uracil Cytosine""" atoms = residue.atoms names = [name.split("@")[0] for name in atoms.name] idx = names.index('N1') N1 = Numeric.array(atoms[idx].coords) idx = names.index('C2') C2 = Numeric.array(atoms[idx].coords) idx = names.index('N3') N3 = Numeric.array(atoms[idx].coords) idx = names.index('C4') C4 = Numeric.array(atoms[idx].coords) idx = names.index('C5') C5 = Numeric.array(atoms[idx].coords) idx = names.index('C6') C6 = Numeric.array(atoms[idx].coords) N1_C2 = C2 - N1 N1_C6 = C6 - N1 C2_C6 = height * norm(C6 - C2) normal = height * Numeric.array(crossProduct(N1_C2, N1_C6, normal=True)) center = (N1 + C2 + N3 + C4 + C5 + C6) / 6.0 vertices = Numeric.zeros((14, 3), Numeric.Float) vertices[0] = scale * (C2 - normal - center) + center vertices[1] = scale * (N3 - normal - center) + center vertices[2] = scale * (C4 - normal - center) + center vertices[3] = scale * (C5 - normal - center) + center vertices[4] = scale * (C6 - normal - center) + center vertices[5] = scale * (C2 + normal - center) + center vertices[6] = scale * (N3 + normal - center) + center vertices[7] = scale * (C4 + normal - center) + center vertices[8] = scale * (C5 + normal - center) + center vertices[9] = scale * (C6 + normal - center) + center vertices[10] = scale * (N1 - C2_C6 - normal - center) + center vertices[11] = scale * (N1 - C2_C6 + normal - center) + center vertices[12] = scale * (N1 + C2_C6 + normal - center) + center vertices[13] = scale * (N1 + C2_C6 - normal - center) + center faces = Numeric.array([[13, 4, 3, 2, 1, 0, 10], [11, 5, 6, 7, 8, 9, 12], [0, 5, 11, 10, 10, 10, 10], [ 1, 6, 5, 0, 0, 0, 0, ], [2, 7, 6, 1, 1, 1, 1], [3, 8, 7, 2, 2, 2, 2], [4, 9, 8, 3, 3, 3, 3], [13, 12, 9, 4, 4, 4, 4]]) return vertices, faces
def make_pyrimidine(residue, height = 0.4, scale = 1.2): """Creates vertices and normals for pyrimidines:Thymine Uracil Cytosine""" atoms = residue.atoms names = [name.split("@")[0] for name in atoms.name] idx=names.index('N1'); N1 = Numeric.array(atoms[idx].coords) idx=names.index('C2'); C2 = Numeric.array(atoms[idx].coords) idx=names.index('N3'); N3 = Numeric.array(atoms[idx].coords) idx=names.index('C4'); C4 = Numeric.array(atoms[idx].coords) idx=names.index('C5'); C5 = Numeric.array(atoms[idx].coords) idx=names.index('C6'); C6 = Numeric.array(atoms[idx].coords) N1_C2 = C2-N1 N1_C6 = C6-N1 C2_C6 = height*norm(C6-C2) normal = height*Numeric.array(crossProduct(N1_C2, N1_C6, normal=True)) center = (N1+C2+N3+C4+C5+C6)/6.0 vertices = Numeric.zeros((14,3),Numeric.Float) vertices[0] = scale*(C2 - normal - center) + center vertices[1] = scale*(N3 - normal - center) + center vertices[2] = scale*(C4 - normal - center) + center vertices[3] = scale*(C5 - normal - center) + center vertices[4] = scale*(C6 - normal - center) + center vertices[5] = scale*(C2 + normal - center) + center vertices[6] = scale*(N3 + normal - center) + center vertices[7] = scale*(C4 + normal - center) + center vertices[8] = scale*(C5 + normal - center) + center vertices[9] = scale*(C6 + normal - center) + center vertices[10] = scale*(N1 - C2_C6 - normal - center) + center vertices[11] = scale*(N1 - C2_C6 + normal - center) + center vertices[12] = scale*(N1 + C2_C6 + normal - center) + center vertices[13] = scale*(N1 + C2_C6 - normal - center) + center faces = Numeric.array([[13,4,3,2,1,0,10], [11,5,6,7,8,9,12], [0,5,11,10,10,10,10], [1,6,5,0,0,0,0,], [2,7,6,1,1,1,1], [3,8,7,2,2,2,2], [4,9,8,3,3,3,3], [13,12,9,4,4,4,4]]) return vertices, faces
def make_purine(residue, height=0.4, scale=1.2): """Creates vertices and normals for purines: Adenine Guanine""" atoms = residue.atoms names = [name.split("@")[0] for name in atoms.name] idx = names.index('N9') N9 = Numeric.array(atoms[idx].coords) idx = names.index('C8') C8 = Numeric.array(atoms[idx].coords) idx = names.index('N7') N7 = Numeric.array(atoms[idx].coords) idx = names.index('C5') C5 = Numeric.array(atoms[idx].coords) idx = names.index('C4') C4 = Numeric.array(atoms[idx].coords) idx = names.index('C6') C6 = Numeric.array(atoms[idx].coords) idx = names.index('N1') N1 = Numeric.array(atoms[idx].coords) idx = names.index('C2') C2 = Numeric.array(atoms[idx].coords) idx = names.index('N3') N3 = Numeric.array(atoms[idx].coords) N9_C8 = C8 - N9 N9_C4 = C4 - N9 C8_C4 = height * norm(C4 - C8) normal = height * Numeric.array(crossProduct(N9_C8, N9_C4, normal=True)) #center1 = (N9+C8+N7+C4+C5)/5.0 #center2 = (C4+C5+C6+N1+C2+N3)/6.0 center2 = (C4 + C5 + C6 + N1 + C2 + N3 + N9 + C8 + N7) / 9.0 center1 = center2 vertices = Numeric.zeros((20, 3), Numeric.Float) vertices[0] = scale * (C8 - normal - center1) + center1 vertices[1] = scale * (N7 - normal - center1) + center1 vertices[2] = scale * (C5 - normal - center2) + center2 vertices[3] = scale * (C4 - normal - center2) + center2 vertices[4] = scale * (C6 - normal - center2) + center2 vertices[5] = scale * (N1 - normal - center2) + center2 vertices[6] = scale * (C2 - normal - center2) + center2 vertices[7] = scale * (N3 - normal - center2) + center2 vertices[8] = scale * (C8 + normal - center1) + center1 vertices[9] = scale * (N7 + normal - center1) + center1 vertices[10] = scale * (C5 + normal - center2) + center2 vertices[11] = scale * (C4 + normal - center2) + center2 vertices[12] = scale * (C6 + normal - center2) + center2 vertices[13] = scale * (N1 + normal - center2) + center2 vertices[14] = scale * (C2 + normal - center2) + center2 vertices[15] = scale * (N3 + normal - center2) + center2 vertices[16] = scale * (N9 - C8_C4 - normal - center1) + center1 vertices[17] = scale * (N9 - C8_C4 + normal - center1) + center1 vertices[18] = scale * (N9 + C8_C4 + normal - center1) + center1 vertices[19] = scale * (N9 + C8_C4 - normal - center1) + center1 faces = Numeric.array([[19, 3, 2, 1, 0, 16, 16], [17, 8, 9, 10, 11, 18, 18], [3, 7, 6, 5, 4, 2, 2], [10, 12, 13, 14, 15, 11, 11], [16, 0, 8, 17, 17, 17, 17], [0, 1, 9, 8, 8, 8, 8], [1, 2, 10, 9, 9, 9, 9], [2, 4, 12, 10, 10, 10, 10], [4, 5, 13, 12, 12, 12, 12], [5, 6, 14, 13, 13, 13, 13], [6, 7, 15, 14, 14, 14, 14], [7, 3, 11, 15, 15, 15, 15], [3, 19, 18, 11, 11, 11, 11]]) return vertices, faces