Skip to content
plotPSFMats.py 3.4 KiB
Newer Older
Fang Yuedong's avatar
Fang Yuedong committed
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)