Loading csst_ifs_sim/csst_ifs_sim.py +231 −11 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ class CDM03bidir(): ################################################################################# ###modify #sys.path.append('../so') from .ifs_so import cdm03bidir #from .ifs_so import cdm03bidir try: from ifs_so import cdm03bidir except: Loading Loading @@ -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 Loading Loading @@ -2378,6 +2386,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'] * \ self.information['dark4_b'] Loading Loading @@ -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 Loading Loading @@ -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') Loading Loading @@ -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'] Loading Loading @@ -5480,6 +5694,12 @@ class IFSsimulator(): 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': if simnumber <= 50 and simnumber > 20: Loading Loading @@ -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 Loading tests/test_ifs_sim.py +2 −0 Original line number Diff line number Diff line Loading @@ -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): Loading Loading
csst_ifs_sim/csst_ifs_sim.py +231 −11 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ class CDM03bidir(): ################################################################################# ###modify #sys.path.append('../so') from .ifs_so import cdm03bidir #from .ifs_so import cdm03bidir try: from ifs_so import cdm03bidir except: Loading Loading @@ -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 Loading Loading @@ -2378,6 +2386,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'] * \ self.information['dark4_b'] Loading Loading @@ -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 Loading Loading @@ -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') Loading Loading @@ -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'] Loading Loading @@ -5480,6 +5694,12 @@ class IFSsimulator(): 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': if simnumber <= 50 and simnumber > 20: Loading Loading @@ -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 Loading
tests/test_ifs_sim.py +2 −0 Original line number Diff line number Diff line Loading @@ -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): Loading