Commit fbae6e75 authored by Fang Yuedong's avatar Fang Yuedong
Browse files

Merge branch 'customizable_catalog'

parents cef921a0 7bf334fe
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -23,15 +23,13 @@ except ImportError:
NSIDE = 128

class NGPCatalog(CatalogBase):
    def __init__(self, config, chip, pointing, **kwargs):
    def __init__(self, config, chip, pointing, chip_output, **kwargs):
        super().__init__()
        self.cat_dir = os.path.join(config["data_dir"], config["input_path"]["cat_dir"])
        self.seed_Av = config["random_seeds"]["seed_Av"]

        if "logger" in kwargs:
            self.logger = kwargs["logger"]
        else:
            self.logger = None
        self.chip_output = chip_output
        self.logger = chip_output.logger

        with pkg_resources.path('Catalog.data', 'SLOAN_SDSS.g.fits') as filter_path:
                self.normF_star = Table.read(str(filter_path))
@@ -58,9 +56,17 @@ class NGPCatalog(CatalogBase):
        else:
            self.rotation = 0.

        # Update output .cat header with catalog specific output columns
        self._add_output_columns_header()

        self._get_healpix_list()
        self._load()
    
    def _add_output_columns_header(self):
        self.add_hdr = " model_tag teff logg feh"
        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.chip_output.update_ouptut_header(additional_column_names=self.add_hdr)

    def _get_healpix_list(self):
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
        ra_min, ra_max, dec_min, dec_max = self.sky_coverage.xmin, self.sky_coverage.xmax, self.sky_coverage.ymin, self.sky_coverage.ymax
@@ -181,9 +187,12 @@ class NGPCatalog(CatalogBase):
            
            if param['star'] == 0:
                obj = Galaxy(param, self.rotation, logger=self.logger)
                self.objs.append(obj)
            if param['star'] == 2:
                obj = Quasar(param, logger=self.logger)
            
            # Need to deal with additional output columns
            obj.additional_output_str = self.add_fmt%("n", 0., 0., 0.)
            
            self.objs.append(obj)

    def _load_stars(self, stars, pix_id=None):
@@ -249,6 +258,10 @@ class NGPCatalog(CatalogBase):
            param['z'] = 0.0
            param['star'] = 1   # Star
            obj = Star(param, logger=self.logger)

            # Append additional output columns to the .cat file
            obj.additional_output_str = self.add_fmt%(param["model_tag"], param['teff'], param['logg'], param['feh'])

            self.objs.append(obj)

    def _load(self, **kwargs):
@@ -304,7 +317,8 @@ class NGPCatalog(CatalogBase):
            raise ValueError("Object type not known")
        speci = interpolate.interp1d(wave, flux)
        # lamb = np.arange(2500, 10001 + 0.5, 0.5)
        lamb = np.arange(2400, 11001 + 0.5, 0.5)
        # lamb = np.arange(2400, 11001 + 0.5, 0.5)
        lamb = np.arange(2000, 18001 + 0.5, 0.5)
        y = speci(lamb)
        # erg/s/cm2/A --> photo/s/m2/A
        all_sed = y * lamb / (cons.h.value * cons.c.value) * 1e-13
−156 B

File deleted.

−173 B

File deleted.

+18 −53
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ class ChipOutput(object):
        self.imgKey2 = imgKey2
        self.exptime = exptime
        self.mjdTime = mjdTime
        self.pointing_type = pointing_type
        if (ra_cen is not None) and (dec_cen is not None):
            self.ra_cen = ra_cen
            self.dec_cen = dec_cen
