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
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)
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)
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)