From d2cef5098c42bb139efb32ca581bdf8a96473495 Mon Sep 17 00:00:00 2001 From: "chenwei@shao.ac.cn" Date: Fri, 19 May 2023 16:17:11 +0800 Subject: [PATCH] build --- .../inspectionProfiles/profiles_settings.xml | 6 + LICENSE | 21 + README.md | 6 +- csst_ifs_sim/CTI/CTI.py | 495 ++++ csst_ifs_sim/CTI/__init__.py | 0 csst_ifs_sim/__init__.py | 0 csst_ifs_sim/csst_ifs_sim.py | 2624 +++++++++++++++++ csst_ifs_sim/ifs_so/__init__.py | 0 .../cdm03.cpython-37m-x86_64-linux-gnu.so | Bin 0 -> 175816 bytes .../cdm03.cpython-38-x86_64-linux-gnu.so | Bin 0 -> 182992 bytes ...cdm03bidir.cpython-37m-x86_64-linux-gnu.so | Bin 0 -> 192640 bytes .../cdm03bidir.cpython-38-x86_64-linux-gnu.so | Bin 0 -> 203248 bytes csst_ifs_sim/support/IFSinstrumentModel.py | 55 + csst_ifs_sim/support/__init__.py | 0 csst_ifs_sim/support/cosmicrays.py | 424 +++ csst_ifs_sim/support/logger.py | 40 + ifs_data/__init__.py | 0 setup.py | 36 + 18 files changed, 3704 insertions(+), 3 deletions(-) create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 LICENSE create mode 100644 csst_ifs_sim/CTI/CTI.py create mode 100644 csst_ifs_sim/CTI/__init__.py create mode 100644 csst_ifs_sim/__init__.py create mode 100644 csst_ifs_sim/csst_ifs_sim.py create mode 100644 csst_ifs_sim/ifs_so/__init__.py create mode 100644 csst_ifs_sim/ifs_so/cdm03.cpython-37m-x86_64-linux-gnu.so create mode 100644 csst_ifs_sim/ifs_so/cdm03.cpython-38-x86_64-linux-gnu.so create mode 100644 csst_ifs_sim/ifs_so/cdm03bidir.cpython-37m-x86_64-linux-gnu.so create mode 100644 csst_ifs_sim/ifs_so/cdm03bidir.cpython-38-x86_64-linux-gnu.so create mode 100644 csst_ifs_sim/support/IFSinstrumentModel.py create mode 100644 csst_ifs_sim/support/__init__.py create mode 100644 csst_ifs_sim/support/cosmicrays.py create mode 100644 csst_ifs_sim/support/logger.py create mode 100644 ifs_data/__init__.py create mode 100644 setup.py diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a9b5e74 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 CSST-L1 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index f9a5328..aed373c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Ifs +# csst_ifs_common @@ -15,14 +15,14 @@ Already a pro? Just edit this README.md and make it your own. Want to make it ea ``` cd existing_repo -git remote add origin https://csst-tb.bao.ac.cn/code/shaosim/ifs.git +git remote add origin https://csst-tb.bao.ac.cn/code/csst-l1/ifs/csst_ifs_common.git git branch -M main git push -uf origin main ``` ## Integrate with your tools -- [ ] [Set up project integrations](https://csst-tb.bao.ac.cn/code/shaosim/ifs/-/settings/integrations) +- [ ] [Set up project integrations](http://10.3.10.28/code/csst-l1/ifs/csst_ifs_common/-/settings/integrations) ## Collaborate with your team diff --git a/csst_ifs_sim/CTI/CTI.py b/csst_ifs_sim/CTI/CTI.py new file mode 100644 index 0000000..48c87cb --- /dev/null +++ b/csst_ifs_sim/CTI/CTI.py @@ -0,0 +1,495 @@ +""" +Charge Transfer Inefficiency +============================ + +This file contains a simple class to run a CDM03 CTI model developed by Alex Short (ESA). + +This now contains both the official CDM03 and a new version that allows different trap +parameters in parallel and serial direction. + +:requires: NumPy +:requires: CDM03 (FORTRAN code, f2py -c -m cdm03bidir cdm03bidir.f90) + +:version: 0.35 +""" +import numpy as np + +# try: +# import cdm03bidir +# #import cdm03bidirTest as cdm03bidir #for testing purposes only +# except ImportError: +# print('import CTI module') +# #print ('No CDM03bidir module available, please compile it: f2py -c -m cdm03bidir cdm03bidir.f90') + + + +#CDM03bidir +class CDM03bidir(): + """ + Class to run CDM03 CTI model, class Fortran routine to perform the actual CDM03 calculations. + + :param settings: input parameters + :type settings: dict + :param data: input data to be radiated + :type data: ndarray + :param log: instance to Python logging + :type log: logging instance + """ + def __init__(self, settings, data, log=None): + """ + Class constructor. + + :param settings: input parameters + :type settings: dict + :param data: input data to be radiated + :type data: ndarray + :param log: instance to Python logging + :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.update(settings) + self.log = log + self._setupLogger() + + #default CDM03 settings + self.params = dict(beta_p=0.6, beta_s=0.6, fwc=200000., vth=1.168e7, vg=6.e-11, t=20.48e-3, + sfwc=730000., svg=1.0e-10, st=5.0e-6, parallel=1., serial=1.) + #update with inputs + self.params.update(self.values) + + #read in trap information + trapdata = np.loadtxt(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 + self.nt_p = [trapdata[0],] + self.sigma_p = [trapdata[1],] + self.taur_p = [trapdata[2],] + + trapdata = np.loadtxt(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 + self.nt_s = [trapdata[0],] + self.sigma_s = [trapdata[1],] + self.taur_s = [trapdata[2],] + + #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 + 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 + + + def _setupLogger(self): + """ + Set up the logger. + """ + self.logger = True + if self.log is None: + self.logger = False + + + def radiateFullCCD(self): + """ + This routine allows the whole CCD to be run through a radiation damage mode. + The routine takes into account the fact that the amplifiers are in the corners + of the CCD. The routine assumes that the CCD is using four amplifiers. + + There is an excess of .copy() calls, which should probably be cleaned up. However, + given that I had problem with the Fortran code, I have kept the calls. If memory + becomes an issue then this should be cleaned. + + :return: radiation damaged image + :rtype: ndarray + """ + ydim, xdim = self.data.shape + out = np.zeros((xdim, ydim)) + + #transpose the data, because Python has different convention than Fortran + data = self.data.transpose().copy() + + for quad in self.values['quads']: + if self.logger: + self.log.info('Adding CTI to Q%i' % quad) + + if quad == 0: + d = data[0:self.values['xsize'], 0:self.values['ysize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[0:self.values['xsize'], 0:self.values['ysize']] = tmp + elif quad == 1: + d = data[self.values['xsize']:, :self.values['ysize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['xsize']:, :self.values['ysize']] = tmp + elif quad == 2: + d = data[:self.values['xsize'], self.values['ysize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[:self.values['xsize'], self.values['ysize']:] = tmp + elif quad == 3: + d = data[self.values['xsize']:, self.values['ysize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['xsize']:, self.values['ysize']:] = tmp + else: + print( 'ERROR -- too many quadrants!!' ) + self.log.error('Too many quadrants! This method allows only four quadrants.') + + return out.transpose() + + + def radiateFullCCD2(self): + """ + This routine allows the whole CCD to be run through a radiation damage mode. + The routine takes into account the fact that the amplifiers are in the corners + of the CCD. The routine assumes that the CCD is using four amplifiers. + + There is an excess of .copy() calls, which should probably be cleaned up. However, + given that I had problem with the Fortran code, I have kept the calls. If memory + becomes an issue then this should be cleaned. + + :return: radiation damaged image + :rtype: ndarray + """ + ydim, xdim = self.data.shape + out = np.empty((ydim, xdim)) + + #transpose the data, because Python has different convention than Fortran + data = self.data.copy() + + for quad in self.values['quads']: + if self.logger: + self.log.info('Adding CTI to Q%i' % quad) + + if quad == 0: + d = data[:self.values['ysize'], :self.values['xsize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[:self.values['ysize'], :self.values['xsize']] = tmp + elif quad == 1: + d = data[:self.values['ysize'], self.values['xsize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[:self.values['ysize'], self.values['xsize']:] = tmp + elif quad == 2: + d = data[self.values['ysize']:, :self.values['xsize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['ysize']:, :self.values['xsize']] = tmp + elif quad == 3: + d = data[self.values['ysize']:, self.values['xsize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['ysize']:, self.values['xsize']:] = tmp + else: + print( 'ERROR -- too many quadrants!!') + self.log.error('Too many quadrants! This method allows only four quadrants.') + + return out + + + def applyRadiationDamage(self, data, iquadrant=0): + """ + Apply radian damage based on FORTRAN CDM03 model. The method assumes that + input data covers only a single quadrant defined by the iquadrant integer. + + :param data: imaging data to which the CDM03 model will be applied to. + :type data: ndarray + + :param iquandrant: number of the quadrant to process + :type iquandrant: int + + cdm03 - Function signature:: + + sout = cdm03(sinp,iflip,jflip,dob,rdose,in_nt,in_sigma,in_tr,[xdim,ydim,zdim]) + Required arguments: + sinp : input rank-2 array('d') with bounds (xdim,ydim) + iflip : input int + jflip : input int + dob : input float + rdose : input float + in_nt : input rank-1 array('d') with bounds (zdim) + in_sigma : input rank-1 array('d') with bounds (zdim) + in_tr : input rank-1 array('d') with bounds (zdim) + Optional arguments: + xdim := shape(sinp,0) input int + ydim := shape(sinp,1) input int + zdim := len(in_nt) input int + Return objects: + sout : rank-2 array('d') with bounds (xdim,ydim) + + .. Note:: Because Python/NumPy arrays are different row/column based, one needs + to be extra careful here. NumPy.asfortranarray will be called to get + an array laid out in Fortran order in memory. Before returning the + array will be laid out in memory in C-style (row-major order). + + :return: image that has been run through the CDM03 model + :rtype: ndarray + """"" + #return data + + iflip = iquadrant / 2 + jflip = iquadrant % 2 + + params = [self.params['beta_p'], self.params['beta_s'], self.params['fwc'], self.params['vth'], + self.params['vg'], self.params['t'], self.params['sfwc'], self.params['svg'], self.params['st'], + self.params['parallel'], self.params['serial']] + + if self.logger: + self.log.info('nt_p=' + str(self.nt_p)) + self.log.info('nt_s=' + str(self.nt_s)) + self.log.info('sigma_p= ' + str(self.sigma_p)) + self.log.info('sigma_s= ' + str(self.sigma_s)) + self.log.info('taur_p= ' + str(self.taur_p)) + self.log.info('taur_s= ' + str(self.taur_s)) + self.log.info('dob=%f' % self.values['dob']) + self.log.info('rdose=%e' % self.values['rdose']) + self.log.info('xsize=%i' % data.shape[1]) + self.log.info('ysize=%i' % data.shape[0]) + self.log.info('quadrant=%i' % iquadrant) + self.log.info('iflip=%i' % iflip) + self.log.info('jflip=%i' % jflip) + +################################################################################# +###modify + import sys + #sys.path.append('../so') + from ifs_so import cdm03bidir + # from ifs_so.cdm03.cpython-38-x86_64-linux-gnu import cdm03bidir + # import cdm03bidir + CTIed = cdm03bidir.cdm03(np.asfortranarray(data), + jflip, iflip, + self.values['dob'], self.values['rdose'], + self.nt_p, self.sigma_p, self.taur_p, + self.nt_s, self.sigma_s, self.taur_s, + params, + [data.shape[0], data.shape[1], len(self.nt_p), len(self.nt_s), len(self.params)]) + + + return np.asanyarray(CTIed) + +################################################################################################################# + + + +class CDM03(): + """ + Class to run CDM03 CTI model, class Fortran routine to perform the actual CDM03 calculations. + + :param data: input data to be radiated + :type data: ndarray + :param input: input parameters + :type input: dictionary + :param log: instance to Python logging + :type log: logging instance + """ + def __init__(self, input, data, log=None): + """ + Class constructor. + + :param data: input data to be radiated + :type data: ndarray + :param input: input parameters + :type input: dictionary + :param log: instance to Python logging + :type log: logging instance + """ + try: + import cdm03 + except ImportError: + print( 'No CDM03 module available, please compile it: f2py -c -m cdm03 cdm03.f90') + + self.data = data + self.values = dict(quads=(0,1,2,3), xsize=2048, ysize=2066, dob=0.0, rdose=8.0e9) + self.values.update(input) + self.log = log + self._setupLogger() + + + def _setupLogger(self): + """ + Set up the logger. + """ + self.logger = True + if self.log is None: + self.logger = False + + + def radiateFullCCD(self): + """ + This routine allows the whole CCD to be run through a radiation damage mode. + The routine takes into account the fact that the amplifiers are in the corners + of the CCD. The routine assumes that the CCD is using four amplifiers. + + There is an excess of .copy() calls, which should probably be cleaned up. However, + given that I had problem with the Fortran code, I have kept the calls. If memory + becomes an issue then this should be cleaned. + + :return: radiation damaged image + :rtype: ndarray + """ + ydim, xdim = self.data.shape + out = np.zeros((xdim, ydim)) + + #transpose the data, because Python has different convention than Fortran + data = self.data.transpose().copy() + + for quad in self.values['quads']: + if self.logger: + self.log.info('Adding CTI to Q%i' % quad) + + if quad == 0: + d = data[0:self.values['xsize'], 0:self.values['ysize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[0:self.values['xsize'], 0:self.values['ysize']] = tmp + elif quad == 1: + d = data[self.values['xsize']:, :self.values['ysize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['xsize']:, :self.values['ysize']] = tmp + elif quad == 2: + d = data[:self.values['xsize'], self.values['ysize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[:self.values['xsize'], self.values['ysize']:] = tmp + elif quad == 3: + d = data[self.values['xsize']:, self.values['ysize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['xsize']:, self.values['ysize']:] = tmp + else: + print ('ERROR -- too many quadrants!!') + self.log.error('Too many quadrants! This method allows only four quadrants.') + + return out.transpose() + + + def radiateFullCCD2(self): + """ + This routine allows the whole CCD to be run through a radiation damage mode. + The routine takes into account the fact that the amplifiers are in the corners + of the CCD. The routine assumes that the CCD is using four amplifiers. + + There is an excess of .copy() calls, which should probably be cleaned up. However, + given that I had problem with the Fortran code, I have kept the calls. If memory + becomes an issue then this should be cleaned. + + :return: radiation damaged image + :rtype: ndarray + """ + ydim, xdim = self.data.shape + out = np.empty((ydim, xdim)) + + #transpose the data, because Python has different convention than Fortran + data = self.data.copy() + + for quad in self.values['quads']: + if self.logger: + self.log.info('Adding CTI to Q%i' % quad) + + if quad == 0: + d = data[:self.values['ysize'], :self.values['xsize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[:self.values['ysize'], :self.values['xsize']] = tmp + elif quad == 1: + d = data[:self.values['ysize'], self.values['xsize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[:self.values['ysize'], self.values['xsize']:] = tmp + elif quad == 2: + d = data[self.values['ysize']:, :self.values['xsize']].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['ysize']:, :self.values['xsize']] = tmp + elif quad == 3: + d = data[self.values['ysize']:, self.values['xsize']:].copy() + tmp = self.applyRadiationDamage(d, iquadrant=quad).copy() + out[self.values['ysize']:, self.values['xsize']:] = tmp + else: + print ('ERROR -- too many quadrants!!') + self.log.error('Too many quadrants! This method allows only four quadrants.') + + return out + + + def applyRadiationDamage(self, data, iquadrant=0): + """ + Apply radian damage based on FORTRAN CDM03 model. The method assumes that + input data covers only a single quadrant defined by the iquadrant integer. + + :param data: imaging data to which the CDM03 model will be applied to. + :type data: ndarray + + :param iquandrant: number of the quadrant to process + :type iquandrant: int + + cdm03 - Function signature:: + + sout = cdm03(sinp,iflip,jflip,dob,rdose,in_nt,in_sigma,in_tr,[xdim,ydim,zdim]) + Required arguments: + sinp : input rank-2 array('d') with bounds (xdim,ydim) + iflip : input int + jflip : input int + dob : input float + rdose : input float + in_nt : input rank-1 array('d') with bounds (zdim) + in_sigma : input rank-1 array('d') with bounds (zdim) + in_tr : input rank-1 array('d') with bounds (zdim) + Optional arguments: + xdim := shape(sinp,0) input int + ydim := shape(sinp,1) input int + zdim := len(in_nt) input int + Return objects: + sout : rank-2 array('d') with bounds (xdim,ydim) + + .. Note:: Because Python/NumPy arrays are different row/column based, one needs + to be extra careful here. NumPy.asfortranarray will be called to get + an array laid out in Fortran order in memory. Before returning the + array will be laid out in memory in C-style (row-major order). + + :return: image that has been run through the CDM03 model + :rtype: ndarray + """ + #read in trap information + trapdata = np.loadtxt(self.values['trapfile']) + nt = trapdata[:, 0] + sigma = trapdata[:, 1] + taur = trapdata[:, 2] + + iflip = iquadrant / 2 + jflip = iquadrant % 2 + + if self.logger: + self.log.info('nt=' + str(nt)) + self.log.info('sigma= ' + str(sigma)) + self.log.info('taur= ' + str(taur)) + self.log.info('dob=%f' % self.values['dob']) + self.log.info('rdose=%e' % self.values['rdose']) + self.log.info('xsize=%i' % data.shape[1]) + self.log.info('ysize=%i' % data.shape[0]) + self.log.info('quadrant=%i' % iquadrant) + self.log.info('iflip=%i' % iflip) + self.log.info('jflip=%i' % jflip) + + + # #call Fortran routine + # CTIed = cdm03.cdm03(np.asfortranarray(data), + # iflip, jflip, + # self.values['dob'], self.values['rdose'], + # nt, sigma, taur) + ###modify + import sys + sys.path.append('../CTI') + import cdm03 + + ################################################################################# + + CTIed = cdm03.cdm03(np.asfortranarray(data), + jflip, iflip, + self.values['dob'], self.values['rdose'], + nt,sigma,taur ) + + + return np.asanyarray(CTIed) + + +################################################################################################################# + diff --git a/csst_ifs_sim/CTI/__init__.py b/csst_ifs_sim/CTI/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csst_ifs_sim/__init__.py b/csst_ifs_sim/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csst_ifs_sim/csst_ifs_sim.py b/csst_ifs_sim/csst_ifs_sim.py new file mode 100644 index 0000000..1dbd918 --- /dev/null +++ b/csst_ifs_sim/csst_ifs_sim.py @@ -0,0 +1,2624 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" + +@author: yan +""" + +""" +The CSST IFS Image Simulator +============================================= + +This file contains an image simulator for the CSST IFS. + +The approximate sequence of events in the simulator is as follows: + + #. Read in a configuration file, which defines for example, + detector characteristics (bias, dark and readout noise, gain, + plate scale and pixel scale, oversampling factor, exposure time etc.). + #. Read in another file containing charge trap definitions (for CTI modelling). + #. Read in a file defining the cosmic rays (trail lengths and cumulative distributions). + + #. Load the wavefront aberration data used to calculate PSF with defined wavelength and field of view. + + #. Apply calibration unit flux to mimic flat field exposures [optional]. + #. Apply a multiplicative flat-field map to emulate pixel-to-pixel non-uniformity [optional]. + + #. Add cosmic ray tracks onto the CCD with random positions but known distribution [optional]. + #. Apply detector charge bleeding in column direction [optional]. + #. Add constant dark current and background light from Zodiacal light [optional]. + #. Add photon (Poisson) noise [optional] + #. Add cosmetic defects from an input file [optional]. + #. Add overscan regions in the serial direction [optional]. + #. Apply the CDM03 radiation damage model [optional]. + #. Apply non-linearity model to the pixel data [optional]. + #. Add readout noise selected from a Gaussian distribution [optional]. + #. Convert from electrons to ADUs using a given gain factor. + #. Add a given bias level and discretise the counts (the output is going to be in 16bit unsigned integers). + #. Finally the simulated image is converted to a FITS file. + +:version: 2023.04 + + +Future Work +----------- + +.. todo:: + + #. + #. + #. ...... + +Contact Information: zhaojunyan@shao.ac.cn + +------- + +""" + +from scipy.integrate import simps +import pandas as pd +from datetime import datetime, timedelta +import julian +from astropy.coordinates import get_sun +from astropy.time import Time +from astropy import units as u + +from astropy.coordinates import SkyCoord, EarthLocation + +from scipy import interpolate + +import numpy as np + +import scipy.io as sio + +from astropy.io import fits + +from scipy.signal import fftconvolve + +import galsim + +from scipy import ndimage + +import cmath + +import os, sys + +import configparser as ConfigParser + +from optparse import OptionParser + +sys.path.append('../') + +from CTI import CTI +from support import logger as lg +from support import cosmicrays +from support import IFSinstrumentModel + +############################################################################### + +def str2time(strTime): + if len(strTime)>20:# + msec=int(float('0.'+strTime[20:])*1000000) # + str2=strTime[0:19]+' '+str(msec) + return datetime.strptime(str2,'%Y %m %d %H %M %S %f') + +#datetime to mjd +def time2mjd(dateT): + t0=datetime(1858,11,17,0,0,0,0)# + mjd=(dateT-t0).days + mjd_s=dateT.hour*3600.0+dateT.minute*60.0+dateT.second+dateT.microsecond/1000000.0 + return mjd+mjd_s/86400.0 + +def time2jd(dateT): + t0=datetime(1858,11,17,0,0,0,0)# + mjd=(dateT-t0).days + mjd_s=dateT.hour*3600.0+dateT.minute*60.0+dateT.second+dateT.microsecond/1000000.0 + return mjd+mjd_s/86400.0++2400000.5 + +#mjd to datetime +def mjd2time(mjd): + t0=datetime(1858,11,17,0,0,0,0)# + return t0+timedelta(days=mjd) + +def jd2time(jd): + mjd=jd2mjd(jd) + return mjd2time(mjd) + +#mjd to jd +def mjd2jd(mjd): + return mjd+2400000.5 + +def jd2mjd(jd): + return jd-2400000.5 + +def dt2hmd(dt): + ## dt is datetime + hour=dt.hour + minute=dt.minute + second=dt.second + if hour<10: + str_h='0'+str(hour) + else: + str_h=str(hour) + + if minute<10: + str_m='0'+str(minute) + else: + str_m=str(minute) + + if second<10: + str_d='0'+str(second+dt.microsecond*1e-6) + else: + str_d=str(second+dt.microsecond*1e-6) + + return str_h+':'+str_m+':'+str_d + +############################################################################### + +############################################################################### + +def deg2HMS(ra, dec, rou=False): + '''convert deg to ra's HMS or dec's DHS''' + RA, DEC, rs, ds = '000000', '000000', '', '' + if dec: + if str(dec)[0] == '-': + ds, dec = '-', abs(dec) + deg = int(dec) + decM = abs(int((dec-deg)*60)) + + if rou: + decS = round((abs((dec-deg)*60)-decM)*60,1) + else: + decS = int((abs((dec-deg)*60)-decM)*60) + + if deg ==0: + deg ="00" + elif deg <10: + deg = "0%s"%deg + + if decM ==0: + decM ="00" + elif decM <10: + decM = "0%s"%decM + + if decS ==0: + decS ="00" + elif decS <10: + decS = "0%s"%decS + + DEC = '{0}{1}{2}{3}'.format(ds, deg, decM, decS) + + if ra: + if str(ra)[0] == '-': + rs, ra = '-', abs(ra) + raH = int(ra/15) + raM = int(((ra/15)-raH)*60) + + if rou: + raS = round(((((ra/15)-raH)*60)-raM)*60,1) + else: + raS = int(((((ra/15)-raH)*60)-raM)*60) + + if raH ==0: + raH = "00" + + elif raH <10: + raH = "0%s"%raH + + if raM ==0: + raM = "00" + elif raM <10: + raM = "0%s"%raM + + if raS ==0: + raS = "00" + + elif raS <10: + raS = "0%s"%raS + + RA = '{0}{1}{2}{3}'.format(rs, raH, raM, raS) + + if ds=='-': + return RA+DEC + else: + return RA+'+'+DEC +############################################################################### + +########################################################### +def beta_angle( x_sat, y_sat, z_sat, vx_sat, vy_sat, vz_sat, ra_obj, dec_obj): + + # get the vector for next motion + x_sat2 = x_sat + vx_sat + y_sat2 = y_sat + vy_sat + z_sat2 = z_sat + vz_sat + + vector1 = np.stack((x_sat, y_sat, z_sat), axis=0) + vector2 = np.stack((x_sat2, y_sat2, z_sat2), axis=0) + vector_normal = np.cross(vector1, vector2) + + location_normal = EarthLocation.from_geocentric(vector_normal[0], + vector_normal[1], + vector_normal[2], + unit=u.km) + radec_normal = SkyCoord(ra=location_normal.lon, + dec=location_normal.lat, + frame='gcrs') + lb_normal = radec_normal.transform_to('geocentrictrueecliptic') + + + radec_sun = SkyCoord(ra=ra_obj*u.degree, dec=dec_obj*u.degree, frame='gcrs') + lb_sun = radec_sun.transform_to('geocentrictrueecliptic') + + # get the angle between normal and solar + angle = 90 - lb_normal.separation(lb_sun).degree + + return angle + +########################################################## +########################################################## +def LSR_velocity(ra,dec,velocity,Obstime): + + local = EarthLocation.from_geodetic(lat=22.349368*u.deg, lon=113.584068*u.deg, height=10*u.m) + ### convert ra and dec to + source = SkyCoord(ra*u.deg, dec*u.deg,frame='icrs', unit=(u.hourangle,u.deg) ) + l = source.galactic.l.deg + b = source.galactic.b.deg + c = SkyCoord(l=l*u.degree, b=b*u.degree, frame='galactic') + c_icrs = c.transform_to('icrs') + barycorr = c_icrs.radial_velocity_correction(obstime=Time(Obstime), location=local) + velocity = velocity + barycorr.value/1000 + #print(barycorr.value/1000) + l = l * np.pi / 180 + b = b * np.pi / 180 + return velocity + 9 * np.cos(l) * np.cos(b) + 12 * np.sin(l) * np.cos(b) + 7 * np.sin(b) + +############################################################################### +def rotation_yan(x0,y0,x1,y1,angle): + #% point A (x0,y0) + #% point B(x1,y1) + #% roate angle ,point B rotate with point A + alpha=angle/180*3.1415926 #% in radians + x2=(x1-x0)*np.cos(alpha)-(y1-y0)*np.sin(alpha)+x0 + y2=(x1-x0)*np.sin(alpha)+(y1-y0)*np.cos(alpha)+y0 + return x2, y2 +###################################################################### +def centroid(data): + h,w = np.shape(data) + x = np.arange(0,w) + y = np.arange(0,h) + x1=np.ones((1,h)) + y1=np.ones((w,1)) + cx=(np.dot(np.dot(x1,data),y)) /(np.dot(np.dot(x1,data),y1)) + cy=(np.dot(np.dot(x ,data),y1)) /(np.dot(np.dot(x1,data),y1)) + return np.float64(cx),np.float64(cy) +#################################################################### +def SpecCube2photon(data,wave): + # calcutle photons from original spec cube data, + # data: input data, two-dimentional, unit : 1e-17 erg/s/A/cm^2 + # wave: the relative wavefront, unit in nm; + planckh= 6.62620*10**-27 # % erg s; + cc=2.99792458*10**17 # in nm/s + # fov2=0.01 # in arcsec^2 + # telarea=3.1415926*100*100 # in cm^2, + fluxlam=1e-17*data # convert original unit to unit of erg/s/A/cm^2 + lam=wave # wave in nm ;; + ephoton=planckh*cc/lam # in erg/photon, + Nphoton =fluxlam/ephoton # in unit of photons/cm2/s/A + return Nphoton + +###################################################################### + +###################################################################### +def zero_pad(image, shape, position='corner'): + """ + Extends image to a certain size with zeros + Parameters + ---------- + image: real 2d `np.ndarray` + Input image + shape: tuple of int + Desired output shape of the image + position : str, optional + The position of the input image in the output one: + * 'corner' + top-left corner (default) + * 'center' + centered + Returns + ------- + padded_img: real `np.ndarray` + The zero-padded image + """ + shape = np.asarray(shape, dtype=int) + imshape = np.asarray(image.shape, dtype=int) + + if np.alltrue(imshape == shape): + return image + + if np.any(shape <= 0): + raise ValueError("ZERO_PAD: null or negative shape given") + + dshape = shape - imshape + if np.any(dshape < 0): + raise ValueError("ZERO_PAD: target size smaller than source one") + + pad_img = np.zeros(shape, dtype=image.dtype) + + idx, idy = np.indices(imshape) + + if position == 'center': + if np.any(dshape % 2 != 0): + raise ValueError("ZERO_PAD: source and target shapes " + "have different parity.") + offx, offy = dshape // 2 + else: + offx, offy = (0, 0) + + pad_img[idx + offx, idy + offy] = image + + return pad_img + +def anySampledPSF(wavefront, pupil , Q , sizeout): + ''' + written on 2020.12.04 by Yan @Shao + % wavefront sampled in the united circle; + % pupil function samped as wavefront; + % sample ratio Q=lambda/D/pixel; + % lambda is wavelength; + % D is diameter; + % pixel is in arcsec; + % or sample ratio Q=lambda*f/D/pixelsize + % f is focal length; + % pixelsize is the actural size of the detector; + % make sure all the varia have the same unit; + % the returned PSF has sum value of 1 + ''' + + m,n = np.shape(wavefront) + + phase=2.0*np.pi*wavefront #% the phase of the input wavefront; + + ####generalized pupil function of channel1; + if Q>=1: + pk1=zero_pad(pupil*np.exp(cmath.sqrt(-1)*(phase)),( int(np.floor(m*Q)),int(np.floor(m*Q))), position='corner') + psf=abs(np.fft.fftshift(np.fft.fft2(pk1)))**2 + #psf=psf/psf.sum() + else: #%%% case: Q<1 + # %fft method + if Q>=0.5: #% in this case Q<1 and Q>=0.5 + pk1=zero_pad(pupil*np.exp(cmath.sqrt(-1)*(phase)), (int(2*np.floor(m*Q)),int(2*np.floor(m*Q))), position='corner') + mypsf=np.fft.fft2(pk1); + t=mypsf[0::2,0::2]; + psf=abs(np.fft.fftshift(t))**2 + #psf=mypsf3/mypsf3.sum(); + + else: + if Q>=0.25: + pk1=zero_pad(pupil*np.exp(cmath.sqrt(-1)*(phase)),( int(4*np.floor(m*Q)),int(4*np.floor(m*Q))), position='corner') + mypsf=np.fft.fft2(pk1); + t=mypsf[0::4,0::4]; + psf=abs(np.fft.fftshift(t))**2 + #psf=mypsf3/mypsf3.sum(); + else: + print('---- Q<0.25 , stop running') + sys.exit(0) + ######################################################################################## + mm,nn=np.shape(psf) + if np.mod(sizeout,2)==0: + Nx=sizeout/2-1 + else: + Nx=(sizeout+1)/2-1 + + + if max(mm,nn)3*sigma: + + SpmOut=1.0/20000 + else: + + column=np.where(d==min(d)) + SpmOut=Qt[column[0]]*np.exp(-(lam-wave[column[0]])**2/2/sigma**2) + + return SpmOut + +##################################################################################### +#################################################################################################################### + +def processArgs(printHelp=False): + """ + Processes command line arguments. + """ + parser = OptionParser() + + parser.add_option('-c', '--configfile', dest='configfile', + help="Name of the configuration file", metavar="string") + parser.add_option('-s', '--section', dest='section', + help="Name of the section of the config file [SCIENCE]", metavar="string") + parser.add_option('-q', '--quadrant', dest='quadrant', help='CCD quadrant to simulate [0, 1, 2, 3]', + metavar='int') + parser.add_option('-x', '--xCCD', dest='xCCD', help='CCD number in X-direction within the FPA matrix', + metavar='int') + parser.add_option('-y', '--yCCD', dest='yCCD', help='CCD number in Y-direction within the FPA matrix', + metavar='int') + parser.add_option('-d', '--debug', dest='debug', action='store_true', + help='Debugging mode on') + parser.add_option('-t', '--test', dest='test', action='store_true', + help='Run unittest') + parser.add_option('-f', '--fixed', dest='fixed', help='Use a fixed seed for the random number generators', + metavar='int') + if printHelp: + parser.print_help() + else: + return parser.parse_args() +############################################################################################## +class IFSsimulator(): + """ + CSST IFS Simulator + + The image that is being build is in:: + + self.image + self.image_b blue channel + self.image_r red channel + + :param opts: OptionParser instance + :type opts: OptionParser instance + """ + + def __init__(self, opts): + """ + Class Constructor. + + :param opts: OptionParser instance + :type opts: OptionParser instance + + """ + + #################################### + + self.configfile = opts.configfile + + if opts.section is None: + ####self.section = 'DEFAULT' + self.section = 'TEST' #####simulation section; + + else: + self.section = opts.section + + #load instrument model, these values are also stored in the FITS header + self.information = IFSinstrumentModel.IFSinformation() + + #update settings with defaults + self.information.update(dict(quadrant=int(0), + ccdx=int(0), + ccdy=int(0), + psfoversampling=1.0, + ccdxgap=1.643, + ccdygap=8.116, + fullwellcapacity=90000, + readouttime=4, + rdose=8.0e9, + coveringfraction=0.5 )) + + ###################################################################### + self.configure() #print the configfile name and path; + + self.information.update(dict( + + cosmicraylengths =self.information['indata_path']+'/cdf_cr_length.dat', + cosmicraydistance=self.information['indata_path']+'/cdf_cr_total.dat', + parallelTrapfile =self.information['indata_path']+'/cdm_euclid_parallel.dat', + serialTrapfile =self.information['indata_path']+'/cdm_euclid_serial.dat', + cosmeticsfile_b =self.information['indata_path']+'/Cosmetics_b.txt', + cosmeticsfile_r =self.information['indata_path']+'/Cosmetics_r.txt' )) + + # public system information + self.pixelscale=0.1 # the pixel size is 0.1 arcsec + self.pixelsize=15 # the pixel physical size is 15 micron + self.Fnum=15.469875 # the f number= focal_length/D; + self.telD=2 # tht telescope size is 2 meter, diamter size; + self.telarea=3.1415926*(self.telD/2)**2*100*100 # telescope square in cm^2 + self.fov2=0.01 # the pixel square + self.planckh= 6.62620*1e-27 # % erg s; + self.cc=2.99792458*1e17 # in nm/s + self.light_FWHM=0.175 + self.HgArsigma=self.light_FWHM/2.35; ## sigma value of the light source; + + #### load system optical and CCD efficiency data + matfn0=self.information['indata_path']+'/TotalQ200923.mat' + da0=sio.loadmat(matfn0) + self.optical_blue_Q=da0['opticalQ_1'] # optical efficiency of blue channel + self.optical_red_Q =da0['opticalQ_2'] # optical efficiency of red channel + self.CCD_Qe=da0['ccdQE'] # red channel + + ############################################################# load all useful data; + ############### load wavefront data; + matfn2=self.information['indata_path']+'/opd_638nm.mat' + da2=sio.loadmat(matfn2) + opd0=da2['opd'] # opd unit is in meter + self.opd0=opd0*1e9 # convert opd to nm + self.pupil=abs(opd0)>0.0 + #################### + + da=fits.open(self.information['indata_path']+'/opd1.fits') + self.opd1=da[0].data + + da=fits.open(self.information['indata_path']+'/opd2.fits') + self.opd2=da[0].data + + da=fits.open(self.information['indata_path']+'/opd3.fits') + self.opd3=da[0].data + + + ################################################################################ + ## slice information; the slice is put in vertial direction; + # the silce long size is 64 pixels + slice_blue=dict() + slice_red =dict() + + randRedpos=np.array([0.52835362, 1.1105926 , -0.81667794, 0.88860884, -2.78092636, + -0.15810022, -1.56726852, -0.71601855, -1.31768647, 1.73107581, + 0.4933876 , 2.83673377, 0.22226286, -0.02634998, 0.35539383, + -0.91989574, -2.44856212, 0.91020484, -3.03097852, -1.11638071, + 1.28360669, -0.12521128, -0.3907698 , 0.70183575, 1.00578099, + 1.67339662, 0.18067182, -0.56303075, 0.40959616, 1.45518379, + -0.93194744, 0.41492972]) + + randBluepos=np.array([ 0.97449008, -0.21371406, -1.62513338, -3.06938604, 1.72615283, + 0.73333374, 0.80923919, -0.9418576 , -0.16806578, -1.04416631, + 2.20155068, -0.0900156 , 0.07597706, 0.76208373, 0.29426592, + -0.89434703, 0.34017826, 1.16936499, 0.10977829, -1.31179539, + -0.50859787, -1.01891651, -0.95791581, -1.53018041, 0.88358827, + 0.07837641, -0.86157157, -1.18070438, 0.53970599, 1.4913733 , + 2.10938775, 1.23213412]) + + ##################### + for i in range(32): + if i==0: + slice_blue['py']=np.zeros(32) + slice_blue['px']=np.zeros(32) + + slice_red['py']=np.zeros(32) + slice_red['px']=np.zeros(32) + + if i<16: + slice_blue['py'][i]=50+randBluepos[i]*4 + slice_blue['px'][i]=3.55/0.015*i+166.0 + + + slice_red['py'][i]=50+randBluepos[i]*4 + slice_red['px'][i]=3.55/0.015*i+1190.0 + + else: + slice_blue['py'][i]=50+250+randBluepos[i]*4 + slice_blue['px'][i]=3.55/0.015*(i-16)+166.0+118 + + + slice_red['py'][i]=50+250+randBluepos[i]*4 + slice_red['px'][i]=3.55/0.015*(i-16)+1190.0+118 + ####### + + self.slice_blue=slice_blue + self.slice_red=slice_red + + ############################################################################### + maskSlice=dict() + maskSlit=dict() + sizeout=100 + for k in range(32): + maskSlice[str(k)]=np.zeros((sizeout,sizeout)) + maskSlice[str(k)][2*k+18:2*k+20, int(sizeout/2)-32:int(sizeout/2)+32]=1 + + maskSlit[str(k)]=np.zeros((sizeout,sizeout)) + maskSlit[str(k)][2*k+18:2*k+20, int(sizeout/2)-37:int(sizeout/2)+37]=1 + + self.maskSlice=maskSlice + self.maskSlit =maskSlit + ################################################################################################ + + + + +############################################################################3 + def readConfigs(self): + """ + Reads the config file information using configParser and sets up a logger. + """ + self.config = ConfigParser.RawConfigParser() + + self.config.read_file(open(self.configfile)) + + +############################################################################### + + + def processConfigs(self): + """ + Processes configuration information and save the information to a dictionary self.information. + + The configuration file may look as follows:: + + [TEST] + + + For explanation of each field, see /data/test.config. Note that if an input field does not exist, + then the values are taken from the default instrument model as described in + support.IFSinstrumentModel.VISinformation(). Any of the defaults can be overwritten by providing + a config file with a correct field name. + """ + #parse options and update the information dictionary + options = self.config.options(self.section) + + settings = {} + + for option in options: + try: + settings[option] = self.config.getint(self.section, option) + except ValueError: + try: + settings[option] = self.config.getfloat(self.section, option) + except ValueError: + settings[option] = self.config.get(self.section, option) + + self.information.update(settings) + + self.cosmicRays = self.config.getboolean(self.section, 'cosmicRays') + self.darknoise = self.config.getboolean(self.section, 'darknoise') + self.cosmetics = self.config.getboolean(self.section, 'cosmetics') + self.radiationDamage = self.config.getboolean(self.section, 'radiationDamage') + + self.bleeding = self.config.getboolean(self.section, 'bleeding') + + self.skyback = self.config.getboolean(self.section, 'skyback') + + + #these don't need to be in the config file + + try: + self.nonlinearity = self.config.getboolean(self.section, 'nonlinearity') + except: + self.nonlinearity = False + + try: + self.flatfieldM = self.config.getboolean(self.section, 'flatfieldM') + except: + self.flatfieldM = False + + try: + self.readoutNoise = self.config.getboolean(self.section, 'readoutNoise') + except: + self.readoutNoise = True + + #################################################################### + self.booleans = dict(nonlinearity=self.nonlinearity, + flatfieldM=self.flatfieldM, + cosmicRays=self.cosmicRays, + darknoise=self.darknoise, + cosmetics=self.cosmetics, + radiationDamage=self.radiationDamage, + bleeding=self.bleeding, + skyback =self.skyback) + ##################################################################### + + now=datetime.now() + + result_day=now.strftime("%Y-%m-%d") + + self.result_path=self.information['result_path']+'/'+result_day + + if os.path.isdir(self.result_path)==False: + os.mkdir(self.result_path) + os.mkdir(self.result_path+'/log_file') + os.mkdir(self.result_path+'/sky_Data') + + now=datetime.now() + + data_time=now.strftime("%Y-%m-%d-%H-%M-%S") + + self.log = lg.setUpLogger(self.result_path+'/log_file/IFS_'+'_'+data_time+'.log') + + self.log.info('STARTING A NEW SIMULATION') + + self.log.info(self.information) + + return + ######################################################################################### + +####################################################################### + + + def readCosmicRayInformation(self): + """ + Reads in the cosmic ray track information from two input files. + + Stores the information to a dictionary called cr. + """ + self.log.info('Reading in cosmic ray information from %s and %s' % (self.information['cosmicraylengths'], + self.information['cosmicraydistance'])) + + crLengths = np.loadtxt(self.information['cosmicraylengths']) + crDists = np.loadtxt(self.information['cosmicraydistance']) + + self.cr = dict(cr_u=crLengths[:, 0], cr_cdf=crLengths[:, 1], cr_cdfn=np.shape(crLengths)[0], + cr_v=crDists[:, 0], cr_cde=crDists[:, 1], cr_cden=np.shape(crDists)[0]) + +############################################################################################## + + + def configure(self): + """ + Configures the simulator with input information and creates and empty array to which the final image will + be build on. + """ + self.readConfigs() + + self.processConfigs() + + self.log.info('Read in the configuration files and created an empty array') + +################################################################################################################# + + def MakeFlatMatrix(self, img, seed): + #### + ysize, xsize=img.shape + np.random.seed(seed) + r1,r2,r3,r4 = np.random.random(4) + a1 = -0.5 + 0.2*r1 + a2 = -0.5 + 0.2*r2 + a3 = r3+5 + a4 = r4+5 + xmin,xmax,ymin,ymax = 0, xsize,0, ysize + Flty, Fltx = np.mgrid[ymin:ymax, xmin:xmax] + np.random.seed(seed) + p1,p2,bg=np.random.poisson(1000, 3) + Fltz = 1e-6*(a1 * (Fltx-p1) ** 2 + a2 * (Flty-p2) ** 2 - a3*Fltx - a4*Flty) + bg*20 + FlatMat = Fltz/np.mean(Fltz) + + return FlatMat + + ######################################################################################################### + def addLampFlux(self): + """ + Include flux from the calibration source. + """ + + + self.image_b += fits.getdata(self.information['flatflux']) + + self.image_r += fits.getdata(self.information['flatflux']) + + self.log.info('Flux from the calibration unit included (%s)' % self.information['flatflux']) + + + def applyflatfield(self): + """ + Applies multiplicative flat field to emulate pixel-to-pixel non-uniformity. + + Because the pixel-to-pixel non-uniformity effect (i.e. multiplicative) flat fielding takes place + before CTI and other effects, the flat field file must be the same size as the pixels that see + the sky. + """ + + ### + flat_b=self.MakeFlatMatrix(self.image_b, 100) + + flat_r=self.MakeFlatMatrix(self.image_r, 200) + + self.image_b *= flat_b + + self.image_r *= flat_r + + self.log.info('Applied flatfield to images.') + + return + + ######################################################## + +############################################################################### + def addCosmicRays(self): + """ + Add cosmic rays to the arrays based on a power-law intensity distribution for tracks. + Cosmic ray properties (such as location and angle) are chosen from random Uniform distribution. + For details, see the documentation for the cosmicrays class in the support package. + """ + self.readCosmicRayInformation() + self.cr['exptime'] = self.information['exptime'] #to scale the number of cosmics with exposure time + + #cosmic ray image + crImage_b = np.zeros((2048, 4096), dtype=np.float64) + + crImage_r = np.zeros((3072, 6144), dtype=np.float64) + + #cosmic ray instance + cosmics_b = cosmicrays.cosmicrays(self.log, crImage_b, crInfo=self.cr) + cosmics_r = cosmicrays.cosmicrays(self.log, crImage_r, crInfo=self.cr) + + + #add cosmic rays up to the covering fraction + #CCD_cr = cosmics.addUpToFraction(self.information['coveringFraction'], limit=None) + + CCD_cr_b = cosmics_b.addUpToFraction(self.information['coveringfraction'], limit=None) + CCD_cr_r = cosmics_r.addUpToFraction(self.information['coveringfraction'], limit=None) + + + #paste the information + self.image_b += CCD_cr_b + self.image_r += CCD_cr_r + + + #count the covering factor + area_cr_b = np.count_nonzero(CCD_cr_b) + area_cr_r = np.count_nonzero(CCD_cr_r) + + #self.log.info('The cosmic ray covering factor is %i pixels ' % area_cr) + self.log.info('The cosmic ray in blue channel covering factor is %i pixels ' % area_cr_b) + self.log.info('The cosmic ray in red channel covering factor is %i pixels ' % area_cr_r) + + ######################################################### + +######################################################################### + +######################################################################### + + + def applyDarkCurrent(self): + """ + Apply dark current. Scales the dark with the exposure time. + + Additionally saves the image without noise to a FITS file. + """ + + self.log.info('Added dark current to bule and red channel' ) + + ########## blue zone 1 + self.image_b[0:1024,0:2048] += self.information['exptime'] * self.information['dark1_b'] + + ########## zone 4 ################# + self.image_b[1024:2048,0:2048] += self.information['exptime'] * self.information['dark4_b'] + + ########## zone 2 ################### + self.image_b[0:1024,2048:4096] += self.information['exptime'] * self.information['dark2_b'] + + ########## zone 3 + self.image_b[1024:2048,2048:4096]+= self.information['exptime'] * self.information['dark3_b'] + + + + ########## red zone 1 + self.image_r[0:1536, 0:3072] += self.information['exptime'] * self.information['dark1_r'] + ########## zone 4 ################# + + self.image_r[1536:3712,0:3072] += self.information['exptime'] * self.information['dark4_r'] + + ########## zone 2 ################### + self.image_r[0:1536,3072:6144] += self.information['exptime'] * self.information['dark2_r'] + + ########## zone 3 + self.image_r[1536:3072,3072:6144] += self.information['exptime'] * self.information['dark3_r'] + + +#######################################################################################################3 + + def applyCosmicBackground(self): + """ + Apply dark the cosmic background. Scales the background with the exposure time. + + Additionally saves the image without noise to a FITS file. + """ + + #add background + bcgr = self.information['exptime'] * self.information['cosmic_bkgd'] + #self.image += bcgr + self.image_b += bcgr + self.image_r += bcgr + + self.log.info('Added cosmic background = %f' % bcgr) + + if self.cosmicRays: + #self.imagenoCR += bcgr + self.imagenoCR_b += bcgr + self.imagenoCR_r += bcgr + + ########################################################################################## + + + +############################################################################## + def applyPoissonNoise(self): + """ + Add Poisson noise to the image. + """ + + rounded = np.rint(self.image_b) ### round to + residual = self.image_b.copy() - rounded #ugly workaround for multiple rounding operations... + rounded[rounded < 0.0] = 0.0 + + np.random.seed() + self.image_b = np.random.poisson(rounded).astype(np.float64) + self.log.info('Added Poisson noise on channel blue') + self.image_b += residual + + rounded = np.rint(self.image_r) ### round to + residual = self.image_r.copy() - rounded #ugly workaround for multiple rounding operations... + rounded[rounded < 0.0] = 0.0 + + np.random.seed() + self.image_r = np.random.poisson(rounded).astype(np.float64) + self.log.info('Added Poisson noise on channel red') + self.image_r += residual + + +################################################################################################################### + + def applyCosmetics(self): + """ + Apply cosmetic defects described in the input file. + + Warning:: This method does not work if the input file has exactly one line. + """ + cosmetics = np.loadtxt(self.information['cosmeticsfile_b']) + + x = np.round(cosmetics[:, 0]).astype(int) + y = np.round(cosmetics[:, 1]).astype(int) + value = cosmetics[:, 2] + + cosmetics_b=np.zeros((3712,6784)) + cosmetics_r=np.zeros((3712,6784)) + self.log.info('Adding cosmetic defects to blue channel:' ) + for xc, yc, val in zip(x, y, value): + if 0 <= xc <= 6784 and 0 <= yc <= 3712: + #self.image[yc, xc] = val + self.image_b[yc, xc] = val + cosmetics_b[yc,xc]=val + self.log.info('x=%i, y=%i, value=%f' % (xc, yc, val)) +###################################################################################################### + + cosmetics = np.loadtxt(self.information['cosmeticsfile_r']) + + x = np.round(cosmetics[:, 0]).astype(int) + y = np.round(cosmetics[:, 1]).astype(int) + value = cosmetics[:, 2] + + + self.log.info('Adding cosmetic defects to red channel:' ) + + for xc, yc, val in zip(x, y, value): + if 0 <= xc <= 6784 and 0 <= yc <= 3712: + #self.image[yc, xc] = val + self.image_r[yc, xc] = val + cosmetics_r[yc,xc]=val + self.log.info('x=%i, y=%i, value=%f' % (xc, yc, val)) + + +################################################################################ + + + def applyRadiationDamage(self): + """ + Applies CDM03 radiation model to the image being constructed. + + .. seealso:: Class :`CDM03` + """ + + + self.log.debug('Starting to apply radiation damage model...') + #at this point we can give fake data... + cti = CTI.CDM03bidir(self.information, [], log=self.log) + #here we need the right input data + self.image_b = cti.applyRadiationDamage(self.image_b.copy().transpose(), iquadrant=self.information['quadrant']).transpose() + self.log.info('Radiation damage added.') + + + self.log.debug('Starting to apply radiation damage model...') + #at this point we can give fake data... + cti = CTI.CDM03bidir(self.information, [], log=self.log) + #here we need the right input data + self.image_r = cti.applyRadiationDamage(self.image_r.copy().transpose(), iquadrant=self.information['quadrant']).transpose() + self.log.info('Radiation damage added.') +################################################################################## + + + def applyNonlinearity(self): + """ + Applies a CCD273 non-linearity model to the image being constructed. + """ + + self.log.debug('Starting to apply non-linearity model...') + self.image_b = IFSinstrumentModel.CCDnonLinearityModel(self.image_b.copy()) + + self.log.info('Non-linearity effects included.') + + + self.log.debug('Starting to apply non-linearity model...') + self.image_r = IFSinstrumentModel.CCDnonLinearityModel(self.image_r.copy()) + + self.log.info('Non-linearity effects included.') + +##################################################################################### + def applyReadoutNoise(self): + """ + Applies readout noise to the image being constructed. + + The noise is drawn from a Normal (Gaussian) distribution with average=0.0 and std=readout noise. + """ + + + self.log.info('readnoise added in blue channel') + ########## blue zone 1 + np.random.seed() + self.image_b[0:1856,0:3392] += np.random.normal(loc=0.0, scale=self.information['rn1_b'], size=(1856,3392)) + + ########## zone 4 ################# + np.random.seed() + self.image_b[1856:3712,0:3392] += np.random.normal(loc=0.0, scale=self.information['rn4_b'], size=(1856,3392)) + + ########## zone 2 ################### + np.random.seed() + self.image_b[0:1856,3392:6784] += np.random.normal(loc=0.0, scale=self.information['rn2_b'], size=(1856,3392)) + + ########## zone 3 + np.random.seed() + self.image_b[1856:3712,3392:6784]+= np.random.normal(loc=0.0, scale=self.information['rn3_b'], size=(1856,3392)) + + + ############################################################################ + + self.log.info('readnoise added in blue channel') + + + ########## red zone 1 + np.random.seed() + self.image_r[0:1856, 0:3392] += np.random.normal(loc=0.0, scale=self.information['rn1_r'], size=(1856,3392)) + + ########## zone 4 ################# + np.random.seed() + self.image_r[1856:3712,0:3392] += np.random.normal(loc=0.0, scale=self.information['rn4_r'], size=(1856,3392)) + + ########## zone 2 ################### + np.random.seed() + self.image_r[0:1856,3392:6784] += np.random.normal(loc=0.0, scale=self.information['rn2_r'], size=(1856,3392)) + + ########## zone 3 + np.random.seed() + self.image_r[1856:3712,3392:6784]+= np.random.normal(loc=0.0, scale=self.information['rn3_r'], size=(1856,3392)) + +########################################################################################## + + def electrons2ADU(self): + """ + Convert from electrons to ADUs using the value read from the configuration file. + """ + + + ############################################################### + + self.log.info('Converting from electrons to ADUs using a factor of gain' ) + + ########## blue zone 1 + self.image_b[0:1856,0:3392] /= self.information['gain1_b'] + + ########## zone 4 ################# + self.image_b[1856:3712,0:3392] /= self.information['gain4_b'] + + ########## zone 2 ################### + self.image_b[0:1856,3392:6784] /= self.information['gain2_b'] + + ########## zone 3 + self.image_b[1856:3712,3392:6784]/= self.information['gain3_b'] + + ############################################################################ + + ########## red zone 1 + self.image_r[0:1856, 0:3392] /= self.information['gain1_r'] + + ########## zone 4 ################# + self.image_r[1856:3712,0:3392] /= self.information['gain4_r'] + + ########## zone 2 ################### + self.image_r[0:1856,3392:6784] /= self.information['gain2_r'] + + ########## zone 3 + self.image_r[1856:3712,3392:6784] /= self.information['gain3_r'] + + ##########################################################################3 + + + #################################################################################### + + def applyBias(self): + """ + Adds a bias level to the image being constructed. + + The value of bias is read from the configure file and stored + in the information dictionary (key bias). + """ + + + ########## blue zone 1 + self.image_b[0:1856,0:3392] += self.information['bias1_b'] + + ########## zone 4 ################# + self.image_b[1856:3712,0:3392] += self.information['bias4_b'] + + ########## zone 2 ################### + self.image_b[0:1856,3392:6784] += self.information['bias2_b'] + + ########## zone 3 + self.image_b[1856:3712,3392:6784] += self.information['bias3_b'] + + self.log.info('Bias counts were added to the blue image' ) + + ############################################################################ + + ########## red zone 1 + self.image_r[0:1856, 0:3392] += self.information['bias1_r'] + + ########## zone 4 ################# + self.image_r[1856:3712,0:3392] += self.information['bias4_r'] + + ########## zone 2 ################### + self.image_r[0:1856,3392:6784] += self.information['bias2_r'] + + ########## zone 3 + self.image_r[1856:3712,3392:6784] += self.information['bias3_r'] + + ########################################################################## + + self.log.info('Bias counts were added to the red image' ) + +############################################################################### + +############################################################################### + + def applyBleeding_yan(self): + """ + Apply bleeding along the CCD columns if the number of electrons in a pixel exceeds the full-well capacity. + + Bleeding is modelled in the parallel direction only, because the CCD273s are assumed not to bleed in + serial direction. + + :return: None + """ + + + if self.image_b.max()>self.information['fullwellcapacity']: + + self.log.info('Applying column bleeding to blue CCD image...') + + #loop over each column, as bleeding is modelled column-wise + for i, column in enumerate(self.image_b.T): + sum = 0. + for j, value in enumerate(column): + #first round - from bottom to top (need to half the bleeding) + overload = value - self.information['fullwellcapacity'] + if overload > 0.: + overload /= 2. + #self.image[j, i] -= overload + self.image_b[j, i] -= overload + + sum += overload + + elif sum > 0.: + if -overload > sum: + overload = -sum + + self.image_b[j, i] -= overload + sum += overload + + for i, column in enumerate(self.image_b.T): + sum = 0. + for j, value in enumerate(column[::-1]): + #second round - from top to bottom (bleeding was half'd already, so now full) + overload = value - self.information['fullwellcapacity'] + if overload > 0.: + #self.image[-j-1, i] -= overload + self.image_b[-j-1, i] -= overload + + sum += overload + elif sum > 0.: + if -overload > sum: + overload = -sum + #self.image[-j-1, i] -= overload + self.image_b[-j-1, i] -= overload + + + sum += overload + print('Applying column bleeding to blue image finished.......') + + + ###################################################################### + if self.image_r.max()>self.information['fullwellcapacity']: + + self.log.info('Applying column bleeding to red CCD image...') + + for i, column in enumerate(self.image_r.T): + sum = 0. + for j, value in enumerate(column): + #first round - from bottom to top (need to half the bleeding) + overload = value - self.information['fullwellcapacity'] + if overload > 0.: + overload /= 2. + #self.image[j, i] -= overload + self.image_r[j, i] -= overload + + sum += overload + elif sum > 0.: + if -overload > sum: + overload = -sum + #self.image[j, i] -= overload + self.image_r[j, i] -= overload + + + sum += overload + + for i, column in enumerate(self.image_r.T): + sum = 0. + for j, value in enumerate(column[::-1]): + #second round - from top to bottom (bleeding was half'd already, so now full) + overload = value - self.information['fullwellcapacity'] + if overload > 0.: + #self.image[-j-1, i] -= overload + self.image_r[-j-1, i] -= overload + + sum += overload + elif sum > 0.: + if -overload > sum: + overload = -sum + #self.image[-j-1, i] -= overload + self.image_r[-j-1, i] -= overload + + + sum += overload + print('Applying column bleeding to red image finished.......') + + ############################################################################ + + ############################################################################ + + def discretise(self, max=2**16-1): + """ + Converts a floating point image array (self.image) to an integer array with max values + defined by the argument max. + + :param max: maximum value the the integer array may contain [default 65k] + :type max: float + + :return: None + """ + #avoid negative numbers in case bias level was not added + self.image_b[self.image_b < 0.0] = 0. + #cut of the values larger than max + self.image_b[self.image_b > max] = max + + self.image_b = np.rint(self.image_b).astype(int) + self.log.info('Maximum and total values of the image are %i and %i, respectively' % (np.max(self.image_b), + np.sum(self.image_b))) + + #avoid negative numbers in case bias level was not added + self.image_r[self.image_r < 0.0] = 0. + #cut of the values larger than max + self.image_r[self.image_r > max] = max + + self.image_r = np.rint(self.image_r).astype(int) + self.log.info('Maximum and total values of the image are %i and %i, respectively' % (np.max(self.image_r), + np.sum(self.image_r))) + + ################################################################################################## + + def applyImageShift(self): + + np.random.seed() + ud= np.random.random() # Choose a random rotation + dx= 2* (ud-0.5) * self.information['shiftmax'] + + np.random.seed() + ud= np.random.random() # Choose a random rotation + dy= 2* (ud-0.5) * self.information['shiftmax'] + + self.image_b= ndimage.shift(self.image_b.copy(), [dy+self.information['shift_b_y'] , dx+self.information['shift_b_x']], order=0, mode='nearest') + self.image_r= ndimage.shift(self.image_r.copy(), [dy+self.information['shift_r_y'] , dx+self.information['shift_r_x']], order=0, mode='nearest') + + self.log.info('Applied image shifting to g r i channels.') + self.information['ra'] = dx*self.information['pixel_size'] + self.information['dec'] = dy*self.information['pixel_size'] + + +######################################################################################################33 + + def applyImageRotate(self ): + np.random.seed() + ud = np.random.random() # Choose a random rotation + angle = 2* (ud-0.5) * self.information['tel_rotmax'] + + inputimg=self.image_b.copy() + rotimg=ndimage.rotate(inputimg,angle+self.information['rotate_b'],order=1,reshape=False) # here we choose reshape=False, the rotated image will + self.image_b=rotimg + + inputimg=self.image_r.copy() + rotimg=ndimage.rotate(inputimg,angle+self.information['rotate_r'],order=1,reshape=False) # here we choose reshape=False, the rotated image will + self.image_r=rotimg + + self.information['Tel_rot']=angle + + self.log.info('Applied telescope rotation with angle (in degree)= %f.', angle) +############################################################################### + + def CCDreadout(self): + + imgb=self.image_b.copy() + temp=np.zeros((3712,6784)) + ########## zone 1 + x1=0 + x2=x1+1024 + + y1=0 + y2=y1+2048 + temp[x1:x2,y1:y2]=imgb[0:1024,0:2048] + ########## zone 4 ################# + x1=2688 + x2=x1+1024 + + y1=0 + y2=y1+2048 + temp[x1:x2,y1:y2]=imgb[1024:2048,0:2048] + ########## zone 2 ################### + x1=0 + x2=x1+1024 + + y1=6784-2048 + y2=y1+2048 + temp[x1:x2,y1:y2]=imgb[0:1024,2048:4096] + ########## zone 3 + x1=2688 + x2=x1+1024 + + y1=6784-2048 + y2=y1+2048 + temp[x1:x2,y1:y2]=imgb[1024:2048,2048:4096] + + self.image_b=temp + + ############################################################################## + imgr=self.image_r.copy() + temp=np.zeros((3712,6784)) + ########## zone 1 + x1=0 + x2=x1+1536 + + y1=0 + y2=y1+3072 + temp[x1:x2,y1:y2]=imgr[0:1536, 0:3072] + ########## zone 4 ################# + x1=2176 + x2=x1+1536 + + y1=0 + y2=y1+3072 + temp[x1:x2,y1:y2]=imgr[1536:3712,0:3072] + ########## zone 2 ################### + x1=0 + x2=x1+1536 + + y1=6784-3072 + y2=y1+3072 + temp[x1:x2,y1:y2]=imgr[0:1536,3072:6144] + ########## zone 3 + x1=2176 + x2=x1+1536 + + y1=6784-3072 + y2=y1+3072 + temp[x1:x2,y1:y2]=imgr[1536:3072,3072:6144] + + self.image_r=temp + + return +############################################################################## + + def writeOutputs(self): + """ + Writes out a FITS file using PyFITS and converts the image array to 16bit unsigned integer as + appropriate for VIS. + + Updates header with the input values and flags used during simulation. + """ + + ## Readout information + self.source='sci' + now=datetime.now() + data_time=now.strftime("%Y-%m-%d %H:%M:%S") + exp_endtime=now.strftime("%Y%m%d%H%M%S") + start=now-timedelta(seconds=self.information['exptime']) + exp_starttime=start.strftime("%Y%m%d%H%M%S") + + #write the actual file + obsid=300000000+1 + + data_time=self.dt.strftime("%Y-%m-%d %H:%M:%S") + + exp_starttime=self.dt.strftime("%Y%m%d%H%M%S") + ### exposure end time is t2 ; + t2=self.dt+timedelta(seconds=self.information['exptime']) + exp_endtime=t2.strftime("%Y%m%d%H%M%S") + t3=self.dt+timedelta(seconds=self.information['exptime'])+timedelta(seconds=self.information['readouttime']) + + filename_b='CSST_IFS_B_'+self.source+'_'+exp_starttime+'_'+exp_endtime+'_'+str(obsid)+'_X_L0_VER_'+self.information['img_ver']+'.fits' + file_b=self.result_path+'/sky_Data/'+filename_b + + filename_r='CSST_IFS_R_'+self.source+'_'+exp_starttime+'_'+exp_endtime+'_'+str(obsid)+'_X_L0_VER_'+self.information['img_ver']+'.fits' + file_r=self.result_path+'/sky_Data/'+filename_r + + + #create a new FITS file, using HDUList instance + ofd_b = fits.PrimaryHDU() + + ofd_b.header['GROUPS']=( bool(False), 'always F') + ofd_b.header['DATE'] =( data_time, 'date this file was written' ) + + ofd_b.header['FILENAME']=(filename_b, ' file name C48 ') + ofd_b.header['OBSTYPE'] =( self.source, 'observation type raw,flt, mask, bias, dark, sci') + ofd_b.header['TELESCOP']=('CSST', 'always CSST') + ofd_b.header['INSTRUME']=( 'IFS', ' ') + ofd_b.header['RADECSYS']=('ICRS', ' always ICRS ') + ofd_b.header['EQUINOX'] =( float(2000.0), 'always 2000.0') + ofd_b.header['FITSCREA']=( '4.2.1', 'FITS create software version') + + ######### Object information ############# + + ofd_b.header['OBJECT']=( self.information['name_obj'], 'object name') + ofd_b.header['TARGET']=( (self.information['target']), 'target name, hhmmss+ddmmss') + ofd_b.header['OBJ_RA'] =(np.float64(self.information['ra_obj']) , 'RA of the object in deg') + ofd_b.header['OBJ_DEC']=(np.float64(self.information['dec_obj']) , 'DEC of the object in deg') + + ofd_b.header['RA_PNT0']=( np.float64(self.information['ra_pnt0']) , 'RA of the pointing (degrees) at EXPSTART') + ofd_b.header['DEC_PNT0']=(np.float64(self.information['dec_pnt0']) , 'DEC of the pointing (degrees) at EXPSTART') + + + + ############## + ofd_b.header['OBSID'] =(str(obsid) , 'observation ID, 3+8bit') + + ######## Telescope information ############### + # ofd_b.header['COMMENT'] ='==========================================================' + # ofd_b.header['COMMENT'] ='Telescope information' + # ofd_b.header['COMMENT'] ='==========================================================' + + ofd_b.header['REFFRAME']=('CSSTGSC-1.0' , 'guide star catalog version') + ofd_b.header['DATE-OBS']=(data_time , 'date of the observation (yyyy-mm-dd hh:mm:ss)') + + ofd_b.header['EXPSTART']=(np.float64(time2jd(self.dt)), 'exposure start time') + ofd_b.header['SUNANGL0']=(np.float32(0.0) , 'angle between sun and optical axis at EXPSTART') + ofd_b.header['MOONANG0']=(np.float32(0.0) , 'angle between moon and optical axis at EXPSTART') + ofd_b.header['POS_ANG0']=(np.float64(0.0), 'angle between optical axis and the North Pole at EXPSTART in arcsec') + ofd_b.header['TEL_ALT0']=(np.float64(0.0), 'angle between optical axis and the ground- piston at EXPSTART in deg') + + ofd_b.header['HOODSTA0']=(np.float32(0.0) , 'lens hood altitude at EXPSTART') + ofd_b.header['HOODANG0']=(np.float32(0.0), 'lens hood azimuth at EXPSTART') + ofd_b.header['POSI0_X'] =(np.float64(self.information['POSI0_X']) , 'the orbital position of CSST in X direction at EXPSTART') + ofd_b.header['POSI0_Y'] =(np.float64(self.information['POSI0_Y']) , 'the orbital position of CSST in Y direction at EXPSTART') + ofd_b.header['POSI0_Z'] =(np.float64(self.information['POSI0_Z']) , 'the orbital position of CSST in Z direction at EXPSTART') + ofd_b.header['VELO0_X']=( np.float64(self.information['VELO0_X']) , 'the orbital velocity of CSST in X direction at EXPSTART') + ofd_b.header['VELO0_Y']=( np.float64(self.information['VELO0_Y']) , 'the orbital velocity of CSST in Y direction at EXPSTART') + ofd_b.header['VELO0_Z']=( np.float64(self.information['VELO0_Z']) , 'the orbital velocity of CSST in Z direction at EXPSTART') + + ofd_b.header['Euler0_1']=( np.float64(0.0), 'Euler angle 1 at EXPSTART') + ofd_b.header['Euler0_2']=( np.float64(0.0), 'Euler angle 2 at EXPSTART') + ofd_b.header['Euler0_3']=( np.float64(0.0), 'Euler angle 3 at EXPSTART') + + + ofd_b.header['EXPEND'] =(np.float64(time2jd(t2)) , 'exposure end time') + + ofd_b.header['SUNANGL1']=(np.float32(0.0), 'angle between sun and optical axis at EXPEND') + ofd_b.header['MOONANG1']=(np.float32(0.0) , 'angle between moon and optical axis at EXPEND ') + ofd_b.header['POS_ANG1']=(np.float64(0.0) , 'angle between optical axis and the North Pole at EXPEND in arcsec') + ofd_b.header['TEL_ALT1']=(np.float64(0.0) , 'angle between optical axis and the ground- piston at EXPEND in deg ') + ofd_b.header['HOODSTA1']=(np.float32(0.0), 'lens hood altitude at EXPEND ') + ofd_b.header['HOODANG1']=(np.float32(0.0), 'lens hood azimuth at EXPEND ') + + ofd_b.header['POSI1_X'] =(np.float64(self.information['POSI1_X']) , 'the orbital position of CSST in X direction at EXPEND') + ofd_b.header['POSI1_Y'] =(np.float64(self.information['POSI1_Y']) , 'the orbital position of CSST in Y direction at EXPEND') + ofd_b.header['POSI1_Z'] =(np.float64(self.information['POSI1_Z']) , 'the orbital position of CSST in Z direction at EXPEND') + + ofd_b.header['VELO1_X']=(np.float64(self.information['VELO1_X']) , 'the orbital velocity of CSST in X direction at EXPEND') + ofd_b.header['VELO1_Y']=(np.float64(self.information['VELO1_Y']) , 'the orbital velocity of CSST in Y direction at EXPEND') + ofd_b.header['VELO1_Z']=(np.float64(self.information['VELO1_Z']) , 'the orbital velocity of CSST in Z direction at EXPEND') + + + ofd_b.header['Euler1_1']=( np.float64(0.0), 'Euler angle 1 at EXPEND') + ofd_b.header['Euler1_2']=( np.float64(0.0), 'Euler angle 2 at EXPEND') + ofd_b.header['Euler1_3']=( np.float64(0.0), 'Euler angle 3 at EXPEND') + + ofd_b.header['RA_PNT1']=(np.float64(ofd_b.header['RA_PNT0']), 'RA of the pointing (degrees) at EXPEND in deg') + ofd_b.header['DEC_PNT1']=(np.float64(ofd_b.header['DEC_PNT0']), 'DEC of the pointing (degrees) at EXPEND in deg') + + ofd_b.header['EXPTIME']=(self.information['exptime'], 'exposure duration') + ofd_b.header['EPOCH'] =(np.float32(0.0), 'coordinate epoch') + ofd_b.header['CHECKSUM']=( 0 , 'hdu-checksum') + + ########## finish header for 0 layer + #############################################################################3 + ##### header + + b1= self.image_b[1856:3712,0:3392] #b4 + b2= self.image_b[1856:3712,3392:6784] #b3 + b3= self.image_b[0:1856,0:3392] #b1 + b4= self.image_b[0:1856,3392:6784] #b2 + + ####### do Flip the b2 b2 and b4 array in the up/down or left/right direction. + b2=np.fliplr(b2) ## left to right + b3=np.flipud(b3) ## down to up + + b4=np.fliplr(b4) ## left to right and down to up + b4=np.flipud(b4) + + + bb=np.hstack((b1,b2,b3,b4)) + + + #new image HDU, blue channel, layer 1 + hdu_b =fits.ImageHDU(data=np.uint16(bb)) + + ######### instrument information ###### + ##### + hdu_b.header['PMIRRPOS']=(bool(False), 'FSM pointing,T: to MCI, F: not to MCI') + + if self.source =='sci': + hdu_b.header['CMIRRPOS']=(bool(False), 'position of calibration switch mirror,T: for calibration, F: not') + else: + hdu_b.header['CMIRRPOS']=(bool(True), 'position of calibration switch mirror,T: for calibration, F: not') + + if self.source=='flat': + hdu_b.header['FLAMP'] =(int(1), 'status of flat lamp,0: off, 1: , 2: ') + else: + hdu_b.header['FLAMP'] =(int(0), 'status of flat lamp,0: off, 1: , 2: ') + + + if self.source=='lamp': + hdu_b.header['ALAMP'] =(int(1),'status of atomic emission line lamp,0: off, 1: , 2: ') + else: + hdu_b.header['ALAMP'] =(int(0),'status of atomic emission line lamp,0: off, 1: , 2: ') + + ############# + hdu_b.header['IFSMODE'] =(int(0), 'IFS working mode') + hdu_b.header['IFSTEMP'] =(float(0.0), 'IFS components temperature in degC') + hdu_b.header['IFSSTAT'] =(int(0), 'IFS components status parameter') + ############################################################################## + ################### detector information############################# + # hdu_b.header['COMMENT'] ='==========================================================' + # hdu_b.header['COMMENT'] ='Detector information' + # hdu_b.header['COMMENT'] ='==========================================================' + + hdu_b.header['CAMERA'] =('Blue','camera of IFS') + hdu_b.header['DETNAM'] =('CCD231-c4','detector name') + hdu_b.header['DETSIZE'] =('', 'detector size') + hdu_b.header['DATASEC'] =('', 'data section') + hdu_b.header['PIXSCAL1']=(1856, 'pixel scale for axis 1') + hdu_b.header['PIXSCAL2']=(3392*4, 'pixel scale for axis 2') + hdu_b.header['PIXSIZE1']=(15, 'pixel size in um') + hdu_b.header['PIXSIZE2']=(15, 'pixel size in um') + hdu_b.header['NCHAN'] =(4, 'number of readout channels') + hdu_b.header['NCHAN1'] =(2, 'number of horizontal channels') + hdu_b.header['NCHAN2'] =(2, 'number of verticalchannels') + hdu_b.header['PSCAN1'] =(0, 'horizontal prescan width, per readout channel') + hdu_b.header['PSCAN2'] =(0, 'vertical prescan width, per readout channel') + hdu_b.header['OSCAN1'] =(0,' horizontal overscan width, per readout channel') + hdu_b.header['OSCAN2'] =(0, 'vertical overscan width, per readout channel') + + ## Readout information + # hdu_b.header['COMMENT'] ='=============================================================' + # hdu_b.header['COMMENT'] ='Readout information' + # hdu_b.header['COMMENT'] ='=============================================================' + + + hdu_b.header['READT0'] =(np.float64(time2jd(t2)),'read start time (UTC)') + hdu_b.header['READT1'] =(np.float64(time2jd(t3)), 'read end time (UTC)') + + hdu_b.header['DETTEMP0']=(np.float32(0.0), 'detector temperature at READT0') + hdu_b.header['DETTEMP1']=(np.float32(0.0), 'detector temperature at READT1') + hdu_b.header['BIN_X'] =(0, 'bin number in X (wavelength)') + hdu_b.header['BIN_Y'] =(0, 'bin number in Y (spatial)') + + hdu_b.header['GAIN1'] =(self.information['gain4_b'],'CCD gain (channel 1)') + hdu_b.header['GAIN2'] =(self.information['gain3_b'],'CCD gain (channel 2)') + hdu_b.header['GAIN3'] =(self.information['gain1_b'],'CCD gain (channel 3)') + hdu_b.header['GAIN4'] =(self.information['gain2_b'],'CCD gain (channel 4)') + + hdu_b.header['DARK1'] =(self.information['dark4_b'],'CCD dark (channel 1)') + hdu_b.header['DARK2'] =(self.information['dark3_b'],'CCD dark (channel 2)') + hdu_b.header['DARK3'] =(self.information['dark1_b'],'CCD dark (channel 3)') + hdu_b.header['DARK4'] =(self.information['dark2_b'],'CCD dark (channel 4)') + + + hdu_b.header['RDNOIS1'] =(self.information['rn4_b'],'read noise (channel 1') + hdu_b.header['RDNOIS2'] =(self.information['rn3_b'],'read noise (channel 2') + hdu_b.header['RDNOIS3'] =(self.information['rn1_b'],'read noise (channel 3') + hdu_b.header['RDNOIS4'] =(self.information['rn2_b'],'read noise (channel 4') + + hdu_b.header['DETBIA1'] =(self.information['bias4_b'],'amplifier bias voltage (channel1)') + hdu_b.header['DETBIA2'] =(self.information['bias3_b'],'amplifier bias voltage (channel2)') + hdu_b.header['DETBIA3'] =(self.information['bias1_b'],'amplifier bias voltage (channel3)') + hdu_b.header['DETBIA4'] =(self.information['bias2_b'],'amplifier bias voltage (channel4)') + + hdu_b.header['RDSPEED'] =(100,'read speed (in MHz)') + + hdu_b.header['EXPTIME'] =(self.information['exptime'],'exposure time in seconds') + + hdu_b.header['Img_Ver'] =(self.information['img_ver'], 'IFS CCD image Version') + + hdu_b.header['sky_obj'] =(self.skyfilepath,'input sky fits filepath') + + + ########################################################## + #################### red camera ###################### + + + #create a new FITS file, using HDUList instance + ofd_r = fits.PrimaryHDU() + + ofd_r.header['GROUPS']=( bool(False), 'always F') + ofd_r.header['DATE'] =( data_time, 'date this file was written' ) + + ofd_r.header['FILENAME']=(filename_r, ' file name C48 ') + + ofd_r.header['OBSTYPE'] =( self.source, 'observation type raw,flt, mask, bias, dark, sci') + + ofd_r.header['TELESCOP']=('CSST' , 'always CSST') + ofd_r.header['INSTRUME']=( 'IFS', ' ') + ofd_r.header['RADECSYS']=('ICRS', ' always ICRS ') + ofd_r.header['EQUINOX'] =( float(2000.0), 'always 2000.0') + ofd_r.header['FITSCREA']=( '4.2.1' , 'FITS create software version') + ######### Object information ############# + + ######### Object information ############# + # ofd_r.header['COMMENT']='=======================================================================' + # ofd_r.header['COMMENT']='Object information' + # ofd_r.header['COMMENT']='=======================================================================' + + ofd_r.header['OBJECT']=( self.information['name_obj'], 'object name') + ofd_r.header['TARGET']=( (self.information['target']), 'target name, hhmmss+ddmmss') + ofd_r.header['OBJ_RA'] =(np.float64(self.information['ra_obj']) , 'RA of the object in deg') + ofd_r.header['OBJ_DEC']=(np.float64(self.information['dec_obj']) , 'DEC of the object in deg') + + ofd_r.header['RA_PNT0']=( np.float64(self.information['ra_pnt0']) , 'RA of the pointing (degrees) at EXPSTART') + ofd_r.header['DEC_PNT0']=(np.float64(self.information['dec_pnt0']) , 'DEC of the pointing (degrees) at EXPSTART') + + ofd_r.header['OBSID'] =(str(obsid) , 'observation ID, 3+8bit ') + + ######## Telescope information ############### + # ofd_r.header['COMMENT']='=======================================================================' + # ofd_r.header['COMMENT']='Telescope information' + # ofd_r.header['COMMENT']='=======================================================================' + + ofd_r.header['REFFRAME']=('CSSTGSC-1.0' , 'guide star catalog version ') + ofd_r.header['DATE-OBS']=(data_time , 'date of the observation (yyyy-mm-dd hh:mm:ss)') + + ofd_r.header['EXPSTART']=(np.float64(exp_starttime), 'exposure start time ') + ofd_r.header['SUNANGL0']=(np.float32(0.0) , 'angle between sun and optical axis at EXPSTART ') + ofd_r.header['MOONANG0']=(np.float32(0.0) , 'angle between moon and optical axis at EXPSTART ') + ofd_r.header['POS_ANG0']=(np.float64(0.0), 'angle between optical axis and the North Pole at EXPSTART in arcsec ') + ofd_r.header['TEL_ALT0']=(np.float64(0.0), 'angle between optical axis and the ground- piston at EXPSTART in deg ') + ofd_r.header['HOODSTA0']=(np.float32(0.0) , 'lens hood altitude at EXPSTART ') + ofd_r.header['HOODANG0']=(np.float32(0.0), 'lens hood azimuth at EXPSTART ') + ofd_r.header['POSI0_X'] =(np.float64(self.information['POSI0_X']) , 'the orbital position of CSST in X direction at EXPSTART') + ofd_r.header['POSI0_Y'] =(np.float64(self.information['POSI0_Y']) , 'the orbital position of CSST in Y direction at EXPSTART') + ofd_r.header['POSI0_Z'] =(np.float64(self.information['POSI0_Z']) , 'the orbital position of CSST in Z direction at EXPSTART') + ofd_r.header['VELO0_X']=( np.float64(self.information['VELO0_X']) , 'the orbital velocity of CSST in X direction at EXPSTART') + ofd_r.header['VELO0_Y']=( np.float64(self.information['VELO0_Y']) , 'the orbital velocity of CSST in Y direction at EXPSTART') + ofd_r.header['VELO0_Z']=( np.float64(self.information['VELO0_Z']) , 'the orbital velocity of CSST in Z direction at EXPSTART') + + ofd_r.header['Euler0_1']=( np.float64(0.0), 'Euler angle 1 at EXPSTART') + ofd_r.header['Euler0_2']=( np.float64(0.0), 'Euler angle 2 at EXPSTART') + ofd_r.header['Euler0_3']=( np.float64(0.0), 'Euler angle 3 at EXPSTART') + + ofd_r.header['EXPEND'] =(np.float64(exp_endtime) , 'exposure end time') + + ofd_r.header['SUNANGL1']=(np.float32(0.0), 'angle between sun and optical axis at EXPEND') + ofd_r.header['MOONANG1']=(np.float32(0.0) , 'angle between moon and optical axis at EXPEND ') + ofd_r.header['POS_ANG1']=(np.float64(0.0) , 'angle between optical axis and the North Pole at EXPEND in arcsec') + ofd_r.header['TEL_ALT1']=(np.float64(0.0) , 'angle between optical axis and the ground- piston at EXPEND in deg ') + ofd_r.header['HOODSTA1']=(np.float32(0.0), 'lens hood altitude at EXPEND ') + ofd_r.header['HOODANG1']=(np.float32(0.0), 'lens hood azimuth at EXPEND ') + + ofd_r.header['POSI1_X'] =(np.float64(self.information['POSI1_X']) , 'the orbital position of CSST in X direction at EXPEND') + ofd_r.header['POSI1_Y'] =(np.float64(self.information['POSI1_Y']) , 'the orbital position of CSST in Y direction at EXPEND') + ofd_r.header['POSI1_Z'] =(np.float64(self.information['POSI1_Z']) , 'the orbital position of CSST in Z direction at EXPEND') + + ofd_r.header['VELO1_X']=(np.float64(self.information['VELO1_X']) , 'the orbital velocity of CSST in X direction at EXPEND') + ofd_r.header['VELO1_Y']=(np.float64(self.information['VELO1_Y']) , 'the orbital velocity of CSST in Y direction at EXPEND') + ofd_r.header['VELO1_Z']=(np.float64(self.information['VELO1_Z']) , 'the orbital velocity of CSST in Z direction at EXPEND') + + ofd_r.header['Euler1_1']=( np.float64(0.0), 'Euler angle 1 at EXPEND') + ofd_r.header['Euler1_2']=( np.float64(0.0), 'Euler angle 2 at EXPEND') + ofd_r.header['Euler1_3']=( np.float64(0.0), 'Euler angle 3 at EXPEND') + + ofd_r.header['RA_PNT1']=(np.float64(ofd_r.header['RA_PNT0']), 'RA of the pointing (degrees) at EXPEND in deg') + ofd_r.header['DEC_PNT1']=(np.float64(ofd_r.header['DEC_PNT0']), 'DEC of the pointing (degrees) at EXPEND in deg') + + ofd_r.header['EXPTIME']=(self.information['exptime'], 'exposure duration') + ofd_r.header['EPOCH'] =(np.float32(0.0), 'coordinate epoch') + ofd_r.header['CHECKSUM']=( 0 , 'hdu-checksum') + + ### finish 0 layer header + + ########## finish header for 0 layer + + # ########## blue zone 1--to--3 + # self.image_r[0:1856,0:3392] += self.information['bias1_r'] + + # ########## zone 4 --to---1 ################# + # self.image_r[1856:3712,0:3392] += self.information['bias4_r'] + + # ########## zone 2 ----to----4 ################### + # self.image_r[0:1856,3392:6784] += self.information['bias2_r'] + + # ########## zone 3 ---to------2 + # self.image_r[1856:3712,3392:6784] += self.information['bias3_r'] + #############################################################################3 + ##### header + + b1= self.image_r[1856:3712,0:3392] + b2= self.image_r[1856:3712,3392:6784] + b3= self.image_r[0:1856,0:3392] + b4= self.image_r[0:1856,3392:6784] + + + ####### do Flip the b2 b2 and b4 array in the up/down or left/right direction. + b2=np.fliplr(b2) ## left to right + b3=np.flipud(b3) ## down to up + + b4=np.fliplr(b4) ## left to right and down to up + b4=np.flipud(b4) + + + + rr=np.hstack((b1,b2,b3,b4)) + #new image HDU, blue channel, layer 1 + hdu_r =fits.ImageHDU(data=np.uint16(rr)) + + + ######################################### + ######### instrument information ###### + hdu_r.header['PMIRRPOS']=(bool(False), 'FSM pointing,T: to MCI, F: not to MCI') + + + hdu_r.header['CMIRRPOS']=(bool(False), 'position of calibration switch mirror,T: for calibration, F: not') + + hdu_r.header['FLAMP'] =(int(0), 'status of flat lamp,0: off, 1: , 2: ') + + hdu_r.header['ALAMP'] =(int(0),'status of atomic emission line lamp,0: off, 1: , 2: ') + + hdu_r.header['IFSMODE'] =(int(0), 'IFS working mode') + hdu_r.header['IFSTEMP'] =(float(0.0), 'IFS components temperature in degC') + hdu_r.header['IFSSTAT'] =(int(0), 'IFS components status parameter') + + ################### detector information############################# + # hdu_r.header['COMMENT']='=======================================================================' + # hdu_r.header['COMMENT']='Detector information' + # hdu_r.header['COMMENT']='=======================================================================' + + hdu_r.header['CAMERA'] =('Red','camera of IFS') + hdu_r.header['DETNAM'] =('CCD231-c4','detector name') + hdu_r.header['DETSIZE'] =('', 'detector size') + hdu_r.header['DATASEC'] =('', 'data section') + hdu_r.header['PIXSCAL1']=(1856, 'pixel scale for axis 1') + hdu_r.header['PIXSCAL2']=(3392*4, 'pixel scale for axis 2') + hdu_r.header['PIXSIZE1']=(15, 'pixel size in um') + hdu_r.header['PIXSIZE2']=(15, 'pixel size in um') + hdu_r.header['NCHAN'] =(4, 'number of readout channels') + hdu_r.header['NCHAN1'] =(2, 'number of horizontal channels') + hdu_r.header['NCHAN2'] =(2, 'number of verticalchannels') + hdu_r.header['PSCAN1'] =(0, 'horizontal prescan width, per readout channel') + hdu_r.header['PSCAN2'] =(0, 'vertical prescan width, per readout channel') + hdu_r.header['OSCAN1'] =(0,' horizontal overscan width, per readout channel') + hdu_r.header['OSCAN2'] =(0, 'vertical overscan width, per readout channel') + +##################################################################################################### + ## Readout information + # hdu_r.header['COMMENT']='=======================================================================' + # hdu_r.header['COMMENT']='Readout information' + # hdu_r.header['COMMENT']='=======================================================================' + + + + hdu_r.header['READT0'] =(np.float64(time2jd(t2)),'read start time (UTC)') + hdu_r.header['READT1'] =(np.float64(time2jd(t3)), 'read end time (UTC)') + + hdu_r.header['DETTEMP0']=(np.float32(0.0), 'detector temperature at READT0') + hdu_r.header['DETTEMP1']=(np.float32(0.0), 'detector temperature at READT1') + hdu_r.header['BIN_X'] =(0, 'bin number in X (wavelength)') + hdu_r.header['BIN_Y'] =(0, 'bin number in Y (spatial)') + + hdu_r.header['GAIN1'] =(self.information['gain4_r'],'CCD gain (channel 1)') + hdu_r.header['GAIN2'] =(self.information['gain3_r'],'CCD gain (channel 2)') + hdu_r.header['GAIN3'] =(self.information['gain1_r'],'CCD gain (channel 3)') + hdu_r.header['GAIN4'] =(self.information['gain2_r'],'CCD gain (channel 4)') + + + hdu_r.header['DARK1'] =(self.information['dark4_r'],'CCD dark (channel 1)') + hdu_r.header['DARK2'] =(self.information['dark3_r'],'CCD dark (channel 2)') + hdu_r.header['DARK3'] =(self.information['dark1_r'],'CCD dark (channel 3)') + hdu_r.header['DARK4'] =(self.information['dark2_r'],'CCD dark (channel 4)') + + + hdu_r.header['RDNOIS1'] =(self.information['rn4_r'],'read noise (channel 1') + hdu_r.header['RDNOIS2'] =(self.information['rn3_r'],'read noise (channel 2') + hdu_r.header['RDNOIS3'] =(self.information['rn1_r'],'read noise (channel 3') + hdu_r.header['RDNOIS4'] =(self.information['rn2_r'],'read noise (channel 4') + + hdu_r.header['DETBIA1'] =(self.information['bias4_r'],'amplifier bias voltage (channel1)') + hdu_r.header['DETBIA2'] =(self.information['bias3_r'],'amplifier bias voltage (channel2)') + hdu_r.header['DETBIA3'] =(self.information['bias1_r'],'amplifier bias voltage (channel3)') + hdu_r.header['DETBIA4'] =(self.information['bias2_r'],'amplifier bias voltage (channel4)') + + hdu_r.header['RDSPEED'] =(100,'read speed (in MHz)') + + hdu_r.header['EXPTIME'] =(self.information['exptime'],'exposure time in seconds') + + hdu_r.header['Img_Ver'] =(self.information['img_ver'], 'IFS CCD image Version') + + hdu_r.header['sky_obj'] =(self.skyfilepath,'input sky fits filename') + + + + hdulist_b=fits.HDUList([ofd_b, hdu_b]) + hdulist_b.writeto(file_b, overwrite=True) + #print('IFS_b.fits is created ') + + hdulist_r=fits.HDUList([ofd_r, hdu_r]) + hdulist_r.writeto(file_r, overwrite=True) + #print('IFS_r.fits is created ') + ################################################################################## + + def earthshine(self,theta): + """ + For given theta angle, return the earth-shine spectrum. + + :param theta: angle (in degree) from the target to earth limb. + :return: the scaled solar spectrum + template_wave: unit in A + template_flux: unit in erg/s/cm^2/A/arcsec^2 + + """ + + # read solar template + solar_template = pd.read_csv(self.information['indata_path']+'/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(self.information['indata_path']+'/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(self.information['indata_path']+'/refs/filter_Bessell_V.dat', sep='\s+', + header=None, comment='#') + filter_wave = cat_filter_V[0].values + filter_response = cat_filter_V[1].values + + # interplate to the target wavelength in V-band + ind_filter = (template_wave >= np.min(filter_wave)) & (template_wave <= np.max(filter_wave)) + filter_wave_interp = template_wave[ind_filter] + filter_response_interp = np.interp(filter_wave_interp, filter_wave, filter_response) + + filter_constant = simps(filter_response_interp * filter_wave_interp, filter_wave_interp) + template_constant = simps(filter_response_interp * template_wave[ind_filter] * template_flux[ind_filter], + template_wave[ind_filter]) + dwave = filter_wave_interp[1:] - filter_wave_interp[:-1] + wave_eff = np.nansum(dwave * filter_wave_interp[1:] * filter_response_interp[1:]) / \ + np.nansum(dwave * filter_response_interp[1:]) + + # get the normalized value at theta. + u0 = np.interp(theta, angle, surface_brightness) # mag/arcsec^2 + u0 = 10**((u0 + 48.6)/(-2.5)) # target flux in erg/s/cm^2/Hz unit + u0 = u0 * 3e18 / wave_eff**2 # erg/s/cm^2/A/arcsec^2 + + factor = u0 * filter_constant / template_constant + norm_flux = template_flux * factor # erg/s/cm^2/A/arcsec^2 + + self.earthshine_wave=template_wave # A + self.earthshine_flux=norm_flux + + return + + +######################################################################################################################################################################################################################################################## + + + def zodiacal(self, ra, dec, time): + """ + For given RA, DEC and TIME, return the interpolated zodical spectrum in Leinert-1998. + + :param ra: RA in unit of degree, ICRS frame + :param dec: DEC in unit of degree, ICRS frame + :param time: the specified string that in ISO format i.e., yyyy-mm-dd. + :return: + wave_A: wavelength of the zodical spectrum + spec_mjy: flux of the zodical spectrum, in unit of MJy/sr + spec_erg: flux of the zodical spectrum, in unit of erg/s/cm^2/A/sr + + """ + + # get solar position + dt = datetime.fromisoformat(time) + jd = julian.to_jd(dt, fmt='jd') + t = Time(jd, format='jd', scale='utc') + + astro_sun = get_sun(t) + ra_sun, dec_sun = astro_sun.gcrs.ra.deg, astro_sun.gcrs.dec.deg + + radec_sun = SkyCoord(ra=ra_sun*u.degree, dec=dec_sun*u.degree, frame='gcrs') + lb_sun = radec_sun.transform_to('geocentrictrueecliptic') + + # get offsets between the target and sun. + radec_obj = SkyCoord(ra=ra*u.degree, dec=dec*u.degree, frame='icrs') + lb_obj = radec_obj.transform_to('geocentrictrueecliptic') + + beta = abs(lb_obj.lat.degree) + lamda = abs(lb_obj.lon.degree - lb_sun.lon.degree) + + # interpolated zodical surface brightness at 0.5 um + zodi = pd.read_csv(self.information['indata_path']+'/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]) + xx, yy = np.meshgrid(beta_angle, lamda_angle) + f = interpolate.interp2d(xx, yy, zodi, kind='linear') + zodi_obj = f(beta, lamda) # 10^−8 W m−2 sr−1 um−1 + + # read the zodical spectrum in the ecliptic + cat_spec = pd.read_csv(self.information['indata_path']+'/refs/solar_spec.dat', sep='\s+', header=None, comment='#') + wave = cat_spec[0].values # A + spec0 = cat_spec[1].values # 10^-8 W m^−2 sr^−1 μm^−1 + zodi_norm = 252 # 10^-8 W m^−2 sr^−1 μm^−1 + + spec = spec0 * (zodi_obj / zodi_norm) * 1e-8 # W m^−2 sr^−1 μm^−1 + + # convert to the commonly used unit of MJy/sr, erg/s/cm^2/A/sr + wave_A = wave # A + spec_mjy = spec * 0.1 * wave_A**2 / 3e18 * 1e23 * 1e-6 # MJy/sr + spec_erg = spec * 0.1 # erg/s/cm^2/A/sr + spec_erg2 = spec_erg / 4.25452e10 # erg/s/cm^2/A/arcsec^2 + + self.zodiacal_wave=wave_A # in A + self.zodiacal_flux=spec_erg2 + + return + ################################################################################### + ################################################################################## + def CalskyNoise(self, lam): + + + # calculate sky noise; + planckh= 6.62620*10**-27 # erg s; + cc=2.99792458*10**17 # in nm/s + fov2=0.01 # arcsec^2 + + # lam is input wavelength in nm + + ########################################## + self.earthshine_wave # A + self.earthshine_flux # erg/s/cm^2/A/arcsec^2 + earthshine_flux=np.interp(lam*10.0, self.earthshine_wave,self.earthshine_flux) # flux from zodiacal + + self.zodiacal_wave # in A + self.zodiacal_flux # erg/s/cm^2/A/arcsec^2 + zodiacal_flux=np.interp(lam*10.0, self.zodiacal_wave,self.zodiacal_flux) # flux from zodiacal + fluxlam_sky=(earthshine_flux+zodiacal_flux)*fov2 # erg/s/cm2/A + ############### + + ephoton=planckh*cc/lam # in erg/photon, cc与lambda单位需要一致; + Ns_skynoise=fluxlam_sky/ephoton # in unit of photons/cm2/s/A + + + return Ns_skynoise + + + ################################################################################# + def sim_sky_img(self,skyfitsfilename, skyRa_shift, skyDec_shift, sky_rot, exposuretime): + + + ############################################################################ + ### load fits file + indatafile=skyfitsfilename + a=fits.open(indatafile) + ####################################### + self.information['name_obj']=a[0].header['OBJECT'] + self.information['ra_obj'] =a[0].header['RA'] ### in degree + self.information['dec_obj'] =a[0].header['DEC'] ### in degree + + disRa =(skyRa_shift)/3600.0 ##convert unit of degree to arcsec + disDec=(skyDec_shift)/3600.0 ##convert unit of degree to arcsec + + self.information['ra_pnt0'] =a[0].header['RA'] + disRa/np.cos(a[0].header['DEC']/180.0*np.pi) + self.information['dec_pnt0']=a[0].header['DEC']+ disDec + + self.earthshine(self.earthshine_theta) + + self.zodiacal(self.information['ra_obj'], self.information['dec_obj'], self.zodiacal_time) + + self.information['target']=deg2HMS(self.information['ra_obj'], self.information['dec_obj']) + + + ### main input data + SpecCube=a[1].data ## spectrum data cube; + + Wave=0.1*a[2].data # the relatived wavelength which is converted from Unit A to nm + #print('Wave data header', hdr) + + ###################################################################################### + + exptime=self.information['exptime'] #exposure time + + dis_dx=disRa # image shift Ra in arcsec + dis_dy=disDec # image shift Dec in arcsec + + sizeout= len(SpecCube[:,0,0]) + + blue_img=galsim.Image(np.zeros((2048,4096)),copy=True) + blue_img.scale=self.pixelscale + blue_img.setOrigin=(0,0) + + red_img=galsim.Image(np.zeros((3072,6144)),copy=True) + red_img.scale=self.pixelscale + red_img.setOrigin=(0,0) + + blue_sensor=galsim.Sensor() + + red_sensor=galsim.Sensor() + + deltalam=np.mean(np.diff(Wave)) + + energy=0.0 + + energy_blue=0.0 + energy_red=0.0 + + width_blue=0 + ################################ + ############## doppler effect to photons.wavelength ############# + + #self.orbit_pars + x_sat=float(self.orbit_pars[self.orbit_exp_num,1]) + y_sat=float(self.orbit_pars[self.orbit_exp_num,2]) + z_sat=float(self.orbit_pars[self.orbit_exp_num,3]) + vx_sat=float(self.orbit_pars[self.orbit_exp_num,4]) + vy_sat=float(self.orbit_pars[self.orbit_exp_num,5]) + vz_sat=float(self.orbit_pars[self.orbit_exp_num,6]) + + self.information['POSI0_X']=x_sat + self.information['POSI0_Y']=y_sat + self.information['POSI0_Z']=z_sat + self.information['VELO0_X']=vx_sat + self.information['VELO0_Y']=vy_sat + self.information['VELO0_Z']=vz_sat + + + theta1=beta_angle( x_sat,y_sat,z_sat,vx_sat,vy_sat,vz_sat, self.information['ra_obj'], self.information['dec_obj']) + + v1=np.sqrt(vx_sat**2+vy_sat**2+vz_sat**2)*np.cos(theta1/180.0*np.pi) # velocity at stat exposure time + vv1=LSR_velocity(self.information['ra_obj'],self.information['dec_obj'],v1, self.TianCe_day) + + + ################################################# + + ### exposure end time is t2 ; + t2=self.dt+timedelta(seconds=self.information['exptime']) + + t2jd=time2jd(t2) + + if self.orbit_pars[-1,0]1e-3) + energy=energy+sum(photons.flux[idx0]) ### totla energy for slice image + p_num=len(idx0[0]) + + ############################################################################################### + ############### find photons for blue channel, and make the flux multiple the optical and CCD efficiency + + np.random.seed() + wavesample=lam1+(lam2-lam1)*np.random.rand(p_num) + + + if (lam>=350.0 and lam<=650.0): + ## bulue channel + photons_blue=galsim.PhotonArray(N=p_num, x=photons.x[idx0], y=photons.y[idx0], flux = Qe_blue*photons.flux[idx0],wavelength=wavesample) + + dx_blue, dy_blue = get_dx_dy_blue(wavesample) + + photons_blue.x=photons_blue.x/self.pixelscale+dx_blue+self.slice_blue['px'][k] + + photons_blue.y=photons_blue.y/self.pixelscale+dy_blue+self.slice_blue['py'][k] + + blue_sensor.accumulate(photons_blue, blue_img) + + energy_blue=energy_blue+sum(photons_blue.flux) + + width_blue=width_blue+deltalam/32.0 + + + + if (lam>=560.0) & (lam<=1000.0 ): + ## red channel + photons_red=galsim.PhotonArray(N=p_num,x=photons.x[idx0],y=photons.y[idx0], flux = Qe_red*photons.flux[idx0],wavelength=wavesample) + + dx_red, dy_red = get_dx_dy_red(wavesample) + + photons_red.x=photons_red.x/self.pixelscale+dx_red+self.slice_red['px'][k] + + photons_red.y=photons_red.y/self.pixelscale+dy_red+self.slice_red['py'][k] + + red_sensor.accumulate(photons_red, red_img) + + energy_red=energy_red+sum(photons_red.flux) + + #################################################################################### + ## stray light will cover 2% of input total light; + blue_img.array[:,:]=blue_img.array[:,:]+0.01*energy/2048/4096 + + red_img.array[:,:] =red_img.array[:,:]+ 0.01*energy/3072/6144 + + self.image_b=blue_img.array + self.image_r=red_img.array + + return + +################################################################################################# + +################################################################################################# + + def simulate(self, skyfitsin, skyRa_shift, skyDec_shift,sky_rot, exptime): + + + """ + Create a single simulated image of a quadrant defined by the configuration file. + + + """ + + #self.configure() #print the configfile name and path; + + self.dt=datetime.now() + + self.information['exptime']=exptime + + self.skyfilepath=skyfitsin + + np.random.seed() + ud = np.random.random() # Choose a random + self.earthshine_theta=ud * 60 # in degree + + ################################################################## + #### load orbit parameters ##### + flag=0 + for k in range(1,50,1): + + fn=self.information['indata_path']+'/refs/orbit20160925/'+str(k)+'.txt'; + d=np.loadtxt(fn); + self.dt_num=int((self.information['exptime']+self.information['readouttime']+125)/120) + now_dt=datetime.utcnow() + now_jd=time2jd(now_dt) + for kk in range(len(d[:,0])): + if now_jd-d[kk,0]<=0: + flag=1 + break + if flag==1: + break + #####################end for + self.orbit_pars=d + self.orbit_file_num=k + self.orbit_exp_num =kk + + exptime_start_jd=d[kk,0] #### jd time, utc format + + self.dt=julian.from_jd(exptime_start_jd, fmt='jd') + + self.TianCe_day=self.dt.strftime("%Y-%m-%d") ###str(self.dt.year)+'-'+str(self.dt.month)+'-'+str(self.dt.day) + + self.TianCe_exp_start=dt2hmd(self.dt) + + self.zodiacal_time=self.TianCe_day + + ####################################################################### + + self.sim_sky_img(skyfitsin, skyRa_shift, skyDec_shift, sky_rot, self.information['exptime']) + + self.information['sky_rot']=sky_rot + self.information['skyRa_shift']=skyRa_shift + self.information['skyRa_shift']=skyDec_shift + +############################################################################### +############ add some effect to images ####################################### + + + if self.flatfieldM: + self.applyflatfield() + #print('Applying flatfieldM finished.......') + + + if self.darknoise: + self.applyDarkCurrent() + + + if self.cosmicRays: + self.addCosmicRays() + #print('Applying cosmicRays finished.......') + + if self.bleeding: + self.applyBleeding_yan() + #print('Applying bleeding finished.......') + + self.applyPoissonNoise() + + + if self.nonlinearity: + self.applyNonlinearity() + #print('Applying nonlinearity finished.......') + + + if self.radiationDamage: + self.applyRadiationDamage() + #print('Applying radiationDamage finished.......') + + + + ##### cut original CCD image to four parts by four read out channels and zones + self.CCDreadout() + + if self.readoutNoise: + self.applyReadoutNoise() + #print('Applying readoutNoise finished.......') + + self.electrons2ADU() + + self.applyBias() + + if self.cosmetics: + self.applyCosmetics() + #print('Applying cosmetics finished.......') + + self.discretise() + + self.writeOutputs() + + self.log.info('Using the following input values:') + + for key, value in self.information.items(): + self.log.info('%s = %s' % (key, value)) + + self.log.info('Using the following booleans:') + + for key, value in self.booleans.items(): + self.log.info('%s = %s' % (key, value)) + + self.log.info('Finished the simulation.') + +############################################################################################## +############################################################################################## +def runIFSsim(configfile): + + + opts, args = processArgs() + + opts.configfile=configfile + + simulate= IFSsimulator(opts) + + skyfitsin=simulate.information['skyfitsin'] + + exptime=simulate.information['exptime'] + + sky_ra_dis=simulate.information['sky_ra_dis'] + + sky_dec_dis=simulate.information['sky_dec_dis'] + + sky_angle_dis=simulate.information['sky_angle_dis'] + + + + simulate.simulate(skyfitsin, sky_ra_dis, sky_dec_dis, sky_angle_dis, exptime) + + +########################## begin main fucntion ####################################### +############################################################################################## +############################################################################################## + +if __name__ == "__main__": + + + + if len(sys.argv[:]) <2: + + configfile='./ifs_data/ifs_sim_example.config' + + ########################################################################################### + + if len(sys.argv[:]) >=2: + configfile=sys.argv[1] + if not os.path.exists(configfile): + print('The given input configfile path is wrong......') + sys.exit(1) + + ################################################ + + runIFSsim(configfile) + + print('---The CSST-IFS simulation is successful!---') + + #'/home/yan/IFS_FabuCode/InputData/IFS_sim_Fabu.config' + ############################################################ + + + diff --git a/csst_ifs_sim/ifs_so/__init__.py b/csst_ifs_sim/ifs_so/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csst_ifs_sim/ifs_so/cdm03.cpython-37m-x86_64-linux-gnu.so b/csst_ifs_sim/ifs_so/cdm03.cpython-37m-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..85a4cfc31920218e8b634b8d53cf9db62547f63f GIT binary patch literal 175816 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 UcKbTLx%8{QGx~406s)59A8mFehyVZp literal 0 HcmV?d00001 diff --git a/csst_ifs_sim/ifs_so/cdm03bidir.cpython-38-x86_64-linux-gnu.so b/csst_ifs_sim/ifs_so/cdm03bidir.cpython-38-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..4ddf6dd453c91a1ed8b3448956bc127596d748f8 GIT binary patch literal 203248 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 self.xsize + ihi[msk] = self.xsize + ihi = ihi.astype(np.int) + + #pixels in y-directions + jlo = np.round(y0.copy() - dy) + msk = jlo < 0. + jlo[msk] = 0 + jlo = jlo.astype(np.int) + + jhi = 1 + np.round(y0.copy() + dy) + msk = jhi > self.ysize + jhi[msk] = self.ysize + jhi = jhi.astype(np.int) + + #loop over the individual events + for i, luminosity in enumerate(lum): + n = 0 # count the intercepts + + u = [] + x = [] + y = [] + + #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] + if np.abs(ok) <= 0.5: + n += 1 + u.append(ok) + x.append(xcoord) + y.append(y0[i] + ok * dy[i]) + else: + for xcoord in range(ihi[i], ilo[i]): + ok = (xcoord - x0[i]) / dx[i] + if np.abs(ok) <= 0.5: + n += 1 + u.append(ok) + x.append(xcoord) + y.append(y0[i] + ok * dy[i]) + + #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] + if np.abs(ok) <= 0.5: + n += 1 + u.append(ok) + x.append(x0[i] + ok * dx[i]) + y.append(ycoord) + else: + for ycoord in range(jhi[i], jlo[i]): + ok = (ycoord - y0[i]) / dy[i] + if np.abs(ok) <= 0.5: + n += 1 + u.append(ok) + x.append(x0[i] + ok * dx[i]) + y.append(ycoord) + + #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 + u = np.asarray(u) + x = np.asarray(x) + y = np.asarray(y) + + args = np.argsort(u) + + u = u[args] + x = x[args] + y = y[args] + + #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.)) + cy = int(1 + np.floor((y[i + 1] + y[i]) / 2.)) + + if 0 <= cx < self.xsize and 0 <= cy < self.ysize: + crImage[cy, cx] += (w * luminosity) + + return crImage + + + def _drawCosmicRays(self, limit=None): + """ + Add cosmic rays to the arrays based on a power-law intensity distribution for tracks. + + Cosmic ray properties (such as location and angle) are chosen from random Uniform distribution. + """ + #estimate the number of cosmics + cr_n = self.xsize * self.ysize * 0.014 / 43.263316 * 2. + #scale with exposure time, the above numbers are for the nominal 565s exposure + cr_n *= (self.information['exptime'] / 565.0) + + #assume a power-law intensity distribution for tracks + fit = dict(cr_lo=1.0e3, cr_hi=1.0e5, cr_q=2.0e0) + fit['q1'] = 1.0e0 - fit['cr_q'] + fit['en1'] = fit['cr_lo'] ** fit['q1'] + fit['en2'] = fit['cr_hi'] ** fit['q1'] + + #pseudo-random numbers taken from a uniform distribution between 0 and 1 + np.random.seed() + luck = np.random.rand(int(np.floor(cr_n))) + + #draw the length of the tracks + if self.cr['cr_cdfn'] > 1: + ius = InterpolatedUnivariateSpline(self.cr['cr_cdf'], self.cr['cr_u']) + self.cr['cr_l'] = ius(luck) + else: + self.cr['cr_l'] = np.sqrt(1.0 - luck ** 2) / luck + + #draw the energy of the tracks + if self.cr['cr_cden'] > 1: + ius = InterpolatedUnivariateSpline(self.cr['cr_cde'], self.cr['cr_v']) + self.cr['cr_e'] = ius(luck) + else: + np.random.seed() + self.cr['cr_e'] = (fit['en1'] + (fit['en2'] - fit['en1']) * + np.random.rand(int(np.floor(cr_n)))) ** (1.0 / fit['q1']) + + #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))) + + np.random.seed() + cr_y = self.ysize * np.random.rand(int(np.floor(cr_n))) + + np.random.seed() + cr_phi = np.pi * np.random.rand(int(np.floor(cr_n))) + + #find the intercepts + if limit is None: + self.cosmicrayMap = self._cosmicRayIntercepts(self.cr['cr_e'], cr_x, cr_y, self.cr['cr_l'], cr_phi) + print ('Number of cosmic ray events:', len(self.cr['cr_e'])) + else: + #limit to electron levels < limit + msk = self.cr['cr_e'] < limit + print ('Number of cosmic ray events: %i / %i' % (len(self.cr['cr_e'][msk]), int(np.floor(cr_n)))) + self.cosmicrayMap = self._cosmicRayIntercepts(self.cr['cr_e'][msk], cr_x[msk], cr_y[msk], + self.cr['cr_l'][msk], cr_phi[msk]) + + #count the covering factor + area_cr = np.count_nonzero(self.cosmicrayMap) + text = 'The cosmic ray covering factor is %i pixels i.e. %.3f per cent' \ + % (area_cr, 100.*area_cr / (self.xsize*self.ysize)) + self.log.info(text) + print (text) + + + def _drawSingleEvent(self, limit=1000, cr_n=1): + """ + Generate a single cosmic ray event and include it to a cosmic ray map (self.cosmicrayMap). + + :param limit: limiting energy for the cosmic ray event + :type limit: float + :param cr_n: number of cosmic ray events to include + :type cr_n: int + + :return: None + """ + #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']) + self.cr['cr_l'] = ius(luck) + + #set the energy directly to the limit + self.cr['cr_e'] = np.asarray([limit, ]*cr_n) + + #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))) + + np.random.seed() + cr_y = self.ysize * np.random.rand(int(np.floor(cr_n))) + + 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) + + #count the covering factor + area_cr = np.count_nonzero(self.cosmicrayMap) + text = 'The cosmic ray covering factor is %i pixels i.e. %.3f per cent' \ + % (area_cr, 100.*area_cr / (self.xsize*self.ysize)) + self.log.info(text) + print( text) + + + 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). + + :param coveringFraction: covering fraction of cosmic rya events in per cent of total number of pixels + :type coveringFraction: float + :param limit: limiting energy for the cosmic ray event [None = draw from distribution] + :type limit: None or float + :param verbose: print out information to stdout + :type verbose: bool + + + :return: None + """ + 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) + + covering = 0.0 + + while covering < coveringFraction: + #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']) + self.cr['cr_l'] = ius(luck) + + if limit is None: + ius = InterpolatedUnivariateSpline(self.cr['cr_cde'], self.cr['cr_v']) + self.cr['cr_e'] = ius(luck) + else: + #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 + np.random.seed() + cr_x = self.xsize * np.random.rand(int(np.floor(cr_n))) + + np.random.seed() + cr_y = self.ysize * np.random.rand(int(np.floor(cr_n))) + + 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) + + #count the covering factor + area_cr = np.count_nonzero(self.cosmicrayMap) + covering = 100.*area_cr / (self.xsize*self.ysize) + + text = 'The cosmic ray covering factor is %i pixels i.e. %.3f per cent' % (area_cr, covering) + self.log.info(text) + + if verbose: + print( text) + + + def addCosmicRays(self, limit=None): + """ + Include cosmic rays to the image given. + + :return: image with cosmic rays + :rtype: ndarray + """ + self._drawCosmicRays(limit=limit) + + #paste cosmic rays + self.image += self.cosmicrayMap + + return self.image + + + def addSingleEvent(self, limit=None): + """ + Include a single cosmic ray event to the image given. + + :return: image with cosmic rays + :rtype: ndarray + """ + self._drawSingleEvent(limit=limit) + + #paste cosmic rays + self.image += self.cosmicrayMap + + return self.image + + + def addUpToFraction(self, coveringFraction, limit=None, verbose=False): + """ + Add cosmic ray events up to the covering Fraction. + + :param coveringFraction: covering fraction of cosmic rya events in per cent of total number of pixels + :type coveringFraction: float + :param limit: limiting energy for the cosmic ray event [None = draw from distribution] + :type limit: None or float + :param verbose: print out information to stdout + :type verbose: bool + + :return: image with cosmic rays + :rtype: ndarray + """ + self._drawEventsToCoveringFactor(coveringFraction, limit=limit, verbose=verbose) + + #paste cosmic rays + self.image += self.cosmicrayMap + + return self.image + + +if __name__ == "__main__": + + + print() + diff --git a/csst_ifs_sim/support/logger.py b/csst_ifs_sim/support/logger.py new file mode 100644 index 0000000..b09ef82 --- /dev/null +++ b/csst_ifs_sim/support/logger.py @@ -0,0 +1,40 @@ +""" +These functions can be used for logging information. + +.. Warning:: logger is not multiprocessing safe. + +:version: 0.3 +""" +import logging +import logging.handlers + + +def setUpLogger(log_filename, loggername='logger'): + """ + Sets up a logger. + + :param: log_filename: name of the file to save the log. + :param: loggername: name of the logger + + :return: logger instance + """ + # create logger + logger = logging.getLogger(loggername) + logger.setLevel(logging.DEBUG) + # Add the log message handler to the logger + handler = logging.handlers.RotatingFileHandler(log_filename) + #maxBytes=20, backupCount=5) + # create formatter + formatter = logging.Formatter('%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s') + # add formatter to ch + handler.setFormatter(formatter) + # add handler to logger + + if (logger.hasHandlers()): + logger.handlers.clear() + + logger.addHandler(handler) + + return logger + + diff --git a/ifs_data/__init__.py b/ifs_data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..f65e2b3 --- /dev/null +++ b/setup.py @@ -0,0 +1,36 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name='csst_ifs_sim', + version='2.0.0-IFS1.0.0', + author='CSST Team', + author_email='zhaojunyan@shao.ac.cn', + description='The CSST - ifs - sim', # short description + long_description=long_description, + long_description_content_type="text/markdown", + url='https://csst-tb.bao.ac.cn/', + # project_urls={ + # 'Source': 'https://csst-tb.bao.ac.cn/code/csst-l1/ifs/csst_ifs_sim', + # }, + packages=setuptools.find_packages(), + license='MIT', + classifiers=["Development Status :: 5 - Production/Stable", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.8", + "Topic :: Scientific/Engineering :: Physics", + "Topic :: Scientific/Engineering :: Astronomy"], + package_dir={'csst_ifs_sim': 'csst_ifs_sim'}, + # include_package_data=True, + package_data={"": ["LICENSE", "README.md"], + "csst_ifs_sim": ["ifs_so/*", "ifs_data/*", "ifs_data/refs/*", "ifs_data/refs/orbit20160925/*"]}, + # install_requires=['sphinx', + # 'numpy', + # 'scipy', 'matplotlib', + # 'astropy', 'healpy', 'ccdproc', 'deepCR', 'photutils'], + python_requires='>=3.8', +) -- GitLab