Commit 5070c190 authored by Yan Zhaojun's avatar Yan Zhaojun
Browse files

update

parent 8165a134
Pipeline #7134 failed with stage
in 0 seconds
......@@ -15,7 +15,7 @@ parameters in parallel and serial direction.
import numpy as np
#CDM03bidir
# CDM03bidir
class CDM03bidir():
"""
Class to run CDM03 CTI model, class Fortran routine to perform the actual CDM03 calculations.
......@@ -27,6 +27,7 @@ class CDM03bidir():
:param log: instance to Python logging
:type log: logging instance
"""
def __init__(self, settings, data, log=None):
"""
Class constructor.
......@@ -39,7 +40,8 @@ class CDM03bidir():
:type log: logging instance
"""
self.data = data
self.values = dict(quads=(0,1,2,3), xsize=2048, ysize=2066, dob=0.0, rdose=8.0e9)
self.values = dict(quads=(0, 1, 2, 3), xsize=2048,
ysize=2066, dob=0.0, rdose=8.0e9)
self.values.update(settings)
self.log = log
self._setupLogger()
......@@ -51,40 +53,41 @@ class CDM03bidir():
self.params = dict(beta_p=0.6, beta_s=0.6, fwc=100000., vth=1.168e7, vg=6.e-11, t=1.0e-3,
sfwc=700000., svg=1.0e-10, st=1.0e-6, parallel=1., serial=0.)
#update with inputs
# update with inputs
self.params.update(self.values)
#read in trap information
trapdata = np.loadtxt(self.values['dir_path']+self.values['paralleltrapfile'])
# read in trap information
trapdata = np.loadtxt(
self.values['dir_path']+self.values['paralleltrapfile'])
if trapdata.ndim > 1:
self.nt_p = trapdata[:, 0]
self.sigma_p = trapdata[:, 1]
self.taur_p = trapdata[:, 2]
else:
#only one trap species
# only one trap species
self.nt_p = [trapdata[0],]
self.sigma_p = [trapdata[1],]
self.taur_p = [trapdata[2],]
trapdata = np.loadtxt(self.values['dir_path']+self.values['serialtrapfile'])
trapdata = np.loadtxt(
self.values['dir_path']+self.values['serialtrapfile'])
if trapdata.ndim > 1:
self.nt_s = trapdata[:, 0]
self.sigma_s = trapdata[:, 1]
self.taur_s = trapdata[:, 2]
else:
#only one trap species
# only one trap species
self.nt_s = [trapdata[0],]
self.sigma_s = [trapdata[1],]
self.taur_s = [trapdata[2],]
#scale thibaut's values
# scale thibaut's values
if 'thibaut' in self.values['parallelTrapfile']:
self.nt_p /= 0.576 #thibaut's values traps / pixel
self.sigma_p *= 1.e4 #thibaut's values in m**2
self.nt_p /= 0.576 # thibaut's values traps / pixel
self.sigma_p *= 1.e4 # thibaut's values in m**2
if 'thibaut' in self.values['serialTrapfile']:
self.nt_s *= 0.576 #thibaut's values traps / pixel #should be division?
self.sigma_s *= 1.e4 #thibaut's values in m**2
self.nt_s *= 0.576 # thibaut's values traps / pixel #should be division?
self.sigma_s *= 1.e4 # thibaut's values in m**2
def _setupLogger(self):
"""
......@@ -94,7 +97,6 @@ class CDM03bidir():
# if self.log is None:
# self.logger = False
def applyRadiationDamage(self, data, iquadrant=0):
"""
Apply radian damage based on FORTRAN CDM03 model. The method assumes that
......@@ -133,7 +135,7 @@ class CDM03bidir():
:return: image that has been run through the CDM03 model
:rtype: ndarray
"""""
#return data
# return data
iflip = iquadrant / 2
jflip = iquadrant % 2
......@@ -158,8 +160,8 @@ class CDM03bidir():
self.log.info('jflip=%i' % jflip)
#################################################################################
###modify
#sys.path.append('../so')
# modify
# sys.path.append('../so')
from ifs_so import cdm03bidir
# from ifs_so.cdm03.cpython-38-x86_64-linux-gnu import cdm03bidir
# import cdm03bidir
......@@ -171,14 +173,9 @@ class CDM03bidir():
params,
[data.shape[0], data.shape[1], len(self.nt_p), len(self.nt_s), len(self.params)])
return np.asanyarray(CTIed)
#################################################################################################################
#################################################################################################################
......@@ -5,6 +5,9 @@ Created on Thu Apr 11 15:18:57 2024
@author: yan
"""
from scipy.interpolate import InterpolatedUnivariateSpline
import logging.handlers
import logging
from astropy.utils.iers import conf
import galsim
from scipy.integrate import simps
......@@ -28,7 +31,7 @@ import astropy.coordinates as coord
import ctypes
import sys
##sys.path.append('./csst_ifs_sim')
# sys.path.append('./csst_ifs_sim')
conf.auto_max_age = None
"""
......@@ -104,6 +107,7 @@ class CDM03bidir():
:param log: instance to Python logging
:type log: logging instance
"""
def __init__(self, settings, data, log=None):
"""
Class constructor.
......@@ -116,7 +120,8 @@ class CDM03bidir():
:type log: logging instance
"""
self.data = data
self.values = dict(quads=(0,1,2,3), xsize=2048, ysize=2066, dob=0.0, rdose=8.0e9)
self.values = dict(quads=(0, 1, 2, 3), xsize=2048,
ysize=2066, dob=0.0, rdose=8.0e9)
self.values.update(settings)
self.log = log
self._setupLogger()
......@@ -128,40 +133,41 @@ class CDM03bidir():
self.params = dict(beta_p=0.6, beta_s=0.6, fwc=100000., vth=1.168e7, vg=6.e-11, t=1.0e-3,
sfwc=700000., svg=1.0e-10, st=1.0e-6, parallel=1., serial=0.)
#update with inputs
# update with inputs
self.params.update(self.values)
#read in trap information
trapdata = np.loadtxt(self.values['dir_path']+self.values['paralleltrapfile'])
# read in trap information
trapdata = np.loadtxt(
self.values['dir_path']+self.values['paralleltrapfile'])
if trapdata.ndim > 1:
self.nt_p = trapdata[:, 0]
self.sigma_p = trapdata[:, 1]
self.taur_p = trapdata[:, 2]
else:
#only one trap species
# only one trap species
self.nt_p = [trapdata[0],]
self.sigma_p = [trapdata[1],]
self.taur_p = [trapdata[2],]
trapdata = np.loadtxt(self.values['dir_path']+self.values['serialtrapfile'])
trapdata = np.loadtxt(
self.values['dir_path']+self.values['serialtrapfile'])
if trapdata.ndim > 1:
self.nt_s = trapdata[:, 0]
self.sigma_s = trapdata[:, 1]
self.taur_s = trapdata[:, 2]
else:
#only one trap species
# only one trap species
self.nt_s = [trapdata[0],]
self.sigma_s = [trapdata[1],]
self.taur_s = [trapdata[2],]
#scale thibaut's values
# scale thibaut's values
if 'thibaut' in self.values['parallelTrapfile']:
self.nt_p /= 0.576 #thibaut's values traps / pixel
self.sigma_p *= 1.e4 #thibaut's values in m**2
self.nt_p /= 0.576 # thibaut's values traps / pixel
self.sigma_p *= 1.e4 # thibaut's values in m**2
if 'thibaut' in self.values['serialTrapfile']:
self.nt_s *= 0.576 #thibaut's values traps / pixel #should be division?
self.sigma_s *= 1.e4 #thibaut's values in m**2
self.nt_s *= 0.576 # thibaut's values traps / pixel #should be division?
self.sigma_s *= 1.e4 # thibaut's values in m**2
def _setupLogger(self):
"""
......@@ -169,7 +175,6 @@ class CDM03bidir():
"""
self.logger = True
def applyRadiationDamage(self, data, iquadrant=0):
"""
Apply radian damage based on FORTRAN CDM03 model. The method assumes that
......@@ -208,7 +213,7 @@ class CDM03bidir():
:return: image that has been run through the CDM03 model
:rtype: ndarray
"""""
#return data
# return data
iflip = iquadrant / 2
jflip = iquadrant % 2
......@@ -235,8 +240,8 @@ class CDM03bidir():
############################################
#################################################################################
###modify
#sys.path.append('../so')
# modify
# sys.path.append('../so')
#from .ifs_so import cdm03bidir
try:
from ifs_so import cdm03bidir
......@@ -253,13 +258,13 @@ class CDM03bidir():
params,
[data.shape[0], data.shape[1], len(self.nt_p), len(self.nt_s), len(self.params)])
return np.asanyarray(CTIed)
#################################################################################################################
#################################################################################################################
"""
These functions can be used for logging information.
......@@ -267,8 +272,6 @@ These functions can be used for logging information.
:version: 0.3
"""
import logging
import logging.handlers
def lg(log_filename, loggername='logger'):
......@@ -285,9 +288,10 @@ def lg(log_filename, loggername='logger'):
logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(log_filename)
#maxBytes=20, backupCount=5)
# maxBytes=20, backupCount=5)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
formatter = logging.Formatter(
'%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
# add formatter to ch
handler.setFormatter(formatter)
# add handler to logger
......@@ -319,11 +323,11 @@ def IFSinformation():
#########################################################################################################
#out = dict(readnoise=4, pixel_size=0.1, dark=0.0008333, fullwellcapacity=90000, bluesize=4000, redsize=6000, readtime=300.)
out=dict()
out.update({'dob' : 0, 'rdose' : 8.0e9,
'parallelTrapfile' : 'cdm_euclid_parallel.dat', 'serialTrapfile' : 'cdm_euclid_serial.dat',
'beta_s' : 0.6, 'beta_p': 0.6, 'fwc' : 90000, 'vth' : 1.168e7, 't' : 20.48e-3, 'vg' : 6.e-11,
'st' : 5.0e-6, 'sfwc' : 730000., 'svg' : 1.0e-10})
out = dict()
out.update({'dob': 0, 'rdose': 8.0e9,
'parallelTrapfile': 'cdm_euclid_parallel.dat', 'serialTrapfile': 'cdm_euclid_serial.dat',
'beta_s': 0.6, 'beta_p': 0.6, 'fwc': 90000, 'vth': 1.168e7, 't': 20.48e-3, 'vg': 6.e-11,
'st': 5.0e-6, 'sfwc': 730000., 'svg': 1.0e-10})
return out
......@@ -343,7 +347,6 @@ def CCDnonLinearityModel(data, beta=6e-7):
#############################################################################
from scipy.interpolate import InterpolatedUnivariateSpline
class cosmicrays():
"""
......@@ -369,6 +372,7 @@ class cosmicrays():
:param information: cosmic ray track information (file containing track length and energy information) and
exposure time.
"""
def __init__(self, log, image, crInfo=None, information=None):
"""
Cosmic ray generation class. Can either draw events from distributions or
......@@ -380,14 +384,14 @@ class cosmicrays():
:param information: cosmic ray track information (file containing track length and energy information) and
exposure time.
"""
#setup logger
# setup logger
self.log = log
#image and size
self.image = image.copy()
self.ysize, self.xsize = self.image.shape
#set up the information dictionary, first with defaults and then overwrite with inputs if given
# set up the information dictionary, first with defaults and then overwrite with inputs if given
self.information = (dict(cosmicraylengths='/home/yan/csst-master/data/cdf_cr_length.dat',
cosmicraydistance='/home/yan/csst-master/data/cdf_cr_total.dat',
exptime=565))
......@@ -413,10 +417,10 @@ class cosmicrays():
:return: cosmic ray map (image)
:rtype: nd-array
"""
#create empty array
# create empty array
crImage = np.zeros((self.ysize, self.xsize), dtype=np.float64)
#x and y shifts
# x and y shifts
dx = l * np.cos(phi) / 2.
dy = l * np.sin(phi) / 2.
mskdx = np.abs(dx) < 1e-8
......@@ -446,7 +450,7 @@ class cosmicrays():
jhi[msk] = self.ysize
jhi = jhi.astype(int)
#loop over the individual events
# loop over the individual events
for i, luminosity in enumerate(lum):
n = 0 # count the intercepts
......@@ -454,7 +458,7 @@ class cosmicrays():
x = []
y = []
#Compute X intercepts on the pixel grid
# Compute X intercepts on the pixel grid
if ilo[i] < ihi[i]:
for xcoord in range(ilo[i], ihi[i]):
ok = (xcoord - x0[i]) / dx[i]
......@@ -472,7 +476,7 @@ class cosmicrays():
x.append(xcoord)
y.append(y0[i] + ok * dy[i])
#Compute Y intercepts on the pixel grid
# Compute Y intercepts on the pixel grid
if jlo[i] < jhi[i]:
for ycoord in range(jlo[i], jhi[i]):
ok = (ycoord - y0[i]) / dy[i]
......@@ -490,13 +494,13 @@ class cosmicrays():
x.append(x0[i] + ok * dx[i])
y.append(ycoord)
#check if no intercepts were found
# check if no intercepts were found
if n < 1:
xc = int(np.floor(x0[i]))
yc = int(np.floor(y0[i]))
crImage[yc, xc] += luminosity
#Find the arguments that sort the intersections along the track
# Find the arguments that sort the intersections along the track
u = np.asarray(u)
x = np.asarray(x)
y = np.asarray(y)
......@@ -507,7 +511,7 @@ class cosmicrays():
x = x[args]
y = y[args]
#Decide which cell each interval traverses, and the path length
# Decide which cell each interval traverses, and the path length
for i in range(1, n - 1):
w = u[i + 1] - u[i]
cx = int(1 + np.floor((x[i + 1] + x[i]) / 2.))
......@@ -518,8 +522,6 @@ class cosmicrays():
return crImage
def _drawEventsToCoveringFactor(self, coveringFraction=3.0, limit=1000, verbose=False):
"""
Generate cosmic ray events up to a covering fraction and include it to a cosmic ray map (self.cosmicrayMap).
......@@ -535,37 +537,39 @@ class cosmicrays():
:return: None
"""
if coveringFraction>1 or coveringFraction<0.1:
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
cr_n = int(295 * self.information['exptime'] / 565. * coveringFraction / 1.4)
# how many events to draw at once, too large number leads to exceeding the covering fraction
cr_n = int(
295 * self.information['exptime'] / 565. * coveringFraction / 1.4)
covering = 0.0
while covering < coveringFraction:
#pseudo-random numbers taken from a uniform distribution between 0 and 1
# pseudo-random numbers taken from a uniform distribution between 0 and 1
np.random.seed()
luck = np.random.rand(cr_n)
#draw the length of the tracks
ius = InterpolatedUnivariateSpline(self.cr['cr_cdf'], self.cr['cr_u'])
# draw the length of the tracks
ius = InterpolatedUnivariateSpline(
self.cr['cr_cdf'], self.cr['cr_u'])
self.cr['cr_l'] = ius(luck)
if limit is None:
ius = InterpolatedUnivariateSpline(self.cr['cr_cde'], self.cr['cr_v'])
ius = InterpolatedUnivariateSpline(
self.cr['cr_cde'], self.cr['cr_v'])
self.cr['cr_e'] = ius(luck)
else:
#set the energy directly to the limit
# set the energy directly to the limit
self.cr['cr_e'] = np.asarray([limit,])
#Choose the properties such as positions and an angle from a random Uniform dist
# Choose the properties such as positions and an angle from a random Uniform dist
np.random.seed()
cr_x = self.xsize * np.random.rand(int(np.floor(cr_n)))
......@@ -575,14 +579,14 @@ class cosmicrays():
np.random.seed()
cr_phi = np.pi * np.random.rand(int(np.floor(cr_n)))
#find the intercepts
self.cosmicrayMap += self._cosmicRayIntercepts(self.cr['cr_e'], cr_x, cr_y, self.cr['cr_l'], cr_phi)
# find the intercepts
self.cosmicrayMap += self._cosmicRayIntercepts(
self.cr['cr_e'], cr_x, cr_y, self.cr['cr_l'], cr_phi)
#count the covering factor
# count the covering factor
area_cr = np.count_nonzero(self.cosmicrayMap)
covering = 100.*area_cr / (self.xsize*self.ysize)
def addUpToFraction(self, coveringFraction, limit=None, verbose=False):
"""
Add cosmic ray events up to the covering Fraction.
......@@ -597,9 +601,10 @@ class cosmicrays():
:return: image with cosmic rays
:rtype: ndarray
"""
self._drawEventsToCoveringFactor(coveringFraction, limit=limit, verbose=verbose)
self._drawEventsToCoveringFactor(
coveringFraction, limit=limit, verbose=verbose)
#paste cosmic rays
# paste cosmic rays
self.image += self.cosmicrayMap
return self.image
......@@ -1148,6 +1153,8 @@ def beta_angle(x_sat, y_sat, z_sat, vx_sat, vy_sat, vz_sat, ra_obj, dec_obj):
return angle
###############################################################################
def find_min(arr):
min_val = arr[0]
min_index = 0
......@@ -1158,6 +1165,8 @@ def find_min(arr):
return min_val, min_index
#################################
def find_max(arr):
max_val = arr[0]
max_index = 0
......@@ -1558,9 +1567,10 @@ def get_dx_dy_blue(wave):
# dxdl = 0.2*np.array([-9.1519, -1.00000000e-06, 3.50000000e-08, -5.00000000e-09,
# -1.70000000e-11, 4.00949787e-12, -6.16873452e-15])
##### update @2024.10.16
dydl=np.array([ 2447.9, -1/0.141, 0.0000075, 0.00000078, -0.000000000007] ) ; #色散方向
dxdl=np.array([ 5.46, -1.5e-02, 3.5e-08, -5.0e-09]) #垂直方向
# update @2024.10.16
dydl = np.array([2447.9, -1/0.141, 0.0000075,
0.00000078, -0.000000000007]) # 色散方向
dxdl = np.array([5.46, -1.5e-02, 3.5e-08, -5.0e-09]) # 垂直方向
dx = 0.0
dy = 0.0
......@@ -1593,9 +1603,10 @@ def get_dx_dy_red(wave):
# 0.0000028, -0.0000000000007, 0.0, 0.0]) # 色散方向
# dxdl = 0.00325*np.array([-1638.8, 4.0e-2, 5.500e-3, -
# 5.2e-10, 1.7000e-10, 7.1e-13, -5.16e-15]) # 垂直方向
## update @2014.10.17
dydl=np.array([3519.78622, -1/0.1555, 0.0000048, 0.00000028, -0.0000000000007] ) #色散方向
dxdl=np.array([-5.6305, 1.0e-2, 5.500e-7, -5.2e-10]) #垂直方向
# update @2014.10.17
dydl = np.array([3519.78622, -1/0.1555, 0.0000048,
0.00000028, -0.0000000000007]) # 色散方向
dxdl = np.array([-5.6305, 1.0e-2, 5.500e-7, -5.2e-10]) # 垂直方向
dx = 0.0
dy = 0.0
......@@ -2003,15 +2014,15 @@ class IFSsimulator():
self._createEmpty()
self.information['dir_path']=dir_path
self.information['dir_path'] = dir_path
self.information['result_path']=result_path
self.information['result_path'] = result_path
self.information['debug'] = debug
self.source=sourcein
self.source = sourcein
self.simnumber=simnumber
self.simnumber = simnumber
############################################################
......@@ -2019,7 +2030,6 @@ class IFSsimulator():
result_day = now.strftime("%Y-%m-%d")
if self.source == 'LAMP':
if applyhole == 'yes':
ss = '_with_hole_'
......@@ -2042,9 +2052,8 @@ class IFSsimulator():
# else:
# self.result_path = '/data/ifspip/CCD_ima/'+self.source+ss+result_day
self.result_path= self.information['result_path']+'/'+self.source+ss+result_day
self.result_path = self.information['result_path'] + \
'/'+self.source+ss+result_day
print(self.information['result_path'])
if os.path.isdir(self.result_path) == False:
......@@ -2163,14 +2172,14 @@ class IFSsimulator():
slice_red['py'][i] = 50+250+randRedpos[i]*4
slice_red['px'][i] = 3.55/0.015*(i-16)+1190.0+118
#######
###### flip the fringe up to down,down to up@2024.10.16
# flip the fringe up to down,down to up@2024.10.16
self.slice_blue = dict()
self.slice_red = dict()
self.slice_blue['py'] =2000-slice_blue['py']
self.slice_blue['py'] = 2000-slice_blue['py']
self.slice_blue['px'] = slice_blue['px']
self.slice_red['py'] =3000-slice_red['py']
self.slice_red['px'] =slice_red['px']
self.slice_red['py'] = 3000-slice_red['py']
self.slice_red['px'] = slice_red['px']
#######################################################################
maskSlice = dict()
......@@ -2420,51 +2429,50 @@ 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:
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:
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:
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:
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:
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:
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:
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:
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(
......@@ -2691,57 +2699,55 @@ class IFSsimulator():
"""
self.log.info('readnoise added in blue channel')
if self.information['rn1_b']>10 or self.information['rn1_b']<3:
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:
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:
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:
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:
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:
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:
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:
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
# 33
# blue zone 1
np.random.seed()
......@@ -2861,56 +2867,55 @@ 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:
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:
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:
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:
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:
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:
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:
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:
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')
......@@ -2936,7 +2941,7 @@ class IFSsimulator():
##########third part, means old zone 1 ###################
self.image_b[0:1344, 2418*2:2418*3] /= self.information['gain3_b']
#### fourth part, means old zone 2
# fourth part, means old zone 2
self.image_b[0:1344, 2418*3:2418*4] /= self.information['gain4_b']
############################################################################
......@@ -2974,50 +2979,50 @@ class IFSsimulator():
"""
if self.information['bias1_b']>2000 or self.information['bias1_b']<100:
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:
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:
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:
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:
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:
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:
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:
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(
......@@ -3264,7 +3269,6 @@ class IFSsimulator():
# def applyImageShift(self):
# """
# Returns
# -------
# None.
......@@ -3368,7 +3372,7 @@ class IFSsimulator():
# y2 = y1+2048
# temp[x1:x2, y1:y2] = np.flipud(np.fliplr(imgb[1024:2048, 2048:4096]))
### update 2024.10.18
# update 2024.10.18
# first part, old OSG part ,## shift: left to right
x1 = 0
x2 = x1+1024
......@@ -3400,7 +3404,6 @@ class IFSsimulator():
y2 = y1+2048
temp[x1:x2, y1:y2] = np.flipud(np.fliplr(imgb[1024:2048, 2048:4096]))
self.image_b = temp
#######################################################################
......@@ -3438,7 +3441,7 @@ class IFSsimulator():
# y2 = y1+3072
# temp[x1:x2, y1:y2] = np.flipud(np.fliplr(imgr[1536:3072, 3072:6144]))
###### update @2024.10.18
# update @2024.10.18
# readout image ,first part, old OSG, shift: left to right
x1 = 0
x2 = x1+1536
......@@ -3470,7 +3473,6 @@ class IFSsimulator():
y2 = y1+3072
temp[x1:x2, y1:y2] = np.flipud(np.fliplr(imgr[1536:3072, 3072:6144]))
self.image_r = temp
return
......@@ -3498,15 +3500,13 @@ class IFSsimulator():
"""
######
###### add random pointing error to telescope, the telescope poingt parameter in
###### fits header have random pointing error
# add random pointing error to telescope, the telescope poingt parameter in
# fits header have random pointing error
ud_ra = np.random.random() # Choose a random shift in arcsec
self.information['ra_pnt0']=self.information['dec_pnt0']+0.01*ud_ra
ud_dec= np.random.random()
self.information['dec_pnt0']=self.information['dec_pnt0']+0.01*ud_dec
self.information['ra_pnt0'] = self.information['dec_pnt0']+0.01*ud_ra
ud_dec = np.random.random()
self.information['dec_pnt0'] = self.information['dec_pnt0']+0.01*ud_dec
HeaderTest = 'no'
sim_ver = str(self.information['sim_ver'])
......@@ -4677,7 +4677,6 @@ class IFSsimulator():
#######################################################
# CCD quantum efficiency
CCD_Qe_lam = np.interp(lam, self.CCD_Qe[:, 0], self.CCD_Qe[:, 1])
......@@ -4769,7 +4768,6 @@ class IFSsimulator():
photons_blue.addTo(blue_img)
# fits.writeto('blueImg.fits',blue_img.array,overwrite=True)
if (lam >= 560.0) & (lam <= 1000.0):
......@@ -4896,7 +4894,8 @@ class IFSsimulator():
############### calculate the earthshine and zodiacal noise ,new code 2023.11.1 ############
###############
self.log.info('Real telescope pointing in Ra = %f, Dec = %f' % (self.information['ra_pnt0'], self.information['dec_pnt0']))
self.log.info('Real telescope pointing in Ra = %f, Dec = %f' % (
self.information['ra_pnt0'], self.information['dec_pnt0']))
ra = self.information['ra_pnt0']
dec = self.information['dec_pnt0']
......@@ -4905,11 +4904,13 @@ class IFSsimulator():
if self.appbianpai:
sn=self.simnumber-1;
x_sat = float(self.bianpai_data['x_sat'][sn*5+self.exptime_start_index])
y_sat = float(self.bianpai_data['y_sat'][sn*5+self.exptime_start_index])
z_sat = float(self.bianpai_data['z_sat'][sn*5+self.exptime_start_index])
sn = self.simnumber-1
x_sat = float(self.bianpai_data['x_sat']
[sn*5+self.exptime_start_index])
y_sat = float(self.bianpai_data['y_sat']
[sn*5+self.exptime_start_index])
z_sat = float(self.bianpai_data['z_sat']
[sn*5+self.exptime_start_index])
###
else:
......@@ -4997,14 +4998,20 @@ class IFSsimulator():
############## doppler effect to photons.wavelength #############
if self.appbianpai:
sn=self.simnumber-1;
x_sat = float(self.bianpai_data['x_sat'][sn*5+self.exptime_start_index])
y_sat = float(self.bianpai_data['y_sat'][sn*5+self.exptime_start_index])
z_sat = float(self.bianpai_data['z_sat'][sn*5+self.exptime_start_index])
vx_sat = float(self.bianpai_data['vx_sat'][sn*5+self.exptime_start_index])
vy_sat = float(self.bianpai_data['vy_sat'][sn*5+self.exptime_start_index])
vz_sat = float(self.bianpai_data['vz_sat'][sn*5+self.exptime_start_index])
sn = self.simnumber-1
x_sat = float(self.bianpai_data['x_sat']
[sn*5+self.exptime_start_index])
y_sat = float(self.bianpai_data['y_sat']
[sn*5+self.exptime_start_index])
z_sat = float(self.bianpai_data['z_sat']
[sn*5+self.exptime_start_index])
vx_sat = float(
self.bianpai_data['vx_sat'][sn*5+self.exptime_start_index])
vy_sat = float(
self.bianpai_data['vy_sat'][sn*5+self.exptime_start_index])
vz_sat = float(
self.bianpai_data['vz_sat'][sn*5+self.exptime_start_index])
else:
......@@ -5033,15 +5040,21 @@ class IFSsimulator():
#################################################
if self.appbianpai:
sn=self.simnumber-1;
p1x = float(self.bianpai_data['x_sat'][sn*5+self.exptime_end_index])
p1y = float(self.bianpai_data['y_sat'][sn*5+self.exptime_end_index])
p1z = float(self.bianpai_data['z_sat'][sn*5+self.exptime_end_index])
p1vx = float(self.bianpai_data['vx_sat'][sn*5+self.exptime_end_index])
p1vy = float(self.bianpai_data['vy_sat'][sn*5+self.exptime_end_index])
p1vz = float(self.bianpai_data['vz_sat'][sn*5+self.exptime_end_index])
sn = self.simnumber-1
p1x = float(self.bianpai_data['x_sat']
[sn*5+self.exptime_end_index])
p1y = float(self.bianpai_data['y_sat']
[sn*5+self.exptime_end_index])
p1z = float(self.bianpai_data['z_sat']
[sn*5+self.exptime_end_index])
p1vx = float(self.bianpai_data['vx_sat']
[sn*5+self.exptime_end_index])
p1vy = float(self.bianpai_data['vy_sat']
[sn*5+self.exptime_end_index])
p1vz = float(self.bianpai_data['vz_sat']
[sn*5+self.exptime_end_index])
else:
......@@ -5052,7 +5065,8 @@ class IFSsimulator():
t2jd = time2jd(t2)
if self.orbit_pars[-1, 0] < t2jd: # orbit parameters are not in currenct txt file
# orbit parameters are not in currenct txt file
if self.orbit_pars[-1, 0] < t2jd:
self.orbit_file_num = self.orbit_file_num+1
fn = self.information['dir_path'] + \
'IFS_inputdata/TianCe/orbit20160925/' + \
......@@ -5394,7 +5408,6 @@ class IFSsimulator():
energy_blue = energy_blue+sum(photons_blue.flux)
#################
# fits.writeto('blueImg.fits',blue_img.array,overwrite=True)
......@@ -5852,14 +5865,11 @@ class IFSsimulator():
self.simnumber = simnumber
#self.configure(simnumber,dir_path,result_path) # print the configfile name and path;
# self.configure(simnumber,dir_path,result_path) # print the configfile name and path;
self.debug = self.information['debug']
if self.information['exptime']>2000 or self.information['exptime']<0:
if self.information['exptime'] > 2000 or self.information['exptime'] < 0:
self.log.error(
'exptime value error, it shoub be in [0, 2000]!')
exit(2)
......@@ -5885,27 +5895,28 @@ class IFSsimulator():
###################################################################
if self.appbianpai:
### load yunxingbianpai csv file
# load yunxingbianpai csv file
############ load star data catlog #####################
starcat=self.information['bianpai_file']
starcat = self.information['bianpai_file']
##starcat='selection_20230517_concat.fits'
# starcat='selection_20230517_concat.fits'
###################################################
self.log.info('Stat catlog file name is %s' % (starcat))
##########################################
df=pd.read_csv(self.information['dir_path']+'IFS_inputdata/TianCe/'+starcat)
df = pd.read_csv(
self.information['dir_path']+'IFS_inputdata/TianCe/'+starcat)
###################################################################
sn=self.simnumber-1;
arr=np.array(df['time'][sn*5:sn*5+5]);
self.exptime_start_jd,self.exptime_start_index=find_min(arr);
self.exptime_end_jd, self.exptime_end_index =find_max(arr);
###self.earthshine_theta=df['earth_angle'][sn*5+index] # in degree
self.dt = jd2time(self.exptime_start_jd);
self.bianpai_data=df;
sn = self.simnumber-1
arr = np.array(df['time'][sn*5:sn*5+5])
self.exptime_start_jd, self.exptime_start_index = find_min(arr)
self.exptime_end_jd, self.exptime_end_index = find_max(arr)
# self.earthshine_theta=df['earth_angle'][sn*5+index] # in degree
self.dt = jd2time(self.exptime_start_jd)
self.bianpai_data = df
##################################################################
else:
......@@ -5917,8 +5928,6 @@ class IFSsimulator():
now_dt = datetime.utcnow()
now_jd = time2jd(now_dt)
for k in range(1, 50, 1):
# fn=father_path+'/IFS_inputdata/TianCe/orbit20160925/'+str(k)+'.txt';
......@@ -5958,7 +5967,6 @@ class IFSsimulator():
##################################################################
##################################################################
self.TianCe_day = self.dt.strftime("%Y-%m-%d")
self.TianCe_exp_start = dt2hmd(self.dt)
......@@ -6182,8 +6190,8 @@ def runIFSsim(sourcein, configfile, dir_path, result_path, iLoop, debug, applyho
simulate = dict()
simulate[iLoop] = IFSsimulator(configfile)
simulate[iLoop].configure(sourcein, dir_path, result_path, iLoop, debug, applyhole) # load the configfile;
simulate[iLoop].configure(sourcein, dir_path, result_path,
iLoop, debug, applyhole) # load the configfile;
if applyhole == 'yes' and sourcein == 'LAMP':
simulate[iLoop].information['holemask'] = 'yes'
......
......@@ -15,7 +15,7 @@ from csst_ifs_sim import csst_ifs_sim
import sys
### sys.path.append('IFS_git/csst_ifs_sim/csst_ifs_sim')
# sys.path.append('IFS_git/csst_ifs_sim/csst_ifs_sim')
class TestDemoFunction(unittest.TestCase):
......@@ -35,9 +35,9 @@ 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'], 'ifs_sim/')
print(dir_path)
print(sys.version )
print(sys.version)
###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
configfile = './csst_ifs_sim/ifs_data/IFS_sim_C90.config'
......@@ -45,14 +45,15 @@ class TestDemoFunction(unittest.TestCase):
sourcein = 'SCI'
print(configfile)
debug=True
debug = True
result_path=dir_path+'ifs_sim_result'
result_path = dir_path+'ifs_sim_result'
csst_ifs_sim.runIFSsim(sourcein, configfile, dir_path, result_path, 1, debug,'no')
csst_ifs_sim.runIFSsim(sourcein, configfile,
dir_path, result_path, 1, debug, 'no')
self.assertEqual(
1 , 1,
1, 1,
"case 1: SCI sim passes.",
)
......@@ -73,9 +74,9 @@ 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'], 'ifs_sim/')
print(dir_path)
print(sys.version )
print(sys.version)
###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
configfile = './csst_ifs_sim/ifs_data/IFS_sim_C90.config'
......@@ -83,13 +84,14 @@ class TestDemoFunction(unittest.TestCase):
sourcein = 'BIAS'
print(configfile)
debug=True
result_path=dir_path+'ifs_sim_result'
debug = True
result_path = dir_path+'ifs_sim_result'
csst_ifs_sim.runIFSsim(sourcein, configfile, dir_path, result_path, 1, debug,'no')
csst_ifs_sim.runIFSsim(sourcein, configfile,
dir_path, result_path, 1, debug, 'no')
self.assertEqual(
1 , 1,
1, 1,
"case 2: sim passes.",
)
......@@ -110,9 +112,9 @@ 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'], 'ifs_sim/')
print(dir_path)
print(sys.version )
print(sys.version)
###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
configfile = './csst_ifs_sim/ifs_data/IFS_sim_C90.config'
......@@ -120,13 +122,14 @@ class TestDemoFunction(unittest.TestCase):
sourcein = 'DARK'
print(configfile)
debug=True
result_path=dir_path+'ifs_sim_result'
debug = True
result_path = dir_path+'ifs_sim_result'
csst_ifs_sim.runIFSsim(sourcein, configfile, dir_path, result_path, 1, debug,'no')
csst_ifs_sim.runIFSsim(sourcein, configfile,
dir_path, result_path, 1, debug, 'no')
self.assertEqual(
1 , 1,
1, 1,
"case 3: sim passes.",
)
......@@ -147,9 +150,9 @@ 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'], 'ifs_sim/')
print(dir_path)
print(sys.version )
print(sys.version)
###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
configfile = './csst_ifs_sim/ifs_data/IFS_sim_C90.config'
......@@ -157,14 +160,15 @@ class TestDemoFunction(unittest.TestCase):
sourcein = 'LAMP'
print(configfile)
debug=True
debug = True
result_path=dir_path+'ifs_sim_result'
result_path = dir_path+'ifs_sim_result'
csst_ifs_sim.runIFSsim(sourcein, configfile, dir_path, result_path, 1, debug,'no')
csst_ifs_sim.runIFSsim(sourcein, configfile,
dir_path, result_path, 1, debug, 'no')
self.assertEqual(
1 , 1,
1, 1,
"case 4: sim passes.",
)
......@@ -185,9 +189,9 @@ 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'], 'ifs_sim/')
print(dir_path)
print(sys.version )
print(sys.version)
###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
configfile = './csst_ifs_sim/ifs_data/IFS_sim_C90.config'
......@@ -195,12 +199,13 @@ class TestDemoFunction(unittest.TestCase):
sourcein = 'LAMP'
print(configfile)
debug=True
result_path=dir_path+'ifs_sim_result'
debug = True
result_path = dir_path+'ifs_sim_result'
csst_ifs_sim.runIFSsim(sourcein, configfile, dir_path, result_path, 1, debug,'yes')
csst_ifs_sim.runIFSsim(sourcein, configfile,
dir_path, result_path, 1, debug, 'yes')
self.assertEqual(
1 , 1,
1, 1,
"case 5: sim passes.",
)
......@@ -221,9 +226,9 @@ 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'], 'ifs_sim/')
print(dir_path)
print(sys.version )
print(sys.version)
###configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C90.config'
configfile = './csst_ifs_sim/ifs_data/IFS_sim_C90.config'
......@@ -231,14 +236,13 @@ class TestDemoFunction(unittest.TestCase):
sourcein = 'FLAT'
print(configfile)
debug=True
debug = True
result_path=dir_path+'ifs_sim_result'
result_path = dir_path+'ifs_sim_result'
csst_ifs_sim.runIFSsim(sourcein, configfile, dir_path, result_path, 1, debug, 'no')
csst_ifs_sim.runIFSsim(sourcein, configfile,
dir_path, result_path, 1, debug, 'no')
self.assertEqual(
1 , 1,
1, 1,
"case 6: sim passes.",
)
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