Commit 81e2570f authored by Zhang Xin's avatar Zhang Xin
Browse files

fix unittest for ccd Effect model

parent 042e5887
......@@ -6,18 +6,28 @@ import matplotlib.pyplot as plt
import os,sys,math,copy
from numpy.random import Generator, PCG64
import warnings
from astropy.io import fits
warnings.filterwarnings("ignore", '.*Numba.*',)
width = 9216
height = 9232
if os.path.isdir('./output/'):
pass
else:
os.mkdir('./output/')
class DetTest(unittest.TestCase):
def __init__(self, methodName='runTest'):
super(DetTest,self).__init__(methodName)
self.filePath('csst_fz_gc0')
def filePath(self, file_name):
self.datafn = os.path.join(os.getenv('UNIT_TEST_DATA_ROOT'), file_name)
self.outDataFn = os.path.join(self.datafn,'output')
if os.path.isdir(self.outDataFn):
pass
else:
os.mkdir(self.outDataFn)
def test_prnu(self):
'''
Unit test for PRNU. Expected result: a randomized GS image contains PRNU with sigma=0.01, mean=1.
......@@ -64,12 +74,12 @@ class DetTest(unittest.TestCase):
img.addNoise(galsim.GaussianNoise(sigma=7))
# plt.imshow(img.array)
# plt.show()
filename1 = os.path.join('output','test_satu_initimg.fits')
filename1 = os.path.join(self.outDataFn,'test_satu_initimg.fits')
img.write(filename1)
newimg = Effects.SaturBloom(img, fullwell=9e4)
# plt.imshow(newimg.array)
# plt.show()
filename2 = os.path.join('output','test_satu_bleedimg.fits')
filename2 = os.path.join(self.outDataFn,'test_satu_bleedimg.fits')
newimg.write(filename2)
del img,newimg, star
......@@ -79,16 +89,16 @@ class DetTest(unittest.TestCase):
'''
imgarr = np.arange(1,9e4,4).reshape((150,150))
img = galsim.Image(copy.deepcopy(imgarr))
filename1 = os.path.join('output','test_nonlinear_initimg.fits')
filename1 = os.path.join(self.outDataFn,'test_nonlinear_initimg.fits')
img.write(filename1)
newimg = Effects.NonLinearity(img, beta1=5E-7, beta2=0)
filename2 = os.path.join('output','test_nonlinear_finalimg.fits')
filename2 = os.path.join(self.outDataFn,'test_nonlinear_finalimg.fits')
newimg.write(filename2)
plt.scatter(imgarr.flatten(), newimg.array.flatten(), s=2, alpha=0.5)
plt.plot([-1e3,9e4],[-1e3,9e4],color='black', lw=1, ls='--')
plt.xlabel('input (e-)')
plt.ylabel('output (e-)')
plt.savefig('./output/test_nonlinearity.png', dpi=200)
plt.savefig(os.path.join(self.outDataFn,'test_nonlinearity.png'), dpi=200)
plt.show()
del img,newimg,imgarr
......@@ -97,35 +107,35 @@ class DetTest(unittest.TestCase):
rgbadpix = Generator(PCG64(20210911))
badfraction = 5E-5*(rgbadpix.random()*0.5+0.7)
img = Effects.DefectivePixels(img, IfHotPix=True, IfDeadPix=True, fraction=badfraction, seed=20210911, biaslevel=0)
img.write('./output/test_badpixel_HtrDtr.fits')
img.write(os.path.join(self.outDataFn,'test_badpixel_HtrDtr.fits'))
del img
def test_badpixel_HfsDtr(self):
img = galsim.Image(500,500,init_value=1000)
rgbadpix = Generator(PCG64(20210911))
badfraction = 5E-5*(rgbadpix.random()*0.5+0.7)
img = Effects.DefectivePixels(img, IfHotPix=False, IfDeadPix=True, fraction=badfraction, seed=20210911, biaslevel=0)
img.write('./output/test_badpixel_HfsDtr.fits')
img.write(os.path.join(self.outDataFn,'test_badpixel_HfsDtr.fits'))
del img
def test_badpixel_HtrDfs(self):
img = galsim.Image(500,500,init_value=1000)
rgbadpix = Generator(PCG64(20210911))
badfraction = 5E-5*(rgbadpix.random()*0.5+0.7)
img = Effects.DefectivePixels(img, IfHotPix=True, IfDeadPix=False, fraction=badfraction, seed=20210911, biaslevel=0)
img.write('./output/test_badpixel_HtrDfs.fits')
img.write(os.path.join(self.outDataFn,'test_badpixel_HtrDfs.fits'))
del img
def test_badpixel_HfsDfs(self):
img = galsim.Image(500,500,init_value=1000)
rgbadpix = Generator(PCG64(20210911))
badfraction = 5E-5*(rgbadpix.random()*0.5+0.7)
img = Effects.DefectivePixels(img, IfHotPix=False, IfDeadPix=False, fraction=badfraction, seed=20210911, biaslevel=0)
img.write('./output/test_badpixel_HfsDfs.fits')
img.write(os.path.join(self.outDataFn,'test_badpixel_HfsDfs.fits'))
del img
def test_badlines(self):
img = galsim.Image(500,500,init_value=-1000)
img.addNoise(galsim.GaussianNoise(sigma=7))
newimg = Effects.BadColumns(copy.deepcopy(img), seed=20210911)
newimg.write('./output/test_badlines.fits')
newimg.write(os.path.join(self.outDataFn,'test_badlines.fits'))
del newimg,img
def test_cte(self):
......@@ -134,8 +144,8 @@ class DetTest(unittest.TestCase):
img.array[150,150] = 3e4
newimgcol = Effects.CTE_Effect(copy.deepcopy(img),direction='column')
newimgrow = Effects.CTE_Effect(copy.deepcopy(img),direction='row')
newimgcol.write('./output/test_ctecol.fits')
newimgrow.write('./output/test_cterow.fits')
newimgcol.write(os.path.join(self.outDataFn,'test_ctecol.fits'))
newimgrow.write(os.path.join(self.outDataFn,'test_cterow.fits'))
del img,newimgcol,newimgrow
def test_readnoise(self):
......@@ -144,7 +154,7 @@ class DetTest(unittest.TestCase):
rng_readout = galsim.BaseDeviate(seed)
readout_noise = galsim.GaussianNoise(rng=rng_readout, sigma=5)
img.addNoise(readout_noise)
img.write('./output/test_readnoise.fits')
img.write(os.path.join(self.outDataFn,'test_readnoise.fits'))
stdval = np.std(img.array)
self.assertTrue(np.abs(stdval-5)<0.01*5)
print('\nUnit test for readout noise has been passed.')
......@@ -158,8 +168,8 @@ class DetTest(unittest.TestCase):
def test_apply16gains(self):
img = galsim.Image(500,500,init_value=100)
img = Effects.ApplyGainNonUniform16(img, gain=1.5, nsecy=2, nsecx=8, seed=202102)
img.write("./output/test_apply16gains.fits")
img,_ = Effects.ApplyGainNonUniform16(img, gain=1.5, nsecy=2, nsecx=8, seed=202102)
img.write(os.path.join(self.outDataFn,'test_apply16gains.fits'))
rightedge = int(500/8)*8
print('gain=%6.2f' % 1.5)
meanimg = np.mean(img.array[:,:rightedge])
......@@ -172,20 +182,20 @@ class DetTest(unittest.TestCase):
def test_cosmicray(self):
attachedSizes = np.loadtxt('../ObservationSim/Instrument/Chip/wfc-cr-attachpixel.dat')
cr_map = Effects.produceCR_Map(
attachedSizes = np.loadtxt(os.path.join(self.datafn,'wfc-cr-attachpixel.dat'))
cr_map,_ = Effects.produceCR_Map(
xLen=500, yLen=500, exTime=150+0.5*40,
cr_pixelRatio=0.003*(1+0.5*40/150),
gain=1, attachedSizes=attachedSizes, seed=20210911)
crimg = galsim.Image(cr_map)
crimg.write('./output/test_cosmicray.fits')
crimg.write(os.path.join(self.outDataFn,'test_cosmicray.fits'))
del cr_map,crimg
def test_shutter(self):
img = galsim.Image(5000,5000,init_value=1000)
shuttimg = Effects.ShutterEffectArr(img, t_exp=150, t_shutter=1.3, dist_bearing=735, dt=1E-3) # shutter effect normalized image for this chip
img *= shuttimg
img.write('./output/test_shutter.fits')
img.write(os.path.join(self.outDataFn,'test_shutter.fits'))
del img
def test_vignette(self):
......@@ -195,7 +205,7 @@ class DetTest(unittest.TestCase):
img.setOrigin(10000,10000)
flat_img = Effects.MakeFlatSmooth(img.bounds,20210911)
flat_normal = flat_img / np.mean(flat_img.array)
flat_normal.write('./output/test_vignette.fits')
flat_normal.write(os.path.join(self.outDataFn,'test_vignette.fits'))
del flat_img,img,flat_normal
......
# Graph from wfc-cr-attach, page 1
0.00000 0.004684
0.5031 0.004684
0.5283 0.01873
1.509 0.01873
1.534 0.09327
2.490 0.09327
2.515 0.1034
3.496 0.1034
3.522 0.2440
4.503 0.2440
4.528 0.1107
5.509 0.1107
5.534 0.1013
6.490 0.1013
6.515 0.06090
7.496 0.06090
7.522 0.05834
8.503 0.05834
8.528 0.03875
9.509 0.03875
9.534 0.03066
10.49 0.03066
10.51 0.01788
11.47 0.01788
11.49 0.01831
13.50 0.01831
13.53 0.01235
13.53 0.01235
14.49 0.01235
14.51 0.01064
15.49 0.01064
15.52 0.008091
16.50 0.008091
16.52 0.004684
17.48 0.004684
17.53 0.003833
18.49 0.003833
18.51 0.005536
19.47 0.005536
19.52 0.004684
20.00 0.004684
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment