diff --git a/csst_ifs_sim/csst_ifs_sim.py b/csst_ifs_sim/csst_ifs_sim.py index 2aa3d3c56c88977e541f3fcfe3c1b77b1b323ef4..bb53d643a83475f8b291c8aabc939789a88c64a8 100644 --- a/csst_ifs_sim/csst_ifs_sim.py +++ b/csst_ifs_sim/csst_ifs_sim.py @@ -238,21 +238,21 @@ class CDM03bidir(): ################################################################################# ###modify #sys.path.append('../so') - from .ifs_so import cdm03bidir + #from .ifs_so import cdm03bidir try: - from ifs_so import cdm03bidir + from ifs_so import cdm03bidir except: - from .ifs_so import cdm03bidir - + from .ifs_so import cdm03bidir + # from ifs_so.cdm03.cpython-38-x86_64-linux-gnu import cdm03bidir # import cdm03bidir CTIed = cdm03bidir.cdm03(np.asfortranarray(data), - jflip, iflip, - self.values['dob'], self.values['rdose'], - self.nt_p, self.sigma_p, self.taur_p, - self.nt_s, self.sigma_s, self.taur_s, - params, - [data.shape[0], data.shape[1], len(self.nt_p), len(self.nt_s), len(self.params)]) + jflip, iflip, + self.values['dob'], self.values['rdose'], + self.nt_p, self.sigma_p, self.taur_p, + self.nt_s, self.sigma_s, self.taur_s, + params, + [data.shape[0], data.shape[1], len(self.nt_p), len(self.nt_s), len(self.params)]) return np.asanyarray(CTIed) @@ -535,6 +535,14 @@ class cosmicrays(): :return: None """ + + if coveringFraction>1 or coveringFraction<0.1: + self.log.error( + 'coveringFraction error, it shoub be in [0.1, 1]!') + raise ValueError( + 'coveringFraction error, it shoub be in [0.1, 1]!') + + self.cosmicrayMap = np.zeros((self.ysize, self.xsize)) #how many events to draw at once, too large number leads to exceeding the covering fraction @@ -2377,6 +2385,57 @@ class IFSsimulator(): """ self.log.info('Added dark current to bule and red channel') + + + if self.information['dark1_b']>0.001 or self.information['dark1_b']>0.001: + self.log.error( + 'dark1_b value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark1_b value error, it shoub be in [0.0001, 0.001]!') + + if self.information['dark2_b']>0.001 or self.information['dark2_b']>0.001: + self.log.error( + 'dark2_b value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark2_b value error, it shoub be in [0.0001, 0.001]!') + + if self.information['dark3_b']>0.001 or self.information['dark3_b']>0.001: + self.log.error( + 'dark3_b value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark3_b value error, it shoub be in [0.0001, 0.001]!') + + if self.information['dark4_b']>0.001 or self.information['dark4_b']>0.001: + self.log.error( + 'dark4_b value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark4_b value error, it shoub be in [0.0001, 0.001]!') + + #################################################################### + if self.information['dark1_r']>0.001 or self.information['dark1_r']>0.001: + self.log.error( + 'dark1_r value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark1_r value error, it shoub be in [0.0001, 0.001]!') + + if self.information['dark2_r']>0.001 or self.information['dark2_r']>0.001: + self.log.error( + 'dark2_r value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark2_r value error, it shoub be in [0.0001, 0.001]!') + + if self.information['dark3_r']>0.001 or self.information['dark3_r']>0.001: + self.log.error( + 'dark3_r value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark3_r value error, it shoub be in [0.0001, 0.001]!') + + if self.information['dark4_r']>0.001 or self.information['dark4_r']>0.001: + self.log.error( + 'dark4_r value error, it shoub be in [0.0001, 0.001]!') + raise ValueError( + 'dark4_r value error, it shoub be in [0.0001, 0.001]!') + ########################################################################### # blue zone 4 self.image_b[0:1024, 0:2048] += self.information['exptime'] * \ @@ -2597,6 +2656,59 @@ class IFSsimulator(): average=0.0 and std=readout noise. """ self.log.info('readnoise added in blue channel') + + if self.information['rn1_b']>10 or self.information['rn1_b']<3: + self.log.error( + 'rn1_b value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn1_b value error, it shoub be in [3, 10]!') + + if self.information['rn2_b']>10 or self.information['rn2_b']<3: + self.log.error( + 'rn2_b value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn2_b value error, it shoub be in [3, 10]!') + + if self.information['rn3_b']>10 or self.information['rn3_b']<3: + self.log.error( + 'rn3_b value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn3_b value error, it shoub be in [3, 10]!') + + if self.information['rn4_b']>10 or self.information['rn4_b']<3: + self.log.error( + 'rn4_b value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn4_b value error, it shoub be in [3, 10]!') + + #################################################################### + if self.information['rn1_r']>10 or self.information['rn1_r']<3: + self.log.error( + 'rn1_r value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn1_r value error, it shoub be in [3, 10]!') + + if self.information['rn2_r']>10 or self.information['rn2_r']<3: + self.log.error( + 'rn2_r value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn2_r value error, it shoub be in [3, 10]!') + + if self.information['rn3_r']>10 or self.information['rn3_r']<3: + self.log.error( + 'rn3_r value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn3_r value error, it shoub be in [3, 10]!') + + if self.information['rn4_r']>10 or self.information['rn4_r']<3: + self.log.error( + 'rn4_r value error, it shoub be in [3, 10]!') + raise ValueError( + 'rn4_r value error, it shoub be in [3, 10]!') + ########################################################33 + + + # blue zone 1 np.random.seed() prescan = 50 @@ -2715,6 +2827,56 @@ class IFSsimulator(): """ Convert from electrons to ADUs using the value read from the configuration file. """ + if self.information['gain1_b']>2 or self.information['gain1_b']<1: + self.log.error( + 'gain1_b value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain1_b value error, it shoub be in [1, 2]!') + + if self.information['gain2_b']>2 or self.information['gain2_b']<1: + self.log.error( + 'gain2_b value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain2_b value error, it shoub be in [1, 2]!') + + if self.information['gain3_b']>2 or self.information['gain3_b']<1: + self.log.error( + 'gain3_b value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain3_b value error, it shoub be in [1, 2]!') + + if self.information['gain4_b']>2 or self.information['gain4_b']<1: + self.log.error( + 'gain4_b value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain4_b value error, it shoub be in [1, 2]!') + + #################################################################### + if self.information['gain1_r']>2 or self.information['gain1_r']<1: + self.log.error( + 'gain1_r value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain1_r value error, it shoub be in [1, 2]!') + + if self.information['gain2_r']>2 or self.information['gain2_r']<1: + self.log.error( + 'gain2_r value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain2_r value error, it shoub be in [1, 2]!') + + if self.information['gain3_r']>2 or self.information['gain3_r']<1: + self.log.error( + 'gain3_r value error, it shoub be in [1, 2]!') + raise ValueError( + 'gain3_r value error, it shoub be in [1, 2]!') + + if self.information['gain4_r']>2 or self.information['gain4_r']<1: + self.log.error( + 'gain4_r value error, it shoub be in [1, 2]!') + raise ValueError('gain4_r value error, it shoub be in [1, 2]!') + #################################################################### + + self.log.info( 'Converting from electrons to ADUs using a factor of gain') @@ -2762,8 +2924,60 @@ class IFSsimulator(): The value of bias is read from the configure file and stored in the information dictionary (key bias). + """ + if self.information['bias1_b']>2000 or self.information['bias1_b']<100: + self.log.error( + 'bias1_b value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias1_b value error, it shoub be in [100, 2000]!') + + if self.information['bias2_b']>2000 or self.information['bias2_b']<100: + self.log.error( + 'bias2_b value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias2_b value error, it shoub be in [100, 2000]!') + + if self.information['bias3_b']>2000 or self.information['bias3_b']<100: + self.log.error( + 'bias3_b value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias3_b value error, it shoub be in [100, 2000]!') + + if self.information['bias4_b']>2000 or self.information['bias4_b']<100: + self.log.error( + 'bias4_b value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias4_b value error, it shoub be in [100, 2000]!') + + #################################################################### + if self.information['bias1_r']>2000 or self.information['bias1_r']<100: + self.log.error( + 'bias1_r value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias1_r value error, it shoub be in [100, 2000]!') + + if self.information['bias2_r']>2000 or self.information['bias2_r']<100: + self.log.error( + 'bias2_r value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias2_r value error, it shoub be in [100, 2000]!') + + if self.information['bias3_r']>2000 or self.information['bias3_r']<100: + self.log.error( + 'bias3_r value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias3_r value error, it shoub be in [100, 2000]!') + + if self.information['bias4_r']>2000 or self.information['bias4_r']<100: + self.log.error( + 'bias4_r value error, it shoub be in [100, 2000]!') + raise ValueError( + 'bias4_r value error, it shoub be in [100, 2000]!') + + ######################################################################## + # blue zone 4 self.image_b[0:1344, 0:2418] += self.information['bias4_b'] @@ -5479,6 +5693,12 @@ class IFSsimulator(): self.debug = self.information['debug'] self.dt = datetime.utcnow() + + + if self.information['exptime']>2000 or self.information['exptime']<0: + self.log.error( + 'exptime value error, it shoub be in [0, 2000]!') + exit(2) if self.source == 'SCI' or self.source == 'COMP': @@ -5624,7 +5844,7 @@ class IFSsimulator(): else: print('Souce is not correct and programe will return') - exit(1) + raise ValueError('Souce is not correct and programe will return') ############################################################################### # save the original image firstly; self.image_b_ori = self.image_b+10.0 diff --git a/tests/test_ifs_sim.py b/tests/test_ifs_sim.py index 854cc0102871fef60a61f392afb0c1a6e4ff03ad..9e168e149f179fc60aff8f9f84f7e096c00d26b2 100644 --- a/tests/test_ifs_sim.py +++ b/tests/test_ifs_sim.py @@ -13,6 +13,8 @@ import unittest import os from csst_ifs_sim import csst_ifs_sim + +sys.path.append('IFS_git/csst_ifs_sim/csst_ifs_sim') import sys class TestDemoFunction(unittest.TestCase):