def tilt_mask(size, tilt_ang1, tilt_ang2=None, tilt_axis=1, light_axis=2, sphere_mask=True): """wedge mask defined using tilt angles light axis is the direction of electrons""" assert tilt_axis != light_axis if tilt_ang2 is None: tilt_ang2 = float(N.abs(tilt_ang1)) tilt_ang1 = -tilt_ang2 else: assert tilt_ang1 < 0 assert tilt_ang2 > 0 tilt_ang1 = (tilt_ang1 / 180.0) * N.pi tilt_ang2 = (tilt_ang2 / 180.0) * N.pi g = AIVU.grid_displacement_to_center(size=size, mid_co=IVU.fft_mid_co(siz=size)) plane_axis = set([0, 1, 2]) plane_axis.difference_update([light_axis, tilt_axis]) assert len(plane_axis) == 1 plane_axis = list(plane_axis)[0] x_light = g[light_axis] x_plane = g[plane_axis] m = N.zeros(size, dtype=float) m[N.logical_and(x_light <= (N.tan(tilt_ang1) * x_plane), x_light >= (N.tan(tilt_ang2) * x_plane))] = 1.0 m[N.logical_and(x_light >= (N.tan(tilt_ang1) * x_plane), x_light <= (N.tan(tilt_ang2) * x_plane))] = 1.0 if sphere_mask: m *= MU.sphere_mask(m.shape) return m
def tilt_mask(size, tilt_ang1, tilt_ang2=None, tilt_axis=1, light_axis=2, sphere_mask_bool=True): assert tilt_axis != light_axis if tilt_ang2 is None: tilt_ang2 = float(N.abs(tilt_ang1)) tilt_ang1 = -tilt_ang2 else: assert tilt_ang1 < 0 assert tilt_ang2 > 0 tilt_ang1 = (tilt_ang1 / 180.0) * N.pi tilt_ang2 = (tilt_ang2 / 180.0) * N.pi g = IVU.grid_displacement_to_center(size=size, mid_co=IVU.fft_mid_co(siz=size)) plane_axis = {0, 1, 2} plane_axis.difference_update([light_axis, tilt_axis]) assert len(plane_axis) == 1 plane_axis = list(plane_axis)[0] x_light = g[light_axis] x_plane = g[plane_axis] m = N.zeros(size, dtype=float) m[N.logical_and(x_light <= (N.tan(tilt_ang1) * x_plane), x_light >= (N.tan(tilt_ang2) * x_plane))] = 1.0 m[N.logical_and(x_light >= (N.tan(tilt_ang1) * x_plane), x_light <= (N.tan(tilt_ang2) * x_plane))] = 1.0 if sphere_mask_bool: m *= MU.sphere_mask(m.shape) return m
def model_based_align_help(img_db_path, d, A_k, n, i, k): X = get_image_db(img_db_path) v1 = inv_fourier_transform(X[d['v']]) m1 = X[d['m']] v2 = inv_fourier_transform(A_k) m2 = TMU.sphere_mask([n, n, n]) transforms = fast_align(v1, m1, v2, m2) result = [] for item in transforms: phi = dict() phi['q_rot'] = item['ang'][0] phi['q_tilt'] = item['ang'][1] phi['q_psi'] = item['ang'][2] phi['q_x'] = item['loc'][0] phi['q_y'] = item['loc'][1] phi['q_z'] = item['loc'][2] result.append(phi) return {'i': i, 'k': k, 'transforms':result}
def align_vols_no_mask(v1, v2, L=36): m = MU.sphere_mask(v1.shape) return align_vols(v1=v1, m1=m, v2=v2, m2=m, L=L)