Commit baad5514 authored by Yan Zhaojun's avatar Yan Zhaojun
Browse files

test

parent 132ee572
Loading
Loading
Loading
Loading
Loading
+45 −30
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ def flux2ill(wave, flux):
def ill2flux(E):

    # use template from sky_bkg (background_spec_hst.dat)
    filename = '../MCI_inputData/refs/background_spec_hst.dat'
    filename = self.information['dir_path']+'MCI_inputData/refs/background_spec_hst.dat'
    cat_spec = pd.read_csv(filename, sep='\s+', header=None, comment='#')
    wave0 = cat_spec[0].values       # A
    spec0 = cat_spec[2].values      # erg/s/cm^2/A/arcsec^2
@@ -276,7 +276,7 @@ def zodiacal(ra, dec, time):
    lamda = abs(lb_obj.lon.degree - lb_sun.lon.degree)

    # interpolated zodical surface brightness at 0.5 um
    zodi = pd.read_csv('../MCI_inputData/refs/zodi_map.dat', sep='\s+', header=None, comment='#')
    zodi = pd.read_csv(self.information['dir_path']+'MCI_inputData/refs/zodi_map.dat', sep='\s+', header=None, comment='#')
    beta_angle = np.array([0, 5, 10, 15, 20, 25, 30, 45, 60, 75])
    lamda_angle = np.array([0, 5, 10, 15, 20, 25, 30, 35, 40, 45,
                          60, 75, 90, 105, 120, 135, 150, 165, 180])
@@ -289,7 +289,7 @@ def zodiacal(ra, dec, time):
    zodi_obj = f(beta, lamda)       # 

    # read the zodical spectrum in the ecliptic
    cat_spec = pd.read_csv('../MCI_inputData/refs/solar_spec.dat', sep='\s+', header=None, comment='#')
    cat_spec = pd.read_csv(self.information['dir_path']+'MCI_inputData/refs/solar_spec.dat', sep='\s+', header=None, comment='#')
    wave = cat_spec[0].values       # A
    spec0 = cat_spec[1].values      # 
    zodi_norm = 252                 # 
@@ -398,7 +398,7 @@ class StrayLight(object):
        self.equator = coord.SkyCoord(radec[0]*u.degree, radec[1]*u.degree,frame='icrs')
        self.ecliptic = self.equator.transform_to('barycentrictrueecliptic')
        self.pointing = transRaDec2D(radec[0], radec[1])
        self.slcdll = ctypes.CDLL('../MCI_inputData/refs/libstraylight.so') #dylib
        self.slcdll = ctypes.CDLL(self.information['dir_path']+'MCI_inputData/refs/libstraylight.so') #dylib

        self.slcdll.Calculate.argtypes = [ctypes.c_double, ctypes.POINTER(ctypes.c_double),
                                         ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double),
@@ -1003,7 +1003,7 @@ def cal_PSF_new(channel,wfetimes,oversampling):
        #waven       
        # waven=4
        # fieldn=10
        file='../MCI_inputData/MCI_wavefront/wave_'+str(waven+1)+'/wavefront/opd_'+str(i+1)+'.mat'
        file=self.information['dir_path']+'MCI_inputData/MCI_wavefront/wave_'+str(waven+1)+'/wavefront/opd_'+str(i+1)+'.mat'
        data=sio.loadmat(file)
        opd=data['opd']  ## opd data;
        psf[channel][i,:,:]=opd2psf(wfetimes*opd, cwave[channel],oversampling)
@@ -1031,7 +1031,7 @@ def cal_PSF_new(channel,wfetimes,oversampling):
    
    newd=fits.HDUList([hdu1,hdu2,hdu3])
    
    PSFfilename='../MCI_inputData/PSF/PSF_'+channel+'.fits'
    PSFfilename=self.information['dir_path']+'MCI_inputData/PSF/PSF_'+channel+'.fits'
    
    newd.writeto(PSFfilename,overwrite=True)
        
@@ -1055,7 +1055,7 @@ def cal_Filter_PSF(wfetimes):
    
    wavelist =np.array([255, 337,419,501,583,665,747,829,911,1000])
  
    filterP=np.load('../MCI_inputData/MCI_filters/mci_filterPWTC.npy',allow_pickle=True).item()
    filterP=np.load(self.information['dir_path']+'MCI_inputData/MCI_filters/mci_filterPWTC.npy',allow_pickle=True).item()
    
    fn=np.arange(1,101,1)   ### PSF field point    
    ffx= 0.1+ 0.02222222*((fn-1)%10)
