Loading ObservationSim/Config/Header/ImageHeader.py +1 −1 Original line number Diff line number Diff line Loading @@ -243,7 +243,7 @@ def WCS_def(xlen = 9216, ylen = 9232, gapy = 898.0, gapx1 = 534, gapx2 = 1309, r # test_center_o = w.wcs_pix2world(np.array([[xlen / 2, ylen / 2]]), 1) sls_rot = 1 sls_rot = rotate_chip if i > 2: sls_rot = -sls_rot Loading setup.py +9 −1 Original line number Diff line number Diff line ''' Author: Zhang Xin zhangx@bao.ac.cn Date: 2023-08-07 11:23:28 LastEditors: Zhang Xin zhangx@bao.ac.cn LastEditTime: 2023-10-08 14:44:19 FilePath: /undefined/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_develop/csst-simulation/setup.py Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE ''' from setuptools import setup, find_packages from setuptools.extension import Extension Loading Loading @@ -46,7 +54,7 @@ setup(name='CSSTSim', 'ObservationSim.MockObject.data': ['*.dat'], 'ObservationSim.Instrument.data': ['*.txt', '*.dat', '*.json'], 'ObservationSim.Instrument.data.field_distortion': ['*.pickle'], 'ObservationSim.Instrument.data.ccd': ['*.txt'], 'ObservationSim.Instrument.data.ccd': ['*.txt','*.json'], 'ObservationSim.Instrument.data.filters': ['*.txt', '*.list', '*.dat'], 'ObservationSim.Instrument.data.throughputs': ['*.txt', '*.dat'], 'ObservationSim.Instrument.data.sls_conf': ['*.conf', '*.fits'], Loading tests/SLOAN_SDSS.g.fits 0 → 100644 +8.44 KiB File added.No diff preview for this file type. View file tests/config_C6.yaml 0 → 100644 +225 −0 Original line number Diff line number Diff line --- ############################################### # # Configuration file for CSST simulation # CSST-Sim Group, 2021/10/07 # ############################################### # Base diretories and naming setup # Can add some of the command-line arguments here as well; # OK to pass either way or both, as long as they are consistent work_dir: "/share/home/fangyuedong/test_psf_rot/csst-simulation/workplace/" # work_dir: "/share/" data_dir: "/share/simudata/CSSOSDataProductsSims/data/" run_name: "C6_photometry" # (Optional) a file of point list # if you just want to run default pointing: # - pointing_dir: null # - pointing_file: null pointing_dir: "/share/simudata/CSSOSDataProductsSims/data/" # pointing_dir: "/share/home/fangyuedong/test_psf_rot/csst-simulation/workplace/" pointing_file: "pointing_radec_246.5_40.dat" # Whether to use MPI run_option: use_mpi: YES # NOTE: "n_threads" paramters is currently not used in the backend # simulation codes. It should be implemented later in the web frontend # in order to config the number of threads to request from NAOC cluster n_threads: 80 # Output catalog only? # If yes, no imaging simulation will run out_cat_only: NO # Only simulate stars? star_only: NO # Only simulate galaxies? galaxy_only: NO ############################################### # Observation setting ############################################### obs_setting: # Options for survey types: # "Photometric": simulate photometric chips only # "Spectroscopic": simulate slitless spectroscopic chips only # "All": simulate full focal plane survey_type: "Spectroscopic" # Exposure time [seconds] exp_time: 150. # Observation starting date & time # (Subject to change) date_obs: "210525" # [yymmdd] time_obs: "120000" # [hhmmss] # Default Pointing [degrees] # Note: NOT valid when a pointing list file is specified ra_center: 192.8595 dec_center: 27.1283 # Image rotation [degree] image_rot: -113.4333 # Number of calibration pointings np_cal: 0 # Run specific pointing(s): # - give a list of indexes of pointings: [ip_1, ip_2...] # - run all pointings: null # Note: only valid when a pointing list is specified run_pointings: null # Run specific chip(s): # - give a list of indexes of chips: [ip_1, ip_2...] # - run all chips: null # Note: for all pointings run_chips: null # Whether to enable astrometric modeling # astrometric_lib: "libshao.so" enable_astrometric_model: True # Cut by saturation magnitude in which band? cut_in_band: "z" # saturation magnitude margin mag_sat_margin: -2.5 # limiting magnitude margin mag_lim_margin: +1.0 ############################################### # Input path setting ############################################### # Default path settings for WIDE survey simulation input_path: cat_dir: "Catalog_C6_20221212" star_cat: "C6_MMW_GGC_Astrometry_healpix.hdf5" galaxy_cat: "cat2CSSTSim_bundle/" SED_templates_path: star_SED: "Catalog_20210126/SpecLib.hdf5" galaxy_SED: "Catalog_C6_20221212/sedlibs/" ############################################### # PSF setting ############################################### psf_setting: # Which PSF model to use: # "Gauss": simple gaussian profile # "Interp": Interpolated PSF from sampled ray-tracing data psf_model: "Interp" # PSF size [arcseconds] # radius of 80% energy encircled # NOTE: only valid for "Gauss" PSF psf_rcont: 0.15 # path to PSF data # NOTE: only valid for "Interp" PSF psf_dir: "/share/simudata/CSSOSDataProductsSims/data/psfCube" # path to field-distortion model # Note: only valid when ins_effects: field_dist is "ON" fd_path: "FieldDistModelGlobal_v1.0.pickle" # sigma_spin: 0.0 # psf spin? ############################################### # Shear setting ############################################### shear_setting: # Options to generate mock shear field: # "constant": all galaxies are assigned a constant reduced shear # "catalog": from catalog # "extra": from seprate file shear_type: "catalog" # For constant shear filed reduced_g1: 0. reduced_g2: 0. # Representation of the shear vector? reShear: "E" # rotate galaxy ellipticity rotateEll: 0. # [degree] # Extra shear catalog # (currently not used) # shear_cat: "mockShear.cat" ############################################### # Instrumental effects setting ############################################### ins_effects: # switches field_dist: ON # Whether to add field distortions add_back: ON # Whether to add sky background add_dark: ON # Whether to add dark noise add_readout: ON # Whether to add read-out (Gaussian) noise add_bias: ON # Whether to add bias-level to images bias_16channel: ON # Whether to add different biases for 16 channels gain_16channel: ON # Whether to make different gains for 16 channels shutter_effect: ON # Whether to add shutter effect flat_fielding: ON # Whether to add flat-fielding effect prnu_effect: ON # Whether to add PRNU effect non_linear: ON # Whether to add non-linearity cosmic_ray: ON # Whether to add cosmic-ray cray_differ: ON # Whether to generate different cosmic ray maps CAL and MS output cte_trail: ON # Whether to simulate CTE trails saturbloom: ON # Whether to simulate Saturation & Blooming add_badcolumns: ON # Whether to add bad columns add_hotpixels: ON # Whether to add hot pixels add_deadpixels: ON # Whether to add dead(dark) pixels bright_fatter: ON # Whether to simulate Brighter-Fatter (also diffusion) effect # values dark_exptime: 300 # Exposure time for dark current frames [seconds] flat_exptime: 150 # Exposure time for flat-fielding frames [seconds] readout_time: 40 # The read-out time for each channel [seconds] df_strength: 2.3 # Sillicon sensor diffusion strength bias_level: 500 # bias level [e-/pixel] gain: 1.1 # Gain full_well: 90000 # Full well depth [e-] NBias: 1 # Number of bias frames to be exported for each exposure NDark: 1 # Number of dark frames to be exported for each exposure NFlat: 1 # Number of flat frames to be exported for each exposure ############################################### # Output options ############################################### output_setting: readout16: OFF # Whether to export as 16 channels (subimages) with pre- and over-scan shutter_output: OFF # Whether to export shutter effect 16-bit image bias_output: ON # Whether to export bias frames dark_output: ON # Whether to export the combined dark current files flat_output: ON # Whether to export the combined flat-fielding files prnu_output: OFF # Whether to export the PRNU (pixel-to-pixel flat-fielding) files ############################################### # Random seeds ############################################### random_seeds: seed_Av: 121212 # Seed for generating random intrinsic extinction seed_poisson: 20210601 # Seed for Poisson noise seed_CR: 20210317 # Seed for generating random cosmic ray maps seed_flat: 20210101 # Seed for generating random flat fields seed_prnu: 20210102 # Seed for photo-response non-uniformity seed_gainNonUniform: 20210202 # Seed for gain nonuniformity seed_biasNonUniform: 20210203 # Seed for bias nonuniformity seed_rnNonUniform: 20210204 # Seed for readout-noise nonuniformity seed_badcolumns: 20240309 # Seed for bad columns seed_defective: 20210304 # Seed for defective (bad) pixels seed_readout: 20210601 # Seed for read-out gaussian noise ... No newline at end of file tests/test_SpecDisperse.py +64 −48 Original line number Diff line number Diff line Loading @@ -85,13 +85,11 @@ def fit_SingleGauss(xX, yX, contmX, iHa0): return sigmaX, err_sigmaX, fwhmX, err_fwhmX, centerX, err_centerX def produceObj(x,y,chip, ra, dec, pa): pos_img = galsim.PositionD(chip.bound.xmin + x, chip.bound.ymin + y) pos_img = galsim.PositionD(x, y) param = {} param["star"] = 1 param["id"] = 1 param["ra"] = chip.img.wcs.posToWorld(pos_img).ra.deg param["dec"] = chip.img.wcs.posToWorld(pos_img).dec.deg param["z"] = 0 param["sed_type"] = 1 param["model_tag"] = 1 Loading @@ -99,7 +97,7 @@ def produceObj(x,y,chip, ra, dec, pa): obj = Star(param) header_wcs = generateExtensionHeader( header_wcs = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -109,12 +107,21 @@ def produceObj(x,y,chip, ra, dec, pa): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw') pos_img, offset, local_wcs, _ = obj.getPosImg_Offset_WCS(img=chip.img, chip=chip, img_header=header_wcs) pixel_scale=chip.pix_scale, pixel_size=chip.pix_size, xcen=chip.x_cen, ycen=chip.y_cen, extName='SCI') chip_wcs = galsim.FitsWCS(header=header_wcs) param["ra"] = chip_wcs.posToWorld(pos_img).ra.deg param["dec"] = chip_wcs.posToWorld(pos_img).dec.deg # pos_img, offset, local_wcs, _, _ = obj.getPosImg_Offset_WCS(img=chip.img, chip=chip, img_header=header_wcs) pos_img, offset, local_wcs, real_wcs, fd_shear = obj.getPosImg_Offset_WCS(img=chip.img, chip=chip, verbose=False, chip_wcs=chip_wcs, img_header=header_wcs) wave = np.arange(2500, 11000.5, 0.5) # sedLen = wave.shape[0] flux = pow(wave, -2) * 1e8 Loading Loading @@ -276,8 +283,8 @@ class TestSpecDisperse(unittest.TestCase): print('Emission line position and shape test') self.assertTrue(input_em_lam-center < deltLamda_pix) self.assertTrue(fwhmx/deltLamda_pix*pix_scale - psf_fwhm < np.abs(0.01)) # print(fwhmx/deltLamda_pix*pix_scale - psf_fwhm) self.assertTrue(fwhmx/deltLamda_pix*pix_scale - psf_fwhm < np.abs(0.02)) # print('error is ',np.mean((wave_flux[ids][ids1] - sed_i(wave_pix[ids][ids1]))/sed_i(wave_pix[ids][ids1]))) # self.assertTrue(np.mean((wave_flux[ids][ids1] - sed_i(wave_pix[ids][ids1]))/sed_i(wave_pix[ids][ids1]))<0.004) plt.figure() Loading Loading @@ -388,11 +395,11 @@ class TestSpecDisperse(unittest.TestCase): def test_double_disperse(self): work_dir = "/public/home/fangyuedong/CSST_unittest/CSST/test/" # work_dir = "/public/home/fangyuedong/CSST_unittest/CSST/test/" # data_dir = "/Volumes/Extreme SSD/SimData/" data_dir = "/data/simudata/CSSOSDataProductsSims/data/" configFn = '/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_C6/csst-simulation/config/config_C6.yaml' normFilterFn = "/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_C6/csst-simulation/Catalog/data/SLOAN_SDSS.g.fits" # data_dir = "/data/simudata/CSSOSDataProductsSims/data/" configFn = 'config_C6.yaml' normFilterFn = "SLOAN_SDSS.g.fits" norm_star = Table.read(normFilterFn) with open(configFn, "r") as stream: try: Loading Loading @@ -422,6 +429,7 @@ class TestSpecDisperse(unittest.TestCase): chip.img.wcs = wcs_fp obj, pos_img = produceObj(2000,4500, chip,float(config["obs_setting"]["ra_center"]), float(config["obs_setting"]["dec_center"]), float(config["obs_setting"]["image_rot"])) # print(pos_img,chip.pix_scale) obj.drawObj_slitless( tel=tel, pos_img=pos_img, Loading Loading @@ -470,7 +478,7 @@ class TestSpecDisperse(unittest.TestCase): def test_SLSImage_rotation(self): from astropy.wcs import WCS configFn = '/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_C6/csst-simulation/config/config_C6.yaml' configFn = 'config_C6.yaml' with open(configFn, "r") as stream: try: Loading @@ -485,7 +493,8 @@ class TestSpecDisperse(unittest.TestCase): dec=float(config["obs_setting"]["dec_center"]) pa=float(config["obs_setting"]["image_rot"]) header_wcs1 = generateExtensionHeader( chip.rotate_angle = 0 header_wcs1 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -495,18 +504,19 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=0) extName='raw') center = np.array([chip.npix_x / 2, chip.npix_y / 2]) h_wcs1 = WCS(header_wcs1) x1, y1 = center + [100,0] sky_1 = h_wcs1.pixel_to_world(x1,y1) chip = Chip(1, config=config) rot_angle = 1 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -516,19 +526,21 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1,y1,0,x2,y2,0,center[0],center[1],0) print(angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) # print("rotation angle:" ,rot_angle ,chip.rotate_angle, angle) # self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 10 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -538,19 +550,20 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print("rotation angle:", rot_angle, chip.rotate_angle, angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 50 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -560,15 +573,15 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) Loading @@ -577,8 +590,8 @@ class TestSpecDisperse(unittest.TestCase): ra = float(config["obs_setting"]["ra_center"]) dec = float(config["obs_setting"]["dec_center"]) pa = float(config["obs_setting"]["image_rot"]) header_wcs1 = generateExtensionHeader( chip.rotate_angle = 0 header_wcs1 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -588,10 +601,10 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=0) extName='raw') center = np.array([chip.npix_x / 2, chip.npix_y / 2]) h_wcs1 = WCS(header_wcs1) Loading @@ -599,7 +612,8 @@ class TestSpecDisperse(unittest.TestCase): sky_1 = h_wcs1.pixel_to_world(x1, y1) rot_angle = 1 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -609,19 +623,20 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 10 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -631,19 +646,20 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 50 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -653,15 +669,15 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) Loading Loading
ObservationSim/Config/Header/ImageHeader.py +1 −1 Original line number Diff line number Diff line Loading @@ -243,7 +243,7 @@ def WCS_def(xlen = 9216, ylen = 9232, gapy = 898.0, gapx1 = 534, gapx2 = 1309, r # test_center_o = w.wcs_pix2world(np.array([[xlen / 2, ylen / 2]]), 1) sls_rot = 1 sls_rot = rotate_chip if i > 2: sls_rot = -sls_rot Loading
setup.py +9 −1 Original line number Diff line number Diff line ''' Author: Zhang Xin zhangx@bao.ac.cn Date: 2023-08-07 11:23:28 LastEditors: Zhang Xin zhangx@bao.ac.cn LastEditTime: 2023-10-08 14:44:19 FilePath: /undefined/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_develop/csst-simulation/setup.py Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE ''' from setuptools import setup, find_packages from setuptools.extension import Extension Loading Loading @@ -46,7 +54,7 @@ setup(name='CSSTSim', 'ObservationSim.MockObject.data': ['*.dat'], 'ObservationSim.Instrument.data': ['*.txt', '*.dat', '*.json'], 'ObservationSim.Instrument.data.field_distortion': ['*.pickle'], 'ObservationSim.Instrument.data.ccd': ['*.txt'], 'ObservationSim.Instrument.data.ccd': ['*.txt','*.json'], 'ObservationSim.Instrument.data.filters': ['*.txt', '*.list', '*.dat'], 'ObservationSim.Instrument.data.throughputs': ['*.txt', '*.dat'], 'ObservationSim.Instrument.data.sls_conf': ['*.conf', '*.fits'], Loading
tests/SLOAN_SDSS.g.fits 0 → 100644 +8.44 KiB File added.No diff preview for this file type. View file
tests/config_C6.yaml 0 → 100644 +225 −0 Original line number Diff line number Diff line --- ############################################### # # Configuration file for CSST simulation # CSST-Sim Group, 2021/10/07 # ############################################### # Base diretories and naming setup # Can add some of the command-line arguments here as well; # OK to pass either way or both, as long as they are consistent work_dir: "/share/home/fangyuedong/test_psf_rot/csst-simulation/workplace/" # work_dir: "/share/" data_dir: "/share/simudata/CSSOSDataProductsSims/data/" run_name: "C6_photometry" # (Optional) a file of point list # if you just want to run default pointing: # - pointing_dir: null # - pointing_file: null pointing_dir: "/share/simudata/CSSOSDataProductsSims/data/" # pointing_dir: "/share/home/fangyuedong/test_psf_rot/csst-simulation/workplace/" pointing_file: "pointing_radec_246.5_40.dat" # Whether to use MPI run_option: use_mpi: YES # NOTE: "n_threads" paramters is currently not used in the backend # simulation codes. It should be implemented later in the web frontend # in order to config the number of threads to request from NAOC cluster n_threads: 80 # Output catalog only? # If yes, no imaging simulation will run out_cat_only: NO # Only simulate stars? star_only: NO # Only simulate galaxies? galaxy_only: NO ############################################### # Observation setting ############################################### obs_setting: # Options for survey types: # "Photometric": simulate photometric chips only # "Spectroscopic": simulate slitless spectroscopic chips only # "All": simulate full focal plane survey_type: "Spectroscopic" # Exposure time [seconds] exp_time: 150. # Observation starting date & time # (Subject to change) date_obs: "210525" # [yymmdd] time_obs: "120000" # [hhmmss] # Default Pointing [degrees] # Note: NOT valid when a pointing list file is specified ra_center: 192.8595 dec_center: 27.1283 # Image rotation [degree] image_rot: -113.4333 # Number of calibration pointings np_cal: 0 # Run specific pointing(s): # - give a list of indexes of pointings: [ip_1, ip_2...] # - run all pointings: null # Note: only valid when a pointing list is specified run_pointings: null # Run specific chip(s): # - give a list of indexes of chips: [ip_1, ip_2...] # - run all chips: null # Note: for all pointings run_chips: null # Whether to enable astrometric modeling # astrometric_lib: "libshao.so" enable_astrometric_model: True # Cut by saturation magnitude in which band? cut_in_band: "z" # saturation magnitude margin mag_sat_margin: -2.5 # limiting magnitude margin mag_lim_margin: +1.0 ############################################### # Input path setting ############################################### # Default path settings for WIDE survey simulation input_path: cat_dir: "Catalog_C6_20221212" star_cat: "C6_MMW_GGC_Astrometry_healpix.hdf5" galaxy_cat: "cat2CSSTSim_bundle/" SED_templates_path: star_SED: "Catalog_20210126/SpecLib.hdf5" galaxy_SED: "Catalog_C6_20221212/sedlibs/" ############################################### # PSF setting ############################################### psf_setting: # Which PSF model to use: # "Gauss": simple gaussian profile # "Interp": Interpolated PSF from sampled ray-tracing data psf_model: "Interp" # PSF size [arcseconds] # radius of 80% energy encircled # NOTE: only valid for "Gauss" PSF psf_rcont: 0.15 # path to PSF data # NOTE: only valid for "Interp" PSF psf_dir: "/share/simudata/CSSOSDataProductsSims/data/psfCube" # path to field-distortion model # Note: only valid when ins_effects: field_dist is "ON" fd_path: "FieldDistModelGlobal_v1.0.pickle" # sigma_spin: 0.0 # psf spin? ############################################### # Shear setting ############################################### shear_setting: # Options to generate mock shear field: # "constant": all galaxies are assigned a constant reduced shear # "catalog": from catalog # "extra": from seprate file shear_type: "catalog" # For constant shear filed reduced_g1: 0. reduced_g2: 0. # Representation of the shear vector? reShear: "E" # rotate galaxy ellipticity rotateEll: 0. # [degree] # Extra shear catalog # (currently not used) # shear_cat: "mockShear.cat" ############################################### # Instrumental effects setting ############################################### ins_effects: # switches field_dist: ON # Whether to add field distortions add_back: ON # Whether to add sky background add_dark: ON # Whether to add dark noise add_readout: ON # Whether to add read-out (Gaussian) noise add_bias: ON # Whether to add bias-level to images bias_16channel: ON # Whether to add different biases for 16 channels gain_16channel: ON # Whether to make different gains for 16 channels shutter_effect: ON # Whether to add shutter effect flat_fielding: ON # Whether to add flat-fielding effect prnu_effect: ON # Whether to add PRNU effect non_linear: ON # Whether to add non-linearity cosmic_ray: ON # Whether to add cosmic-ray cray_differ: ON # Whether to generate different cosmic ray maps CAL and MS output cte_trail: ON # Whether to simulate CTE trails saturbloom: ON # Whether to simulate Saturation & Blooming add_badcolumns: ON # Whether to add bad columns add_hotpixels: ON # Whether to add hot pixels add_deadpixels: ON # Whether to add dead(dark) pixels bright_fatter: ON # Whether to simulate Brighter-Fatter (also diffusion) effect # values dark_exptime: 300 # Exposure time for dark current frames [seconds] flat_exptime: 150 # Exposure time for flat-fielding frames [seconds] readout_time: 40 # The read-out time for each channel [seconds] df_strength: 2.3 # Sillicon sensor diffusion strength bias_level: 500 # bias level [e-/pixel] gain: 1.1 # Gain full_well: 90000 # Full well depth [e-] NBias: 1 # Number of bias frames to be exported for each exposure NDark: 1 # Number of dark frames to be exported for each exposure NFlat: 1 # Number of flat frames to be exported for each exposure ############################################### # Output options ############################################### output_setting: readout16: OFF # Whether to export as 16 channels (subimages) with pre- and over-scan shutter_output: OFF # Whether to export shutter effect 16-bit image bias_output: ON # Whether to export bias frames dark_output: ON # Whether to export the combined dark current files flat_output: ON # Whether to export the combined flat-fielding files prnu_output: OFF # Whether to export the PRNU (pixel-to-pixel flat-fielding) files ############################################### # Random seeds ############################################### random_seeds: seed_Av: 121212 # Seed for generating random intrinsic extinction seed_poisson: 20210601 # Seed for Poisson noise seed_CR: 20210317 # Seed for generating random cosmic ray maps seed_flat: 20210101 # Seed for generating random flat fields seed_prnu: 20210102 # Seed for photo-response non-uniformity seed_gainNonUniform: 20210202 # Seed for gain nonuniformity seed_biasNonUniform: 20210203 # Seed for bias nonuniformity seed_rnNonUniform: 20210204 # Seed for readout-noise nonuniformity seed_badcolumns: 20240309 # Seed for bad columns seed_defective: 20210304 # Seed for defective (bad) pixels seed_readout: 20210601 # Seed for read-out gaussian noise ... No newline at end of file
tests/test_SpecDisperse.py +64 −48 Original line number Diff line number Diff line Loading @@ -85,13 +85,11 @@ def fit_SingleGauss(xX, yX, contmX, iHa0): return sigmaX, err_sigmaX, fwhmX, err_fwhmX, centerX, err_centerX def produceObj(x,y,chip, ra, dec, pa): pos_img = galsim.PositionD(chip.bound.xmin + x, chip.bound.ymin + y) pos_img = galsim.PositionD(x, y) param = {} param["star"] = 1 param["id"] = 1 param["ra"] = chip.img.wcs.posToWorld(pos_img).ra.deg param["dec"] = chip.img.wcs.posToWorld(pos_img).dec.deg param["z"] = 0 param["sed_type"] = 1 param["model_tag"] = 1 Loading @@ -99,7 +97,7 @@ def produceObj(x,y,chip, ra, dec, pa): obj = Star(param) header_wcs = generateExtensionHeader( header_wcs = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -109,12 +107,21 @@ def produceObj(x,y,chip, ra, dec, pa): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw') pos_img, offset, local_wcs, _ = obj.getPosImg_Offset_WCS(img=chip.img, chip=chip, img_header=header_wcs) pixel_scale=chip.pix_scale, pixel_size=chip.pix_size, xcen=chip.x_cen, ycen=chip.y_cen, extName='SCI') chip_wcs = galsim.FitsWCS(header=header_wcs) param["ra"] = chip_wcs.posToWorld(pos_img).ra.deg param["dec"] = chip_wcs.posToWorld(pos_img).dec.deg # pos_img, offset, local_wcs, _, _ = obj.getPosImg_Offset_WCS(img=chip.img, chip=chip, img_header=header_wcs) pos_img, offset, local_wcs, real_wcs, fd_shear = obj.getPosImg_Offset_WCS(img=chip.img, chip=chip, verbose=False, chip_wcs=chip_wcs, img_header=header_wcs) wave = np.arange(2500, 11000.5, 0.5) # sedLen = wave.shape[0] flux = pow(wave, -2) * 1e8 Loading Loading @@ -276,8 +283,8 @@ class TestSpecDisperse(unittest.TestCase): print('Emission line position and shape test') self.assertTrue(input_em_lam-center < deltLamda_pix) self.assertTrue(fwhmx/deltLamda_pix*pix_scale - psf_fwhm < np.abs(0.01)) # print(fwhmx/deltLamda_pix*pix_scale - psf_fwhm) self.assertTrue(fwhmx/deltLamda_pix*pix_scale - psf_fwhm < np.abs(0.02)) # print('error is ',np.mean((wave_flux[ids][ids1] - sed_i(wave_pix[ids][ids1]))/sed_i(wave_pix[ids][ids1]))) # self.assertTrue(np.mean((wave_flux[ids][ids1] - sed_i(wave_pix[ids][ids1]))/sed_i(wave_pix[ids][ids1]))<0.004) plt.figure() Loading Loading @@ -388,11 +395,11 @@ class TestSpecDisperse(unittest.TestCase): def test_double_disperse(self): work_dir = "/public/home/fangyuedong/CSST_unittest/CSST/test/" # work_dir = "/public/home/fangyuedong/CSST_unittest/CSST/test/" # data_dir = "/Volumes/Extreme SSD/SimData/" data_dir = "/data/simudata/CSSOSDataProductsSims/data/" configFn = '/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_C6/csst-simulation/config/config_C6.yaml' normFilterFn = "/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_C6/csst-simulation/Catalog/data/SLOAN_SDSS.g.fits" # data_dir = "/data/simudata/CSSOSDataProductsSims/data/" configFn = 'config_C6.yaml' normFilterFn = "SLOAN_SDSS.g.fits" norm_star = Table.read(normFilterFn) with open(configFn, "r") as stream: try: Loading Loading @@ -422,6 +429,7 @@ class TestSpecDisperse(unittest.TestCase): chip.img.wcs = wcs_fp obj, pos_img = produceObj(2000,4500, chip,float(config["obs_setting"]["ra_center"]), float(config["obs_setting"]["dec_center"]), float(config["obs_setting"]["image_rot"])) # print(pos_img,chip.pix_scale) obj.drawObj_slitless( tel=tel, pos_img=pos_img, Loading Loading @@ -470,7 +478,7 @@ class TestSpecDisperse(unittest.TestCase): def test_SLSImage_rotation(self): from astropy.wcs import WCS configFn = '/Users/zhangxin/Work/SlitlessSim/CSST_SIM/CSST_C6/csst-simulation/config/config_C6.yaml' configFn = 'config_C6.yaml' with open(configFn, "r") as stream: try: Loading @@ -485,7 +493,8 @@ class TestSpecDisperse(unittest.TestCase): dec=float(config["obs_setting"]["dec_center"]) pa=float(config["obs_setting"]["image_rot"]) header_wcs1 = generateExtensionHeader( chip.rotate_angle = 0 header_wcs1 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -495,18 +504,19 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=0) extName='raw') center = np.array([chip.npix_x / 2, chip.npix_y / 2]) h_wcs1 = WCS(header_wcs1) x1, y1 = center + [100,0] sky_1 = h_wcs1.pixel_to_world(x1,y1) chip = Chip(1, config=config) rot_angle = 1 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -516,19 +526,21 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1,y1,0,x2,y2,0,center[0],center[1],0) print(angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) # print("rotation angle:" ,rot_angle ,chip.rotate_angle, angle) # self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 10 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -538,19 +550,20 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print("rotation angle:", rot_angle, chip.rotate_angle, angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 50 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -560,15 +573,15 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) Loading @@ -577,8 +590,8 @@ class TestSpecDisperse(unittest.TestCase): ra = float(config["obs_setting"]["ra_center"]) dec = float(config["obs_setting"]["dec_center"]) pa = float(config["obs_setting"]["image_rot"]) header_wcs1 = generateExtensionHeader( chip.rotate_angle = 0 header_wcs1 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -588,10 +601,10 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=0) extName='raw') center = np.array([chip.npix_x / 2, chip.npix_y / 2]) h_wcs1 = WCS(header_wcs1) Loading @@ -599,7 +612,8 @@ class TestSpecDisperse(unittest.TestCase): sky_1 = h_wcs1.pixel_to_world(x1, y1) rot_angle = 1 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -609,19 +623,20 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 10 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -631,19 +646,20 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) rot_angle = 50 header_wcs2 = generateExtensionHeader( chip.rotate_angle = rot_angle header_wcs2 = generateExtensionHeader(chip, xlen=chip.npix_x, ylen=chip.npix_y, ra=ra, Loading @@ -653,15 +669,15 @@ class TestSpecDisperse(unittest.TestCase): readout=chip.read_noise, dark=chip.dark_noise, saturation=90000, psize=chip.pix_scale, pixel_scale=chip.pix_scale, row_num=chip.rowID, col_num=chip.colID, extName='raw', center_rot=rot_angle) extName='raw') h_wcs2 = WCS(header_wcs2) x2, y2 = h_wcs2.world_to_pixel(sky_1) angle = getAngle132(x1, y1, 0, x2, y2, 0, center[0], center[1], 0) print(angle) # print(rot_angle - angle) self.assertTrue(rot_angle - angle < np.abs(0.001)) Loading