Esempio n. 1
0
def return_ahat(y,Q,N,num_remov=None):
    assert len(y.shape)==1
    Q = n.matrix(Q); N = n.matrix(N)
    Ninv = uf.pseudo_inverse(N,num_remov=None) # XXX want to remove dynamically
    info = n.dot(Q.H,n.dot(Ninv,Q))
    M = uf.pseudo_inverse(info,num_remov=num_remov)
    #print Ninv.shape, y.shape
    ahat = uf.vdot(M,uf.vdot(Q.H,uf.vdot(Ninv,y)))
    assert len(ahat.shape)==1
    return ahat 
Esempio n. 2
0
def construct_gs_hist(del_bl=8.,num_bl=10,beam_sig=0.09,fq=0.1):
    save_tag = 'grid_del_bl_{0:.2f}_num_bl_{1}_beam_sig_{2:.2f}_fq_{3:.3f}'.format(del_bl,num_bl,beam_sig,fq)
    save_tag_mc = 'grid_del_bl_{0:.2f}_num_bl_{1}_beam_sig_{2:.2f}_fq_{3}'.format(del_bl,num_bl,beam_sig,fq)
    ys = load_mc_data('{0}/monte_carlo/{1}'.format(data_loc,save_tag_mc))
    print 'ys ',ys.shape
    
    alms_fg = qgea.generate_sky_model_alms(gsm_fits_file,lmax=3)
    alms_fg = alms_fg[:,2]

    baselines,Q,lms = load_Q_file(gh='grid',del_bl=del_bl,num_bl=num_bl,beam_sig=beam_sig,fq=fq,lmax=3)
    N = total_noise_covar(0.1,baselines.shape[0],'{0}/gsm_matrices/gsm_{1}.npz'.format(data_loc,save_tag))
    MQN = return_MQdagNinv(Q,N,num_remov=None)
    print MQN
    ahat00s = n.array([])
    for ii in xrange(ys.shape[1]):
        #_,ahat,_ = qgea.test_recover_alms(ys[:,ii],Q,N,alms_fg,num_remov=None)
        ahat = uf.vdot(MQN,ys[:,ii])
        ahat00s = n.append(n.real(ahat[0]),ahat00s)
    #print ahat00s
    print ahat00s.shape
    _,bins,_ = p.hist(ahat00s,bins=36,normed=True)

    # plot best fit line
    mu,sigma = norm.fit(ahat00s)
    print "mu, sigma = ",mu,', ',sigma
    y_fit = mpl.mlab.normpdf(bins,mu,sigma)
    p.plot(bins, y_fit, 'r--', linewidth=2)

    p.xlabel('ahat_00')
    p.ylabel('Probability')
    p.title(save_tag)
    p.annotate('mu = {0:.2f}\nsigma = {1:.2f}'.format(mu,sigma), xy=(0.05, 0.5), xycoords='axes fraction')
    p.savefig('./figures/monte_carlo/{0}.pdf'.format(save_tag))
    p.clf()
Esempio n. 3
0
 def test_sum(self):
     N = n.identity(8)
     Q = n.identity(8)
     Q[0,3] = 1; Q[3,0] = 1
     a = n.arange(8); a[0] = 10
     y = uf.vdot(Q,a)
     a,ahat,err = qgea.test_recover_alms(y,Q,N,a,num_remov=1) 
     W = qgea.window_fn_matrix(Q,N,num_remov=1)
     Wa = uf.vdot(W,a)
     print 'Wa ',Wa
     print 'ahat ',ahat
     print Wa[0]/Wa[1]
     print a[0]/a[1]
     self.assertAlmostEqual(ahat[0],(a[0]+a[3])/2.)
     self.assertAlmostEqual(ahat[3],(a[0]+a[3])/2.)
     self.assertTrue(n.allclose(Wa,ahat))
