Exemplo n.º 1
0
    def build_futamura_intersection_table(self, solvent_radius):
        outside_barrier = 4.0
        grid_spacing = 4 * solvent_radius
        grid = FutamuraHash(self, outside_barrier, grid_spacing)
        T = grid.T
        block_assignments = grid.atom_block_assignments
        print 'locating intersections'
        # now locate the intersections
        x_table = {}
        radii = {
            'C': solvent_radius + 1.75,
            'O': solvent_radius + 1.4,
            'N': solvent_radius + 1.55,
            'S': solvent_radius + 1.8,
            'P': solvent_radius + 2.0,
            'H': solvent_radius + 1.17,
            'Z': solvent_radius + 3.0
        }
        default_distance = solvent_radius + 1.8

        for atom in self.atoms:
            x_table['%s' % (atom.atom_number)] = []
            r1 = radii.get(atom.atom_type[0], default_distance)
            block = block_assignments['%s' % (atom.atom_number)]
            key_tokens = string.split(block)
            keys = [
                string.atoi(key_tokens[0]),
                string.atoi(key_tokens[1]),
                string.atoi(key_tokens[2])
            ]
            # put 'this' block first, so that intersection table accesses search here first
            for second_atom in T[block]:
                if atom != second_atom:
                    r2 = radii.get(second_atom.atom_type[0], default_distance)
                    if atom.dist(second_atom) <= r1 + r2:
                        x_table['%s' % (atom.atom_number)].append([
                            second_atom.x, second_atom.y, second_atom.z, r2,
                            second_atom.res_number, second_atom.chain_name,
                            second_atom.atom_type
                        ])

            start_array = [0, 0, 0]
            end_array = [0, 0, 0]
            # figure out starts and ends
            counts = [
                grid.volume_count_x, grid.volume_count_y, grid.volume_count_z
            ]
            for ind in [0, 1, 2]:
                if keys[ind] == 0:
                    start_array[ind] = 0
                    end_array[ind] = 2
                elif keys[ind] == counts[ind] - 1:
                    start_array[ind] = keys[ind] - 1
                    end_array[ind] = keys[ind] + 1
                else:
                    start_array[ind] = keys[ind] - 1
                    end_array[ind] = keys[ind] + 2

            for i in range(start_array[0], end_array[0]):
                for j in range(start_array[1], end_array[1]):
                    for k in range(start_array[2], end_array[2]):
                        key2 = '%s %s %s' % (i, j, k)
                        if key2 == block:
                            continue  # did this one earlier
                        if key2 in T.keys():
                            for second_atom in T[key2]:
                                if atom != second_atom:
                                    r2 = radii.get(second_atom.atom_type[0],
                                                   default_distance)
                                    if atom.dist(second_atom) <= r1 + r2:
                                        x_table['%s' %
                                                (atom.atom_number)].append([
                                                    second_atom.x,
                                                    second_atom.y,
                                                    second_atom.z, r2,
                                                    second_atom.res_number,
                                                    second_atom.chain_name,
                                                    second_atom.atom_type
                                                ])
        self.x_table = x_table
Exemplo n.º 2
0
 def assign_core_atom_distances(self, core_cutoff, neighbor_thresh=3, mindist=0.0, maxdist=12.0):
     f_hash = FutamuraHash(self, 0.0, maxdist, 2, core_cutoff, neighbor_thresh)
     atom_list = self.get_core_alpha_carbons(core_cutoff, neighbor_thresh)
     for cp in atom_list:
         cp.data['nearby_cps'] = f_hash.get_atoms_between(cp.atom_number, mindist, maxdist)
Exemplo n.º 3
0
 def assign_core_atom_distances(self, core_cutoff, neighbor_thresh=3, mindist=0.0, maxdist=12.0):
     f_hash = FutamuraHash(self, 0.0, maxdist, 2, core_cutoff, neighbor_thresh)
     atom_list = self.get_core_alpha_carbons(core_cutoff, neighbor_thresh)
     for cp in atom_list:
         cp.data['nearby_cps'] = f_hash.get_atoms_between(cp.atom_number, mindist, maxdist)
Exemplo n.º 4
0
 def assign_atom_distances(self, mindist=0.0, maxdist=12.0):
     f_hash = FutamuraHash(self, 0.0, maxdist, 1)
     atom_list = self.get_central_atom_list()
     for cp in atom_list:
         cp.data['nearby_cps'] = f_hash.get_atoms_between(cp.atom_number, mindist, maxdist)
Exemplo n.º 5
0
 def assign_atom_distances(self, mindist=0.0, maxdist=12.0):
     f_hash = FutamuraHash(self, 0.0, maxdist, 1)
     atom_list = self.get_central_atom_list()
     for cp in atom_list:
         cp.data['nearby_cps'] = f_hash.get_atoms_between(
             cp.atom_number, mindist, maxdist)