import galsim import os from astropy.time import Time as asTime def ConfigDir(config, work_dir=None, data_dir=None): path_dict = {} # Working directory if work_dir == None: dirname, _ = os.path.split(os.path.abspath(__file__)) path_dict["work_dir"] = "/".join(dirname.split("/")[:-1]) + "/" else: path_dict["work_dir"] = work_dir # Data directory if data_dir == None: # Assume all input datasets are in the work directory path_dict["data_dir"] =os.path.join(path_dict["work_dir"], "data/") else: path_dict["data_dir"] = data_dir # Data sub-catalogs # Object catalog direcotry # path_dict["cat_dir"] = os.path.join(path_dict["data_dir"], "catalog_points_7degree2/", cat_dir) path_dict["cat_dir"] = os.path.join(path_dict["data_dir"], config["input_path"]["cat_dir"]) # PSF data directory path_dict["psf_dir"] = os.path.join(path_dict["data_dir"], config["psf_setting"]["psf_dir"]) path_dict["fd_path"] = os.path.join(path_dict["data_dir"], config["psf_setting"]["fd_path"]) # SED catalog directory # TODO: SED_dir is deprecated path_dict["SED_dir"] = os.path.join(path_dict["data_dir"], "imageSims/Catalog/SEDObject") # path_dict["template_dir"] = path_dict["data_dir"] + "Templates/" # path_dict["template_dir"] = os.path.join(path_dict["data_dir"], config["SED_templates_path"]["galaxy_SED"]) # Directories/files for instrument parameters, e.g. efficiency curves. path_dict["filter_dir"] = os.path.join(path_dict["data_dir"], config["Efficiency_curve_path"]["filter_eff"]) path_dict["ccd_dir"] = os.path.join(path_dict["data_dir"], config["Efficiency_curve_path"]["ccd_eff"]) path_dict["mirror_file"] = os.path.join(path_dict["data_dir"], config["Efficiency_curve_path"]["mirror_eff"]) # Cosmic-ray data directory: path_dict["CRdata_dir"] = os.path.join(path_dict["data_dir"], config["CR_data_path"]) path_dict["sky_file"] = os.path.join(path_dict["data_dir"], config["sky_data_path"]) # Slitless spectroscopy realted path_dict["sls_dir"] = os.path.join(path_dict["data_dir"], config["SLS_path"]["SLS_conf"]) path_dict["normalize_dir"] = os.path.join(path_dict["data_dir"], config["SLS_path"]["SLS_norm"]) return path_dict def ReadConfig(config_filename): """Read in a configuration file and return the corresponding dict(s). Parameters: config_filename: The name of the configuration file to read. Returns: (list) of config dicts """ config = {} config_file = open(config_filename).readlines() nlines = len(config_file) for i in range(nlines): row = config_file[i].split() if len(row) <= 1: continue # blank row if not "#" in row: if len(row) == 2: key, val = row[0:2] config.update({key:val}) else: print("!! Something is wrong with parameter '%s'."%row[0]) return elif row.index("#") == 2: key, val = row[0:2] config.update({key:val}) elif row.index("#") == 0: continue # annotation else: print("!! Something is wrong with parameter '%s'."%row[0]) return config = ParseConfig(config) return config def ParseConfig(config): """Parse the config values to the right type Parameters: config: raw config dict Returns: Parsed config dict """ config["ra_center"] = float(config["ra_center"]) config["dec_center"] = float(config["dec_center"]) config["psf_rcont"] = config["psf_rcont"].split(",") config["psfRa"] = float(config["psf_rcont"][0]) config["psfCont"] = float(config["psf_rcont"][1]) config["image_rot"] = float(config["image_rot"])*galsim.degrees config["sigma_spin"] = float(config["sigma_spin"]) config["reduced_g1"] = float(config["reduced_g1"]) config["reduced_g2"] = float(config["reduced_g2"]) config["rotateEll"] = float(config["rotateEll"]) config["reEll"] = int(config["rotateEll"]/45.0) if config["reEll"]==0: config["reIndex"] = "P" if config["reEll"]==1: config["reIndex"] = "X" if config["reEll"]==2: config["reIndex"] = "N" if config["reEll"]==3: config["reIndex"] = "Y" config["seed_flat"] = int(config["seed_flat"]) config["seed_prnu"] = int(config["seed_prnu"]) config["seed_star"] = int(config["seed_star"]) config["seed_gal"] = int(config["seed_gal"]) config["seed_Av"] = int(config["seed_Av"]) config["bias_level"] = int(config["bias_level"]) config["df_strength"] = float(config["df_strength"]) return config