Esempio n. 4
0
def compute_element_mult_fqs(bli,blj,amp):
    bix,biy,biz = bli; bjx,bjy,bjz = blj
    rx,ry,rz = crd_array
    rb_grid,fqs_grid = n.meshgrid((bix*rx+biy*ry+biz*rz),fqs)
    Gi = amp*n.exp(-2j*n.pi*fqs_grid*rb_grid)*dOmega
    fqs_grid, rb_grid = n.meshgrid((bjx*rx+bjy*ry+bjz*rz),fqs)
    Gj_star = n.conj(amp*n.exp(-2j*n.pi*fqs_grid*rb_grid))*dOmega
    elements = uf.vdot(Gi*Gj_star,Rsq)
    return elements
Esempio n. 5
0
def compute_element_mult_fqs(bli, blj, amp):
    bix, biy, biz = bli
    bjx, bjy, bjz = blj
    rx, ry, rz = crd_array
    rb_grid, fqs_grid = n.meshgrid((bix * rx + biy * ry + biz * rz), fqs)
    Gi = amp * n.exp(-2j * n.pi * fqs_grid * rb_grid) * dOmega
    fqs_grid, rb_grid = n.meshgrid((bjx * rx + bjy * ry + bjz * rz), fqs)
    Gj_star = n.conj(amp * n.exp(-2j * n.pi * fqs_grid * rb_grid)) * dOmega
    elements = uf.vdot(Gi * Gj_star, Rsq)
    return elements
Esempio n. 6
0
 def test_recover_gs_ratio(self):
     print "GS Ratio"
     Q = n.diag(n.arange(1,9))
     N = n.identity(8)*50
     #N[0,0]=1
     a = n.array([16,4,0,0,0,0,0,0])#n.arange(16,1,-2)
     print 'a ',a 
     n_vec = uf.rand_from_covar(N)
     Qa = uf.vdot(Q,a)
     y = Qa+n_vec
     self.assertTrue(y.shape==(8,))
     a,ahat,err = qgea.test_recover_alms(y,Q,N,a,num_remov=0)        
     W = qgea.window_fn_matrix(Q,N,num_remov=0)
     Wa = uf.vdot(W,a)
     print 'Wa ',Wa
     print 'ahat ',ahat
     print Wa[0]/Wa[1]
     print a[0]/a[1]
     self.assertTrue(n.abs(Wa[0]/Wa[1]-a[0]/a[1])<0.1)    
Esempio n. 7
0
 def test_subtract_noise(self):
     Q = n.diag(n.arange(1,9))
     N = n.identity(8)
     a = n.arange(2,17,2)
     n_vec = uf.rand_from_covar(N)
     Qa = uf.vdot(Q,a)
     y = Qa+n_vec
     a,ahat,err = qgea.test_recover_alms(y,Q,N,a,num_remov=-4) 
     _,nhat,err = qgea.test_recover_alms(n_vec,Q,N,a,num_remov=-4) 
     ahat_better = ahat - nhat
     W = qgea.window_fn_matrix(Q,N,num_remov=-4)
     self.assertTrue(n.allclose(n.dot(W,a),ahat_better))
Esempio n. 8
0
 def test_recover_wind(self):
     print "Window"
     num=100
     Q = n.diag(n.arange(1,9))
     N = n.identity(8)
     a = n.arange(2,17,2)
     a1 = n.arange(2,17,2)
     ahat_avg = 0
     for ii in range(num):
         n_vec = uf.rand_from_covar(N)
         Qa = uf.vdot(Q,a)
         y = Qa+n_vec
         self.assertTrue(y.shape==(8,))
         a,ahat,err = qgea.test_recover_alms(y,Q,N,a,num_remov=-4)        
         ahat_avg += ahat
         self.assertTrue(n.all(y==n.dot(Q,a1)+n_vec))
     ahat_avg = ahat_avg/num
     W = qgea.window_fn_matrix(Q,N,num_remov=-4)
     print uf.vdot(W,a)
     print ahat_avg
     self.assertTrue(n.all(n.abs(n.dot(W,a)-ahat_avg)<0.1))
