Skip to content
test_darknoise_func.py 3.25 KiB
Newer Older
Wei Chengliang's avatar
Wei Chengliang committed
import unittest

Fang Yuedong's avatar
Fang Yuedong committed
import sys
import os
import math
Wei Chengliang's avatar
Wei Chengliang committed
from itertools import islice
import numpy as np
import galsim
import yaml

Fang Yuedong's avatar
Fang Yuedong committed
from observation_sim.instruments import Chip, Filter, FilterParam, FocalPlane
Wei Chengliang's avatar
Wei Chengliang committed

### test FUNCTION --- START ###
Wei Chengliang's avatar
Wei Chengliang committed
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)
Fang Yuedong's avatar
Fang Yuedong committed
        # base_level = dark_noise*(exptime+0.5*readout_time)
Wei Chengliang's avatar
Wei Chengliang committed
        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
Fang Yuedong's avatar
Fang Yuedong committed
    base_img2[ny:, :] = arr[::-1, :]
    base_img2[:, :] = base_img2[:, :]*(readout_time/ny)*dark_noise
Wei Chengliang's avatar
Wei Chengliang committed
    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)
Fang Yuedong's avatar
Fang Yuedong committed
            # for key, value in config.items():
Wei Chengliang's avatar
Wei Chengliang committed
            #    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])
Fang Yuedong's avatar
Fang Yuedong committed
    chip.img.wcs = focal_plane.getTanWCS(
        192.8595, 27.1283, -113.4333*galsim.degrees, chip.pix_scale)
Wei Chengliang's avatar
Wei Chengliang committed
    return chip

Fang Yuedong's avatar
Fang Yuedong committed

Wei Chengliang's avatar
Wei Chengliang committed
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)
Fang Yuedong's avatar
Fang Yuedong committed
        self.dataPath = os.path.join(
            os.getenv('UNIT_TEST_DATA_ROOT'), 'csst_msc_sim/csst_fz_msc')
Wei Chengliang's avatar
Wei Chengliang committed
        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)

Fang Yuedong's avatar
Fang Yuedong committed
        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)
Wei Chengliang's avatar
Wei Chengliang committed

        ny = int(chip.npix_y/2)
Fang Yuedong's avatar
Fang Yuedong committed
        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)
Fang Yuedong's avatar
Fang Yuedong committed
        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)
Wei Chengliang's avatar
Wei Chengliang committed


if __name__ == '__main__':
    unittest.main()