test_crosstalk.py 4.04 KB
Newer Older
Wei Chengliang's avatar
Wei Chengliang committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import unittest

import sys
import os
import math
from itertools import islice
import numpy as np
import copy
import ctypes
import galsim
import yaml
from astropy.io import fits

from observation_sim.instruments.chip import chip_utils
import matplotlib.pyplot as plt


# test FUNCTION --- START #
def add_crosstalk(GSimg):
    crosstalk = np.zeros([16, 16])
    crosstalk[0, :] = np.array([1., 1e-4, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[1, :] = np.array([1e-4, 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[2, :] = np.array([0., 0., 1., 1e-4, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[3, :] = np.array([0., 0., 1e-4, 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[4, :] = np.array([0., 0., 0., 0., 1., 1e-4, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[5, :] = np.array([0., 0., 0., 0., 1e-4, 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[6, :] = np.array([0., 0., 0., 0., 0., 0., 1., 1e-4, 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[7, :] = np.array([0., 0., 0., 0., 0., 0., 1e-4, 1., 0., 0., 0., 0., 0., 0., 0., 0.])
    crosstalk[8, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 1., 1e-4, 0., 0., 0., 0., 0., 0.])
    crosstalk[9, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 1e-4, 1., 0., 0., 0., 0., 0., 0.])
    crosstalk[10, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1e-4, 0., 0., 0., 0.])
    crosstalk[11, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1e-4, 1., 0., 0., 0., 0.])
    crosstalk[12, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1e-4, 0., 0.])
    crosstalk[13, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1e-4, 1., 0., 0.])
    crosstalk[14, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1e-4])
    crosstalk[15, :] = np.array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1e-4, 1.])

    # 2*8 -> 1*16
    img = chip_utils.formatOutput(GSimg)
    ny, nx = img.array.shape
    nsecy = 1
    nsecx = 16
    dy = int(ny/nsecy)
    dx = int(nx/nsecx)

    newimg = galsim.Image(nx, ny, init_value=0)
    for i in range(16):
        for j in range(16):
            newimg.array[:, int(i*dx):int(i*dx+dx)] += crosstalk[i, j]*img.array[:, int(j*dx):int(j*dx+dx)]

    # 1*16 -> 2*8
    newimg = chip_utils.formatRevert(newimg)

    return newimg 
# test FUNCTION --- END #


class detModule_coverage(unittest.TestCase):
    def __init__(self, methodName='runTest'):
        super(detModule_coverage, self).__init__(methodName)
        self.dataPath = os.path.join(
            os.getenv('UNIT_TEST_DATA_ROOT'), 'csst_msc_sim/csst_fz_msc')

    def test_add_crosstalk(self):
        nsecy = 2
        nsecx = 8
        ny, nx = 1024,1024
        dy = int(ny/nsecy)
        dx = int(nx/nsecx)
        mapclip = np.zeros([dy, int(nsecx*nsecy*dx)])
        for i in range(int(nsecx*nsecy)):
            mapclip[:, i*dx:dx+i*dx] = np.random.randint(10)+np.random.rand(int(dy*dx)).reshape([dy, dx])
        mapclip = galsim.ImageF(mapclip)

        nsecy = 1
        nsecx = 16
        ny,nx = mapclip.array.shape
        dy = int(ny/nsecy)
        dx = int(nx/nsecx)
        for i in range(int(nsecy*nsecx)):
            gal = galsim.Gaussian(sigma=0.2, flux=500000).drawImage(nx=32, ny=32).array
            py = np.random.randint(450)+10
            mapclip.array[py:py+32, int(i*dx)+10:int(i*dx)+42] += gal
        
        tmap = chip_utils.formatRevert(mapclip, nsecy=1, nsecx=16)  # 1*16 -> 2*8
        temp = add_crosstalk(tmap)

        fig = plt.figure(figsize=(20,60))
        ax = plt.subplot(311)
        plt.imshow(np.log10(mapclip.array+1), origin='lower', cmap='gray')
        ax = plt.subplot(312)
        plt.imshow(np.log10(temp.array+1), origin='lower', cmap='gray')
        ax = plt.subplot(313)
        plt.imshow(np.log10(temp.array-tmap.array+1), origin='lower', cmap='gray')
        plt.savefig(os.path.join(self.dataPath, "./test_crosstalk.png"), dpi=300, bbox_inches='tight')
        self.assertTrue(True)


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