From a6ca7d42fa64ccf57d0d235db93904c35dd03e34 Mon Sep 17 00:00:00 2001 From: bungerbuilder Date: Wed, 29 Jul 2026 20:42:35 -0400 Subject: [PATCH] Update psf.py Updated nperpar = (order+1)*(order+2)/2 to nperpar = (order+1)*(order+2)//2. Rubin_proc would not run properly with a float. --- crowdsource/psf.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/crowdsource/psf.py b/crowdsource/psf.py index a98601d..4811701 100644 --- a/crowdsource/psf.py +++ b/crowdsource/psf.py @@ -654,7 +654,7 @@ def fill_param_matrix(param, order): def extract_params(param, order, pixsz): - nperpar = (order+1)*(order+2)/2 + nperpar = (order+1)*(order+2)//2 if (pixsz**2.+3)*nperpar != len(param): raise ValueError('Bad parameter vector size?') return [fill_param_matrix(x, order) for x in @@ -665,7 +665,7 @@ def extract_params(param, order, pixsz): def extract_params_moffat(param, order): - nperpar = (order+1)*(order+2)/2 + nperpar = (order+1)*(order+2)//2 if 3*nperpar != len(param): raise ValueError('Bad parameter vector size?') return [fill_param_matrix(x, order) for x in @@ -691,8 +691,10 @@ def plot_psf_fits(stamp, x, y, model, isig, name=None, save=False): ind = m[numpy.argmax(numpy.median(isig[m, :, :], axis=(1, 2)))] datim0 = stamp[ind, :, :] modim0 = model[ind, :, :] - datim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = datim0-medmodel - modim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = modim0-medmodel + # datim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = datim0-medmodel + # modim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = modim0-medmodel + datim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = datim0 + modim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = modim0 p.figure(figsize=(24, 8), dpi=150) p.subplot(1, 3, 1) p.imshow(datim, aspect='equal', vmin=-0.005, vmax=0.005, cmap='binary') @@ -714,11 +716,11 @@ def plot_psf_fits(stamp, x, y, model, isig, name=None, save=False): def plot_psf_fits_brightness(stamp, x, y, model, isig): from matplotlib import pyplot as p - import util_efs + # import util_efs nx, ny = 10, 10 datim = numpy.zeros((stamp.shape[1]*nx, stamp.shape[1]*ny), dtype='f4') modim = numpy.zeros((stamp.shape[1]*nx, stamp.shape[1]*ny), dtype='f4') - medmodel = numpy.median(model, axis=0) + medmodel = numpy.median(model, axis=0) *0 s = numpy.argsort(-numpy.median(isig, axis=(1, 2))) sz = stamp.shape[-1] for i in range(nx): @@ -732,13 +734,13 @@ def plot_psf_fits_brightness(stamp, x, y, model, isig): modim[i*sz:(i+1)*sz, j*sz:(j+1)*sz] = modim0-medmodel p.figure('psfs') p.subplot(1, 3, 1) - util_efs.imshow(datim, aspect='equal', vmin=-0.005, vmax=0.005) + p.imshow(datim, vmin=-0.005, vmax=0.005) p.title('Stamps') p.subplot(1, 3, 2) - util_efs.imshow(modim, aspect='equal', vmin=-0.005, vmax=0.005) + p.imshow(modim, vmin=-0.005, vmax=0.005) p.title('Model') p.subplot(1, 3, 3) - util_efs.imshow(datim-modim, aspect='equal', vmin=-0.001, vmax=0.001) + p.imshow(datim-modim, vmin=-0.001, vmax=0.001) p.title('Residuals') p.draw() @@ -792,7 +794,7 @@ def chipix(param, resid, isig): tchi = (resid - polyval2d(x/1000., y/1000., mat))*isig return damper(tchi, 3.).reshape(-1) - nperpar = (order+1)*(order+2)/2 + nperpar = (order+1)*(order+2)//2 guess = numpy.zeros(3*nperpar+1, dtype='f4') constanttermindex = nperpar - order - 1 guess[0+constanttermindex] = 4. # 1" PSF @@ -1076,7 +1078,7 @@ def chiconv(param): resid_cen = central_stamp(resid, censize=pixsz) isig_cen = central_stamp(isig, censize=pixsz) residfitdict = {} - nperpar = (order+1)*(order+2)/2 + nperpar = (order+1)*(order+2)//2 residguess = numpy.zeros(int(nperpar), dtype='f4') for i in range(pixsz): @@ -1148,6 +1150,7 @@ def linear_static_wing_from_record(record, filter='g'): def wise_psf_fit(x, y, xcen, ycen, stamp, imstamp, modstamp, isig, pixsz=9, nkeep=200, plot=False, psfstamp=None, grid=False, name=None): + if psfstamp is None: raise ValueError('psfstamp must be set') # clean and shift the PSFs first. @@ -1196,10 +1199,13 @@ def wise_psf_fit(x, y, xcen, ycen, stamp, imstamp, modstamp, npsfstamp = numpy.mean(npsfstamp, axis=(0, 1)) npsfstamp /= numpy.sum(central_stamp(npsfstamp, censize=stampsz)) + resid = (stamp - central_stamp(npsfstamp, censize=stampsz)) resid = resid.astype('f4') resid_cen = central_stamp(resid, censize=pixsz) residmed = numpy.median(resid_cen, axis=0) + # import pdb + # pdb.set_trace() if not grid: newstamp = psfstamp.copy() central_stamp(newstamp, censize=pixsz)[:, :] += residmed @@ -1208,6 +1214,10 @@ def wise_psf_fit(x, y, xcen, ycen, stamp, imstamp, modstamp, central_stamp(newstamp, censize=pixsz)[:, :, :, :] += ( residmed[None, None, :, :]) + # import pdb + # pdb.set_trace() + print(plot) + if plot: if not grid: modstamp = central_stamp(newstamp, censize=stampsz)