Esempio n. 1
0
File: util.py Progetto: xut006/aitom
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
Esempio n. 2
0
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
Esempio n. 3
0
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}
Esempio n. 4
0
File: util.py Progetto: xut006/aitom
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)