Loading csst_common/crds/slsconf.py +133 −0 Original line number Diff line number Diff line import re import astropy.io.fits as pyfits, numpy as np, time, os, json from crds 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 ################################################################################## ################################################################################## ver = get_version() # 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): [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) pass Loading
csst_common/crds/slsconf.py +133 −0 Original line number Diff line number Diff line import re import astropy.io.fits as pyfits, numpy as np, time, os, json from crds 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 ################################################################################## ################################################################################## ver = get_version() # 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): [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) pass