@@ -1097,7 +1097,7 @@ def cal_Filter_PSF(wfetimes):
            #waven       
            # waven=4
            # fieldn=10
            file='../MCI_input/MCI_wavefront/wave_'+str(waven+1)+'/wavefront/opd_'+str(ii+1)+'.mat'
            file=self.information['dir_path']+'MCI_input/MCI_wavefront/wave_'+str(waven+1)+'/wavefront/opd_'+str(ii+1)+'.mat'
            data=sio.loadmat(file)
            opd=data['opd']  ## opd data;
            for kk in range(7):
@@ -1111,7 +1111,7 @@ def cal_Filter_PSF(wfetimes):
                if ii==0:
                    psf[filtername]['psf_iwave'][kk]=wavek
                
        np.save('../MCI_inputData/PSF/'+filtername+'_PSF.npy', psf[filtername])     
        np.save(self.information['dir_path']+'mci_sim_result/'+filtername+'_PSF.npy', psf[filtername])     
        
    return 

@@ -1258,10 +1258,10 @@ class MCIsimulator():
        self.information['I_filters']=["z",      "y",    "F815N", "CBI",  "F925N", "F960M",  "F968N",  "F845M" ,"F850LP" ,"F814W"]
        
        #### load telescope efficiency data
        self.tel_eff=np.load('../MCI_inputData/tel_eff/tel_eff.npy',allow_pickle=True).item()
        self.tel_eff=np.load(self.information['dir_path']+('MCI_inputData/tel_eff/tel_eff.npy',allow_pickle=True).item()
        
        #### load MCI filter data
        self.filterP=np.load('../MCI_inputData/MCI_filters/mci_filterPWTC.npy',allow_pickle=True).item()    
        self.filterP=np.load(self.information['dir_path']+'MCI_inputData/MCI_filters/mci_filterPWTC.npy',allow_pickle=True).item()    
        
    ###########################################################################
    
@@ -1270,10 +1270,25 @@ class MCIsimulator():
        result_day=now.strftime("%Y-%m-%d")
        #self.result_path='../MCI_simData_'+result_day        
        
        if os.getcwd() =='/home/zjyan/work/MCI/simulator':
            self.result_path='/data/mci_simData/'+result_day  ### CSST1      
        # if os.getcwd() =='/home/zjyan/work/MCI/simulator':
        #     self.result_path='/data/mci_simData/'+result_day  ### CSST1      
        # else:
        #     self.result_path='/home/yan/MCI/simData/'+result_day ### my PC
        
        if self.information['dir_path'] == '/nfsdata/share/simulation-unittest/mci_sim/':
            self.result_path = self.information['dir_path'] + \
                'mci_sim_result/'+result_day
        else:
            self.result_path='/home/yan/MCI/simData/'+result_day ### my PC

            home_path = os.environ['HOME']

            if home_path == '/home/yan':

                self.result_path = '../MCI_simData/'+self.source+ss+result_day
            else:
                self.result_path = '/data/mcisimdata/'+result_day
                    
                    
        
        if os.path.isdir(self.result_path)==False:
            os.mkdir(self.result_path)
@@ -1547,13 +1562,13 @@ class MCIsimulator():
        self.filter_psf=dict()
        
        filtername=self.filter_g
        self.filter_psf['g']=np.load('../MCI_inputData/PSF/'+filtername+'_PSF.npy', allow_pickle=True).item()
        self.filter_psf['g']=np.load(information['dir_path']+'MCI_inputData/PSF/'+filtername+'_PSF.npy', allow_pickle=True).item()
        
        filtername=self.filter_r
        self.filter_psf['r']=np.load('../MCI_inputData/PSF/'+filtername+'_PSF.npy', allow_pickle=True).item()
        self.filter_psf['r']=np.load(information['dir_path']+'MCI_inputData/PSF/'+filtername+'_PSF.npy', allow_pickle=True).item()
        
        filtername=self.filter_i
        self.filter_psf['i']=np.load('../MCI_inputData/PSF/'+filtername+'_PSF.npy', allow_pickle=True).item()
        self.filter_psf['i']=np.load(information['dir_path']+'MCI_inputData/PSF/'+filtername+'_PSF.npy', allow_pickle=True).item()
       
        return  
    
@@ -2388,19 +2403,19 @@ class MCIsimulator():
        """
    
        # read solar template
        solar_template = pd.read_csv('../MCI_inputData/refs/solar_spec.dat', sep='\s+',
        solar_template = pd.read_csv(information['dir_path']+'MCI_inputData/refs/solar_spec.dat', sep='\s+',
                                   header=None, comment='#')
        template_wave = solar_template[0].values
        template_flux = solar_template[1].values
    
        # read earth shine surface brightness
        earthshine_curve = pd.read_csv('../MCI_inputData/refs/earthshine.dat',
        earthshine_curve = pd.read_csv(information['dir_path']+'MCI_inputData/refs/earthshine.dat',
                                   header=None, comment='#')
        angle = earthshine_curve[0].values
        surface_brightness = earthshine_curve[1].values
    
        # read V-band throughtput
        cat_filter_V = pd.read_csv('../MCI_inputData/refs/filter_Bessell_V.dat', sep='\s+',
        cat_filter_V = pd.read_csv(information['dir_path']+'MCI_inputData/refs/filter_Bessell_V.dat', sep='\s+',
                                   header=None, comment='#')
        filter_wave = cat_filter_V[0].values
        filter_response = cat_filter_V[1].values
@@ -2467,7 +2482,7 @@ class MCIsimulator():
        lamda = abs(lb_obj.lon.degree - lb_sun.lon.degree)
    
        # interpolated zodical surface brightness at 0.5 um
        zodi = pd.read_csv('../MCI_inputData/refs/zodi_map.dat', sep='\s+', header=None, comment='#')
        zodi = pd.read_csv(information['dir_path']+'MCI_inputData/refs/zodi_map.dat', sep='\s+', header=None, comment='#')
        beta_angle = np.array([0, 5, 10, 15, 20, 25, 30, 45, 60, 75])
        lamda_angle = np.array([0, 5, 10, 15, 20, 25, 30, 35, 40, 45,
                              60, 75, 90, 105, 120, 135, 150, 165, 180])
@@ -2476,7 +2491,7 @@ class MCIsimulator():
        zodi_obj = f(beta, lamda)       # 10^�? W m�? sr�? um�?
    
        # read the zodical spectrum in the ecliptic
        cat_spec = pd.read_csv('../MCI_inputData/refs/solar_spec.dat', sep='\s+', header=None, comment='#')
        cat_spec = pd.read_csv(information['dir_path']+'MCI_inputData/refs/solar_spec.dat', sep='\s+', header=None, comment='#')
        wave = cat_spec[0].values       # A
        spec0 = cat_spec[1].values      # 10^-8 W m^�? sr^�? μm^�?
        zodi_norm = 252                 # 10^-8 W m^�? sr^�? μm^�?
@@ -2671,7 +2686,7 @@ class MCIsimulator():
            print('k2=',k2)
            
            #  
            filename='../MCI_inputData/galaxy_Input/noLens_SED_IMG_0.025_230626/Lens_img_cut_IMG_'+str(k2+1)+'.fits'  
            filename=information['dir_path']+'MCI_inputData/galaxy_Input/Lens_SED_IMG_0.025_230626/Lens_img_cut_IMG_'+str(k2+1)+'.fits'  
           
            self.log.info('galaxy_Input image path is: %s' %(filename))  
            
@@ -2682,7 +2697,7 @@ class MCIsimulator():
            srcs_cat=fits.open(filename)
                      
            #### load galaxy SED fitsfile  ###
            filename='../MCI_inputData/galaxy_Input/noLens_SED_IMG_0.025_230626/Lens_img_cut_SED_'+str(k2+1)+'.fits'  
            filename=information['dir_path']+'MCI_inputData/galaxy_Input/Lens_SED_IMG_0.025_230626/Lens_img_cut_SED_'+str(k2+1)+'.fits'  
            srcs_sed=fits.open(filename) 
            
            self.log.info('galaxy_Input SED path is: %s' %(filename))  
@@ -3322,7 +3337,7 @@ class MCIsimulator():
        .. Warning:: This method does not work if the input file has exactly one line.
        """
        #######################################################################
        cosmetics = np.loadtxt('../MCI_inputData/data/Cosmetics_g.txt')
        cosmetics = np.loadtxt(information['dir_path']+'MCI_inputData/data/Cosmetics_g.txt')

        x = np.round(cosmetics[:, 0]).astype(int) ## row number
        y = np.round(cosmetics[:, 1]).astype(int) ## col number
@@ -3339,7 +3354,7 @@ class MCIsimulator():
                self.log.info('x=%i, y=%i, value=%f' % (xc, yc, val))
        ######################################################################
        #######################################################################
        cosmetics = np.loadtxt('../MCI_inputData/data/Cosmetics_r.txt')
        cosmetics = np.loadtxt(self.information['dir_path']+'MCI_inputData/data/Cosmetics_r.txt')

        x = np.round(cosmetics[:, 0]).astype(int) ## row number
        y = np.round(cosmetics[:, 1]).astype(int) ## col number
@@ -3356,7 +3371,7 @@ class MCIsimulator():
                self.log.info('x=%i, y=%i, value=%f' % (xc, yc, val))
##############################################################################
        #######################################################################
        cosmetics = np.loadtxt('../MCI_inputData/data/Cosmetics_i.txt')
        cosmetics = np.loadtxt(self.information['dir_path']+'MCI_inputData/data/Cosmetics_i.txt')

        x = np.round(cosmetics[:, 0]).astype(int) ## row number
        y = np.round(cosmetics[:, 1]).astype(int) ## col number
@@ -4000,7 +4015,7 @@ class MCIsimulator():
        
        if self.orbit_pars[-1,0]<t2jd: ## orbit parameters are not in currenct txt file
            self.orbit_file_num=self.orbit_file_num+1
            fn='../MCI_inputData/TianCe/orbit20160925/'+str(self.orbit_file_num)+'.txt';
            fn=self.information['dir_path']+'MCI_inputData/TianCe/orbit20160925/'+str(self.orbit_file_num)+'.txt';
            self.orbit_pars=np.loadtxt(fn);
            self.orbit_exp_num=0
            
@@ -5129,7 +5144,7 @@ class MCIsimulator():
            
        for k in range(1,50,1):         
                        
            fn='../MCI_inputData/TianCe/orbit20160925/'+str(k)+'.txt';
            fn=self.information['dir_path']+'MCI_inputData/TianCe/orbit20160925/'+str(k)+'.txt';
            d=np.loadtxt(fn);
 
            for kk in range(len(d[:,0])):
@@ -5159,7 +5174,7 @@ class MCIsimulator():
            
        else:
            
            fn='../MCI_inputData/TianCe/orbit20160925/'+str(k+1)+'.txt';            
            fn=self.information['dir_path']+'MCI_inputData/TianCe/orbit20160925/'+str(k+1)+'.txt';            
            d=np.loadtxt(fn);  
            
            self.orbit_pars=d
+18 −20
Original line number Diff line number Diff line
[TEST]

### user should define file path below
inData_path =/home/yan/MCI_sim_Fabu/MCI_inputData
dir_path=mci_sim/MCI_inputData/

result_path =/home/yan/MCI_sim_Fabu/mci_sim_result
result_path=mci_sim/mci_sim_result/


#size of the output image array, xsize is column, ysize is row, xsize = 9216,ysize = 9232
xsize = 1000
ysize = 1000 
xsize =9216
ysize =9232

##prescan and overscan , do not change!!!
##overscanx = column, overscany =row
prescan  = 27
overscan = 320

###sourcein = XDF, DARK, FLAT, BIAS

sourcein=XDF

##################################################
####                                          ####    
####Control flags (can be yes/no) ####
####Control flags (can be yes/no, true/false) ####
##################################################

cosmicRays     = yes

darknoise      = yes 

cosmetics      = yes

radiationDamage= no
radiationDamage= yes

bleeding       = yes

@@ -45,7 +39,7 @@ TianceEffect = yes

intscale       = yes 

ghosts         = yes
ghosts         = no

shutterEffect      = yes                              

@@ -57,12 +51,15 @@ appFatt = no

sky_shift_rot      = yes

distortion         = no
distortion         = yes

sim_star           = yes

sim_galaxy         = yes   

save_starpsf       = no

save_cosmicrays    = no
##############################################                             
##############################################                            

@@ -76,15 +73,15 @@ dark = 0.001
exptime = 300.0

###PNRU matrix sigma
prnu_sigma=0.001
flatsigma=0.001

### cosmicray coveringFraction
coveringFraction=1.0
coveringFraction=0.1


#offset from the object, note that at the moment this is fixed, but in reality a focal plane position dependent.
ghostOffsetX = 50
ghostOffsetY = 50
ghostOffsetX = 100
ghostOffsetY = 100
ghostRatio  = 1e-04


@@ -96,6 +93,7 @@ fatter=1.0

difusion=0.1
  
  
### the choosen Filters in three CCDs   
filter_g=u
filter_r=F555W
+6 −6
Original line number Diff line number Diff line
@@ -11,12 +11,12 @@ Modified-History:

import unittest
import os
from csst_ifs_sim import csst_ifs_sim
import subprocess
from csst_mci_sim import mci_sim

import sys

class TestDemoFunction(unittest.TestCase):
    def test_ifs_sim_1(self):
    def test_mci_sim_1(self):
        """
        Aim
        ---
@@ -32,17 +32,17 @@ class TestDemoFunction(unittest.TestCase):
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'],'ifs_sim/')
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'],'mci_sim/')
        print(dir_path)
        print(sys.version )
        ###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
        
        configfile = './ifs_data/IFS_sim_C90.config'
        configfile = './mci_data/mci_all_9K.config'
      
        sourcein = 'SCI'
        print(configfile)
                
        csst_ifs_sim.runIFSsim(sourcein,  configfile, dir_path, 1, 'no')
        mci_sim.runMCIsim(sourcein,  configfile, dir_path, 1)
        self.assertEqual(
            1 , 1,
            "case 1: SCI sim passes.",