From 02adb0ea813848fb546358fe1048f73f28145671 Mon Sep 17 00:00:00 2001 From: chengliang Date: Fri, 12 Apr 2024 10:24:33 +0800 Subject: [PATCH] append unittest:dark --- tests/test_darknoise_func.py | 86 ++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 tests/test_darknoise_func.py diff --git a/tests/test_darknoise_func.py b/tests/test_darknoise_func.py new file mode 100644 index 0000000..93d5e65 --- /dev/null +++ b/tests/test_darknoise_func.py @@ -0,0 +1,86 @@ +import unittest + +import sys,os,math +from itertools import islice +import numpy as np +import galsim +import yaml + +from ObservationSim.Instrument import Chip, Filter, FilterParam, FocalPlane +#from ObservationSim.Instrument.Chip import ChipUtils as chip_utils + +### test FUNCTION --- START ### +def get_base_img(img, chip, read_noise, readout_time, dark_noise, exptime=150., InputDark=None): + if InputDark == None: + # base_level = read_noise**2 + dark_noise*(exptime+0.5*readout_time) + ## base_level = dark_noise*(exptime+0.5*readout_time) + base_level = dark_noise*(exptime) + base_img1 = base_level * np.ones_like(img.array) + else: + base_img1 = np.zeros_like(img.array) + + ny = int(chip.npix_y/2) + nx = chip.npix_x + arr = np.arange(ny).reshape(ny, 1) + arr = np.broadcast_to(arr, (ny, nx)) + base_img2 = np.zeros_like(img.array) + base_img2[:ny, :] = arr + base_img2[ny:, :] = arr[::-1,:] + base_img2[:,:] = base_img2[:,:]*(readout_time/ny)*dark_noise + return base_img1+base_img2 +### test FUNCTION --- END ### + + +def defineCCD(iccd, config_file): + with open(config_file, "r") as stream: + try: + config = yaml.safe_load(stream) + #for key, value in config.items(): + # print (key + " : " + str(value)) + except yaml.YAMLError as exc: + print(exc) + chip = Chip(chipID=iccd, config=config) + chip.img = galsim.ImageF(chip.npix_x, chip.npix_y) + focal_plane = FocalPlane(chip_list=[iccd]) + chip.img.wcs= focal_plane.getTanWCS(192.8595, 27.1283, -113.4333*galsim.degrees, chip.pix_scale) + return chip + +def defineFilt(chip): + filter_param = FilterParam() + filter_id, filter_type = chip.getChipFilter() + filt = Filter( + filter_id=filter_id, + filter_type=filter_type, + filter_param=filter_param, + ccd_bandpass=chip.effCurve) + bandpass_list = filt.bandpass_sub_list + return bandpass_list + + +class detModule_coverage(unittest.TestCase): + def __init__(self, methodName='runTest'): + super(detModule_coverage, self).__init__(methodName) + self.dataPath = "/public/home/chengliang/CSSOSDataProductsSims/csst-simulation/tests/UNIT_TEST_DATA" ##os.path.join(os.getenv('UNIT_TEST_DATA_ROOT'), 'csst_fz_gc1') + self.iccd = 1 + + def test_add_dark(self): + config_file = os.path.join(self.dataPath, 'config_test.yaml') + chip = defineCCD(self.iccd, config_file) + bandpass = defineFilt(chip) + print(chip.chipID) + print(chip.cen_pix_x, chip.cen_pix_y) + + exptime=150. + base_img = get_base_img(img=chip.img, chip=chip, read_noise=chip.read_noise, readout_time=chip.readout_time, dark_noise=chip.dark_noise, exptime=exptime, InputDark=None) + + ny = int(chip.npix_y/2) + self.assertTrue( np.abs(np.max(base_img) - (exptime*chip.dark_noise+(ny-1)*(chip.readout_time/ny)*chip.dark_noise )) < 1e-6 ) + self.assertTrue( np.min(base_img) == 3 ) + + base_img = get_base_img(img=chip.img, chip=chip, read_noise=chip.read_noise, readout_time=chip.readout_time, dark_noise=chip.dark_noise, exptime=150., InputDark="testTag") + self.assertTrue( np.abs(np.max(base_img) - ((ny-1)*(chip.readout_time/ny)*chip.dark_noise )) < 1e-6 ) + + + +if __name__ == '__main__': + unittest.main() -- GitLab