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