Esempio n. 9
0
def test_recover_alms(y,Q,N,a,num_remov=None):
    # a is the alms from generate_sky_model_alms
    assert len(y.shape)==1
    assert len(a.shape)==1
    # XXX num_removs shouldn't be the same
    W = window_fn_matrix(Q,N,num_remov=num_remov) # W a = < a-hat >
    ahat = return_ahat(y,Q,N,num_remov=num_remov)
    #print "true      gs = {0}\nrecovered gs = {1}".format(a[0],ahat[0])
    err = n.abs(uf.vdot(W,a)-ahat)
    #print 'err = ',err[0] 
    assert len(ahat.shape)==1
    assert len(err.shape)==1
    return a,ahat,err
Esempio n. 10
0
    def test_recover_gs(self):
        print "GS"
        num=500
        Q = n.diag(n.arange(1,9))
        N = n.identity(8)*50
        N[0,0]=1
        a = n.array([16,0,0,0,0,0,0,0])#n.arange(16,1,-2)
        print 'a ',a 
        ahat_avg = 0
        for ii in range(num):
            n_vec = uf.rand_from_covar(N)
            Qa = uf.vdot(Q,a)
            y = Qa+n_vec
            self.assertTrue(y.shape==(8,))
            a,ahat,err = qgea.test_recover_alms(y,Q,N,a,num_remov=0)        
            ahat_avg += ahat
        ahat_avg = ahat_avg/num
        W = qgea.window_fn_matrix(Q,N,num_remov=0)

        print uf.vdot(W,a)
        print ahat_avg
        self.assertTrue(n.abs(uf.vdot(W,a)[0]-ahat_avg[0])<0.1)
Esempio n. 11
0
def plot_haslam_spectrum(del_bl=8.,num_bl=10,beam_sig=0.09,savea00=True,lmax=3):
    save_tag_base = 'grid_del_bl_{0:.2f}_sqGridSideLen_{1}_beam_sig_{2:.2f}'.format(del_bl,num_bl,beam_sig)
    print save_tag_base

    save_tag_base_old = 'grid_del_bl_{0:.2f}_num_bl_{1}_beam_sig_{2:.2f}'.format(del_bl,num_bl,beam_sig)

    mu = n.array([]); sigma = n.array([]) 
    fqs = n.array([]); nums = n.array([])

    for mc_fold in os.listdir('{0}/monte_carlo'.format(data_loc)):
        if save_tag_base_old in mc_fold:
            fq = float(mc_fold.split('_')[-1])
    #for fq in (0.050,0.064,0.076,0.088,0.090):
            mc_fold = '{0}_fq_{1}'.format(save_tag_base,fq)
            ys = load_mc_data('{0}/monte_carlo_haslam'.format(data_loc,del_bl=del_bl,num_bl=num_bl,beam_sig=beam_sig,fq=fq))
            baselines,Q,lms = load_Q_file(gh='grid',del_bl=del_bl,num_bl=num_bl,beam_sig=beam_sig,fq=fq,lmax=lmax)
            #N = total_noise_covar(0.0,del_bl=del_bl,num_bl=num_bl,beam_sig=beam_sig,fq=fq)
            N = n.eye(baselines.shape[0])
            MQN = return_MQdagNinv(Q,N,num_remov=None)
            #print 'MQN \n',MQN 
            ahat00s = n.array([])
            for ii in xrange(ys.shape[1]):
                #print MQN.shape
                #print 'ys shape ',ys.shape
                ahat = uf.vdot(MQN,ys[:,ii])
                #print ahat[0]
                ahat00s = n.append(n.real(ahat[0]),ahat00s)
            mu0,sigma0 = norm.fit(ahat00s)
            mu = n.append(mu,mu0); sigma = n.append(sigma,sigma0)
            fqs = n.append(fqs,fq); nums = n.append(nums,ys.shape[1])
            print fq
            print mu0 
            #if fq==0.06: print ahat00s 
            if savea00: n.savez_compressed('{0}/monte_carlo_haslam/{1}/ahat00s'.format(data_loc,mc_fold),ahat00s=ahat00s)
    print fqs
    print mu
    print sigma
    p.errorbar(fqs, mu, yerr=sigma, fmt='o',ecolor='Black')#,c=nums,cmap=mpl.cm.copper_r)
    #p.scatter(fqs,mu,color='g')
    p.title('Mean and sigma of recovered global signal for\n{0}'.format(save_tag_base))
    p.xlim([0.045,0.100])
    #p.ylim([-1500.,0.0])
    p.xlabel('Freq (GHz)')
    p.ylabel('Recovered a00')
    p.savefig('{0}/mc_spec_figs/{1}_haslam.pdf'.format(fig_loc,save_tag_base))
    p.clf()
