Exemple #1
0
def shift3d(data, vt=0.0, ht=0.0, crop=True, _map=map):
    '''
    Shift 2-D all images

    vt: float or sequence
    ht: float or sequence
    '''
    if not isvector(vt):
        vt_val = vt
        vt = np.empty(data.shape[0], dtype=data.dtype)
        vt.fill(vt_val)

    if not isvector(ht):
        ht_val = ht
        ht = np.empty(data.shape[0], dtype=data.dtype)
        ht.fill(ht_val)

    pos = np.vstack((vt, ht)).T
    map_obj = _map(ndshift, data, pos)
    ret = fromiter(map_obj)

    if crop:
        return ret[np.index_exp[:]+crop_index(vt)+crop_index(ht)]
    else:
        return ret
Exemple #2
0
def valign(data, _map=map):
    '''
    data: 3d volume data (0:2pi, top:bottom, left:right)
    '''
    map_obj = _map(corr2d, data, data[1:])
    res = fromiter(map_obj, dtype=data.dtype)
    res = np.cumsum(res.T[0])
    res = -1.0 * np.insert(res, 0, 0)
    return res
Exemple #3
0
def valign2(data, _map=map):
    '''
    intensity sum
    '''
    d = np.sum(np.abs(data), axis=2) # axis 2 is left-right
    map_obj = _map(corr1d, d, d[1:])
    res = fromiter(map_obj, dtype=data.dtype)
    res = np.cumsum(res)
    res = -1.0 * np.insert(res, 0, 0)
    return res
Exemple #4
0
def shift2d(data, t=0.0):
    '''
    t: float or sequence
    '''
    ret = None
    if isvector(t):
        map_obj = map(ndshift, data, t)
        ret = fromiter(map_obj)
    else:
        ret = ndshift(data, (0.0, t))

    return ret
Exemple #5
0
def center(data, bg, _map=map):
    '''
    Deprecated.
    '''
    if len(bg.shape) == 3:
        _bg = np.average(bg, axis=0)
    elif len(bg.shape) == 2:
        _bg = bg
    else:
        raise TypeError('background should be 2d or 3d array')

    map_obj = _map(lambda im: corr2d(_bg, im), data)
    return fromiter(map_obj, dtype=data.dtype)
Exemple #6
0
def power(data, index, _map=map):
    '''
    data:
    index: index_exp. 2d. empty.

    return normalised data
    '''
    # index must be tuple
    if np.prod(data[np.index_exp[:] + index].shape) == 0:
        raise ValueError('Cannot average. array shape')
    map_obj = map(np.average, data[np.index_exp[:] + index])
    iavg = fromiter(map_obj, dtype=data.dtype) # intensity average of each image
    iavg = iavg - np.average(iavg) # distance from all average
    return iavg
Exemple #7
0
def norm_all(data, bg, dk=None, beam_power=None, beam_center=None, crop=True, _map=map):
    '''
    data: 3d
    bg: 2d
    dk: 2d
    beam_power: sequence of intensity values
    beam_center: sequence of [(yt0, xt0), (yt1, xt1) ...]
    '''
    data.flags.writeable = False
    bg.flags.writeable = False
    if dk is not None:
        dk.flags.writeable = False

    normfunc = set_normfunc(bg, dk=dk)
    bp = [None]*data.shape[0] if beam_power is None else beam_power
    bc = [None]*data.shape[0] if beam_center is None else beam_center
    map_obj = _map(normfunc, data, bp, bc)
    res = fromiter(map_obj, dtype=data.dtype)

    if beam_center is not None and crop:
        return res[np.index_exp[:]+crop_index(bc.T[0])+crop_index(bc.T[1])]
    else:
        return res
Exemple #8
0
def recon3d(sinograms, method='fbp', _map=map):
    mapobj = _map(lambda sg: iradon(sg.T, circle=True), sinograms)
    return fromiter(mapobj)