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

Merge branch 'develop'

parents 959f0ebc 8df06b27
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+8 −0
Original line number Original line Diff line number Diff line
build/*
CSSTSim.egg-info/*
dist/*
*.pyc
*.so
*disperse.c
*interp.c
!*libshao.so
 No newline at end of file
+30 −24
Original line number Original line Diff line number Diff line
import os
import os
import galsim
import galsim
import random
import random
import copy
import numpy as np
import numpy as np
import h5py as h5
import h5py as h5
import healpy as hp
import healpy as hp
@@ -69,8 +70,7 @@ def get_star_cat(ra_pointing, dec_pointing):
class Catalog(CatalogBase):
class Catalog(CatalogBase):
    def __init__(self, config, chip, pointing, chip_output, filt, **kwargs):
    def __init__(self, config, chip, pointing, chip_output, filt, **kwargs):
        super().__init__()
        super().__init__()
        self.cat_dir = os.path.join(config["data_dir"], config["catalog_options"]["input_path"]["cat_dir"])
        self.cat_dir = config["catalog_options"]["input_path"]["cat_dir"]
        self.seed_Av = config["catalog_options"]["seed_Av"]


        self.cosmo = FlatLambdaCDM(H0=67.66, Om0=0.3111)
        self.cosmo = FlatLambdaCDM(H0=67.66, Om0=0.3111)


@@ -91,20 +91,19 @@ class Catalog(CatalogBase):
            # Get the cloest star catalog file
            # Get the cloest star catalog file
            star_file_name = get_star_cat(ra_pointing=self.pointing.ra, dec_pointing=self.pointing.dec)
            star_file_name = get_star_cat(ra_pointing=self.pointing.ra, dec_pointing=self.pointing.dec)
            star_path = os.path.join(config["catalog_options"]["input_path"]["star_cat"], star_file_name)
            star_path = os.path.join(config["catalog_options"]["input_path"]["star_cat"], star_file_name)
            star_SED_file = config["catalog_options"]["SED_templates_path"]["star_SED"]
            self.star_path = os.path.join(self.cat_dir, star_path)
            self.star_path = os.path.join(self.cat_dir, star_path)
            self.star_SED_path = os.path.join(config["data_dir"], star_SED_file)
            self.star_SED_path = config["catalog_options"]["SED_templates_path"]["star_SED"]
            self._load_SED_lib_star()
            self._load_SED_lib_star()
        
        
        if "galaxy_cat" in config["catalog_options"]["input_path"] and config["catalog_options"]["input_path"]["galaxy_cat"] and not config["catalog_options"]["star_only"]:
        if "galaxy_cat" in config["catalog_options"]["input_path"] and config["catalog_options"]["input_path"]["galaxy_cat"] and not config["catalog_options"]["star_only"]:
            galaxy_dir = config["catalog_options"]["input_path"]["galaxy_cat"]
            galaxy_dir = config["catalog_options"]["input_path"]["galaxy_cat"]
            self.galaxy_path = os.path.join(self.cat_dir, galaxy_dir)
            self.galaxy_path = os.path.join(self.cat_dir, galaxy_dir)
            self.galaxy_SED_path = os.path.join(config["data_dir"], config["catalog_options"]["SED_templates_path"]["galaxy_SED"])
            self.galaxy_SED_path = config["catalog_options"]["SED_templates_path"]["galaxy_SED"]
            self._load_SED_lib_gals()
            self._load_SED_lib_gals()
            self.agn_seds = {}
            self.agn_seds = {}


        if "AGN_SED" in config["catalog_options"]["SED_templates_path"] and not config["catalog_options"]["star_only"]:
        if "AGN_SED" in config["catalog_options"]["SED_templates_path"] and not config["catalog_options"]["star_only"]:
            self.AGN_SED_path = os.path.join(config["data_dir"], config["catalog_options"]["SED_templates_path"]["AGN_SED"])
            self.AGN_SED_path = config["catalog_options"]["SED_templates_path"]["AGN_SED"]


        if "rotateEll" in config["catalog_options"]:
        if "rotateEll" in config["catalog_options"]:
            self.rotation = np.radians(float(config["catalog_options"]["rotateEll"]))
            self.rotation = np.radians(float(config["catalog_options"]["rotateEll"]))
@@ -123,7 +122,7 @@ class Catalog(CatalogBase):


        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.add_fmt += " %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %4d %8.4f "
        self.add_fmt += " %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %4d %8.4f "
        self.chip_output.update_ouptut_header(additional_column_names=self.add_hdr)
        self.chip_output.update_output_header(additional_column_names=self.add_hdr)


    def _get_healpix_list(self):
    def _get_healpix_list(self):
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
@@ -204,6 +203,10 @@ class Catalog(CatalogBase):
            param['dec'] = dec_arr[igals]
            param['dec'] = dec_arr[igals]
            param['ra_orig'] = gals['ra'][igals]
            param['ra_orig'] = gals['ra'][igals]
            param['dec_orig'] = gals['dec'][igals]
            param['dec_orig'] = gals['dec'][igals]

            if not self.chip.isContainObj(ra_obj=param['ra'], dec_obj=param['dec'], margin=200):
                continue
            
            # param['mag_use_normal'] = gals['mag_csst_%s'%(self.filt.filter_type)][igals]
            # param['mag_use_normal'] = gals['mag_csst_%s'%(self.filt.filter_type)][igals]
            if self.filt.filter_type == 'NUV':
            if self.filt.filter_type == 'NUV':
                param['mag_use_normal'] = gals['mag_csst_nuv'][igals]
                param['mag_use_normal'] = gals['mag_csst_nuv'][igals]
@@ -275,29 +278,32 @@ class Catalog(CatalogBase):
            param['av'] = 0.0
            param['av'] = 0.0
            param['redden'] = 0
            param['redden'] = 0


            # TEMP
            self.ids += 1
            param['id'] = '%06d'%(int(pix_id)) + '%06d'%(cat_id) + '%08d'%(igals)

            # Is this an Quasar?
            # Is this an Quasar?
            param['qsoindex'] = gals['qsoindex'][igals]
            param['qsoindex'] = gals['qsoindex'][igals]
            if param['qsoindex'] == -1:
            if param['qsoindex'] == -1:
                param['star'] = 0   # Galaxy
                param['star'] = 0   # Galaxy
                param['agnsed_file'] = ""
                param['agnsed_file'] = ""
                obj = Galaxy(param, logger=self.logger)
            else:
            else:
                param['star'] = 2   # Quasar
                param_qso = copy.deepcopy(param)
                param['agnsed_file'] = agnsed_file
                param_qso['star'] = 2   # Quasar

                param_qso['agnsed_file'] = agnsed_file
            # NOTE: this cut cannot be put before the SED type has been assigned
                # First add QSO model
            if not self.chip.isContainObj(ra_obj=param['ra'], dec_obj=param['dec'], margin=200):
                obj = Quasar(param_qso, logger=self.logger)
                continue
                # Need to deal with additional output columns

                obj.additional_output_str = self.add_fmt%("n", 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
            # TEMP
                                                        0, 0.)
            self.ids += 1
                self.objs.append(obj)
            param['id'] = '%06d'%(int(pix_id)) + '%06d'%(cat_id) + '%08d'%(igals)
                # Then add host galaxy model
            
                param['star'] = 0   # Galaxy
            if param['star'] == 0:
                param['agnsed_file'] = ""
                obj = Galaxy(param, logger=self.logger)
                obj = Galaxy(param, logger=self.logger)
            elif param['star'] == 2:
                obj = Quasar(param, logger=self.logger)
            
            
            # Need to deal with additional output columns
            # Need to deal with additional output columns for (host) galaxy
            obj.additional_output_str = self.add_fmt%("n", 0., 0., 0.,
            obj.additional_output_str = self.add_fmt%("n", 0., 0., 0.,
                                                    param['bulgemass'], param['diskmass'], param['detA'],
                                                    param['bulgemass'], param['diskmass'], param['detA'],
                                                    param['e1'], param['e2'], param['kappa'], param['g1'], param['g2'], param['size'],
                                                    param['e1'], param['e2'], param['kappa'], param['g1'], param['g2'], param['size'],
@@ -343,7 +349,7 @@ class Catalog(CatalogBase):
                input_time_str=time_str
                input_time_str=time_str
            )
            )
        for istars in range(nstars):
        for istars in range(nstars):
            # # (TEST)
            # (TEST)
            # if istars > 100:
            # if istars > 100:
            #     break
            #     break


@@ -446,7 +452,7 @@ class Catalog(CatalogBase):
            elif obj.type == 'quasar':
            elif obj.type == 'quasar':
                flux = self.agn_seds[obj.agnsed_file][int(obj.qsoindex)] * 1e-17
                flux = self.agn_seds[obj.agnsed_file][int(obj.qsoindex)] * 1e-17
                flux[flux < 0] = 0.
                flux[flux < 0] = 0.
                wave = self.lamb_gal
                wave = self.lamb_gal * (1.0 + obj.z)
        else:
        else:
            raise ValueError("Object type not known")
            raise ValueError("Object type not known")
        speci = interpolate.interp1d(wave, flux)
        speci = interpolate.interp1d(wave, flux)
+526 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Original line Diff line number Diff line
@@ -99,7 +99,7 @@ class Catalog(CatalogBase):


        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.add_fmt += " %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %4d %8.4f "
        self.add_fmt += " %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %4d %8.4f "
        self.chip_output.update_ouptut_header(additional_column_names=self.add_hdr)
        self.chip_output.update_output_header(additional_column_names=self.add_hdr)


    def _get_healpix_list(self):
    def _get_healpix_list(self):
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
+18 −10
Original line number Original line Diff line number Diff line
@@ -60,6 +60,9 @@ class Catalog(CatalogBase):


        with pkg_resources.path('Catalog.data', 'SLOAN_SDSS.g.fits') as filter_path:
        with pkg_resources.path('Catalog.data', 'SLOAN_SDSS.g.fits') as filter_path:
            self.normF_star = Table.read(str(filter_path))
            self.normF_star = Table.read(str(filter_path))
        with pkg_resources.path('Catalog.data', 'lsst_throuput_g.fits') as filter_path:
            self.normF_galaxy = Table.read(str(filter_path))

        
        
        self.config = config
        self.config = config
        self.chip = chip
        self.chip = chip
@@ -110,7 +113,7 @@ class Catalog(CatalogBase):


        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.add_fmt = " %10s %8.4f %8.4f %8.4f"
        self.add_fmt += " %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %4d %8.4f "
        self.add_fmt += " %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %4d %8.4f "
        self.chip_output.update_ouptut_header(additional_column_names=self.add_hdr)
        self.chip_output.update_output_header(additional_column_names=self.add_hdr)


    def _get_healpix_list(self):
    def _get_healpix_list(self):
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
        self.sky_coverage = self.chip.getSkyCoverageEnlarged(self.chip.img.wcs, margin=0.2)
@@ -138,8 +141,8 @@ class Catalog(CatalogBase):
            return None
            return None
        ###mock_stamp_START
        ###mock_stamp_START
        elif obj.type == "stamp":
        elif obj.type == "stamp":
            #return self.normF_galaxy  ###normalize_filter for stamp
            return self.normF_galaxy  ###normalize_filter for stamp
            return None
            #return None
        ###mock_stamp_END
        ###mock_stamp_END
        else:
        else:
            return None
            return None
@@ -197,8 +200,8 @@ class Catalog(CatalogBase):


        for igals in range(ngals):
        for igals in range(ngals):
            # # (TEST)
            # # (TEST)
            # if igals > 100:
            if igals > 2000:
            #     break
                break
            
            
            param = self.initialize_param()
            param = self.initialize_param()
            param['ra'] = ra_arr[igals]
            param['ra'] = ra_arr[igals]
@@ -321,8 +324,8 @@ class Catalog(CatalogBase):
            )
            )
        for istars in range(nstars):
        for istars in range(nstars):
            # # (TEST)
            # # (TEST)
            # if istars > 100:
            if istars > 100:
            #     break
                break


            param = self.initialize_param()
            param = self.initialize_param()
            param['ra'] = ra_arr[istars]
            param['ra'] = ra_arr[istars]
@@ -389,6 +392,9 @@ class Catalog(CatalogBase):
                input_time_str=time_str
                input_time_str=time_str
            )
            )
        for iAGNs in range(nAGNs):
        for iAGNs in range(nAGNs):
            if iAGNs > 100:
                break

            param = self.initialize_param()
            param = self.initialize_param()
            param['ra'] = ra_arr[iAGNs]
            param['ra'] = ra_arr[iAGNs]
            param['dec'] = dec_arr[iAGNs]
            param['dec'] = dec_arr[iAGNs]
@@ -425,13 +431,15 @@ class Catalog(CatalogBase):
        self.ud = galsim.UniformDeviate(pix_id)
        self.ud = galsim.UniformDeviate(pix_id)


        for istamp in range(nstamps):
        for istamp in range(nstamps):
            print('DEBUG:::istamp=', istamp)

            fitsfile = os.path.join(self.cat_dir, "stampCats/"+stamps['filename'][istamp].decode('utf-8'))
            fitsfile = os.path.join(self.cat_dir, "stampCats/"+stamps['filename'][istamp].decode('utf-8'))
            hdu=fitsio.open(fitsfile)
            hdu=fitsio.open(fitsfile)


            param = self.initialize_param()
            param = self.initialize_param()
            param['id']   = hdu[0].header['index'] #istamp
            param['id']   = hdu[0].header['index'] #istamp
            param['star'] = 3      # Stamp type in .cat file
            param['star'] = 3      # Stamp type in .cat file
            param['lensGalaxyID'] = hdu[0].header['lensGID']
            ###param['lensGalaxyID'] = hdu[0].header['lensGID']
            param['ra'] = hdu[0].header['ra']
            param['ra'] = hdu[0].header['ra']
            param['dec']= hdu[0].header['dec']
            param['dec']= hdu[0].header['dec']
            param['pixScale']= hdu[0].header['pixScale']
            param['pixScale']= hdu[0].header['pixScale']
@@ -440,9 +448,9 @@ class Catalog(CatalogBase):
            #param['PA']= hdu[0].header['PA']
            #param['PA']= hdu[0].header['PA']
            #param['bfrac']= hdu[0].header['bfrac']
            #param['bfrac']= hdu[0].header['bfrac']
            #param['z']= hdu[0].header['z']
            #param['z']= hdu[0].header['z']
            param['mag_use_normal'] = 22 #hdu[0].header['m_normal'] #gals['mag_true_g_lsst']
            param['mag_use_normal'] = 20 #hdu[0].header['m_normal'] #gals['mag_true_g_lsst']


            assert(stamps['lensGID'][istamp] == param['lensGalaxyID'])
            ###assert(stamps['lensGID'][istamp] == param['lensGalaxyID'])


            # Apply astrometric modeling
            # Apply astrometric modeling
            # in C3 case only aberration
            # in C3 case only aberration
Loading