@@ -33,85 +34,49 @@ class ChipOutput(object):
        fh = logging.FileHandler(os.path.join(self.subdir, logger_filename), mode='w+', encoding='utf-8')
        fh.setLevel(logging.DEBUG)
        self.logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        logging.getLogger('numba').setLevel(logging.WARNING)
        # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        formatter = logging.Formatter('%(asctime)s - %(msecs)d - %(levelname)-8s - [%(filename)s:%(lineno)d] - %(message)s')
        fh.setFormatter(formatter)
        self.logger.addHandler(fh)

        hdr1  = "# obj_ID ID_chip filter xImage yImage ra dec ra_orig dec_orig z mag obj_type "
        hdr2  = "thetaR bfrac hlr_disk hlr_bulge e1_disk e2_disk e1_bulge e2_bulge g1 g2 "
        hdr3  = "sed_type av redden "
        hdr4 = "pm_ra pm_dec RV parallax\n"
        hdr4 = "pm_ra pm_dec RV parallax"

        fmt1  = "%10d %4d %5s %10.3f %10.3f %15.8f %15.8f %15.8f %15.8f %7.4f %8.4f %15s "
        fmt2  = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f "
        fmt3 = "%2d %8.4f %8.4f "
        fmt4 = "%15.8f %15.8f %15.8f %15.8f\n"
        fmt4 = "%15.8f %15.8f %15.8f %15.8f"

        self.hdr = hdr1 + hdr2 + hdr3 + hdr4
        self.fmt = fmt1 + fmt2 + fmt3 + fmt4

        self.logger.info("pointing_type = %s\n"%(pointing_type))
        if pointing_type == 'MS':

    
    def update_ouptut_header(self, additional_column_names=""):
        self.hdr += additional_column_names
    
    def create_output_file(self):
        if self.pointing_type == 'MS':
            self.cat = open(os.path.join(self.subdir, self.cat_name), "w")
            self.logger.info("Creating catalog file %s ...\n"%(os.path.join(self.subdir, self.cat_name)))
            if not self.hdr.endswith("\n"):
                self.hdr += "\n"
            self.cat.write(self.hdr)

    # def updateHDR(self, hdr):
    #     hdrNew = [{"name":"RDNOISE", "value":self.chip.read_noise,        "comment":"read noise in e-/pixel"},
    #             {"name":"DARK",    "value":self.chip.dark_noise,        "comment":"Dark noise (e-/pixel/s)"},
    #             {"name":"EXPTIME", "value":self.exptime,          "comment":"exposure time in second"},
    #             {"name":"GAIN",    "value":self.chip.gain,             "comment":"CCD gain in e-/ADU"},
    #             {"name":"SATURATE","value":65535.0,          "comment":"saturation level"},
    #             {"name":"CCDCHIP",  "value":int(self.chipLabel), "comment":"chip ID in the CCD mosaic"},
    #             {"name":"FILTER",  "value":self.filt.filter_type,          "comment":"filter name"},
    #             {"name":"MJD-OBS", "value":self.mjdTime,          "comment":"Modified Julian Date (MJD) of observation"},
    #             {"name":"DATE-OBS","value":self.imgKey1,          "comment":"Date of observation"},
    #             {"name":"EQUINOX", "value":2000.0},
    #             {"name":"RADECSYS","value":"ICRS"},
    #             {"name":"RA",      "value":self.ra_cen,           "comment":"telescope pointing center"},
    #             {"name":"DEC",     "value":self.dec_cen,          "comment":"telescope pointing center"},
    #             {"name":"OBJECT",  "value":"CSS-OS"},
    #             {"name":"WCSDIM",  "value":2.0,              "comment":"WCS Dimensionality"},
    #             {"name":"EXTNAME", "value":"IM1",            "comment":"Extension name"},
    #             {"name":"BSCALE",  "value":1.0},
    #             {"name":"BZERO",   "value":0.0},
    #             {"name":"OBSID",   "value":self.imgKey0,          "comment":"Observation ID"},
    #             {"name":"CCDNAME", "value":"ccd"+self.chipLabel,"comment":"CCD name"},
    #             {"name":"RSPEED",  "value":10.0,             "comment":"Read speed"},
    #             {"name":"CHIPTEMP","value":-100.0,           "comment":"Chip temperature"},
    #             {"name":"DATASEC", "value":"1:%d,1:%d"%(self.chip.npix_x,self.chip.npix_y), "comment":"Data section"},
    #             {"name":"CCDSUM",  "value":self.chip.npix_x*self.chip.npix_y,      "comment":"CCD pixel summing"},
    #             {"name":"NSUM",    "value":self.chip.npix_x*self.chip.npix_y,      "comment":"CCD pixel summing"},
    #             {"name":"AUTHOR",  "value":"CSST-Sim Group"},
    #             {"name":"GROUP",   "value":"Weak Lensing Working Group for CSST"}]
    #     for item in hdrNew:
    #         hdr.add_record(item)
    #     return hdr

    # def cat_add_obj(self, obj, pos_img, snr, pos_shear, g1, g2):
    def cat_add_obj(self, obj, pos_img, pos_shear):
        ximg = pos_img.x - self.chip.bound.xmin + 1.0
        yimg = pos_img.y - self.chip.bound.ymin + 1.0
        # if obj.type == 'galaxy':
        #     line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], obj.thetaR, obj.bfrac, obj.hlr_disk, obj.hlr_bulge,
        #         obj.e1_disk, obj.e2_disk, obj.e1_bulge, obj.e2_bulge,
        #         pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, obj.sed_type, obj.param['av'], obj.param['redden'], 'n', 0, 0, 0)
        # elif obj.type == "quasar":
        #     line = self.fmt % (obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z,
        #                        obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
        #                        pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, obj.sed_type, obj.param['av'], obj.param['redden'], 'n', 0.0, 0.0, 0.0)
        # else:
        #     line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
        #         pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, 0, 0.0, 0.0, obj.param['model_tag'], obj.param['teff'], obj.param['logg'],obj.param['feh'])
        # print(
        #     obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.ra_orig, obj.dec_orig, obj.z, obj.getMagFilter(self.filt), obj.type, 
        #     obj.thetaR, obj.bfrac, obj.hlr_disk, obj.hlr_bulge, obj.e1_disk, obj.e2_disk, obj.e1_bulge, obj.e2_bulge, obj.g1, obj.g2,
        #     obj.sed_type, obj.av, obj.redden,
        #     obj.pmra, obj.pmdec, obj.rv, obj.parallax)
        
        line = self.fmt%(
            obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.ra_orig, obj.dec_orig, obj.z, obj.getMagFilter(self.filt), obj.type, 
            obj.thetaR, obj.bfrac, obj.hlr_disk, obj.hlr_bulge, obj.e1_disk, obj.e2_disk, obj.e1_bulge, obj.e2_bulge, obj.g1, obj.g2,
            obj.sed_type, obj.av, obj.redden,
            obj.pmra, obj.pmdec, obj.rv, obj.parallax)
        line += obj.additional_output_str
        if not line.endswith("\n"):
            line += "\n"
        self.cat.write(line)
+4 −2
Original line number Diff line number Diff line
@@ -21,7 +21,9 @@ def config_dir(config, work_dir=None, data_dir=None):
    # Object catalog direcotry
    path_dict["cat_dir"] = os.path.join(path_dict["data_dir"], config["input_path"]["cat_dir"])
    # PSF data directory
    if config["psf_setting"]["psf_model"] == "Interp":
        path_dict["psf_dir"] = os.path.join(path_dict["data_dir"], config["psf_setting"]["psf_dir"])
    if config["ins_effects"]["field_dist"] == True:
        path_dict["fd_path"] = os.path.join(path_dict["data_dir"], config["psf_setting"]["fd_path"])

    return path_dict
Loading