Loading csst/msc/pipeline.py +192 −110 Original line number Diff line number Diff line # def do_one_exposure(): import glob import os from csst.msc.backbone import CCD_ID_LIST, VER_SIMS from csst.msc.calib_flux import CsstProcFluxCalibration from csst.msc.calib_pos import CsstProcMscPositionCalibration from csst.msc.data import CsstMscImgData from csst.msc.inst_corr import CsstMscInstrumentProc from csst.msc.phot import CsstMscPhotometryProc HOSTNAME = os.uname()[1] if HOSTNAME == "tulip": # on Tulip DIR_TEST = "/share/Cycle-3-SimuData/multipleBandsImaging/CSST_shearOFF/MSC_0000020/" # MSC_MS_210525220000_100000020_06_raw.fits PATH_BIAS = "/share/HDD7/csstpipeline/ref/MSC_CLB_210525200000_100000016_{:02d}_combine.fits" PATH_DARK = "/share/HDD7/csstpipeline/ref/MSC_CLD_210525202000_100000016_{:02d}_combine.fits" PATH_FLAT = "/share/HDD7/csstpipeline/ref/MSC_CLF_210525201000_100000016_{:02d}_combine.fits" DIR_WORK = "/share/HDD7/csstpipeline/msc" # gaia catalog directory (for position calibration) DIR_GAIA_CATALOG = "" elif HOSTNAME == "Dandelion": CONFIG_DANDELION = dict( # test and working directory dir_raw="/home/csstpipeline/L1Pipeline/msc/MSC_0000020", dir_work="/home/csstpipeline/L1Pipeline/msc/work/", filename_fmt="{}/MSC_MS_*_{:02}_raw.fits", # on Dandelion DIR_TEST = "/home/csstpipeline/L1Pipeline/msc/MSC_0000020" PATH_BIAS = "/home/csstpipeline/L1Pipeline/msc/ref/MSC_CLB_210525200000_100000016_{:02d}_combine.fits" PATH_DARK = "/home/csstpipeline/L1Pipeline/msc/ref/MSC_CLD_210525202000_100000016_{:02d}_combine.fits" PATH_FLAT = "/home/csstpipeline/L1Pipeline/msc/ref/MSC_CLF_210525201000_100000016_{:02d}_combine.fits" # working directory DIR_WORK = "/home/csstpipeline/L1Pipeline/msc/work/" path_aux="/home/csstpipeline/L1Pipeline/msc/ref/MSC_{}_*_{:02d}_combine.fits", # gaia catalog directory (for position calibration) DIR_GAIA_CATALOG = "/home/csstpipeline/L1Pipeline/msc/gaia_dr3/" dir_gaia_catalog="/home/csstpipeline/L1Pipeline/msc/gaia_dr3/", # version of simulation data ver_sim="C3", # only 18 cores available in cloud machine from PMO n_jobs=18, # shut down backend multithreading backend_multithreading=False ) CONFIG_PMO = dict( # test and working directory dir_raw="/share/simudata/CSSOSDataProductsSims/data/CSSTSimImage_C5/NGP_AstrometryON_shearOFF/MSC_0000100", dir_work="/home/user/L1Pipeline/msc/work/", filename_fmt="{}/CSST_MSC_MS_CRS_*_{:02d}_L0_1.fits", # on PMO path_aux="/home/user/L1Pipeline/msc/ref/MSC_{}_*_{:02d}_combine.fits", # gaia catalog directory (for position calibration) dir_gaia_catalog="/home/csstpipeline/L1Pipeline/msc/gaia_dr3/", # version of simulation data ver_sim="C5.1", # only 18 cores available in cloud machine from PMO NJOBS = 18 n_jobs=18, # shut down backend multithreading backend_multithreading=False ) else: raise ValueError("Invalid HOSTNAME {}!".format(HOSTNAME)) # define CCD ID list CCD_ID_LIST = [6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25] def do_one_exposure(dir_raw="", dir_work="", filename_fmt="", path_aux="", dir_gaia_catalog="", ver_sim="C5.1", ccd_ids=None, n_jobs=18, backend_multithreading=False): # currently C3 and C5.1 are tested try: assert ver_sim in VER_SIMS except AssertionError as ae: print("Available options for ver_sim: ", VER_SIMS) raise ae # shut down backend multi-threading if not backend_multithreading: # prohibit multi-threading in backend os.environ["MKL_NUM_THREADS"] = '1' os.environ["NUMEXPR_NUM_THREADS"] = '1' os.environ["OMP_NUM_THREADS"] = '1' if ccd_ids is None: ccd_ids = CCD_ID_LIST # Step 1. Correct instrumental effect os.chdir(DIR_WORK) os.chdir(dir_work) img_list = [] wht_list = [] flg_list = [] fn_list = [] for i_ccd in CCD_ID_LIST: for i_ccd in ccd_ids: print("processing CCD {}".format(i_ccd)) fp_raw = glob.glob("{}/MSC_MS_*_{:02}_raw.fits".format(DIR_TEST, i_ccd)) fp_raw = glob.glob(filename_fmt.format(dir_raw, i_ccd)) assert len(fp_raw) == 1 fp_raw = fp_raw[0] print(fp_raw) # fn_raw = os.path.basename(fp_raw) # read data with CsstMscImgData.read raw = CsstMscImgData.read(fp_raw) # in future, get_* functions grab bias = raw.get_bias(PATH_BIAS.format(i_ccd)) dark = raw.get_dark(PATH_DARK.format(i_ccd)) flat = raw.get_flat(PATH_FLAT.format(i_ccd)) # in the future, use get_* functions grab bias = raw.get_bias(path_aux.format("CLB", i_ccd)) dark = raw.get_dark(path_aux.format("CLD", i_ccd)) flat = raw.get_flat(path_aux.format("CLF", i_ccd)) # initialize Instrument Processor instProc = CsstMscInstrumentProc() instProc.prepare(n_jobs=2) img, wht, flg = instProc.run(raw, bias, dark, flat) instProc.prepare(n_jobs=n_jobs) img, wht, flg = instProc.run(raw, bias, dark, flat, ver_sim) instProc.cleanup() fp_img = img[0].header["FILENAME"] + '.fits' # save img, wht, flg to somewhere img.writeto("{}/{}.fits".format(DIR_WORK, img.get_keyword("FILENAME")), overwrite=True) wht.writeto("{}/{}.fits".format(DIR_WORK, wht.get_keyword("FILENAME")), overwrite=True) flg.writeto("{}/{}.fits".format(DIR_WORK, flg.get_keyword("FILENAME")), overwrite=True) img.writeto("{}/{}.fits".format(dir_work, img.get_keyword("FILENAME")), overwrite=True) wht.writeto("{}/{}.fits".format(dir_work, wht.get_keyword("FILENAME")), overwrite=True) flg.writeto("{}/{}.fits".format(dir_work, flg.get_keyword("FILENAME")), overwrite=True) # save header img[1].header.tofile("{}/{}.head".format(DIR_WORK, img.get_keyword("FILENAME").replace(".fits", "")), overwrite=True) img[1].header.tofile( "{}/{}.head".format(dir_work, img.get_keyword("FILENAME").replace(".fits", "")), overwrite=True) # append img, wht, flg list img_list.append(img) Loading @@ -84,16 +107,55 @@ for i_ccd in CCD_ID_LIST: flg_list.append(flg) fn_list.append(fp_img) # # parallel step 1 # def corr_one_img(i_ccd, dir_raw, dir_work): # fp_raw = glob.glob("{}/MSC_MS_*_{:02}_raw.fits".format(dir_raw, i_ccd)) # assert len(fp_raw) == 1 # fp_raw = fp_raw[0] # # # read data with CsstMscImgData.read # raw = CsstMscImgData.read(fp_raw) # # # in future, get_* functions grab # bias = raw.get_bias(PATH_BIAS.format(i_ccd)) # dark = raw.get_dark(PATH_DARK.format(i_ccd)) # flat = raw.get_flat(PATH_FLAT.format(i_ccd)) # # # initialize Instrument Processor # instProc = CsstMscInstrumentProc() # instProc.prepare(n_jobs=1, n_threads=1) # img, wht, flg = instProc.run(raw, bias, dark, flat) # instProc.cleanup() # fp_img = img[0].header["FILENAME"] + '.fits' # # # save img, wht, flg to somewhere # img.writeto("{}/{}.fits".format(dir_work, img.get_keyword("FILENAME")), overwrite=True) # wht.writeto("{}/{}.fits".format(dir_work, wht.get_keyword("FILENAME")), overwrite=True) # flg.writeto("{}/{}.fits".format(dir_work, flg.get_keyword("FILENAME")), overwrite=True) # # save header # img[1].header.tofile("{}/{}.head".format(dir_work, img.get_keyword("FILENAME").replace(".fits", "")), # overwrite=True) # return OrderedDict(img=img, wht=wht, flg=flg, fp_img=fp_img) # # # result = joblib.Parallel(n_jobs=NJOBS, verbose=5)( # joblib.delayed(corr_one_img)(i_ccd, dir_raw, dir_work) for i_ccd in CCD_ID_LIST) # img_list = [_["img"] for _ in result] # wht_list = [_["wht"] for _ in result] # flg_list = [_["flg"] for _ in result] # fn_list = [_["fp_img"] for _ in result] # Step 2. Calibrate Position pcProc = CsstProcMscPositionCalibration() pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2.0) pcProc.run(img_list, wht_list, flg_list, fn_list, dir_gaia_catalog, dir_work, 2.0) pcProc.cleanup(img_list, dir_work) # if img_list: # pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2.0) # pcProc.run(img_list, wht_list, flg_list, fn_list, dir_gaia_catalog, dir_work, 2.0) # else: # for i_ccd in CCD_ID_LIST: # fp_img = "{}/MSC_MS_*_{:02}_img.fits".format(DIR_WORK, i_ccd) # fp_wht = "{}/MSC_MS_*_{:02}_wht.fits".format(DIR_WORK, i_ccd) # fp_flg = "{}/MSC_MS_*_{:02}_flg.fits".format(DIR_WORK, i_ccd) # fp_img = "{}/MSC_MS_*_{:02}_img.fits".format(dir_work, i_ccd) # fp_wht = "{}/MSC_MS_*_{:02}_wht.fits".format(dir_work, i_ccd) # fp_flg = "{}/MSC_MS_*_{:02}_flg.fits".format(dir_work, i_ccd) # img = CsstMscImgData.read(fp_img) # wht = CsstMscImgData.read(fp_wht) # flg = CsstMscImgData.read(fp_flg) Loading @@ -101,21 +163,41 @@ pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2. # wht_list.append(wht) # flg_list.append(flg) # fn_list.append(fp_img) # pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2.0) pcProc.cleanup(img_list, DIR_WORK) # pcProc.run(img_list, wht_list, flg_list, fn_list, dir_gaia_catalog, dir_work, 2.0) # Step 3. Calibrate Flux from csst.msc.calib_flux import CsstProcFluxCalibration fcProc = CsstProcFluxCalibration() # fcProc.prepare() fcProc.run(fn_list, img_list, wht_list, flg_list, wcsdir=DIR_WORK, L1dir=DIR_WORK, workdir=DIR_WORK, refdir=DIR_TEST, fcProc.run( fn_list, img_list, wht_list, flg_list, wcsdir=dir_work, L1dir=dir_work, workdir=dir_work, refdir=dir_raw, addhead=True, morehead=False, plot=False, nodel=False, update=False, upcat=True) fcProc.cleanup(fn_list, DIR_WORK) fcProc.cleanup(fn_list, dir_work) # Step 4. Photometry from csst.msc.phot import CsstMscPhotometryProc ptProc = CsstMscPhotometryProc() ptProc.prepare() ptProc.run(fn_list, out_dir=DIR_WORK, n_jobs=18) ptProc.run(fn_list, out_dir=dir_work, n_jobs=n_jobs) ptProc.cleanup() return if __name__ == "__main__": # identify where you are HOSTNAME = os.uname()[1] # you have to run this pipeline in some well-defined servers assert HOSTNAME in ["ubuntu", "Dandelion"] # get config parameters if HOSTNAME == "ubuntu": config = CONFIG_PMO elif HOSTNAME == "Dandelion": config = CONFIG_DANDELION else: raise ValueError("HOSTNAME {} not known!".format(HOSTNAME)) # process this exposure do_one_exposure(**config) for k, v in config.items(): eval("{}=config[\"{}\"]".format(k, k)) Loading
csst/msc/pipeline.py +192 −110 Original line number Diff line number Diff line # def do_one_exposure(): import glob import os from csst.msc.backbone import CCD_ID_LIST, VER_SIMS from csst.msc.calib_flux import CsstProcFluxCalibration from csst.msc.calib_pos import CsstProcMscPositionCalibration from csst.msc.data import CsstMscImgData from csst.msc.inst_corr import CsstMscInstrumentProc from csst.msc.phot import CsstMscPhotometryProc HOSTNAME = os.uname()[1] if HOSTNAME == "tulip": # on Tulip DIR_TEST = "/share/Cycle-3-SimuData/multipleBandsImaging/CSST_shearOFF/MSC_0000020/" # MSC_MS_210525220000_100000020_06_raw.fits PATH_BIAS = "/share/HDD7/csstpipeline/ref/MSC_CLB_210525200000_100000016_{:02d}_combine.fits" PATH_DARK = "/share/HDD7/csstpipeline/ref/MSC_CLD_210525202000_100000016_{:02d}_combine.fits" PATH_FLAT = "/share/HDD7/csstpipeline/ref/MSC_CLF_210525201000_100000016_{:02d}_combine.fits" DIR_WORK = "/share/HDD7/csstpipeline/msc" # gaia catalog directory (for position calibration) DIR_GAIA_CATALOG = "" elif HOSTNAME == "Dandelion": CONFIG_DANDELION = dict( # test and working directory dir_raw="/home/csstpipeline/L1Pipeline/msc/MSC_0000020", dir_work="/home/csstpipeline/L1Pipeline/msc/work/", filename_fmt="{}/MSC_MS_*_{:02}_raw.fits", # on Dandelion DIR_TEST = "/home/csstpipeline/L1Pipeline/msc/MSC_0000020" PATH_BIAS = "/home/csstpipeline/L1Pipeline/msc/ref/MSC_CLB_210525200000_100000016_{:02d}_combine.fits" PATH_DARK = "/home/csstpipeline/L1Pipeline/msc/ref/MSC_CLD_210525202000_100000016_{:02d}_combine.fits" PATH_FLAT = "/home/csstpipeline/L1Pipeline/msc/ref/MSC_CLF_210525201000_100000016_{:02d}_combine.fits" # working directory DIR_WORK = "/home/csstpipeline/L1Pipeline/msc/work/" path_aux="/home/csstpipeline/L1Pipeline/msc/ref/MSC_{}_*_{:02d}_combine.fits", # gaia catalog directory (for position calibration) DIR_GAIA_CATALOG = "/home/csstpipeline/L1Pipeline/msc/gaia_dr3/" dir_gaia_catalog="/home/csstpipeline/L1Pipeline/msc/gaia_dr3/", # version of simulation data ver_sim="C3", # only 18 cores available in cloud machine from PMO n_jobs=18, # shut down backend multithreading backend_multithreading=False ) CONFIG_PMO = dict( # test and working directory dir_raw="/share/simudata/CSSOSDataProductsSims/data/CSSTSimImage_C5/NGP_AstrometryON_shearOFF/MSC_0000100", dir_work="/home/user/L1Pipeline/msc/work/", filename_fmt="{}/CSST_MSC_MS_CRS_*_{:02d}_L0_1.fits", # on PMO path_aux="/home/user/L1Pipeline/msc/ref/MSC_{}_*_{:02d}_combine.fits", # gaia catalog directory (for position calibration) dir_gaia_catalog="/home/csstpipeline/L1Pipeline/msc/gaia_dr3/", # version of simulation data ver_sim="C5.1", # only 18 cores available in cloud machine from PMO NJOBS = 18 n_jobs=18, # shut down backend multithreading backend_multithreading=False ) else: raise ValueError("Invalid HOSTNAME {}!".format(HOSTNAME)) # define CCD ID list CCD_ID_LIST = [6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25] def do_one_exposure(dir_raw="", dir_work="", filename_fmt="", path_aux="", dir_gaia_catalog="", ver_sim="C5.1", ccd_ids=None, n_jobs=18, backend_multithreading=False): # currently C3 and C5.1 are tested try: assert ver_sim in VER_SIMS except AssertionError as ae: print("Available options for ver_sim: ", VER_SIMS) raise ae # shut down backend multi-threading if not backend_multithreading: # prohibit multi-threading in backend os.environ["MKL_NUM_THREADS"] = '1' os.environ["NUMEXPR_NUM_THREADS"] = '1' os.environ["OMP_NUM_THREADS"] = '1' if ccd_ids is None: ccd_ids = CCD_ID_LIST # Step 1. Correct instrumental effect os.chdir(DIR_WORK) os.chdir(dir_work) img_list = [] wht_list = [] flg_list = [] fn_list = [] for i_ccd in CCD_ID_LIST: for i_ccd in ccd_ids: print("processing CCD {}".format(i_ccd)) fp_raw = glob.glob("{}/MSC_MS_*_{:02}_raw.fits".format(DIR_TEST, i_ccd)) fp_raw = glob.glob(filename_fmt.format(dir_raw, i_ccd)) assert len(fp_raw) == 1 fp_raw = fp_raw[0] print(fp_raw) # fn_raw = os.path.basename(fp_raw) # read data with CsstMscImgData.read raw = CsstMscImgData.read(fp_raw) # in future, get_* functions grab bias = raw.get_bias(PATH_BIAS.format(i_ccd)) dark = raw.get_dark(PATH_DARK.format(i_ccd)) flat = raw.get_flat(PATH_FLAT.format(i_ccd)) # in the future, use get_* functions grab bias = raw.get_bias(path_aux.format("CLB", i_ccd)) dark = raw.get_dark(path_aux.format("CLD", i_ccd)) flat = raw.get_flat(path_aux.format("CLF", i_ccd)) # initialize Instrument Processor instProc = CsstMscInstrumentProc() instProc.prepare(n_jobs=2) img, wht, flg = instProc.run(raw, bias, dark, flat) instProc.prepare(n_jobs=n_jobs) img, wht, flg = instProc.run(raw, bias, dark, flat, ver_sim) instProc.cleanup() fp_img = img[0].header["FILENAME"] + '.fits' # save img, wht, flg to somewhere img.writeto("{}/{}.fits".format(DIR_WORK, img.get_keyword("FILENAME")), overwrite=True) wht.writeto("{}/{}.fits".format(DIR_WORK, wht.get_keyword("FILENAME")), overwrite=True) flg.writeto("{}/{}.fits".format(DIR_WORK, flg.get_keyword("FILENAME")), overwrite=True) img.writeto("{}/{}.fits".format(dir_work, img.get_keyword("FILENAME")), overwrite=True) wht.writeto("{}/{}.fits".format(dir_work, wht.get_keyword("FILENAME")), overwrite=True) flg.writeto("{}/{}.fits".format(dir_work, flg.get_keyword("FILENAME")), overwrite=True) # save header img[1].header.tofile("{}/{}.head".format(DIR_WORK, img.get_keyword("FILENAME").replace(".fits", "")), overwrite=True) img[1].header.tofile( "{}/{}.head".format(dir_work, img.get_keyword("FILENAME").replace(".fits", "")), overwrite=True) # append img, wht, flg list img_list.append(img) Loading @@ -84,16 +107,55 @@ for i_ccd in CCD_ID_LIST: flg_list.append(flg) fn_list.append(fp_img) # # parallel step 1 # def corr_one_img(i_ccd, dir_raw, dir_work): # fp_raw = glob.glob("{}/MSC_MS_*_{:02}_raw.fits".format(dir_raw, i_ccd)) # assert len(fp_raw) == 1 # fp_raw = fp_raw[0] # # # read data with CsstMscImgData.read # raw = CsstMscImgData.read(fp_raw) # # # in future, get_* functions grab # bias = raw.get_bias(PATH_BIAS.format(i_ccd)) # dark = raw.get_dark(PATH_DARK.format(i_ccd)) # flat = raw.get_flat(PATH_FLAT.format(i_ccd)) # # # initialize Instrument Processor # instProc = CsstMscInstrumentProc() # instProc.prepare(n_jobs=1, n_threads=1) # img, wht, flg = instProc.run(raw, bias, dark, flat) # instProc.cleanup() # fp_img = img[0].header["FILENAME"] + '.fits' # # # save img, wht, flg to somewhere # img.writeto("{}/{}.fits".format(dir_work, img.get_keyword("FILENAME")), overwrite=True) # wht.writeto("{}/{}.fits".format(dir_work, wht.get_keyword("FILENAME")), overwrite=True) # flg.writeto("{}/{}.fits".format(dir_work, flg.get_keyword("FILENAME")), overwrite=True) # # save header # img[1].header.tofile("{}/{}.head".format(dir_work, img.get_keyword("FILENAME").replace(".fits", "")), # overwrite=True) # return OrderedDict(img=img, wht=wht, flg=flg, fp_img=fp_img) # # # result = joblib.Parallel(n_jobs=NJOBS, verbose=5)( # joblib.delayed(corr_one_img)(i_ccd, dir_raw, dir_work) for i_ccd in CCD_ID_LIST) # img_list = [_["img"] for _ in result] # wht_list = [_["wht"] for _ in result] # flg_list = [_["flg"] for _ in result] # fn_list = [_["fp_img"] for _ in result] # Step 2. Calibrate Position pcProc = CsstProcMscPositionCalibration() pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2.0) pcProc.run(img_list, wht_list, flg_list, fn_list, dir_gaia_catalog, dir_work, 2.0) pcProc.cleanup(img_list, dir_work) # if img_list: # pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2.0) # pcProc.run(img_list, wht_list, flg_list, fn_list, dir_gaia_catalog, dir_work, 2.0) # else: # for i_ccd in CCD_ID_LIST: # fp_img = "{}/MSC_MS_*_{:02}_img.fits".format(DIR_WORK, i_ccd) # fp_wht = "{}/MSC_MS_*_{:02}_wht.fits".format(DIR_WORK, i_ccd) # fp_flg = "{}/MSC_MS_*_{:02}_flg.fits".format(DIR_WORK, i_ccd) # fp_img = "{}/MSC_MS_*_{:02}_img.fits".format(dir_work, i_ccd) # fp_wht = "{}/MSC_MS_*_{:02}_wht.fits".format(dir_work, i_ccd) # fp_flg = "{}/MSC_MS_*_{:02}_flg.fits".format(dir_work, i_ccd) # img = CsstMscImgData.read(fp_img) # wht = CsstMscImgData.read(fp_wht) # flg = CsstMscImgData.read(fp_flg) Loading @@ -101,21 +163,41 @@ pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2. # wht_list.append(wht) # flg_list.append(flg) # fn_list.append(fp_img) # pcProc.run(img_list, wht_list, flg_list, fn_list, DIR_GAIA_CATALOG, DIR_WORK, 2.0) pcProc.cleanup(img_list, DIR_WORK) # pcProc.run(img_list, wht_list, flg_list, fn_list, dir_gaia_catalog, dir_work, 2.0) # Step 3. Calibrate Flux from csst.msc.calib_flux import CsstProcFluxCalibration fcProc = CsstProcFluxCalibration() # fcProc.prepare() fcProc.run(fn_list, img_list, wht_list, flg_list, wcsdir=DIR_WORK, L1dir=DIR_WORK, workdir=DIR_WORK, refdir=DIR_TEST, fcProc.run( fn_list, img_list, wht_list, flg_list, wcsdir=dir_work, L1dir=dir_work, workdir=dir_work, refdir=dir_raw, addhead=True, morehead=False, plot=False, nodel=False, update=False, upcat=True) fcProc.cleanup(fn_list, DIR_WORK) fcProc.cleanup(fn_list, dir_work) # Step 4. Photometry from csst.msc.phot import CsstMscPhotometryProc ptProc = CsstMscPhotometryProc() ptProc.prepare() ptProc.run(fn_list, out_dir=DIR_WORK, n_jobs=18) ptProc.run(fn_list, out_dir=dir_work, n_jobs=n_jobs) ptProc.cleanup() return if __name__ == "__main__": # identify where you are HOSTNAME = os.uname()[1] # you have to run this pipeline in some well-defined servers assert HOSTNAME in ["ubuntu", "Dandelion"] # get config parameters if HOSTNAME == "ubuntu": config = CONFIG_PMO elif HOSTNAME == "Dandelion": config = CONFIG_DANDELION else: raise ValueError("HOSTNAME {} not known!".format(HOSTNAME)) # process this exposure do_one_exposure(**config) for k, v in config.items(): eval("{}=config[\"{}\"]".format(k, k))