import sys from itertools import islice import mpi4py.MPI as MPI import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.use('Agg') import scipy.io #import xlrd from scipy import ndimage sys.path.append("/public/home/weichengliang/lnData/CSST_new_framwork/csstPSF_20210108") import PSFConfig as myConfig import PSFUtil as myUtil NPSF = 900 ############################## ############################## ############################## def test_psfPlot(iccd, ipsf, psfPath): plt.cla() plt.close('all') #psf质心位置检查,图像切片程序检查 fig = plt.figure(figsize=(4,16)) plt.subplots_adjust(wspace=0.1, hspace=0.1) psfSet = [] psfSetX= [] for iwave in range(1, 5): psfInfo = myConfig.LoadPSF(iccd, iwave, ipsf, psfPath, InputMaxPixelPos=True, PSFCentroidWgt=False) psfSet.append(psfInfo) psfInfo = myConfig.LoadPSF(iccd, iwave, ipsf, psfPath, InputMaxPixelPos=True, PSFCentroidWgt=True) psfSetX.append(psfInfo) ax = plt.subplot(4,1,iwave) psfMat = psfSet[iwave-1]['psfMat'] pixsize = psfSet[iwave-1]['pixsize']*1e-3 #microns -> mm print('psfMat-shape:', psfMat.shape) npix = psfMat.shape[0] pixCutEdge= int(npix/2-15) plt.imshow((psfMat[pixCutEdge:npix-pixCutEdge, pixCutEdge:npix-pixCutEdge]), origin='lower') plt.plot([npix/2-pixCutEdge, npix/2-pixCutEdge],[0, (npix/2-pixCutEdge)*2-1],'w--') plt.plot([0, (npix/2-pixCutEdge)*2-1],[npix/2-pixCutEdge, npix/2-pixCutEdge],'w--') imgX = psfSet[iwave-1]['image_x'] #in mm imgY = psfSet[iwave-1]['image_y'] #in mm #cenX = imgX +deltX #cenY = imgY -deltY deltX= psfSet[iwave-1]['centroid_x'] #in mm deltY= psfSet[iwave-1]['centroid_y'] #in mm cenPix_X = npix/2 + deltX/pixsize cenPix_Y = npix/2 + deltY/pixsize plt.plot([cenPix_X-pixCutEdge],[cenPix_Y-pixCutEdge], 'rx', ms = 20) deltX= psfSetX[iwave-1]['centroid_x'] #in mm deltY= psfSetX[iwave-1]['centroid_y'] #in mm cenPix_X = npix/2 + deltX/pixsize cenPix_Y = npix/2 + deltY/pixsize plt.plot([cenPix_X-pixCutEdge],[cenPix_Y-pixCutEdge], 'bx', ms = 10, mew=2) maxX = psfSet[iwave-1]['max_x'] maxY = psfSet[iwave-1]['max_y'] maxPix_X = npix/2 + maxX/pixsize maxPix_Y = npix/2 + maxY/pixsize plt.plot([maxPix_X-pixCutEdge],[maxPix_Y-pixCutEdge], 'r+', ms = 20) img = psfMat/np.sum(psfMat) y, x = ndimage.center_of_mass(img) print(x, y) print(cenPix_X, cenPix_Y) plt.plot([x-pixCutEdge],[y-pixCutEdge], 'wx', ms = 5, mew=1) plt.annotate('iccd={:}, iwave={:}, ipsf={:}'.format(iccd, iwave, ipsf), [0,(npix/2-pixCutEdge)*2-5], c='w', size=15) plt.savefig('figs/psf_{:}_{:}.pdf'.format(iccd, ipsf)) print('psfSet has been loaded.') print('Usage: psfSet[i][keys]') print('psfSet.keys:', psfSet[0].keys()) ############################## ############################## ############################## if __name__=='__main__': iccd = 2 #[1, 30] iwave= 2 #[1, 4] ipsf = 46 #[1, 100] psfPath = '/data/simudata/CSSOSDataProductsSims/data/csstPSFdata/CSSOS_psf_20210108/CSST_psf_ciomp_2p5um_cycle3_ccr90' iipsf = [1, 15, 30, 450, 465, 480, 870, 885, 900] for iccd in range(1, 31): for ipsf in iipsf: test_psfPlot(iccd, ipsf, psfPath)