def add_terminal_hydrogens_old( hierarchy, geometry_restraints_manager, terminate_all_N_terminals=False, terminate_all_C_terminals=False, use_capping_hydrogens=False, append_to_end_of_model=False, verbose=False, ): ptr = 0 # belt and braces additional_hydrogens = [] for residue_group, start, end in generate_residue_group_with_start_and_end( hierarchy, geometry_restraints_manager, verbose=verbose, ): if use_capping_hydrogens: conditional_add_cys_hg_to_atom_group(geometry_restraints_manager, residue_group) if start: ptr += 1 assert ptr == 1 if is_n_terminal_residue(residue_group): rc = None else: rc = add_n_terminal_hydrogens_to_residue_group( residue_group, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) if end: ptr -= 1 assert ptr == 0 rc = add_c_terminal_oxygens_to_residue_group( residue_group, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) else: pass print(additional_hydrogens)
def add_terminal_hydrogens_threes( hierarchy, geometry_restraints_manager, terminate_all_N_terminals=False, terminate_all_C_terminals=False, use_capping_hydrogens=False, append_to_end_of_model=False, verbose=False, ): from mmtbx.conformation_dependent_library import generate_protein_threes additional_hydrogens = [] #hierarchy_utils.smart_add_atoms() for three in generate_protein_threes( hierarchy, geometry_restraints_manager, #include_non_linked=False, backbone_only=False, include_linked_via_restraints_manager=True, verbose=verbose, ): # print three #print dir(three) # print geometry_restraints_manager #print dir(geometry_restraints_manager) bond_params_table = geometry_restraints_manager.bond_params_table # print bond_params_table #print dir(bond_params_table) # print 'use_capping_hydrogens',use_capping_hydrogens def get_bonds(): bonds = {} for i, a1 in enumerate(residue_group.atoms()): for j, a2 in enumerate(residue_group.atoms()): if i >= j: continue bond = three.bond_params_table.lookup(a1.i_seq, a2.i_seq) if bond: bonds[(a1.i_seq, a2.i_seq)] = True bonds[(a2.i_seq, a1.i_seq)] = True return bonds if use_capping_hydrogens: for i in range(len(three)): residue_group = three.get_residue_group_from_hierarchy( hierarchy, i) rc = conditional_add_cys_hg_to_atom_group( geometry_restraints_manager, residue_group) #assert not rc, '%s' % rc if three.start: residue_group = three.get_residue_group_from_hierarchy( hierarchy, 0) rc = add_n_terminal_hydrogens_to_residue_group( residue_group, bonds=get_bonds(), use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) if three.end: residue_group = three.get_residue_group_from_hierarchy( hierarchy, 2) rc = add_c_terminal_oxygens_to_residue_group( residue_group, bonds=get_bonds(), use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) return additional_hydrogens
def iterate_using_original( hierarchy, geometry_restraints_manager, original_hierarchy, use_capping_hydrogens=False, append_to_end_of_model=False, ): slots = [] start = 18 assert len(original_hierarchy.models()) == 1 assert len(hierarchy.models()) == 1 for chain in original_hierarchy.chains(): for org in chain.residue_groups(): protein = True for atom_group in org.atom_groups(): if (get_class(atom_group.resname) not in [ "common_amino_acid", "modified_amino_acid", ] and atom_group.resname not in aac.three_letter_l_given_three_letter_d): protein = False break if not protein: slots.append(False) continue org_atom1_quote = org.atoms()[0].quote()[start:] for rg in hierarchy.residue_groups(): if rg.atoms()[0].quote()[start:] == org_atom1_quote: slots.append(rg) break else: slots.append(0) slots.append(None) ptr = 0 additional_hydrogens = [] for i in range(len(slots)): start = False end = False if slots[i]: if i == 0: start = True elif not slots[i - 1]: start = True if i == len(slots) - 1: end = True elif not slots[i + 1]: end = True # does not work for chain ends else: continue rg = slots[i] conditional_add_cys_hg_to_atom_group( geometry_restraints_manager, rg, append_to_end_of_model=append_to_end_of_model) if start: ptr += 1 assert ptr == 1 if hierarchy_utils.is_n_terminal_residue(rg): rc = None else: rc = add_n_terminal_hydrogens_to_residue_group( rg, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) if end: ptr -= 1 assert ptr == 0 rc = add_c_terminal_oxygens_to_residue_group( rg, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) else: pass return additional_hydrogens
def iterate_over_threes( hierarchy, geometry_restraints_manager, use_capping_hydrogens=False, append_to_end_of_model=False, verbose=False, ): atoms = hierarchy.atoms() ### def get_residue_group(residue): for atom in residue.atoms(): atom = atoms[atom.i_seq] break return atom.parent().parent() ### additional_hydrogens = hierarchy_utils.smart_add_atoms() for three in hierarchy_utils.generate_protein_fragments( hierarchy, geometry_restraints_manager, backbone_only=False, use_capping_hydrogens=use_capping_hydrogens, ): if verbose: print(three) if not len(three): continue ptr = 0 assert three.are_linked() if use_capping_hydrogens: for i in range(len(three)): rg = get_residue_group(three[i]) rc = conditional_add_cys_hg_to_atom_group( geometry_restraints_manager, rg, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) else: for i in range(len(three)): rg = get_residue_group(three[i]) conditional_remove_cys_hg_to_atom_group( geometry_restraints_manager, rg, ) # check if N-term residue - FVA n_term_done = False if three[0].resname in [ 'FVA', ]: n_term_done = True ptr += 1 assert ptr == 1, 'ptr (%d) is not 1' % ptr if three.start and not n_term_done: ptr += 1 assert ptr == 1, 'ptr (%d) is not 1' % ptr rg = get_residue_group(three[0]) rc = add_n_terminal_hydrogens_to_residue_group( rg, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) #hierarchy.reset_i_seq_if_necessary() c_term_done = False if three[-1].resname in [ 'ETA', ]: c_term_done = True ptr -= 1 assert ptr == 0, 'ptr (%d) is not 0' % ptr if three.end and not c_term_done: ptr -= 1 assert ptr == 0, 'ptr (%d) is not 0' % ptr rg = get_residue_group(three[-1]) rc = add_c_terminal_oxygens_to_residue_group( rg, use_capping_hydrogens=use_capping_hydrogens, append_to_end_of_model=append_to_end_of_model, ) if rc: additional_hydrogens.append(rc) #hierarchy.reset_i_seq_if_necessary() else: pass return additional_hydrogens