Loading csst_ifs_sim/csst_ifs_sim.py +231 −11 Original line number Original line Diff line number Diff line Loading @@ -238,7 +238,7 @@ class CDM03bidir(): ################################################################################# ################################################################################# ###modify ###modify #sys.path.append('../so') #sys.path.append('../so') from .ifs_so import cdm03bidir #from .ifs_so import cdm03bidir try: try: from ifs_so import cdm03bidir from ifs_so import cdm03bidir except: except: Loading Loading @@ -535,6 +535,14 @@ class cosmicrays(): :return: None :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)) self.cosmicrayMap = np.zeros((self.ysize, self.xsize)) #how many events to draw at once, too large number leads to exceeding the covering fraction #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') 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 # blue zone 4 self.image_b[0:1024, 0:2048] += self.information['exptime'] * \ self.image_b[0:1024, 0:2048] += self.information['exptime'] * \ self.information['dark4_b'] self.information['dark4_b'] Loading Loading @@ -2597,6 +2656,59 @@ class IFSsimulator(): average=0.0 and std=readout noise. average=0.0 and std=readout noise. """ """ self.log.info('readnoise added in blue channel') 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 # blue zone 1 np.random.seed() np.random.seed() prescan = 50 prescan = 50 Loading Loading @@ -2715,6 +2827,56 @@ class IFSsimulator(): """ """ Convert from electrons to ADUs using the value read from the configuration file. 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( self.log.info( 'Converting from electrons to ADUs using a factor of gain') '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 The value of bias is read from the configure file and stored in the information dictionary (key bias). 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 # blue zone 4 self.image_b[0:1344, 0:2418] += self.information['bias4_b'] self.image_b[0:1344, 0:2418] += self.information['bias4_b'] Loading Loading @@ -5480,6 +5694,12 @@ class IFSsimulator(): self.dt = datetime.utcnow() 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 self.source == 'SCI' or self.source == 'COMP': if simnumber <= 50 and simnumber > 20: if simnumber <= 50 and simnumber > 20: Loading Loading @@ -5624,7 +5844,7 @@ class IFSsimulator(): else: else: print('Souce is not correct and programe will return') 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; # save the original image firstly; self.image_b_ori = self.image_b+10.0 self.image_b_ori = self.image_b+10.0 Loading tests/test_ifs_sim.py +2 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,8 @@ import unittest import os import os from csst_ifs_sim import csst_ifs_sim from csst_ifs_sim import csst_ifs_sim sys.path.append('IFS_git/csst_ifs_sim/csst_ifs_sim') import sys import sys class TestDemoFunction(unittest.TestCase): class TestDemoFunction(unittest.TestCase): Loading Loading
csst_ifs_sim/csst_ifs_sim.py +231 −11 Original line number Original line Diff line number Diff line Loading @@ -238,7 +238,7 @@ class CDM03bidir(): ################################################################################# ################################################################################# ###modify ###modify #sys.path.append('../so') #sys.path.append('../so') from .ifs_so import cdm03bidir #from .ifs_so import cdm03bidir try: try: from ifs_so import cdm03bidir from ifs_so import cdm03bidir except: except: Loading Loading @@ -535,6 +535,14 @@ class cosmicrays(): :return: None :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)) self.cosmicrayMap = np.zeros((self.ysize, self.xsize)) #how many events to draw at once, too large number leads to exceeding the covering fraction #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') 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 # blue zone 4 self.image_b[0:1024, 0:2048] += self.information['exptime'] * \ self.image_b[0:1024, 0:2048] += self.information['exptime'] * \ self.information['dark4_b'] self.information['dark4_b'] Loading Loading @@ -2597,6 +2656,59 @@ class IFSsimulator(): average=0.0 and std=readout noise. average=0.0 and std=readout noise. """ """ self.log.info('readnoise added in blue channel') 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 # blue zone 1 np.random.seed() np.random.seed() prescan = 50 prescan = 50 Loading Loading @@ -2715,6 +2827,56 @@ class IFSsimulator(): """ """ Convert from electrons to ADUs using the value read from the configuration file. 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( self.log.info( 'Converting from electrons to ADUs using a factor of gain') '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 The value of bias is read from the configure file and stored in the information dictionary (key bias). 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 # blue zone 4 self.image_b[0:1344, 0:2418] += self.information['bias4_b'] self.image_b[0:1344, 0:2418] += self.information['bias4_b'] Loading Loading @@ -5480,6 +5694,12 @@ class IFSsimulator(): self.dt = datetime.utcnow() 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 self.source == 'SCI' or self.source == 'COMP': if simnumber <= 50 and simnumber > 20: if simnumber <= 50 and simnumber > 20: Loading Loading @@ -5624,7 +5844,7 @@ class IFSsimulator(): else: else: print('Souce is not correct and programe will return') 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; # save the original image firstly; self.image_b_ori = self.image_b+10.0 self.image_b_ori = self.image_b+10.0 Loading
tests/test_ifs_sim.py +2 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,8 @@ import unittest import os import os from csst_ifs_sim import csst_ifs_sim from csst_ifs_sim import csst_ifs_sim sys.path.append('IFS_git/csst_ifs_sim/csst_ifs_sim') import sys import sys class TestDemoFunction(unittest.TestCase): class TestDemoFunction(unittest.TestCase): Loading