Esempio n. 12
0
def construct_gs_hist(del_bl=8., num_bl=10, beam_sig=0.09, fq=0.1):
    save_tag = 'grid_del_bl_{0:.2f}_num_bl_{1}_beam_sig_{2:.2f}_fq_{3:.3f}'.format(
        del_bl, num_bl, beam_sig, fq)
    save_tag_mc = 'grid_del_bl_{0:.2f}_num_bl_{1}_beam_sig_{2:.2f}_fq_{3}'.format(
        del_bl, num_bl, beam_sig, fq)
    ys = load_mc_data('{0}/monte_carlo/{1}'.format(data_loc, save_tag_mc))
    print 'ys ', ys.shape

    alms_fg = qgea.generate_sky_model_alms(gsm_fits_file, lmax=3)
    alms_fg = alms_fg[:, 2]

    baselines, Q, lms = load_Q_file(gh='grid',
                                    del_bl=del_bl,
                                    num_bl=num_bl,
                                    beam_sig=beam_sig,
                                    fq=fq,
                                    lmax=3)
    N = total_noise_covar(
        0.1, baselines.shape[0],
        '{0}/gsm_matrices/gsm_{1}.npz'.format(data_loc, save_tag))
    MQN = return_MQdagNinv(Q, N, num_remov=None)
    print MQN
    ahat00s = n.array([])
    for ii in xrange(ys.shape[1]):
        #_,ahat,_ = qgea.test_recover_alms(ys[:,ii],Q,N,alms_fg,num_remov=None)
        ahat = uf.vdot(MQN, ys[:, ii])
        ahat00s = n.append(n.real(ahat[0]), ahat00s)
    #print ahat00s
    print ahat00s.shape
    _, bins, _ = p.hist(ahat00s, bins=36, normed=True)

    # plot best fit line
    mu, sigma = norm.fit(ahat00s)
    print "mu, sigma = ", mu, ', ', sigma
    y_fit = mpl.mlab.normpdf(bins, mu, sigma)
    p.plot(bins, y_fit, 'r--', linewidth=2)

    p.xlabel('ahat_00')
    p.ylabel('Probability')
    p.title(save_tag)
    p.annotate('mu = {0:.2f}\nsigma = {1:.2f}'.format(mu, sigma),
               xy=(0.05, 0.5),
               xycoords='axes fraction')
    p.savefig('./figures/monte_carlo/{0}.pdf'.format(save_tag))
    p.clf()
Esempio n. 13
0
def get_Q_element_mult_fqs(tx,ty,tz,dOmega,amp,baseline,l,m):
    """
    This returns a vector of Q elements for multiple frequencies, so the 
    vector is the same length as fqs. 
    """
    bx,by,bz = baseline
    # compute spherical harmonic
    Y = n.array(special.sph_harm(m,l,theta,phi)) #using math convention of theta=[0,2pi], phi=[0,pi]   
    #fringe pattern
    tb_grid,fqs_grid = n.meshgrid((bx*tx+by*ty+bz*tz),fqs)
    phs = n.exp(-2j*n.pi*fqs_grid*tb_grid)
    # bl in ns, fq in GHz => bl*fq = 1
    valid = n.logical_not(tx.mask)

    amp = n.where(valid, amp, n.zeros_like(amp))
    phs = n.where(valid, phs, n.zeros_like(phs))
    Y = n.where(valid, Y, n.zeros_like(Y)) 
    Q_elements = uf.vdot(phs*amp,Y*dOmega) #n.sum(amp*Y*phs*dOmega)
    return Q_elements
