def geweke_source_params(srcs, imgs, Niter = 10): e_samps = np.zeros((Niter, len(imgs))) # sky term t_samps = np.zeros((Niter, len(srcs))) # source temp b_samps = np.zeros((Niter, len(srcs))) # source brightness u_samps = np.zeros((Niter, len(srcs), 2)) # source location ll_samps = np.zeros(Niter) prev_ll = celeste_likelihood_multi_image(srcs, imgs) print prev_ll for n in range(Niter): if n%1==0: print "===== iter %d of %d (curr_ll = %2.2f)==="%(n, Niter, prev_ll) if n%100==0: save_samples(e_samps, t_samps, b_samps, u_samps, ll_samps, fname='star_samples_teff_seed.bin') # run a gibbs step if n > 0: celeste_gibbs_sample(srcs, imgs, subiter=1, verbose=False, debug=False) # save current likelihood and samples ll_samps[n] = celeste_likelihood_multi_image(srcs, imgs) prev_ll = ll_samps[n] for n_img in range(len(imgs)): e_samps[n, n_img] = imgs[n_img].epsilon for s in range(len(srcs)): t_samps[n, s] = srcs[s].t b_samps[n, s] = srcs[s].b u_samps[n, s, :] = srcs[s].u return t_samps, b_samps, u_samps, e_samps, ll_samps
def testBirth(): np.random.seed(42) ## ## Generate some fake sources using real image data (PSF and stuff) ## cat_glob = glob('../data/stamp_catalog/cat*.fits')[1:2] srcs, imgs, teff_catalog, us = load_imgs_and_catalog(cat_glob) print "initialized with %d sources and %d images"%(len(srcs), len(imgs)) ## pixel location of source in image 0 u_pixel = imgs[0].equa2pixel(srcs[0].u) ## generate fake sources information t_gt = np.array([5500]) # synthetic temperatures b_gt = np.array([5e-10]) # synthetic brightnesses gt_srcs = [] for s in range(1): u_equa = imgs[0].pixel2equa(u_pixel) src_s = celeste.PointSrcParams(u = u_equa, b = b_gt[s], t = t_gt[s]) gt_srcs.append(src_s) print "Source at ", gt_srcs[0].u print "Brightness ", gt_srcs[0].b # re-generate images using these source params for img in imgs: mimg = celeste.gen_model_image(gt_srcs, img) img.nelec = np.random.poisson(mimg) # check out the first image #compare_to_model(gt_srcs, imgs[0]) #plt.show() np.random.seed(42) rand = np.random.RandomState() Niter = 1 e_samps = np.zeros((Niter, len(imgs))) # num images is fixed ll_samps = np.zeros(Niter) srcs = [] post_samps = [srcs] # for iter_n in range(Niter): print "Doing iteration", iter_n # fresh new universe model srcs = copy.deepcopy(srcs) srcs = birthStar(srcs, imgs, rand=rand) # keep track of universe model and image specific noise params post_samps.append(srcs) for n_img in range(len(imgs)): e_samps[iter_n, n_img] = imgs[n_img].epsilon ll_samps[iter_n] = celeste.celeste_likelihood_multi_image(srcs, imgs) print "After iteration %s: %s, cat len %s" % (iter_n, ll_samps[iter_n], len(srcs)) print "Location: ", [src.u for src in srcs] print "Brightness: ", [src.b for src in srcs]
def testDeath(): np.random.seed(42) ## ## Generate some fake sources using real image data (PSF and stuff) ## cat_glob = glob('../data/stamp_catalog/cat*.fits')[1:2] srcs, imgs, teff_catalog, us = load_imgs_and_catalog(cat_glob) print "initialized with %d sources and %d images"%(len(srcs), len(imgs)) ## pixel location of source in image 0 u_pixel = imgs[0].equa2pixel(srcs[0].u) ## generate fake sources information gt_srcs = [] ## generate a fake source (that we want to die) t_new = np.array([5500]) # synthetic temperatures b_new = np.array([5e-10]) # synthetic brightnesses for s in range(1): us_equa = imgs[0].pixel2equa(u_pixel) src_s = celeste.PointSrcParams(u = us_equa, b = b_new[s], t = t_new[s]) #srcs.append(src_s) # re-generate images using these source params for img in imgs: mimg = celeste.gen_model_image(gt_srcs, img) img.nelec = np.random.poisson(mimg) # check out the first image #ll_trace, conv = celeste_em.celeste_em(srcs, imgs, maxiter=40, debug=False, verbose=1) #compare_to_model(gt_srcs, imgs[0]) #plt.show() ## ## Initialize a single source with EM ## np.random.seed(42) rand = np.random.RandomState() Niter = 1 e_samps = np.zeros((Niter, len(imgs))) # num images is fixed ll_samps = np.zeros(Niter) post_samps = [srcs] # for iter_n in range(Niter): print "number of sources: ", len(srcs) # fresh new universe model srcs = deathStar(srcs, imgs, rand=rand) # keep track of universe model and image specific noise params post_samps.append(srcs) for n_img in range(len(imgs)): e_samps[iter_n, n_img] = imgs[n_img].epsilon ll_samps[iter_n] = celeste.celeste_likelihood_multi_image(srcs, imgs)
def testSplit(): np.random.seed(42) ## ## Generate some fake sources using real image data (PSF and stuff) ## cat_glob = glob('data/stamp_catalog/cat*.fits')[1:2] srcs, imgs, teff_catalog, us = load_imgs_and_catalog(cat_glob) print "initialized with %d sources and %d images"%(len(srcs), len(imgs)) ## pixel location of source in image 0 u_pixel = imgs[0].equa2pixel(srcs[0].u) ## generate fake sources information t_gt = np.array([5500, 8500]) # synthetic temperatures b_gt = np.array([5e-10, 8e-10]) # synthetic brightnesses gt_srcs = [] for s in range(2): us_pixel = u_pixel + 3*np.random.randn(2) us_equa = imgs[0].pixel2equa(us_pixel) src_s = celeste.PointSrcParams(u = us_equa, b = b_gt[s], t = t_gt[s]) gt_srcs.append(src_s) srcs = [celeste.PointSrcParams(u=u, b=6e-10, t=6500)] # re-generate images using these source params for img in imgs: mimg = celeste.gen_model_image(gt_srcs, img) img.nelec = np.random.poisson(mimg) # check out the first image compare_to_model(gt_srcs, imgs[0]) plt.show() np.random.seed(42) rand = np.random.RandomState() e_samps = np.zeros(100, len(imgs))) # num images is fixed ll_samps = np.zeros(100) iter_n = 1 while len(srcs) == 1: print "Doing iteration", iter_n srcs = copy.deepcopy(srcs) srcs = splitStar(srcs, imgs, rand=rand) post_samps.append(srcs) for n_img in range(len(imgs)): e_samps[iter_n, n_img] = imgs[n_img].epsilon ll_samps[iter_n] = celeste.celeste_likelihood_multi_image(srcs, imgs) print "After iteration %s: %s, cat len %s" % (iter_n, ll_samps[iter_n], len(srcs)) print "Location: ", [src.u for src in srcs] print "Brightness: ", [src.b for src in srcs] iter_n += 1
s.fluxes = None for img in imgs: img.epsilon = np.random.rand() * 1e3 # save ground truth values t_gt = np.array([s.t for s in srcs]) b_gt = np.array([s.b for s in srcs]) e_gt = np.array([img.epsilon for img in imgs]) # re-generate images using these source params for img in imgs: mimg = gen_model_image(srcs, img) img.nelec = np.random.poisson(mimg) #cache initial likelihood, initial temp ll0 = celeste_likelihood_multi_image(srcs, imgs) print "Data generating log like: ", ll0 # re-initialize source values randomly for s in srcs: s.t = np.random.rand() * 9e3 + 1000 s.b = np.random.rand() * 1e-9 for img in imgs: img.epsilon = np.random.rand() * 1e3 print "random initial ll = %2.2f" % celeste_likelihood_multi_image( srcs, imgs) print "========= EM for %d sources, %d images ================" % ( len(srcs), len(imgs))
s.fluxes = None for img in imgs: img.epsilon = np.random.rand()*1e3 # save ground truth values t_gt = np.array([s.t for s in srcs]) b_gt = np.array([s.b for s in srcs]) e_gt = np.array([img.epsilon for img in imgs]) # re-generate images using these source params for img in imgs: mimg = gen_model_image(srcs, img) img.nelec = np.random.poisson(mimg) #cache initial likelihood, initial temp ll0 = celeste_likelihood_multi_image(srcs, imgs) print "Data generating log like: ", ll0 # re-initialize source values randomly for s in srcs: s.t = np.random.rand()*9e3 + 1000 s.b = np.random.rand()*1e-9 for img in imgs: img.epsilon = np.random.rand()*1e3 print "random initial ll = %2.2f"%celeste_likelihood_multi_image(srcs, imgs) print "========= EM for %d sources, %d images ================"%(len(srcs), len(imgs)) #%prun -s tottime ll_trace, conv = celeste_em(srcs, imgs, 2, debug=False, verbose=1) ll_trace, conv = celeste_em(srcs, imgs, maxiter=40, debug=False, verbose=1)
for img in imgs: img.epsilon = np.random.rand()*1e3 # save ground truth values t_gt = np.array([s.t for s in srcs]) teff_catalog = t_gt b_gt = np.array([s.b for s in srcs]) e_gt = np.array([img.epsilon for img in imgs]) # re-generate images using these source params for img in imgs: mimg = gen_model_image(srcs, img) img.nelec = np.random.poisson(mimg) #cache initial likelihood, initial temp %lprun -m celeste ll0 = celeste_likelihood_multi_image(srcs, imgs) print "Data generating log like: ", ll0 # re-initialize source values randomly for s in srcs: s.t = np.random.rand()*9e3 + 1000 s.b = np.random.rand()*1e-9 s.fluxes = None for img in imgs: img.epsilon = np.random.rand()*1e3 print "========= EM for %d sources, %d images ================"%(len(srcs), len(imgs)) #%prun -s tottime ll_trace, conv = celeste_em(srcs, imgs, 2, debug=False, verbose=1) ll_trace, conv = celeste_em(srcs, imgs, maxiter=10, debug=False, verbose=1) for s in srcs: