コード例 #1
0
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)
コード例 #2
0
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
コード例 #3
0
ファイル: completion.py プロジェクト: qrefine/qrefine
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
コード例 #4
0
ファイル: completion.py プロジェクト: qrefine/qrefine
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