Esempio n. 14
0
def get_Q_element_mult_fqs(tx, ty, tz, dOmega, amp, baseline, l, m):
    """
    This returns a vector of Q elements for multiple frequencies, so the 
    vector is the same length as fqs. 
    """
    bx, by, bz = baseline
    # compute spherical harmonic
    Y = n.array(special.sph_harm(
        m, l, theta, phi))  #using math convention of theta=[0,2pi], phi=[0,pi]
    #fringe pattern
    tb_grid, fqs_grid = n.meshgrid((bx * tx + by * ty + bz * tz), fqs)
    phs = n.exp(-2j * n.pi * fqs_grid * tb_grid)
    # bl in ns, fq in GHz => bl*fq = 1
    valid = n.logical_not(tx.mask)

    amp = n.where(valid, amp, n.zeros_like(amp))
    phs = n.where(valid, phs, n.zeros_like(phs))
    Y = n.where(valid, Y, n.zeros_like(Y))
    Q_elements = uf.vdot(phs * amp, Y * dOmega)  #n.sum(amp*Y*phs*dOmega)
    return Q_elements
Esempio n. 15
0
def gaussian_model((A,nu0,sigma),nuvec):
    return -A*n.exp(-(nuvec-nu0)**2/sigma**2/2.)

def gaussian_model_derivs((A,nu0,sigma),nuvec):
    Aderiv = -n.exp(-0.5*(nuvec-nu0)**2/sigma**2)
    nu0deriv = (A/sigma**2)*(nuvec-nu0)*n.exp(-0.5*(nuvec-nu0)**2/sigma**2)
    sigderiv = (A/sigma**3)*(nuvec-nu0)**2*n.exp(-0.5*(nuvec-nu0)**2/sigma**2)
    return Aderiv, nu0deriv, sigderiv

def fisher_matrix((A,nu0,sigma),nuvec,Cinv):
    fisher = n.zeros((3,3))
    derivs = gaussian_model_derivs((A,nu0,sigma),nuvec)
    for ii in range(3):
        for jj in range(3):
            fisher[ii,jj] = n.dot(n.transpose(derivs[ii]),uf.vdot(Cinv,derivs[jj]))
    print 'fisher ',fisher 
    return fisher 

def fisher_select_pair(F,si,sj):
    Finv = n.linalg.inv(F) #uf.pseudo_inverse(F) 
    for kk in range(Finv.shape[0])[::-1]:
        if kk==si or kk==sj:
            continue
        Finv = n.delete(Finv,kk,axis=0)
        Finv = n.delete(Finv,kk,axis=1)
    #print Finv 
    Fnew = n.linalg.inv(Finv) #uf.pseudo_inverse(Finv)
    return Fnew 

