import numpy as np import observation_sim.psf.PSFInterpSLS as PSFInterpSLS import observation_sim.psf.PSFInterp as PSFInterp from observation_sim.instruments import Chip, Filter, FilterParam import astropy.io.fits as fitsio from observation_sim.instruments import Chip, FilterParam, Filter import galsim ## 计算 0级或1级光谱在某个波长位置的PSF, 返回值是过采样的PSF,像元大小有CSST图像像元大小的1/2 ## chipId 必须为[1,2,3,4,5,10,21,26,27,28,29,30] ## order 只有 0 或 1 ## pos_img 为直接成像在图像上的位置,[x, y] ## wave: 波长,单位A def get_SLS_PSF(chipID = 1,pos_img = [6000,4000], order = 1, wave = 8000, sls_psf_dir = '/nfsdata/share/CSSOSDataProductsSims/data/SLS_PSF_PCA_fp_cd/'): orders = {0:'B',1:'A'} chip = Chip(chipID) filter_id, filter_type = chip.getChipFilter() filt = Filter( filter_id=filter_id, filter_type=filter_type, filter_param=FilterParam()) psf_model = PSFInterpSLS(chip, filt, PSF_data_prefix=sls_psf_dir) bandNo = 1 for i,brange in enumerate(psf_model.bandranges): if wave>=brange[0] and wave