Loading .gitignore +1 −0 Original line number Diff line number Diff line unit_test_data_root .idea/* *.png *.DS_Store* Loading Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,6 @@ uninstall: pip uninstall $(PKG) -y test: coverage run -m pytest . --import-mode=importlib --cov-report=html --cov-report=term-missing coverage run -m pytest . --cov=$(PKG) --import-mode=importlib --cov-report=html --cov-report=term-missing coverage report -m rm -rf .coverage .pytest_cache README.md +0 −39 Original line number Diff line number Diff line Loading @@ -44,42 +44,3 @@ from csst_common.params import CSST_PARAMS as CP print(CP) print(CP["mbi"]["detector2filter"]) ``` how to use data_manager ```python from csst_common.data_manager import CsstMbiDataManager dm = CsstMbiDataManager(...) # access L0 directory dm.dir_l0 # access L1 directory dm.dir_l1 # access dir_pcref dm.dir_pcref # access path_aux dm.path_aux # access ver_sim dm.ver_sim # access target detectors dm.target_detectors # access available detectors dm.available_detectors # define an L1 file (detector-specified) dm.l1_detector(detector=6) # define an L1 file (non-detector-specified) dm.l1_file("flipped_image.fits") ``` a shortcut for test dataset ```python from csst_common.data_manager import CsstMbiDataManager CsstMbiDataManager.quickstart(ver_sim="C5.2", dir_l1=".", exposure_id=100) ``` ## algorithm description The `csst_common` provides some common modules for CSST pipeline. - `csst_common.parameters` - `csst_common.data_manager` csst_common/__init__.py +5 −5 Original line number Diff line number Diff line Loading @@ -9,10 +9,10 @@ Modified-History: 2022-09-13, Bo Zhang, fixed a bug """ import os from .status import CsstResult, CsstStatus from .pipeline import Pipeline from .ccds import CCDS from .dfs import DFS from .decorator import parameterized_module_decorator __version__ = "0.0.1" PACKAGE_PATH = os.path.dirname(__file__) __version__ = "0.0.2" csst_common/ccds/slsconf.py 0 → 100644 +350 −0 Original line number Diff line number Diff line import json import os import re import astropy.io.fits as pyfits from ccds import client # chipid: [01, 02, 03, 04, 05, 10, 21, 26, 27, 28, 29, 30] # filter: [GI, GV, GU, GU, GV, GI, GI, GV, GU, GU, GV, GI] # clabel: [GI-1, GV-1, GU-1, GU-2, GV-2, GI-2, GI-3, GV-3, GU-3, GU-4, GV-4, GI-4] def get_version(): observatory = client.get_default_observatory() operational_context = client.get_default_context(observatory) ver = re.split(r"[_.]", operational_context)[1] return ver def resave_sensitivity(dir_save, chipid, flt): ver = get_version() h = pyfits.open( dir_save + "CSST_MSC_MS_SENSITIVITY_" + chipid + "_" + ver + ".fits" ) for extname, order in zip( ["L0ST", "LP1ST", "LM1ST", "LP2ST", "LM2ST"], ["0st", "1st", "-1st", "2st", "-2st"], ): hdu0 = pyfits.PrimaryHDU() hdu1 = pyfits.BinTableHDU(h[extname].data) hdul = pyfits.HDUList([hdu0, hdu1]) hdul.writeto( dir_save + "CSST_MSC_MS_SENSITIVITY_" + flt + "_" + order + ".fits", overwrite=True, checksum=True, ) def readjson(dir_save, fjsoname): with open(dir_save + fjsoname) as f: d = json.load(f) return d ################################################################################## ################################################################################## # keys = ['BEAMA', 'MMAG_EXTRACT_A', 'MMAG_MARK_A', 'DYDX_ORDER_A', 'DYDX_A_0', 'DYDX_A_1', 'XOFF_A', 'YOFF_A', # 'DISP_ORDER_A', 'DLDP_A_0', 'DLDP_A_1', 'BEAMB', 'MMAG_EXTRACT_B', 'MMAG_MARK_B', 'DYDX_ORDER_B', 'DYDX_B_0', # 'XOFF_B', 'YOFF_B', 'DISP_ORDER_B', 'DLDP_B_0', 'DLDP_B_1', 'BEAMC', 'MMAG_EXTRACT_C', 'MMAG_MARK_C', # 'DYDX_ORDER_C', 'DYDX_C_0', 'DYDX_C_1', 'XOFF_C', 'YOFF_C', 'DISP_ORDER_C', 'DLDP_C_0', 'DLDP_C_1', 'BEAMD', # 'MMAG_EXTRACT_D', 'MMAG_MARK_D', 'DYDX_ORDER_D', 'DYDX_D_0', 'DYDX_D_1', 'XOFF_D', 'YOFF_D', 'DISP_ORDER_D', # 'DLDP_D_0', 'DLDP_D_1', 'BEAME', 'MMAG_EXTRACT_E', 'MMAG_MARK_E', 'DYDX_ORDER_E', 'DYDX_E_0', 'DYDX_E_1', # 'XOFF_E', 'YOFF_E', 'DISP_ORDER_E', 'DLDP_E_0', 'DLDP_E_1'] GL = [ "GI2", "GV4", "GU2", "GU4", "GV2", "GI4", "GI6", "GV8", "GU6", "GU8", "GV6", "GI8", ] GR = [ "GI1", "GV3", "GU1", "GU3", "GV1", "GI3", "GI5", "GV7", "GU5", "GU7", "GV5", "GI7", ] SEN = ["GI", "GV", "GU", "GU", "GV", "GI", "GI", "GV", "GU", "GU", "GV", "GI"] def fwriteKEY(fsx, i): fsx.write("INSTRUMENT CSSTSLS" + "\n") fsx.write("CAMERA " + SEN[i] + "\n") if SEN[i] == "GI": fsx.write("WAVELENGTH 6200 10000" + "\n") elif SEN[i] == "GV": fsx.write("WAVELENGTH 4000 6200" + "\n") elif SEN[i] == "GU": fsx.write("WAVELENGTH 2550 4000" + "\n") fsx.write("\n" + "SCIENCE_EXT SCI ; Science extension" + "\n") fsx.write("DQ_EXT DQ ; DQ extension" + "\n") fsx.write("ERRORS_EXT ERR ; Error extension" + "\n") fsx.write("FFNAME csstFlat.fits" + "\n") fsx.write("DQMASK 246 ; 4096 and 512 taken out" + "\n") fsx.write("\n" + "RDNOISE 5.0" + "\n") fsx.write("EXPTIME EXPTIME" + "\n") fsx.write("POBJSIZE 1.0" + "\n") fsx.write("#SMFACTOR 1.0" + "\n\n") def fwriteBEAM( dir_save, fsx, i, GRATINGLR, BEAMX, MMAG_EXTRACT_X, MMAG_MARK_X, DYDX_ORDER_X, DYDX_X_0, DYDX_X_1, XOFF_X, YOFF_X, DISP_ORDER_X, DLDP_X_0, DLDP_X_1, ): ver = get_version() [ d01_GI21, d02_GV43, d03_GU21, d04_GU43, d05_GV21, d10_GI43, d21_GI65, d26_GV87, d27_GU65, d28_GU87, d29_GV65, d30_GI87, ] = [ readjson(dir_save, "CSST_MSC_MS_EXTRACT1D_" + chipid + "_" + ver + ".json") for chipid in [ "01", "02", "03", "04", "05", "10", "21", "26", "27", "28", "29", "30", ] ] d = [ d01_GI21, d02_GV43, d03_GU21, d04_GU43, d05_GV21, d10_GI43, d21_GI65, d26_GV87, d27_GU65, d28_GU87, d29_GV65, d30_GI87, ] fsx.write(BEAMX), [ fsx.write(" " + str(d[i][GRATINGLR][BEAMX][j])) for j in range(len(d[i][GRATINGLR][BEAMX])) ], fsx.write("\n") fsx.write(MMAG_EXTRACT_X + " " + str(d[i][GRATINGLR][MMAG_EXTRACT_X]) + "\n") fsx.write(MMAG_MARK_X + " " + str(d[i][GRATINGLR][MMAG_MARK_X]) + "\n") fsx.write("# " + "\n") fsx.write("# Trace description " + "\n") fsx.write("# " + "\n") fsx.write(DYDX_ORDER_X + " " + str(d[i][GRATINGLR][DYDX_ORDER_X]) + "\n") fsx.write(DYDX_X_0), [ fsx.write(" " + str(d[i][GRATINGLR][DYDX_X_0][j])) for j in range(len(d[i][GRATINGLR][DYDX_X_0])) ], fsx.write("\n") if BEAMX == "BEAMB": pass else: fsx.write(DYDX_X_1), [ fsx.write(" " + str(d[i][GRATINGLR][DYDX_X_1][j])) for j in range(len(d[i][GRATINGLR][DYDX_X_1])) ], fsx.write("\n") fsx.write("# " + "\n") fsx.write("# X and Y Offsets " + "\n") fsx.write("# " + "\n") fsx.write(XOFF_X + " " + str(d[i][GRATINGLR][XOFF_X]) + "\n") fsx.write(YOFF_X + " " + str(d[i][GRATINGLR][YOFF_X]) + "\n") fsx.write("# " + "\n") fsx.write("# Dispersion solution " + "\n") fsx.write("# " + "\n") fsx.write(DISP_ORDER_X + " " + str(d[i][GRATINGLR][DISP_ORDER_X]) + "\n") fsx.write(DLDP_X_0), [ fsx.write(" " + str(d[i][GRATINGLR][DLDP_X_0][j])) for j in range(len(d[i][GRATINGLR][DLDP_X_0])) ], fsx.write("\n") fsx.write(DLDP_X_1), [ fsx.write(" " + str(d[i][GRATINGLR][DLDP_X_1][j])) for j in range(len(d[i][GRATINGLR][DLDP_X_1])) ], fsx.write("\n") fsx.write("# " + "\n") if BEAMX == "BEAMA": ordername = "1st" fsx.write( "SENSITIVITY_A CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_1st.fits" + "\n" ) elif BEAMX == "BEAMB": ordername = "0st" fsx.write( "SENSITIVITY_B CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_0st.fits" + "\n" ) elif BEAMX == "BEAMC": ordername = "-1st" fsx.write( "SENSITIVITY_C CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_-1st.fits" + "\n" ) elif BEAMX == "BEAMD": ordername = "2st" fsx.write( "SENSITIVITY_D CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_2st.fits" + "\n" ) elif BEAMX == "BEAME": ordername = "-2st" fsx.write( "SENSITIVITY_E CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_-2st.fits" + "\n" ) fsx.write("# " + "\n" + "\n") def fsave_conf(dir_save, GLR, GRATINGLR, i): c = dir_save + "CSST_MSC_MS_" + GLR[i] + ".conf" os.system("> " + c) fs = open(c, "a") fwriteKEY(fs, i) fs.write("# 1 order (BEAM A) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMA", "MMAG_EXTRACT_A", "MMAG_MARK_A", "DYDX_ORDER_A", "DYDX_A_0", "DYDX_A_1", "XOFF_A", "YOFF_A", "DISP_ORDER_A", "DLDP_A_0", "DLDP_A_1", ) fs.write("\n# 0 order (BEAM B) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMB", "MMAG_EXTRACT_B", "MMAG_MARK_B", "DYDX_ORDER_B", "DYDX_B_0", "DYDX_B_1", "XOFF_B", "YOFF_B", "DISP_ORDER_B", "DLDP_B_0", "DLDP_B_1", ) fs.write("\n# -1 order (BEAM C) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMC", "MMAG_EXTRACT_C", "MMAG_MARK_C", "DYDX_ORDER_C", "DYDX_C_0", "DYDX_C_1", "XOFF_C", "YOFF_C", "DISP_ORDER_C", "DLDP_C_0", "DLDP_C_1", ) fs.write("\n# 2 order (BEAM D) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMD", "MMAG_EXTRACT_D", "MMAG_MARK_D", "DYDX_ORDER_D", "DYDX_D_0", "DYDX_D_1", "XOFF_D", "YOFF_D", "DISP_ORDER_D", "DLDP_D_0", "DLDP_D_1", ) fs.write("\n# -2 order (BEAM E) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAME", "MMAG_EXTRACT_E", "MMAG_MARK_E", "DYDX_ORDER_E", "DYDX_E_0", "DYDX_E_1", "XOFF_E", "YOFF_E", "DISP_ORDER_E", "DLDP_E_0", "DLDP_E_1", ) fs.close() def get_slsconf(dir_save=".", **kwargs): """save SLS conf files to `dir_save`""" # resave the sensitivity.fits for chipid, flt in zip(["01", "02", "03"], ["GI", "GV", "GU"]): resave_sensitivity(dir_save, chipid, flt) # save CSST_MSC_MS_*.conf for i in range(0, 12): fsave_conf(dir_save, GL, "GRATINGL", i) fsave_conf(dir_save, GR, "GRATINGR", i) # TODO: assert all files are saved correctly, then return # TODO: return a dict containing filepath mapping Loading
.gitignore +1 −0 Original line number Diff line number Diff line unit_test_data_root .idea/* *.png *.DS_Store* Loading
Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,6 @@ uninstall: pip uninstall $(PKG) -y test: coverage run -m pytest . --import-mode=importlib --cov-report=html --cov-report=term-missing coverage run -m pytest . --cov=$(PKG) --import-mode=importlib --cov-report=html --cov-report=term-missing coverage report -m rm -rf .coverage .pytest_cache
README.md +0 −39 Original line number Diff line number Diff line Loading @@ -44,42 +44,3 @@ from csst_common.params import CSST_PARAMS as CP print(CP) print(CP["mbi"]["detector2filter"]) ``` how to use data_manager ```python from csst_common.data_manager import CsstMbiDataManager dm = CsstMbiDataManager(...) # access L0 directory dm.dir_l0 # access L1 directory dm.dir_l1 # access dir_pcref dm.dir_pcref # access path_aux dm.path_aux # access ver_sim dm.ver_sim # access target detectors dm.target_detectors # access available detectors dm.available_detectors # define an L1 file (detector-specified) dm.l1_detector(detector=6) # define an L1 file (non-detector-specified) dm.l1_file("flipped_image.fits") ``` a shortcut for test dataset ```python from csst_common.data_manager import CsstMbiDataManager CsstMbiDataManager.quickstart(ver_sim="C5.2", dir_l1=".", exposure_id=100) ``` ## algorithm description The `csst_common` provides some common modules for CSST pipeline. - `csst_common.parameters` - `csst_common.data_manager`
csst_common/__init__.py +5 −5 Original line number Diff line number Diff line Loading @@ -9,10 +9,10 @@ Modified-History: 2022-09-13, Bo Zhang, fixed a bug """ import os from .status import CsstResult, CsstStatus from .pipeline import Pipeline from .ccds import CCDS from .dfs import DFS from .decorator import parameterized_module_decorator __version__ = "0.0.1" PACKAGE_PATH = os.path.dirname(__file__) __version__ = "0.0.2"
csst_common/ccds/slsconf.py 0 → 100644 +350 −0 Original line number Diff line number Diff line import json import os import re import astropy.io.fits as pyfits from ccds import client # chipid: [01, 02, 03, 04, 05, 10, 21, 26, 27, 28, 29, 30] # filter: [GI, GV, GU, GU, GV, GI, GI, GV, GU, GU, GV, GI] # clabel: [GI-1, GV-1, GU-1, GU-2, GV-2, GI-2, GI-3, GV-3, GU-3, GU-4, GV-4, GI-4] def get_version(): observatory = client.get_default_observatory() operational_context = client.get_default_context(observatory) ver = re.split(r"[_.]", operational_context)[1] return ver def resave_sensitivity(dir_save, chipid, flt): ver = get_version() h = pyfits.open( dir_save + "CSST_MSC_MS_SENSITIVITY_" + chipid + "_" + ver + ".fits" ) for extname, order in zip( ["L0ST", "LP1ST", "LM1ST", "LP2ST", "LM2ST"], ["0st", "1st", "-1st", "2st", "-2st"], ): hdu0 = pyfits.PrimaryHDU() hdu1 = pyfits.BinTableHDU(h[extname].data) hdul = pyfits.HDUList([hdu0, hdu1]) hdul.writeto( dir_save + "CSST_MSC_MS_SENSITIVITY_" + flt + "_" + order + ".fits", overwrite=True, checksum=True, ) def readjson(dir_save, fjsoname): with open(dir_save + fjsoname) as f: d = json.load(f) return d ################################################################################## ################################################################################## # keys = ['BEAMA', 'MMAG_EXTRACT_A', 'MMAG_MARK_A', 'DYDX_ORDER_A', 'DYDX_A_0', 'DYDX_A_1', 'XOFF_A', 'YOFF_A', # 'DISP_ORDER_A', 'DLDP_A_0', 'DLDP_A_1', 'BEAMB', 'MMAG_EXTRACT_B', 'MMAG_MARK_B', 'DYDX_ORDER_B', 'DYDX_B_0', # 'XOFF_B', 'YOFF_B', 'DISP_ORDER_B', 'DLDP_B_0', 'DLDP_B_1', 'BEAMC', 'MMAG_EXTRACT_C', 'MMAG_MARK_C', # 'DYDX_ORDER_C', 'DYDX_C_0', 'DYDX_C_1', 'XOFF_C', 'YOFF_C', 'DISP_ORDER_C', 'DLDP_C_0', 'DLDP_C_1', 'BEAMD', # 'MMAG_EXTRACT_D', 'MMAG_MARK_D', 'DYDX_ORDER_D', 'DYDX_D_0', 'DYDX_D_1', 'XOFF_D', 'YOFF_D', 'DISP_ORDER_D', # 'DLDP_D_0', 'DLDP_D_1', 'BEAME', 'MMAG_EXTRACT_E', 'MMAG_MARK_E', 'DYDX_ORDER_E', 'DYDX_E_0', 'DYDX_E_1', # 'XOFF_E', 'YOFF_E', 'DISP_ORDER_E', 'DLDP_E_0', 'DLDP_E_1'] GL = [ "GI2", "GV4", "GU2", "GU4", "GV2", "GI4", "GI6", "GV8", "GU6", "GU8", "GV6", "GI8", ] GR = [ "GI1", "GV3", "GU1", "GU3", "GV1", "GI3", "GI5", "GV7", "GU5", "GU7", "GV5", "GI7", ] SEN = ["GI", "GV", "GU", "GU", "GV", "GI", "GI", "GV", "GU", "GU", "GV", "GI"] def fwriteKEY(fsx, i): fsx.write("INSTRUMENT CSSTSLS" + "\n") fsx.write("CAMERA " + SEN[i] + "\n") if SEN[i] == "GI": fsx.write("WAVELENGTH 6200 10000" + "\n") elif SEN[i] == "GV": fsx.write("WAVELENGTH 4000 6200" + "\n") elif SEN[i] == "GU": fsx.write("WAVELENGTH 2550 4000" + "\n") fsx.write("\n" + "SCIENCE_EXT SCI ; Science extension" + "\n") fsx.write("DQ_EXT DQ ; DQ extension" + "\n") fsx.write("ERRORS_EXT ERR ; Error extension" + "\n") fsx.write("FFNAME csstFlat.fits" + "\n") fsx.write("DQMASK 246 ; 4096 and 512 taken out" + "\n") fsx.write("\n" + "RDNOISE 5.0" + "\n") fsx.write("EXPTIME EXPTIME" + "\n") fsx.write("POBJSIZE 1.0" + "\n") fsx.write("#SMFACTOR 1.0" + "\n\n") def fwriteBEAM( dir_save, fsx, i, GRATINGLR, BEAMX, MMAG_EXTRACT_X, MMAG_MARK_X, DYDX_ORDER_X, DYDX_X_0, DYDX_X_1, XOFF_X, YOFF_X, DISP_ORDER_X, DLDP_X_0, DLDP_X_1, ): ver = get_version() [ d01_GI21, d02_GV43, d03_GU21, d04_GU43, d05_GV21, d10_GI43, d21_GI65, d26_GV87, d27_GU65, d28_GU87, d29_GV65, d30_GI87, ] = [ readjson(dir_save, "CSST_MSC_MS_EXTRACT1D_" + chipid + "_" + ver + ".json") for chipid in [ "01", "02", "03", "04", "05", "10", "21", "26", "27", "28", "29", "30", ] ] d = [ d01_GI21, d02_GV43, d03_GU21, d04_GU43, d05_GV21, d10_GI43, d21_GI65, d26_GV87, d27_GU65, d28_GU87, d29_GV65, d30_GI87, ] fsx.write(BEAMX), [ fsx.write(" " + str(d[i][GRATINGLR][BEAMX][j])) for j in range(len(d[i][GRATINGLR][BEAMX])) ], fsx.write("\n") fsx.write(MMAG_EXTRACT_X + " " + str(d[i][GRATINGLR][MMAG_EXTRACT_X]) + "\n") fsx.write(MMAG_MARK_X + " " + str(d[i][GRATINGLR][MMAG_MARK_X]) + "\n") fsx.write("# " + "\n") fsx.write("# Trace description " + "\n") fsx.write("# " + "\n") fsx.write(DYDX_ORDER_X + " " + str(d[i][GRATINGLR][DYDX_ORDER_X]) + "\n") fsx.write(DYDX_X_0), [ fsx.write(" " + str(d[i][GRATINGLR][DYDX_X_0][j])) for j in range(len(d[i][GRATINGLR][DYDX_X_0])) ], fsx.write("\n") if BEAMX == "BEAMB": pass else: fsx.write(DYDX_X_1), [ fsx.write(" " + str(d[i][GRATINGLR][DYDX_X_1][j])) for j in range(len(d[i][GRATINGLR][DYDX_X_1])) ], fsx.write("\n") fsx.write("# " + "\n") fsx.write("# X and Y Offsets " + "\n") fsx.write("# " + "\n") fsx.write(XOFF_X + " " + str(d[i][GRATINGLR][XOFF_X]) + "\n") fsx.write(YOFF_X + " " + str(d[i][GRATINGLR][YOFF_X]) + "\n") fsx.write("# " + "\n") fsx.write("# Dispersion solution " + "\n") fsx.write("# " + "\n") fsx.write(DISP_ORDER_X + " " + str(d[i][GRATINGLR][DISP_ORDER_X]) + "\n") fsx.write(DLDP_X_0), [ fsx.write(" " + str(d[i][GRATINGLR][DLDP_X_0][j])) for j in range(len(d[i][GRATINGLR][DLDP_X_0])) ], fsx.write("\n") fsx.write(DLDP_X_1), [ fsx.write(" " + str(d[i][GRATINGLR][DLDP_X_1][j])) for j in range(len(d[i][GRATINGLR][DLDP_X_1])) ], fsx.write("\n") fsx.write("# " + "\n") if BEAMX == "BEAMA": ordername = "1st" fsx.write( "SENSITIVITY_A CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_1st.fits" + "\n" ) elif BEAMX == "BEAMB": ordername = "0st" fsx.write( "SENSITIVITY_B CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_0st.fits" + "\n" ) elif BEAMX == "BEAMC": ordername = "-1st" fsx.write( "SENSITIVITY_C CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_-1st.fits" + "\n" ) elif BEAMX == "BEAMD": ordername = "2st" fsx.write( "SENSITIVITY_D CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_2st.fits" + "\n" ) elif BEAMX == "BEAME": ordername = "-2st" fsx.write( "SENSITIVITY_E CSST_MSC_MS_SENSITIVITY_" + SEN[i] + "_-2st.fits" + "\n" ) fsx.write("# " + "\n" + "\n") def fsave_conf(dir_save, GLR, GRATINGLR, i): c = dir_save + "CSST_MSC_MS_" + GLR[i] + ".conf" os.system("> " + c) fs = open(c, "a") fwriteKEY(fs, i) fs.write("# 1 order (BEAM A) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMA", "MMAG_EXTRACT_A", "MMAG_MARK_A", "DYDX_ORDER_A", "DYDX_A_0", "DYDX_A_1", "XOFF_A", "YOFF_A", "DISP_ORDER_A", "DLDP_A_0", "DLDP_A_1", ) fs.write("\n# 0 order (BEAM B) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMB", "MMAG_EXTRACT_B", "MMAG_MARK_B", "DYDX_ORDER_B", "DYDX_B_0", "DYDX_B_1", "XOFF_B", "YOFF_B", "DISP_ORDER_B", "DLDP_B_0", "DLDP_B_1", ) fs.write("\n# -1 order (BEAM C) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMC", "MMAG_EXTRACT_C", "MMAG_MARK_C", "DYDX_ORDER_C", "DYDX_C_0", "DYDX_C_1", "XOFF_C", "YOFF_C", "DISP_ORDER_C", "DLDP_C_0", "DLDP_C_1", ) fs.write("\n# 2 order (BEAM D) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAMD", "MMAG_EXTRACT_D", "MMAG_MARK_D", "DYDX_ORDER_D", "DYDX_D_0", "DYDX_D_1", "XOFF_D", "YOFF_D", "DISP_ORDER_D", "DLDP_D_0", "DLDP_D_1", ) fs.write("\n# -2 order (BEAM E) *******************" + "\n") fwriteBEAM( dir_save, fs, i, GRATINGLR, "BEAME", "MMAG_EXTRACT_E", "MMAG_MARK_E", "DYDX_ORDER_E", "DYDX_E_0", "DYDX_E_1", "XOFF_E", "YOFF_E", "DISP_ORDER_E", "DLDP_E_0", "DLDP_E_1", ) fs.close() def get_slsconf(dir_save=".", **kwargs): """save SLS conf files to `dir_save`""" # resave the sensitivity.fits for chipid, flt in zip(["01", "02", "03"], ["GI", "GV", "GU"]): resave_sensitivity(dir_save, chipid, flt) # save CSST_MSC_MS_*.conf for i in range(0, 12): fsave_conf(dir_save, GL, "GRATINGL", i) fsave_conf(dir_save, GR, "GRATINGR", i) # TODO: assert all files are saved correctly, then return # TODO: return a dict containing filepath mapping