def plot_pairwise_contours(theta,nuvec,Cinv,lvls=(2.291,6.158,11.618)):
Esempio n. 16
0
def plot_haslam_spectrum(del_bl=8.,
                         num_bl=10,
                         beam_sig=0.09,
                         savea00=True,
                         lmax=3):
    save_tag_base = 'grid_del_bl_{0:.2f}_sqGridSideLen_{1}_beam_sig_{2:.2f}'.format(
        del_bl, num_bl, beam_sig)
    print save_tag_base

    save_tag_base_old = 'grid_del_bl_{0:.2f}_num_bl_{1}_beam_sig_{2:.2f}'.format(
        del_bl, num_bl, beam_sig)

    mu = n.array([])
    sigma = n.array([])
    fqs = n.array([])
    nums = n.array([])

    for mc_fold in os.listdir('{0}/monte_carlo'.format(data_loc)):
        if save_tag_base_old in mc_fold:
            fq = float(mc_fold.split('_')[-1])
            #for fq in (0.050,0.064,0.076,0.088,0.090):
            mc_fold = '{0}_fq_{1}'.format(save_tag_base, fq)
            ys = load_mc_data('{0}/monte_carlo_haslam'.format(
                data_loc,
                del_bl=del_bl,
                num_bl=num_bl,
                beam_sig=beam_sig,
                fq=fq))
            baselines, Q, lms = load_Q_file(gh='grid',
                                            del_bl=del_bl,
                                            num_bl=num_bl,
                                            beam_sig=beam_sig,
                                            fq=fq,
                                            lmax=lmax)
            #N = total_noise_covar(0.0,del_bl=del_bl,num_bl=num_bl,beam_sig=beam_sig,fq=fq)
            N = n.eye(baselines.shape[0])
            MQN = return_MQdagNinv(Q, N, num_remov=None)
            #print 'MQN \n',MQN
            ahat00s = n.array([])
            for ii in xrange(ys.shape[1]):
                #print MQN.shape
                #print 'ys shape ',ys.shape
                ahat = uf.vdot(MQN, ys[:, ii])
                #print ahat[0]
                ahat00s = n.append(n.real(ahat[0]), ahat00s)
            mu0, sigma0 = norm.fit(ahat00s)
            mu = n.append(mu, mu0)
            sigma = n.append(sigma, sigma0)
            fqs = n.append(fqs, fq)
            nums = n.append(nums, ys.shape[1])
            print fq
            print mu0
            #if fq==0.06: print ahat00s
            if savea00:
                n.savez_compressed('{0}/monte_carlo_haslam/{1}/ahat00s'.format(
                    data_loc, mc_fold),
                                   ahat00s=ahat00s)
    print fqs
    print mu
    print sigma
    p.errorbar(fqs, mu, yerr=sigma, fmt='o',
               ecolor='Black')  #,c=nums,cmap=mpl.cm.copper_r)
    #p.scatter(fqs,mu,color='g')
    p.title('Mean and sigma of recovered global signal for\n{0}'.format(
        save_tag_base))
    p.xlim([0.045, 0.100])
    #p.ylim([-1500.,0.0])
    p.xlabel('Freq (GHz)')
    p.ylabel('Recovered a00')
    p.savefig('{0}/mc_spec_figs/{1}_haslam.pdf'.format(fig_loc, save_tag_base))
    p.clf()
Esempio n. 17
0
    Finv = n.linalg.inv(fisher_matrix((A, nu0, sigma), nuvec, Cinv, model))
    for ii in range(3):
        bias[ii] = n.dot(derivs[ii], n.dot(Cinv, expBias))
    bias = n.dot(Finv, bias)
    return bias


def fisher_matrix((A, nu0, sigma), nuvec, Cinv, model):
    fisher = n.zeros((3, 3))
    command = "derivs = " + str(model) + "_model_derivs((A,nu0,sigma),nuvec)"
    exec command
    #derivs = gaussian_model_derivs((A,nu0,sigma),nuvec)
    for ii in range(3):
        for jj in range(3):
            fisher[ii, jj] = n.dot(n.transpose(derivs[ii]),
                                   uf.vdot(Cinv, derivs[jj]))
    print 'fisher ', fisher
    return fisher


def fisher_select_pair(F, si, sj):
    Finv = n.linalg.inv(F)  #uf.pseudo_inverse(F)
    for kk in range(Finv.shape[0])[::-1]:
        if kk == si or kk == sj:
            continue
        Finv = n.delete(Finv, kk, axis=0)
        Finv = n.delete(Finv, kk, axis=1)
    #print Finv
    Fnew = n.linalg.inv(Finv)  #uf.pseudo_inverse(Finv)
    return Fnew