def add_com_to_pdb(mhc_com, vtcr_com, sample_structure): """ Function to add pseudoatoms at MHC-CoM, TCR-CoM, and XYZ axise to the output PDB file """ # mhc_com mhc_com_chain = "X" sample_structure.add(Chain.Chain(mhc_com_chain)) res_id = (" ", 1, " ") new_residue = Residue.Residue(res_id, "MCM", " ") new_atom = Atom.Atom("C", mhc_com, 0, 0.0, " ", "C", 1, "C") new_residue.add(new_atom) sample_structure.child_dict[mhc_com_chain].add(new_residue) # tcr com tcr_com_chain = "Y" sample_structure.add(Chain.Chain(tcr_com_chain)) res_id = (" ", 1, " ") new_residue = Residue.Residue(res_id, "TCM", " ") new_atom = Atom.Atom("C", vtcr_com, 0, 0.0, " ", "C", 1, "C") new_residue.add(new_atom) sample_structure.child_dict[tcr_com_chain].add(new_residue) # X,Y,Z atoms pos = [[50, 0, 0], [0, 50, 0], [0, 0, 50]] resn = ["X", "Y", "Z"] xyz_chain = "Z" sample_structure.add(Chain.Chain(xyz_chain)) for i in [0, 1, 2]: res_id = (" ", i + 1, " ") new_residue = Residue.Residue(res_id, resn[i], " ") new_atom = Atom.Atom("O", pos[i], 0, 0.0, " ", "O", 1, "O") new_residue.add(new_atom) sample_structure.child_dict[xyz_chain].add(new_residue) return sample_structure
def makeCys(segID, N, CA, C, O, geo): '''Creates a Cysteine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_SG_length = geo.CB_SG_length CA_CB_SG_angle = geo.CA_CB_SG_angle N_CA_CB_SG_diangle = geo.N_CA_CB_SG_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") sulfur_g = calculateCoordinates(N, CA, CB, CB_SG_length, CA_CB_SG_angle, N_CA_CB_SG_diangle) SG = Atom("SG", sulfur_g, 0.0, 1.0, " ", " SG", 0, "S") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "CYS", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(SG) return res
def makeSer(segID, N, CA, C, O, geo): '''Creates a Serine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_OG_length = geo.CB_OG_length CA_CB_OG_angle = geo.CA_CB_OG_angle N_CA_CB_OG_diangle = geo.N_CA_CB_OG_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") oxygen_g = calculateCoordinates(N, CA, CB, CB_OG_length, CA_CB_OG_angle, N_CA_CB_OG_diangle) OG = Atom("OG", oxygen_g, 0.0, 1.0, " ", " OG", 0, "O") ##Create Reside Data Structure res = Residue((' ', segID, ' '), "SER", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(OG) ##print res return res
def makeThr(segID, N, CA, C, O, geo): '''Creates a Threonine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_OG1_length = geo.CB_OG1_length CA_CB_OG1_angle = geo.CA_CB_OG1_angle N_CA_CB_OG1_diangle = geo.N_CA_CB_OG1_diangle CB_CG2_length = geo.CB_CG2_length CA_CB_CG2_angle = geo.CA_CB_CG2_angle N_CA_CB_CG2_diangle = geo.N_CA_CB_CG2_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") oxygen_g1 = calculateCoordinates(N, CA, CB, CB_OG1_length, CA_CB_OG1_angle, N_CA_CB_OG1_diangle) OG1 = Atom("OG1", oxygen_g1, 0.0, 1.0, " ", " OG1", 0, "O") carbon_g2 = calculateCoordinates(N, CA, CB, CB_CG2_length, CA_CB_CG2_angle, N_CA_CB_CG2_diangle) CG2 = Atom("CG2", carbon_g2, 0.0, 1.0, " ", " CG2", 0, "C") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "THR", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(OG1) res.add(CG2) return res
def calc_rms(ref_coords, alt_coords): # print ref_coords, alt_coords assert( len(ref_coords) == len(alt_coords) ) if pyRMSD: calculator = pyRMSD.RMSDCalculator.RMSDCalculator(pyrmsd_calc, np.array([ref_coords, alt_coords])) return calculator.pairwiseRMSDMatrix()[0] else: super_imposer = Bio.PDB.Superimposer() ref_atoms = [Atom.Atom('CA', coords, 0.0, 1.0, '', ' CA ', i+1, element='C') for i, coords in enumerate(ref_coords)] alt_atoms = [Atom.Atom('CA', coords, 0.0, 1.0, '', ' CA ', i+1, element='C') for i, coords in enumerate(alt_coords)] super_imposer.set_atoms(ref_atoms, alt_atoms) return super_imposer.rms
def place_line(element, position1, position2, resname, chain): global runtime_mark_id res_temp = Residue((" ", runtime_mark_id, " "), resname, " ") runtime_mark_id += 1 atom_temp1 = Atom("X1", position1, 0.0, 1, " ", "X", runtime_mark_id, element) atom_temp2 = Atom("X2", position2, 0.0, 1, " ", "X", runtime_mark_id, element) res_temp.add(atom_temp1) res_temp.add(atom_temp2) chain.add(res_temp)
def makeGln(segID, N, CA, C, O, geo): '''Creates a Glutamine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_CD_length = geo.CG_CD_length CB_CG_CD_angle = geo.CB_CG_CD_angle CA_CB_CG_CD_diangle = geo.CA_CB_CG_CD_diangle CD_OE1_length = geo.CD_OE1_length CG_CD_OE1_angle = geo.CG_CD_OE1_angle CB_CG_CD_OE1_diangle = geo.CB_CG_CD_OE1_diangle CD_NE2_length = geo.CD_NE2_length CG_CD_NE2_angle = geo.CG_CD_NE2_angle CB_CG_CD_NE2_diangle = geo.CB_CG_CD_NE2_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle, CA_CB_CG_CD_diangle) CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C") oxygen_e1 = calculateCoordinates(CB, CG, CD, CD_OE1_length, CG_CD_OE1_angle, CB_CG_CD_OE1_diangle) OE1 = Atom("OE1", oxygen_e1, 0.0, 1.0, " ", " OE1", 0, "O") nitrogen_e2 = calculateCoordinates(CB, CG, CD, CD_NE2_length, CG_CD_NE2_angle, CB_CG_CD_NE2_diangle) NE2 = Atom("NE2", nitrogen_e2, 0.0, 1.0, " ", " NE2", 0, "N") ##Create Residue DS res = Residue((' ', segID, ' '), "GLN", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD) res.add(OE1) res.add(NE2) return res
def makeLys(segID, N, CA, C, O, geo): '''Creates a Lysine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_CD_length = geo.CG_CD_length CB_CG_CD_angle = geo.CB_CG_CD_angle CA_CB_CG_CD_diangle = geo.CA_CB_CG_CD_diangle CD_CE_length = geo.CD_CE_length CG_CD_CE_angle = geo.CG_CD_CE_angle CB_CG_CD_CE_diangle = geo.CB_CG_CD_CE_diangle CE_NZ_length = geo.CE_NZ_length CD_CE_NZ_angle = geo.CD_CE_NZ_angle CG_CD_CE_NZ_diangle = geo.CG_CD_CE_NZ_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle, CA_CB_CG_CD_diangle) CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C") carbon_e = calculateCoordinates(CB, CG, CD, CD_CE_length, CG_CD_CE_angle, CB_CG_CD_CE_diangle) CE = Atom("CE", carbon_e, 0.0, 1.0, " ", " CE", 0, "C") nitrogen_z = calculateCoordinates(CG, CD, CE, CE_NZ_length, CD_CE_NZ_angle, CG_CD_CE_NZ_diangle) NZ = Atom("NZ", nitrogen_z, 0.0, 1.0, " ", " NZ", 0, "N") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "LYS", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD) res.add(CE) res.add(NZ) return res
def construct_initial_atoms(self): """Finds positions in between the O3' and C5'""" vec = self.c5.coord - self.o3.coord coord_p = self.o3.coord + vec * 0.333333 coord_o5 = self.o3.coord + vec * 0.666666 self.p = Atom.Atom("P", coord_p, 0.0, 1.0, ' ', " P", 1, element="P") self.o5 = Atom.Atom("O5'", coord_o5, 0.0, 1.0, ' ', " O5'", 1, element="O") self.r2.add(self.p) self.r2.add(self.o5)
def generate_plus_atom_matches(self, next_pattern_atom: Atom, inspecting_atoms: list, distance_error_coefficient: float) -> list: pattern_atoms = self.matched_pattern_atoms + [next_pattern_atom] pattern_atoms_distances = [ numpy.linalg.norm(atom.coord - next_pattern_atom.coord) for atom in self.matched_pattern_atoms ] matches = list() for atom in inspecting_atoms: # skip atom that is already presented in matched atoms if atom in self.matched_inspecting_atoms: continue # skip non-compatible atoms if atom.get_id()[0] != next_pattern_atom.get_id()[0]: continue # skip atoms if they do not fit by distance all_distances_are_acceptable = True for atom_index in range(len(pattern_atoms_distances)): acceptable_distance = pattern_atoms_distances[atom_index] if not distance_is_acceptable( self.matched_inspecting_atoms[atom_index], atom, acceptable_distance, distance_error_coefficient): all_distances_are_acceptable = False break if all_distances_are_acceptable: matches.append( Match(pattern_atoms, self.matched_inspecting_atoms + [atom])) return matches
def test_pdbio_write_custom_residue(self): """Write a chainless residue using PDBIO.""" res = Residue.Residue((" ", 1, " "), "DUM", "") atm = Atom.Atom("CA", [0.1, 0.1, 0.1], 1.0, 1.0, " ", "CA", 1, "C") res.add(atm) # Ensure that set_structure doesn't alter parent parent = res.parent # Write full model to temp file self.io.set_structure(res) self.assertIs(parent, res.parent) filenumber, filename = tempfile.mkstemp() os.close(filenumber) try: self.io.save(filename) struct2 = self.parser.get_structure("res", filename) latoms = list(struct2.get_atoms()) self.assertEqual(len(latoms), 1) self.assertEqual(latoms[0].name, "CA") self.assertEqual(latoms[0].parent.resname, "DUM") self.assertEqual(latoms[0].parent.parent.id, "A") finally: os.remove(filename)
def check_clash(str_name, v=False): """check_clash, fract of clashes! if zero contacts then error -> fix -> Problem, contacts, str_name: 311 505 na-prot_13536.pdb Sterical clashes 0.615841584158 c is counter """ if v: print('fn:', str_name) structure = open(str_name) #model = structure[0] atoms_A = [] atoms_B = [] for line in structure.readlines(): if line[:4] == "ATOM": #print line at_nam = line[12:16].strip() coor = [float(line[30:38]), float(line[38:46]), float(line[46:54])] at = Atom.Atom(at_nam, coor, 0.0, 1.0, ' ', at_nam, 1, at_nam[0]) if line[21] == "A": atoms_A.append(at) elif line[21] == "B": atoms_B.append(at) else: pass #atoms_B = Selection.unfold_entities(structure[0]['B'], 'A') #print len(atoms_A), len(atoms_B) if len(atoms_A) > len(atoms_B): less = atoms_B more = atoms_A else: less = atoms_A more = atoms_B problem = 0 contacts = 0 ns = NeighborSearch(more) for at in less: neighbors = ns.search(array(at.get_coord()), 2.0, 'A') if neighbors != []: problem += 1 contacts += 1 else: neighbors1 = ns.search(array(at.get_coord()), 4.0, 'A') if neighbors1 != []: contacts += 1 if v: print('problem:', float(problem)) print('contacts:', float(contacts)) try: fract = float(problem) / float(contacts) except ZeroDivisionError: fract = problem # or skip this structure if v: print('ZeroDivison -- skip:', problem, contacts, str_name) return fract #print 'Contacts, str_name:', problem, contacts, str_name, "Sterical clashes ", fract return fract
def create_cobalt(v): global runtime_mark_id #res_co = Residue((" ", runtime_mark_id, " "), "Co3", " ") co = Atom("CO", v, 0.0, 1, " ", "X", runtime_mark_id, "CO") #runtime_mark_id += 1 #res_co.add(co) #new_chain_mark.add(res_co) return co
def makeHis(N, CA, CB, chi1, chi2): '''Creates a Histidine residue''' CB_CG_length = 1.49 CA_CB_CG_angle = 113.74 N_CA_CB_CG_diangle = chi1 CG_ND1_length = 1.38 CB_CG_ND1_angle = 122.85 CA_CB_CG_ND1_diangle = chi2 CG_CD2_length = 1.35 CB_CG_CD2_angle = 130.61 CA_CB_CG_CD2_diangle = 180.0 + CA_CB_CG_ND1_diangle ND1_CE1_length = 1.32 CG_ND1_CE1_angle = 108.5 CB_CG_ND1_CE1_diangle = 180.0 CD2_NE2_length = 1.35 CG_CD2_NE2_angle = 108.5 CB_CG_CD2_NE2_diangle = 180.0 carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") nitrogen_d1 = calculateCoordinates(CA, CB, CG, CG_ND1_length, CB_CG_ND1_angle, CA_CB_CG_ND1_diangle) ND1 = Atom("ND1", nitrogen_d1, 0.0, 1.0, " ", " ND1", 0, "N") carbon_d2 = calculateCoordinates(CA, CB, CG, CG_CD2_length, CB_CG_CD2_angle, CA_CB_CG_CD2_diangle) CD2 = Atom("CD2", carbon_d2, 0.0, 1.0, " ", " CD2", 0, "C") carbon_e1 = calculateCoordinates(CB, CG, ND1, ND1_CE1_length, CG_ND1_CE1_angle, CB_CG_ND1_CE1_diangle) CE1 = Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C") nitrogen_e2 = calculateCoordinates(CB, CG, CD2, CD2_NE2_length, CG_CD2_NE2_angle, CB_CG_CD2_NE2_diangle) NE2 = Atom("NE2", nitrogen_e2, 0.0, 1.0, " ", " OE1", 0, "N") _dict = { 'cg': (carbon_g, CG), 'nd1': (nitrogen_d1, ND1), 'cd2': (carbon_d2, CD2), 'ce1': (carbon_e1, CE1), 'ne2': (nitrogen_e2, NE2) } return _dict
def place_atom(element, position, resname, chain): global runtime_mark_id res_temp = Residue((" ", runtime_mark_id, " "), resname, " ") runtime_mark_id += 1 atom_temp = Atom("X", position, 0.0, 1, " ", "X", runtime_mark_id, element) res_temp.add(atom_temp) chain.add(res_temp)
def makeIle(segID, N, CA, C, O, geo): '''Creates an Isoleucine residue''' ##R-group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG1_length = geo.CB_CG1_length CA_CB_CG1_angle = geo.CA_CB_CG1_angle N_CA_CB_CG1_diangle = geo.N_CA_CB_CG1_diangle CB_CG2_length = geo.CB_CG2_length CA_CB_CG2_angle = geo.CA_CB_CG2_angle N_CA_CB_CG2_diangle = geo.N_CA_CB_CG2_diangle CG1_CD1_length = geo.CG1_CD1_length CB_CG1_CD1_angle = geo.CB_CG1_CD1_angle CA_CB_CG1_CD1_diangle = geo.CA_CB_CG1_CD1_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g1 = calculateCoordinates(N, CA, CB, CB_CG1_length, CA_CB_CG1_angle, N_CA_CB_CG1_diangle) CG1 = Atom("CG1", carbon_g1, 0.0, 1.0, " ", " CG1", 0, "C") carbon_g2 = calculateCoordinates(N, CA, CB, CB_CG2_length, CA_CB_CG2_angle, N_CA_CB_CG2_diangle) CG2 = Atom("CG2", carbon_g2, 0.0, 1.0, " ", " CG2", 0, "C") carbon_d1 = calculateCoordinates(CA, CB, CG1, CG1_CD1_length, CB_CG1_CD1_angle, CA_CB_CG1_CD1_diangle) CD1 = Atom("CD1", carbon_d1, 0.0, 1.0, " ", " CD1", 0, "C") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "ILE", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG1) res.add(CG2) res.add(CD1) return res
def makeLeu(segID, N, CA, C, O, geo): '''Creates a Leucine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_CD1_length = geo.CG_CD1_length CB_CG_CD1_angle = geo.CB_CG_CD1_angle CA_CB_CG_CD1_diangle = geo.CA_CB_CG_CD1_diangle CG_CD2_length = geo.CG_CD2_length CB_CG_CD2_angle = geo.CB_CG_CD2_angle CA_CB_CG_CD2_diangle = geo.CA_CB_CG_CD2_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g1 = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g1, 0.0, 1.0, " ", " CG", 0, "C") carbon_d1 = calculateCoordinates(CA, CB, CG, CG_CD1_length, CB_CG_CD1_angle, CA_CB_CG_CD1_diangle) CD1 = Atom("CD1", carbon_d1, 0.0, 1.0, " ", " CD1", 0, "C") carbon_d2 = calculateCoordinates(CA, CB, CG, CG_CD2_length, CB_CG_CD2_angle, CA_CB_CG_CD2_diangle) CD2 = Atom("CD2", carbon_d2, 0.0, 1.0, " ", " CD2", 0, "C") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "LEU", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CD2) return res
def makeAsn(segID, N, CA, C, O, geo): '''Creates an Asparagine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_OD1_length = geo.CG_OD1_length CB_CG_OD1_angle = geo.CB_CG_OD1_angle CA_CB_CG_OD1_diangle = geo.CA_CB_CG_OD1_diangle CG_ND2_length = geo.CG_ND2_length CB_CG_ND2_angle = geo.CB_CG_ND2_angle CA_CB_CG_ND2_diangle = geo.CA_CB_CG_ND2_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") oxygen_d1 = calculateCoordinates(CA, CB, CG, CG_OD1_length, CB_CG_OD1_angle, CA_CB_CG_OD1_diangle) OD1 = Atom("OD1", oxygen_d1, 0.0, 1.0, " ", " OD1", 0, "O") nitrogen_d2 = calculateCoordinates(CA, CB, CG, CG_ND2_length, CB_CG_ND2_angle, CA_CB_CG_ND2_diangle) ND2 = Atom("ND2", nitrogen_d2, 0.0, 1.0, " ", " ND2", 0, "N") res = Residue((' ', segID, ' '), "ASN", ' ') ##Create Residue Data Structure res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(OD1) res.add(ND2) return res
def makeMet(segID, N, CA, C, O, geo): '''Creates a Methionine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_SD_length = geo.CG_SD_length CB_CG_SD_angle = geo.CB_CG_SD_angle CA_CB_CG_SD_diangle = geo.CA_CB_CG_SD_diangle SD_CE_length = geo.SD_CE_length CG_SD_CE_angle = geo.CG_SD_CE_angle CB_CG_SD_CE_diangle = geo.CB_CG_SD_CE_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") sulfur_d = calculateCoordinates(CA, CB, CG, CG_SD_length, CB_CG_SD_angle, CA_CB_CG_SD_diangle) SD = Atom("SD", sulfur_d, 0.0, 1.0, " ", " SD", 0, "S") carbon_e = calculateCoordinates(CB, CG, SD, SD_CE_length, CG_SD_CE_angle, CB_CG_SD_CE_diangle) CE = Atom("CE", carbon_e, 0.0, 1.0, " ", " CE", 0, "C") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "MET", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(SD) res.add(CE) return res
def makeSer(N, CA, CB, chi1): _dict = {} CB_OG_length = 1.417 CA_CB_OG_angle = 110.773 N_CA_CB_OG_diangle = chi1 oxygen_g = calculateCoordinates(N, CA, CB, CB_OG_length, CA_CB_OG_angle, N_CA_CB_OG_diangle) OG = Atom("OG", oxygen_g, 0.0, 1.0, " ", " OG", 0, "O") _dict['og'] = (oxygen_g, OG) return _dict
def create_atom(self, name, elem, coord): """Finds positions in between the O3' and C5'""" atom = Atom.Atom(name, coord, 0.0, 1.0, ' ', " " + name, 1, element=elem) return atom
def makeHis(segID, N, CA, C, O, geo): '''Creates a Histidine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_ND1_length = geo.CG_ND1_length CB_CG_ND1_angle = geo.CB_CG_ND1_angle CA_CB_CG_ND1_diangle = geo.CA_CB_CG_ND1_diangle CG_CD2_length = geo.CG_CD2_length CB_CG_CD2_angle = geo.CB_CG_CD2_angle CA_CB_CG_CD2_diangle = geo.CA_CB_CG_CD2_diangle ND1_CE1_length = geo.ND1_CE1_length CG_ND1_CE1_angle = geo.CG_ND1_CE1_angle CB_CG_ND1_CE1_diangle = geo.CB_CG_ND1_CE1_diangle CD2_NE2_length = geo.CD2_NE2_length CG_CD2_NE2_angle = geo.CG_CD2_NE2_angle CB_CG_CD2_NE2_diangle = geo.CB_CG_CD2_NE2_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") nitrogen_d1 = calculateCoordinates(CA, CB, CG, CG_ND1_length, CB_CG_ND1_angle, CA_CB_CG_ND1_diangle) ND1 = Atom("ND1", nitrogen_d1, 0.0, 1.0, " ", " ND1", 0, "N") carbon_d2 = calculateCoordinates(CA, CB, CG, CG_CD2_length, CB_CG_CD2_angle, CA_CB_CG_CD2_diangle) CD2 = Atom("CD2", carbon_d2, 0.0, 1.0, " ", " CD2", 0, "C") carbon_e1 = calculateCoordinates(CB, CG, ND1, ND1_CE1_length, CG_ND1_CE1_angle, CB_CG_ND1_CE1_diangle) CE1 = Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C") nitrogen_e2 = calculateCoordinates(CB, CG, CD2, CD2_NE2_length, CG_CD2_NE2_angle, CB_CG_CD2_NE2_diangle) NE2 = Atom("NE2", nitrogen_e2, 0.0, 1.0, " ", " NE2", 0, "N") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "HIS", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(ND1) res.add(CD2) res.add(CE1) res.add(NE2) return res
def place_atoms(atoms, element, resname, chain): global runtime_mark_id res_temp = Residue((" ", runtime_mark_id, " "), resname, " ") runtime_mark_id += 3 n = 0 for a in atoms: n += 1 atom_temp = Atom("X" + str(n), a.get_coord(), 0.0, 1, " ", "X", runtime_mark_id, element) res_temp.add(atom_temp) chain.add(res_temp)
def test_assign_unknown_element(self): """Unknown element is assigned 'X'.""" with warnings.catch_warnings(): warnings.simplefilter("ignore", PDBConstructionWarning) a = Atom.Atom( "XE1", None, None, None, None, " XE1", None # serial 5170 - 4CP4 ) self.assertEqual(a.element, "X")
def makePro(segID, N, CA, C, O, geo): '''Creates a Proline residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle CB_CG_length = geo.CB_CG_length CA_CB_CG_angle = geo.CA_CB_CG_angle N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle CG_CD_length = geo.CG_CD_length CB_CG_CD_angle = geo.CB_CG_CD_angle CA_CB_CG_CD_diangle = geo.CA_CB_CG_CD_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle, CA_CB_CG_CD_diangle) CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "PRO", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD) return res
def add_residue_from_geo(structure, geo): resRef= getReferenceResidue(structure) AA=geo.residue_name segID= resRef.get_id()[1] segID+=1 ##geometry to bring together residue peptide_bond=geo.peptide_bond CA_C_N_angle=geo.CA_C_N_angle C_N_CA_angle=geo.C_N_CA_angle ##Backbone Coordinages N_CA_C_angle=geo.N_CA_C_angle CA_N_length=geo.CA_N_length CA_C_length=geo.CA_C_length phi= geo.phi psi_im1=geo.psi_im1 omega=geo.omega N_coord=calculateCoordinates(resRef['N'], resRef['CA'], resRef['C'], peptide_bond, CA_C_N_angle, psi_im1) N= Atom("N", N_coord, 0.0 , 1.0, " "," N", 0, "N") CA_coord=calculateCoordinates(resRef['CA'], resRef['C'], N, CA_N_length, C_N_CA_angle, omega) CA=Atom("CA", CA_coord, 0.0 , 1.0, " "," CA", 0,"C") C_coord=calculateCoordinates(resRef['C'], N, CA, CA_C_length, N_CA_C_angle, phi) C= Atom("C", C_coord, 0.0, 1.0, " ", " C",0,"C") ##Create Carbonyl atom (to be moved later) C_O_length=geo.C_O_length CA_C_O_angle=geo.CA_C_O_angle N_CA_C_O_diangle=geo.N_CA_C_O_diangle carbonyl=calculateCoordinates(N, CA, C, C_O_length, CA_C_O_angle, N_CA_C_O_diangle) O= Atom("O",carbonyl , 0.0 , 1.0, " "," O", 0, "O") if(AA=='G'): res=makeGly(segID, N, CA, C, O, geo) else: res=makeGly(segID, N, CA, C, O, geo) resRef['O'].set_coord(calculateCoordinates(res['N'], resRef['CA'], resRef['C'], C_O_length, CA_C_O_angle, 180.0)) ghost= Atom("N", calculateCoordinates(res['N'], res['CA'], res['C'], peptide_bond, CA_C_N_angle, psi_im1), 0.0 , 0.0, " ","N", 0, "N") res['O'].set_coord(calculateCoordinates( res['N'], res['CA'], res['C'], C_O_length, CA_C_O_angle, 180.0)) structure[0]['A'].add(res) return structure
def build_residues(list_blueprints, list_names): list_residues = [] resname = res_rev_name_dict[list_blueprints[0][0][2]] rotamer_dict[resname] = [] for list_rotamer in list_blueprints: new_res = Residue((" ", 279, " "), resname, " ") # RESET TOTAL_RES_ID TO 1 ON SUBSEQUENT RUNS? rotamer_dict[resname].append(list_rotamer[5][1]) for blueprint_atom in list_rotamer: new_atom = Atom(blueprint_atom[0], blueprint_atom[6], blueprint_atom[8], blueprint_atom[7], blueprint_atom[1], blueprint_atom[0], 1, blueprint_atom[10]) # INIT: NAME, COORDINATES, BFACTOR, OCCUPANCY, ALTLOC, FULL NAME, SERIAL NUMBER, ELEMENT new_atom.set_parent(new_res) new_res.add(new_atom) list_residues.append(new_res) return list_residues
def makeGlu(N, CA, CB, chi1, chi2, chi3): CB_CG_length = 1.52 CA_CB_CG_angle = 113.82 N_CA_CB_CG_diangle = chi1 CG_CD_length = 1.52 CB_CG_CD_angle = 113.31 CA_CB_CG_CD_diangle = chi2 CD_OE1_length = 1.25 CG_CD_OE1_angle = 119.02 CB_CG_CD_OE1_diangle = chi3 CD_OE2_length = 1.25 CG_CD_OE2_angle = 118.08 CB_CG_CD_OE2_diangle = 180.0 + CB_CG_CD_OE1_diangle carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle, N_CA_CB_CG_diangle) CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C") carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle, CA_CB_CG_CD_diangle) CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C") oxygen_e1 = calculateCoordinates(CB, CG, CD, CD_OE1_length, CG_CD_OE1_angle, CB_CG_CD_OE1_diangle) OE1 = Atom("OE1", oxygen_e1, 0.0, 1.0, " ", " OE1", 0, "O") oxygen_e2 = calculateCoordinates(CB, CG, CD, CD_OE2_length, CG_CD_OE2_angle, CB_CG_CD_OE2_diangle) OE2 = Atom("OE1", oxygen_e2, 0.0, 1.0, " ", " OE1", 0, "O") _dict = { 'cg': (carbon_g, CG), 'cd': (carbon_d, CD), 'oe1': (oxygen_e1, OE1), 'oe2': (oxygen_e2, OE2) } return _dict
def makeAla(segID, N, CA, C, O, geo): '''Creates an Alanine residue''' ##R-Group CA_CB_length = geo.CA_CB_length C_CA_CB_angle = geo.C_CA_CB_angle N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle, N_C_CA_CB_diangle) CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "ALA", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) return res
def RemoveHydrogens(ProteinModel): # Loop over entire structure for Chain in list(ProteinModel.get_chains()): for Residue in list(Chain.get_residues()): if Residue.get_resname() not in ("HOH", "WAT"): # And get rid of hydrogens for Atom in list(Residue.get_atoms()): if Atom.element == "H": Residue.detach_child(Atom.get_id()) else: Chain.detach_child(Residue.get_id()) if len(list(Chain.get_residues())) == 0: ProteinModel.detach_child(Chain.get_id()) return