test_darknoise_func.py 3.25 KB
Newer Older
Wei Chengliang's avatar
Wei Chengliang committed
1
2
import unittest

Fang Yuedong's avatar
Fang Yuedong committed
3
4
5
import sys
import os
import math
Wei Chengliang's avatar
Wei Chengliang committed
6
7
8
9
10
from itertools import islice
import numpy as np
import galsim
import yaml

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

### test FUNCTION --- START ###
Fang Yuedong's avatar
Fang Yuedong committed
14
15


Wei Chengliang's avatar
Wei Chengliang committed
16
17
18
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
19
        # base_level = dark_noise*(exptime+0.5*readout_time)
Wei Chengliang's avatar
Wei Chengliang committed
20
21
22
23
24
25
26
27
28
29
30
        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
31
32
    base_img2[ny:, :] = arr[::-1, :]
    base_img2[:, :] = base_img2[:, :]*(readout_time/ny)*dark_noise
Wei Chengliang's avatar
Wei Chengliang committed
33
34
35
36
37
38
39
40
    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
41
            # for key, value in config.items():
Wei Chengliang's avatar
Wei Chengliang committed
42
43
44
45
46
47
            #    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
48
49
    chip.img.wcs = focal_plane.getTanWCS(
        192.8595, 27.1283, -113.4333*galsim.degrees, chip.pix_scale)
Wei Chengliang's avatar
Wei Chengliang committed
50
51
    return chip

Fang Yuedong's avatar
Fang Yuedong committed
52

Wei Chengliang's avatar
Wei Chengliang committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
68
69
        self.dataPath = os.path.join(
            os.getenv('UNIT_TEST_DATA_ROOT'), 'csst_msc_sim/csst_fz_msc')
Wei Chengliang's avatar
Wei Chengliang committed
70
71
72
73
74
75
76
77
78
        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
79
80
81
        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
82
83

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

Fang Yuedong's avatar
Fang Yuedong committed
88
89
90
91
        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
92
93
94
95


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