import numpy as np

def BP(G, sino, nx):
    G1=np.transpose(G)
    im=G1.dot(sino.ravel()).reshape(nx,nx)
    return im

def FBP(G,sino, nx, na):
    sinofft=np.fft.fft(sino)
    N2=sino.shape[1]/2
    filt=np.arange(0,sino.shape[1],dtype=np.float)
    filt-=N2
    filt=np.abs(filt)
    filt=-(filt-N2)
    f2d = np.outer(np.ones(na),filt)
    sinofft = sinofft * f2d
    sino1=np.fft.ifft(sinofft)
    return BP(G,sino1,nx)