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 init_all_rotamers( ): # 'FIXED_RES_CHAIN' : {'FIXED_RES_NUM' : { CANDIDATE_RES_1 : [ transformed_residues ] }} for chain in candidate_chains: all_rotamers[chain] = {} for res_fixed_num in candidate_ids: all_rotamers[chain][res_fixed_num] = {} for rot_name_1 in residue_names_1: all_rotamers[chain][res_fixed_num][rot_name_1] = [] for moving in all_moving[res_name_dict[rot_name_1]]: aligned = return_aligned( moving, structure[idm(chain)][chain][res_fixed_num]) aligned_copy = Residue((" ", res_fixed_num, " "), res_name_dict[rot_name_1], " ") # Residue((" ", 279, " "), resname, " ") for i in aligned: aligned_copy.add(i.copy()) all_rotamers[chain][res_fixed_num][rot_name_1].append( aligned_copy)
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 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 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 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 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 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_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 repair_pdb(pdb, chain_id): ''' Args: pdb -> biopython structure chain_id -> chain, which contains the correct sequence Returns: Repaired pdb object. ''' for model in pdb: damaged_res = [] # look for non amino acids classified as hetatm for i, res in enumerate(model[chain_id]): res_name = res.resname if res_name == "MSE" and res.id[0] != " ": damaged_res.append([i, res]) # reverse the list, so the last items will be corrected first damaged_res.reverse() for (i, old_res) in damaged_res: new_id = list(old_res.id) new_id[0] = " " new_id = tuple(new_id) new_res = Residue.Residue(new_id, old_res.resname, '') for atom in old_res: new_res.add(atom) pdb[model.id][chain_id].detach_child(old_res.id) pdb[model.id][chain_id].add(new_res) # sort child list pdb[model.id][chain_id].child_list.sort(key=lambda x: x.id[1]) return pdb
def makeGly(segID, N, CA, C, O, geo): '''Creates a Glycine residue''' ##Create Residue Data Structure res= Residue((' ', segID, ' '), "GLY", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) return res
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 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 makeGly(segID, N, CA, C, O, geo): '''Creates a Glycine residue''' ##Create Residue Data Structure res= Residue((' ', segID, ' '), "GLY", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) ##print(res) return res
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 test_pdbio_write_custom_residue(self): """Write a chainless residue using PDBIO""" io = 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) # Write full model to temp file io.set_structure(res) filenumber, filename = tempfile.mkstemp() os.close(filenumber) try: 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 compare_interactions(interaction1, interaction2, similar_sequences): """ This function takes two structures with two chains each one and a dictionary with chains as keys and keys as values relating them if they have more than a 95% of similarity and returns 1 if the two interactions are different and 0 if they are the same interaction. :param interaction1: one of the interactions you want to compare. :param interaction2: the other interaction you want to compare. :param similar_sequences: dictionary which relates sequences by similiarity. :return: returns true if they are the same and false if they ar enot. """ homodimer = False # This variable will be true if the chains in the interaction are more than a 95% similar chain_list1 = [] chain_list2 = [] for chain in interaction1: chain_id = similar_sequences[chain].get_id( ) # To identify similar chains in the superimposition we name them # as the main chain of its type if chain_id in [x.get_id() for x in chain_list1]: homodimer = True # if the second chain is similar to the first we change homodimer to true and chain_list1.append(Chain.Chain(chain_id)) res_counter = 0 for residue in chain: if 'CA' in [ x.get_id() for x in residue.get_atoms() ]: # for every residue in chain that have an alpha carbon atom = residue['CA'] # storing the alpha carbon chain_list1[-1].add( Residue.Residue( ('', res_counter, ''), residue.get_resname(), residue.get_segid())) # adding the # residue chain_list1[-1][('', res_counter, '')].add( atom.copy()) # adding a copy of the atom to avoid # modifiying the original ones res_counter += 1 if 'P' in [ x.get_id() for x in residue.get_atoms() ]: # for every residue in chain that have an alpha carbon atom = residue['P'] # storing the alpha carbon chain_list1[-1].add( Residue.Residue( ('', res_counter, ''), residue.get_resname(), residue.get_segid())) # adding the # residue chain_list1[-1][('', res_counter, '')].add( atom.copy()) # adding a copy of the atom to avoid # modifiying the original ones res_counter += 1 for chain in interaction2: # Doing the same for the structure 2 chain_id = similar_sequences[chain].get_id() chain_list2.append(Chain.Chain(chain_id)) res_counter = 0 for residue in chain: if 'CA' in [x.get_id() for x in residue.get_atoms()]: atom = residue['CA'] chain_list2[-1].add( Residue.Residue( ('', res_counter, ''), residue.get_resname(), residue.get_segid())) chain_list2[-1][('', res_counter, '')].add(atom.copy()) res_counter += 1 if 'P' in [x.get_id() for x in residue.get_atoms()]: atom = residue['P'] chain_list2[-1].add( Residue.Residue( ('', res_counter, ''), residue.get_resname(), residue.get_segid())) chain_list2[-1][('', res_counter, '')].add(atom.copy()) res_counter += 1 if homodimer: # if the chain is an homodimer we remove different residues from chains in the same interaction for int in [chain_list1, chain_list2]: trim_to_superimpose(int[0], int[1]) for chain1 in chain_list1: # Removing different residues betwen similar chains in different interactions for chain2 in chain_list2: if chain1.get_id() != chain2.get_id(): continue trim_to_superimpose(chain1, chain2) result = str_comparison_superimpose(chain_list1, chain_list2) return result
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 makeTyr(segID, N, CA, C, O, geo): '''Creates a Tyrosine 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 CD1_CE1_length = geo.CD1_CE1_length CG_CD1_CE1_angle = geo.CG_CD1_CE1_angle CB_CG_CD1_CE1_diangle = geo.CB_CG_CD1_CE1_diangle CD2_CE2_length = geo.CD2_CE2_length CG_CD2_CE2_angle = geo.CG_CD2_CE2_angle CB_CG_CD2_CE2_diangle = geo.CB_CG_CD2_CE2_diangle CE1_CZ_length = geo.CE1_CZ_length CD1_CE1_CZ_angle = geo.CD1_CE1_CZ_angle CG_CD1_CE1_CZ_diangle = geo.CG_CD1_CE1_CZ_diangle CZ_OH_length = geo.CZ_OH_length CE1_CZ_OH_angle = geo.CE1_CZ_OH_angle CD1_CE1_CZ_OH_diangle = geo.CD1_CE1_CZ_OH_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_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") carbon_e1 = calculateCoordinates(CB, CG, CD1, CD1_CE1_length, CG_CD1_CE1_angle, CB_CG_CD1_CE1_diangle) CE1 = Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C") carbon_e2 = calculateCoordinates(CB, CG, CD2, CD2_CE2_length, CG_CD2_CE2_angle, CB_CG_CD2_CE2_diangle) CE2 = Atom("CE2", carbon_e2, 0.0, 1.0, " ", " CE2", 0, "C") carbon_z = calculateCoordinates(CG, CD1, CE1, CE1_CZ_length, CD1_CE1_CZ_angle, CG_CD1_CE1_CZ_diangle) CZ = Atom("CZ", carbon_z, 0.0, 1.0, " ", " CZ", 0, "C") oxygen_h = calculateCoordinates(CD1, CE1, CZ, CZ_OH_length, CE1_CZ_OH_angle, CD1_CE1_CZ_OH_diangle) OH = Atom("OH", oxygen_h, 0.0, 1.0, " ", " OH", 0, "O") ##Create Residue Data S res = Residue((' ', segID, ' '), "TYR", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CE1) res.add(CD2) res.add(CE2) res.add(CZ) res.add(OH) return res
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 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 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 makePhe(segID, N, CA, C, O, geo): '''Creates a Phenylalanine 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 CD1_CE1_length=geo.CD1_CE1_length CG_CD1_CE1_angle=geo.CG_CD1_CE1_angle CB_CG_CD1_CE1_diangle=geo.CB_CG_CD1_CE1_diangle CD2_CE2_length=geo.CD2_CE2_length CG_CD2_CE2_angle=geo.CG_CD2_CE2_angle CB_CG_CD2_CE2_diangle=geo.CB_CG_CD2_CE2_diangle CE1_CZ_length=geo.CE1_CZ_length CD1_CE1_CZ_angle=geo.CD1_CE1_CZ_angle CG_CD1_CE1_CZ_diangle=geo.CG_CD1_CE1_CZ_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_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") carbon_e1= calculateCoordinates(CB, CG, CD1, CD1_CE1_length, CG_CD1_CE1_angle, CB_CG_CD1_CE1_diangle) CE1= Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C") carbon_e2= calculateCoordinates(CB, CG, CD2, CD2_CE2_length, CG_CD2_CE2_angle, CB_CG_CD2_CE2_diangle) CE2= Atom("CE2", carbon_e2, 0.0, 1.0, " ", " CE2", 0, "C") carbon_z= calculateCoordinates(CG, CD1, CE1, CE1_CZ_length, CD1_CE1_CZ_angle, CG_CD1_CE1_CZ_diangle) CZ= Atom("CZ", carbon_z, 0.0, 1.0, " ", " CZ", 0, "C") ##Create Residue Data Structures res= Residue((' ', segID, ' '), "PHE", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CE1) res.add(CD2) res.add(CE2) res.add(CZ) 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
aligned_rotamer_resname]: distance = aligned_rotamer[ coord_atom] - cobalt if np.abs(distance - coord_radius ) < coord_tolerance: # Check for steric constraints middles of larger chains if not evaluate_rotamer( cobalt, aligned_rotamer, coord_atom): break aligned_rotamer_copy = Residue( (current_res_id, runtime_residue_id, current_chain), res_name_dict[ aligned_rotamer_resname], current_res_id) runtime_residue_id += 2 for atom in aligned_rotamer: temp_atom = atom.copy() temp_atom.set_parent( aligned_rotamer_copy) aligned_rotamer_copy.add( temp_atom) identical = False for res in candidates: # Check for duplication source? if return_rmsd(
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 makeTrp(segID, N, CA, C, O, geo): '''Creates a Tryptophan 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 CD1_NE1_length=geo.CD1_NE1_length CG_CD1_NE1_angle=geo.CG_CD1_NE1_angle CB_CG_CD1_NE1_diangle=geo.CB_CG_CD1_NE1_diangle CD2_CE2_length=geo.CD2_CE2_length CG_CD2_CE2_angle=geo.CG_CD2_CE2_angle CB_CG_CD2_CE2_diangle=geo.CB_CG_CD2_CE2_diangle CD2_CE3_length=geo.CD2_CE3_length CG_CD2_CE3_angle=geo.CG_CD2_CE3_angle CB_CG_CD2_CE3_diangle=geo.CB_CG_CD2_CE3_diangle CE2_CZ2_length=geo.CE2_CZ2_length CD2_CE2_CZ2_angle=geo.CD2_CE2_CZ2_angle CG_CD2_CE2_CZ2_diangle=geo.CG_CD2_CE2_CZ2_diangle CE3_CZ3_length=geo.CE3_CZ3_length CD2_CE3_CZ3_angle=geo.CD2_CE3_CZ3_angle CG_CD2_CE3_CZ3_diangle=geo.CG_CD2_CE3_CZ3_diangle CZ2_CH2_length=geo.CZ2_CH2_length CE2_CZ2_CH2_angle=geo.CE2_CZ2_CH2_angle CD2_CE2_CZ2_CH2_diangle=geo.CD2_CE2_CZ2_CH2_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_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") nitrogen_e1= calculateCoordinates(CB, CG, CD1, CD1_NE1_length, CG_CD1_NE1_angle, CB_CG_CD1_NE1_diangle) NE1= Atom("NE1", nitrogen_e1, 0.0, 1.0, " ", " NE1", 0, "N") carbon_e2= calculateCoordinates(CB, CG, CD2, CD2_CE2_length, CG_CD2_CE2_angle, CB_CG_CD2_CE2_diangle) CE2= Atom("CE2", carbon_e2, 0.0, 1.0, " ", " CE2", 0, "C") carbon_e3= calculateCoordinates(CB, CG, CD2, CD2_CE3_length, CG_CD2_CE3_angle, CB_CG_CD2_CE3_diangle) CE3= Atom("CE3", carbon_e3, 0.0, 1.0, " ", " CE3", 0, "C") carbon_z2= calculateCoordinates(CG, CD2, CE2, CE2_CZ2_length, CD2_CE2_CZ2_angle, CG_CD2_CE2_CZ2_diangle) CZ2= Atom("CZ2", carbon_z2, 0.0, 1.0, " ", " CZ2", 0, "C") carbon_z3= calculateCoordinates(CG, CD2, CE3, CE3_CZ3_length, CD2_CE3_CZ3_angle, CG_CD2_CE3_CZ3_diangle) CZ3= Atom("CZ3", carbon_z3, 0.0, 1.0, " ", " CZ3", 0, "C") carbon_h2= calculateCoordinates(CD2, CE2, CZ2, CZ2_CH2_length, CE2_CZ2_CH2_angle, CD2_CE2_CZ2_CH2_diangle) CH2= Atom("CH2", carbon_h2, 0.0, 1.0, " ", " CH2", 0, "C") ##Create Residue DS res= Residue((' ', segID, ' '), "TRP", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CD2) res.add(NE1) res.add(CE2) res.add(CE3) res.add(CZ2) res.add(CZ3) res.add(CH2) return res
def makeTyr(segID, N, CA, C, O, geo): '''Creates a Tyrosine 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 CD1_CE1_length=geo.CD1_CE1_length CG_CD1_CE1_angle=geo.CG_CD1_CE1_angle CB_CG_CD1_CE1_diangle=geo.CB_CG_CD1_CE1_diangle CD2_CE2_length=geo.CD2_CE2_length CG_CD2_CE2_angle=geo.CG_CD2_CE2_angle CB_CG_CD2_CE2_diangle=geo.CB_CG_CD2_CE2_diangle CE1_CZ_length=geo.CE1_CZ_length CD1_CE1_CZ_angle=geo.CD1_CE1_CZ_angle CG_CD1_CE1_CZ_diangle=geo.CG_CD1_CE1_CZ_diangle CZ_OH_length=geo.CZ_OH_length CE1_CZ_OH_angle=geo.CE1_CZ_OH_angle CD1_CE1_CZ_OH_diangle=geo.CD1_CE1_CZ_OH_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_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") carbon_e1= calculateCoordinates(CB, CG, CD1, CD1_CE1_length, CG_CD1_CE1_angle, CB_CG_CD1_CE1_diangle) CE1= Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C") carbon_e2= calculateCoordinates(CB, CG, CD2, CD2_CE2_length, CG_CD2_CE2_angle, CB_CG_CD2_CE2_diangle) CE2= Atom("CE2", carbon_e2, 0.0, 1.0, " ", " CE2", 0, "C") carbon_z= calculateCoordinates(CG, CD1, CE1, CE1_CZ_length, CD1_CE1_CZ_angle, CG_CD1_CE1_CZ_diangle) CZ= Atom("CZ", carbon_z, 0.0, 1.0, " ", " CZ", 0, "C") oxygen_h= calculateCoordinates(CD1, CE1, CZ, CZ_OH_length, CE1_CZ_OH_angle, CD1_CE1_CZ_OH_diangle) OH= Atom("OH", oxygen_h, 0.0, 1.0, " ", " OH", 0, "O") ##Create Residue Data S res= Residue((' ', segID, ' '), "TYR", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CE1) res.add(CD2) res.add(CE2) res.add(CZ) res.add(OH) 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 makeArg(segID, N, CA, C, O, geo): '''Creates an Arginie 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_NE_length = geo.CD_NE_length CG_CD_NE_angle = geo.CG_CD_NE_angle CB_CG_CD_NE_diangle = geo.CB_CG_CD_NE_diangle NE_CZ_length = geo.NE_CZ_length CD_NE_CZ_angle = geo.CD_NE_CZ_angle CG_CD_NE_CZ_diangle = geo.CG_CD_NE_CZ_diangle CZ_NH1_length = geo.CZ_NH1_length NE_CZ_NH1_angle = geo.NE_CZ_NH1_angle CD_NE_CZ_NH1_diangle = geo.CD_NE_CZ_NH1_diangle CZ_NH2_length = geo.CZ_NH2_length NE_CZ_NH2_angle = geo.NE_CZ_NH2_angle CD_NE_CZ_NH2_diangle = geo.CD_NE_CZ_NH2_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") nitrogen_e = calculateCoordinates(CB, CG, CD, CD_NE_length, CG_CD_NE_angle, CB_CG_CD_NE_diangle) NE = Atom("NE", nitrogen_e, 0.0, 1.0, " ", " NE", 0, "N") carbon_z = calculateCoordinates(CG, CD, NE, NE_CZ_length, CD_NE_CZ_angle, CG_CD_NE_CZ_diangle) CZ = Atom("CZ", carbon_z, 0.0, 1.0, " ", " CZ", 0, "C") nitrogen_h1 = calculateCoordinates(CD, NE, CZ, CZ_NH1_length, NE_CZ_NH1_angle, CD_NE_CZ_NH1_diangle) NH1 = Atom("NH1", nitrogen_h1, 0.0, 1.0, " ", " NH1", 0, "N") nitrogen_h2 = calculateCoordinates(CD, NE, CZ, CZ_NH2_length, NE_CZ_NH2_angle, CD_NE_CZ_NH2_diangle) NH2 = Atom("NH2", nitrogen_h2, 0.0, 1.0, " ", " NH2", 0, "N") ##Create Residue Data Structure res = Residue((' ', segID, ' '), "ARG", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD) res.add(NE) res.add(CZ) res.add(NH1) res.add(NH2) 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 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 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 makeArg(segID, N, CA, C, O, geo): '''Creates an Arginie 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_NE_length=geo.CD_NE_length CG_CD_NE_angle=geo.CG_CD_NE_angle CB_CG_CD_NE_diangle=geo.CB_CG_CD_NE_diangle NE_CZ_length=geo.NE_CZ_length CD_NE_CZ_angle=geo.CD_NE_CZ_angle CG_CD_NE_CZ_diangle=geo.CG_CD_NE_CZ_diangle CZ_NH1_length=geo.CZ_NH1_length NE_CZ_NH1_angle=geo.NE_CZ_NH1_angle CD_NE_CZ_NH1_diangle=geo.CD_NE_CZ_NH1_diangle CZ_NH2_length=geo.CZ_NH2_length NE_CZ_NH2_angle=geo.NE_CZ_NH2_angle CD_NE_CZ_NH2_diangle=geo.CD_NE_CZ_NH2_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") nitrogen_e= calculateCoordinates(CB, CG, CD, CD_NE_length, CG_CD_NE_angle, CB_CG_CD_NE_diangle) NE= Atom("NE", nitrogen_e, 0.0, 1.0, " ", " NE", 0, "N") carbon_z= calculateCoordinates(CG, CD, NE, NE_CZ_length, CD_NE_CZ_angle, CG_CD_NE_CZ_diangle) CZ= Atom("CZ", carbon_z, 0.0, 1.0, " ", " CZ", 0, "C") nitrogen_h1= calculateCoordinates(CD, NE, CZ, CZ_NH1_length, NE_CZ_NH1_angle, CD_NE_CZ_NH1_diangle) NH1= Atom("NH1", nitrogen_h1, 0.0, 1.0, " ", " NH1", 0, "N") nitrogen_h2= calculateCoordinates(CD, NE, CZ, CZ_NH2_length, NE_CZ_NH2_angle, CD_NE_CZ_NH2_diangle) NH2= Atom("NH2", nitrogen_h2, 0.0, 1.0, " ", " NH2", 0, "N") ##Create Residue Data Structure res= Residue((' ', segID, ' '), "ARG", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD) res.add(NE) res.add(CZ) res.add(NH1) res.add(NH2) 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 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 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 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 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 build_octahedron(list_res, co, coords): len_max = 0 temp_candidates = [] for res_origin in list_res: for atom_origin_name in coord_name_dict[res_rev_name_dict[ res_origin.get_resname()]]: atom_origin = res_origin[atom_origin_name] co_dist = atom_origin - co if np.abs(co_dist - coord_radius) > coord_tolerance: continue set_edges = [co, atom_origin] while add_edge(90, list_res, set_edges): pass set_edges.remove(co) invalid = False for set_other in temp_candidates: if invalid: break same = True for atom in set_edges: for atom_other in set_other[1]: if atom.get_id() == atom_other.get_id(): if atom.get_parent().get_resname( ) == atom_other.get_parent().get_resname(): if atom.get_parent().get_id( )[0] == atom_other.get_parent().get_id()[0]: if atom - atom_other != 0: same = False break if same: invalid = True if invalid: continue histidines = [] for a in set_edges: a_parent = a.get_parent() if a_parent.get_resname() == "HIS": if a_parent not in histidines: histidines.append(a_parent) if len(set_edges) > len_max: len_max = len(set_edges) if not search_for_HIS_by_keeping_all or len(histidines) == 0: del temp_candidates[:] temp_candidates.append( [co, set_edges, len_max, len(histidines)]) elif len(set_edges) == len_max: temp_candidates.append( [co, set_edges, len_max, len(histidines)]) for candidate in temp_candidates: if len(candidate[1]) > 1: invalid = True # Check for structures coming from the same chain for a1 in candidate[1]: for a2 in candidate[1]: if a1 != a2: if a1.get_parent().get_full_id( )[0][2] != a2.get_parent().get_full_id()[0][2]: invalid = False if invalid: print("Skipping candidate set (O, {}):".format( len(candidate[1]))) for a in candidate[1]: print(a.get_parent().get_full_id()) continue if len(candidate[1]) > 2: water_id = 3000 positions = [] v_co = to_vector(co.get_coord()) for a in candidate[1]: positions.append(to_vector(a.get_coord()) - v_co) a1 = positions[0] a2 = 0 for i in range(1, len(positions)): if np.abs(a1.angle(positions[i]) * 180 / np.pi - 90) < 15: a2 = positions[i] break a3 = v_co - a1 a4 = v_co - a2 a5 = v_co + cross(a1, a2).normalized().right_multiply(coord_radius) a6 = v_co - cross(a1, a2).normalized().right_multiply(coord_radius) water_positions = [a3, a4, a5, a6] for wt_p in water_positions: empty = True for p in positions: if dist(wt_p, v_co + p) < 1: empty = False if empty: water_residue = Residue((" ", water_id, " "), "HOH", " ") water = Atom("CA", wt_p, 0.0, 1, " ", "CA", water_id, "SR") water.set_parent(water_residue) water_residue.add(water) water_id += 1 candidate[1].append(water) save_candidate(candidate[0], candidate[1], candidate[2], candidate[3], "O", coords) elif len(candidate[1]) == 2: water_id = 3500 positions = [] v_co = to_vector(co.get_coord()) for a in candidate[1]: positions.append(to_vector(a.get_coord()) - v_co) if np.abs(positions[0].angle(positions[1]) * 180 / np.pi - 90) < 15: a1 = positions[0] a2 = positions[1] a3 = v_co - a1 a4 = v_co - a2 a5 = v_co + cross(a1, a2).normalized().right_multiply(coord_radius) a6 = v_co - cross(a1, a2).normalized().right_multiply(coord_radius) water_residue = Residue((" ", water_id, " "), "HOH", " ") water = Atom("CA", a3, 0.0, 1, " ", "CA", water_id, "SR") water.set_parent(water_residue) water_residue.add(water) water_id += 1 candidate[1].append(water) water_residue = Residue((" ", water_id, " "), "HOH", " ") water = Atom("CA", a4, 0.0, 1, " ", "CA", water_id, "SR") water.set_parent(water_residue) water_residue.add(water) water_id += 1 candidate[1].append(water) water_residue = Residue((" ", water_id, " "), "HOH", " ") water = Atom("CA", a5, 0.0, 1, " ", "CA", water_id, "SR") water.set_parent(water_residue) water_residue.add(water) water_id += 1 candidate[1].append(water) water_residue = Residue((" ", water_id, " "), "HOH", " ") water = Atom("CA", a6, 0.0, 1, " ", "CA", water_id, "SR") water.set_parent(water_residue) water_residue.add(water) water_id += 1 candidate[1].append(water) save_candidate(candidate[0], candidate[1], candidate[2], candidate[3], "O", coords)
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 build_tetrahedron(list_res, co, coords): # Optimize len_max = 0 temp_candidates = [] for res_origin in list_res: for atom_origin_name in coord_name_dict[res_rev_name_dict[ res_origin.get_resname()]]: atom_origin = res_origin[atom_origin_name] co_dist = atom_origin - co if np.abs(co_dist - coord_radius) > coord_tolerance: continue set_edges = [co, atom_origin] while add_edge(120, list_res, set_edges): pass set_edges.remove(co) invalid = False for set_other in temp_candidates: if invalid: break same = True for atom in set_edges: for atom_other in set_other[1]: if atom.get_id() == atom_other.get_id(): if atom.get_parent().get_resname( ) == atom_other.get_parent().get_resname(): if atom.get_parent().get_id( )[0] == atom_other.get_parent().get_id()[0]: if atom - atom_other != 0: same = False break if same: invalid = True if invalid: continue histidines = [] for a in set_edges: a_parent = a.get_parent() if a_parent.get_resname() == "HIS": if a_parent not in histidines: histidines.append(a_parent) if len(set_edges) > len_max: len_max = len(set_edges) if not search_for_HIS_by_keeping_all or len(histidines) == 0: del temp_candidates[:] temp_candidates.append( [co, set_edges, len_max, len(histidines)]) elif len(set_edges) == len_max: temp_candidates.append( [co, set_edges, len_max, len(histidines)] ) # SHOULD MAYBE ALSO BE UNDER CONTROL OF "HIS" SETTING? OR IMPLEMENT A FAST SEARCH? OR CLASH TOGGLE for candidate in temp_candidates: if len(candidate[1]) > 1: invalid = True # Check for structures coming from the same chain for a1 in candidate[1]: for a2 in candidate[1]: if a1 != a2: if a1.get_parent().get_full_id( )[0][2] != a2.get_parent().get_full_id()[0][2]: invalid = False if invalid: print("Skipping candidate set (T):") for a in candidate[1]: print(a.get_parent().get_full_id()) continue water_id = 4000 positions = [] v_co = to_vector(co.get_coord()) for a in candidate[1]: positions.append(to_vector(a.get_coord()) - v_co) a1 = positions[0] a2 = positions[1] r = rotaxis(np.pi * 2 / 3, a1) a3 = v_co + a2.left_multiply(r) r = rotaxis(-np.pi * 2 / 3, a1) a4 = v_co + a2.left_multiply(r) water_positions = [a3, a4] for wt_p in water_positions: empty = True for p in positions: if dist(wt_p, v_co + p) < 1: empty = False if empty: water_residue = Residue((" ", water_id, " "), "HOH", " ") water = Atom("CA", wt_p, 0.0, 1, " ", "CA", water_id, "SR") water.set_parent(water_residue) water_residue.add(water) water_id += 1 candidate[1].append(water) save_candidate(candidate[0], candidate[1], candidate[2], candidate[3], "T", coords)
def makePhe(segID, N, CA, C, O, geo): '''Creates a Phenylalanine 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 CD1_CE1_length = geo.CD1_CE1_length CG_CD1_CE1_angle = geo.CG_CD1_CE1_angle CB_CG_CD1_CE1_diangle = geo.CB_CG_CD1_CE1_diangle CD2_CE2_length = geo.CD2_CE2_length CG_CD2_CE2_angle = geo.CG_CD2_CE2_angle CB_CG_CD2_CE2_diangle = geo.CB_CG_CD2_CE2_diangle CE1_CZ_length = geo.CE1_CZ_length CD1_CE1_CZ_angle = geo.CD1_CE1_CZ_angle CG_CD1_CE1_CZ_diangle = geo.CG_CD1_CE1_CZ_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_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") carbon_e1 = calculateCoordinates(CB, CG, CD1, CD1_CE1_length, CG_CD1_CE1_angle, CB_CG_CD1_CE1_diangle) CE1 = Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C") carbon_e2 = calculateCoordinates(CB, CG, CD2, CD2_CE2_length, CG_CD2_CE2_angle, CB_CG_CD2_CE2_diangle) CE2 = Atom("CE2", carbon_e2, 0.0, 1.0, " ", " CE2", 0, "C") carbon_z = calculateCoordinates(CG, CD1, CE1, CE1_CZ_length, CD1_CE1_CZ_angle, CG_CD1_CE1_CZ_diangle) CZ = Atom("CZ", carbon_z, 0.0, 1.0, " ", " CZ", 0, "C") ##Create Residue Data Structures res = Residue((' ', segID, ' '), "PHE", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CE1) res.add(CD2) res.add(CE2) res.add(CZ) return res
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 makeTrp(segID, N, CA, C, O, geo): '''Creates a Tryptophan 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 CD1_NE1_length = geo.CD1_NE1_length CG_CD1_NE1_angle = geo.CG_CD1_NE1_angle CB_CG_CD1_NE1_diangle = geo.CB_CG_CD1_NE1_diangle CD2_CE2_length = geo.CD2_CE2_length CG_CD2_CE2_angle = geo.CG_CD2_CE2_angle CB_CG_CD2_CE2_diangle = geo.CB_CG_CD2_CE2_diangle CD2_CE3_length = geo.CD2_CE3_length CG_CD2_CE3_angle = geo.CG_CD2_CE3_angle CB_CG_CD2_CE3_diangle = geo.CB_CG_CD2_CE3_diangle CE2_CZ2_length = geo.CE2_CZ2_length CD2_CE2_CZ2_angle = geo.CD2_CE2_CZ2_angle CG_CD2_CE2_CZ2_diangle = geo.CG_CD2_CE2_CZ2_diangle CE3_CZ3_length = geo.CE3_CZ3_length CD2_CE3_CZ3_angle = geo.CD2_CE3_CZ3_angle CG_CD2_CE3_CZ3_diangle = geo.CG_CD2_CE3_CZ3_diangle CZ2_CH2_length = geo.CZ2_CH2_length CE2_CZ2_CH2_angle = geo.CE2_CZ2_CH2_angle CD2_CE2_CZ2_CH2_diangle = geo.CD2_CE2_CZ2_CH2_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_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") nitrogen_e1 = calculateCoordinates(CB, CG, CD1, CD1_NE1_length, CG_CD1_NE1_angle, CB_CG_CD1_NE1_diangle) NE1 = Atom("NE1", nitrogen_e1, 0.0, 1.0, " ", " NE1", 0, "N") carbon_e2 = calculateCoordinates(CB, CG, CD2, CD2_CE2_length, CG_CD2_CE2_angle, CB_CG_CD2_CE2_diangle) CE2 = Atom("CE2", carbon_e2, 0.0, 1.0, " ", " CE2", 0, "C") carbon_e3 = calculateCoordinates(CB, CG, CD2, CD2_CE3_length, CG_CD2_CE3_angle, CB_CG_CD2_CE3_diangle) CE3 = Atom("CE3", carbon_e3, 0.0, 1.0, " ", " CE3", 0, "C") carbon_z2 = calculateCoordinates(CG, CD2, CE2, CE2_CZ2_length, CD2_CE2_CZ2_angle, CG_CD2_CE2_CZ2_diangle) CZ2 = Atom("CZ2", carbon_z2, 0.0, 1.0, " ", " CZ2", 0, "C") carbon_z3 = calculateCoordinates(CG, CD2, CE3, CE3_CZ3_length, CD2_CE3_CZ3_angle, CG_CD2_CE3_CZ3_diangle) CZ3 = Atom("CZ3", carbon_z3, 0.0, 1.0, " ", " CZ3", 0, "C") carbon_h2 = calculateCoordinates(CD2, CE2, CZ2, CZ2_CH2_length, CE2_CZ2_CH2_angle, CD2_CE2_CZ2_CH2_diangle) CH2 = Atom("CH2", carbon_h2, 0.0, 1.0, " ", " CH2", 0, "C") ##Create Residue DS res = Residue((' ', segID, ' '), "TRP", ' ') res.add(N) res.add(CA) res.add(C) res.add(O) res.add(CB) res.add(CG) res.add(CD1) res.add(CD2) res.add(NE1) res.add(CE2) res.add(CE3) res.add(CZ2) res.add(CZ3) res.add(CH2) 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