Esempio n. 1
0
def finiteTranslateOffset(fareyVector, N, P, Q):
    '''
    Translate offset required when mapping Farey vectors to finite angles
    Returns translate offset and perp Boolean flag pair
    Wraps function from Farey module
    '''
    return farey.finiteTranslateOffset(fareyVector, N, P, Q)
Esempio n. 2
0
def finiteProjection(projection, angle, P, Q, N, center=False):
    '''
    Convert a Mojette projection taken at angle into a finite (FRT) projection.
    '''
    dyadic = True
    if N % 2 == 1:  # if odd, assume prime
        dyadic = False
    shiftQ = int(N / 2.0 + 0.5) - int(Q / 2.0 + 0.5)
    shiftP = int(N / 2.0 + 0.5) - int(P / 2.0 + 0.5)

    finiteProj = np.zeros(N)
    p, q = farey.get_pq(angle)
    m, inv = farey.toFinite(angle, N)
    #    print "p:", p, "q:", q, "m:", m, "inv:", inv
    translateOffset, perp = farey.finiteTranslateOffset(angle, N, P, Q)
    angleSign = p * q

    if dyadic:
        for translate, bin in enumerate(projection):
            if angleSign >= 0 and perp:  #Reverse for perp
                translateMojette = translateOffset - translate
            else:
                translateMojette = translate - translateOffset
            translateFinite = (inv * translateMojette) % N
            if center:
                translateFinite = (translateFinite + shiftQ + m *
                                   (N - shiftP)) % N
            finiteProj[translateFinite] += bin
    else:
        for translate, bin in enumerate(projection):
            if angleSign >= 0 and perp:  #Reverse for perp
                translateMojette = int(translateOffset) - int(translate)
            else:
                translateMojette = int(translate) - int(translateOffset)

            if translateMojette < 0:
                translateFinite = (N - (inv * abs(translateMojette)) % N) % N
            else:
                translateFinite = (inv * translateMojette
                                   ) % N  #has issues in C, may need checking
            if center:
                translateFinite = (translateFinite + shiftQ + m *
                                   (N - shiftP)) % N
            finiteProj[translateFinite] += bin

    return finiteProj
Esempio n. 3
0
def angleSetSliceCoordinates(angles, P, Q, N, center=False):
    '''
    Compute the 2D coordinates of each translate (in NxN DFT space) of every projection having angle in angles.
    Returns a list of u, v coordinate arrays [[u_0[...],v_0[...]], [u_1[...],v_1[...]], ...] per angle
    '''
    coords = []
    translateOffset = 0
    translateMojette = 0
    translateFinite = 0
    m = 0

    offset = 0.0
    if center:
        offset = N / 2.0

    for index, angle in enumerate(angles):
        u = []
        v = []
        coordinateList = []
        p = int(angle.imag)
        q = int(angle.real)
        angleSign = p * q

        m, inv = farey.toFinite(angle, N)
        translateOffset, perp = farey.finiteTranslateOffset(angle, N)
        B = projectionLength(angle, P, Q)

        for translate in range(0, B):
            if angleSign >= 0 and perp:  #Reverse for perp
                translateMojette = translateOffset - translate
            else:
                translateMojette = translate - translateOffset

            translateFinite = (inv * translateMojette
                               ) % N  #has issues in C, may need checking
            #            frtSpace[m][translateFinite] += bin
            u.append((translateFinite + offset) % N)
            v.append((m * translateFinite + offset) % N)

        coordinateList.append(u)
        coordinateList.append(v)
        coords.append(coordinateList)

    return coords