From 871af879cc50f35c37a40cb2b935eb787a767721 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Mon, 6 Jun 2022 11:58:41 -0700 Subject: [PATCH 1/4] Add bulge_flux_fraction column to source injection --- python/lsst/pipe/tasks/insertFakes.py | 39 ++++++++++++++++++--------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/python/lsst/pipe/tasks/insertFakes.py b/python/lsst/pipe/tasks/insertFakes.py index 694253a3e..88063c1df 100644 --- a/python/lsst/pipe/tasks/insertFakes.py +++ b/python/lsst/pipe/tasks/insertFakes.py @@ -371,12 +371,6 @@ class InsertFakesConfig(PipelineTaskConfig, default="disk_n", ) - bulge_disk_flux_ratio_col = pexConfig.Field( - doc="Source catalog column name for the bulge/disk flux ratio.", - dtype=str, - default="bulge_disk_flux_ratio", - ) - mag_col = pexConfig.Field( doc="Source catalog column name template for magnitudes, in the format " "``filter name``_mag_col. E.g., if this config variable is set to " @@ -386,6 +380,13 @@ class InsertFakesConfig(PipelineTaskConfig, default="%s_mag" ) + bulge_flux_fraction_col = pexConfig.Field( + doc="Source catalog column name for fraction of flux in bulge " + "component.", + dtype=str, + default="%s_bulge_flux_fraction" + ) + select_col = pexConfig.Field( doc="Source catalog column name to be used to select which sources to " "add.", @@ -407,6 +408,13 @@ class InsertFakesConfig(PipelineTaskConfig, # Deprecated config variables + bulge_disk_flux_ratio_col = pexConfig.Field( + doc="Source catalog column name for the bulge/disk flux ratio.", + dtype=str, + default="bulge_disk_flux_ratio", + deprecated="Use `bulge_flux_fraction_col` instead." + ) + raColName = pexConfig.Field( doc="RA column name used in the fake source catalog.", dtype=str, @@ -789,16 +797,23 @@ def add_to_replace_dict(new_name, depr_name, std_name): "axis ratio." ) - # Process the bulge/disk flux ratio if possible. - if cfg.bulge_disk_flux_ratio_col in fakeCat.columns: + # Populate bulge_flux_fraction using either new-style with string interpolation, + # or old-style from b/d flux ratio. If neither are available, fall back to + # deprecated behavior of bd flux ratio = 1.0, or equivalently, + # bulge_flux_fraction=0.5 + if cfg.bulge_flux_fraction_col%band in fakeCat.columns: fakeCat = fakeCat.rename( columns={ - cfg.bulge_disk_flux_ratio_col: 'bulge_disk_flux_ratio' + cfg.bulge_flux_fraction_col%band: 'bulge_flux_fraction' }, copy=False ) + elif cfg.bulge_disk_flux_ratio_col in fakeCat.columns: + fakeCat['bulge_flux_fraction'] = ( + fakeCat['bulge_disk_flux_ratio'] / (1 + fakeCat['bulge_disk_flux_ratio']) + ) else: - fakeCat['bulge_disk_flux_ratio'] = 1.0 + fakeCat['bulge_flux_fraction'] = 0.5 return fakeCat @@ -850,7 +865,7 @@ def _generateGSObjectsFromCatalog(self, exposure, fakeCat, galCheckVal, starChec disk = galsim.Sersic(n=row['disk_n'], half_light_radius=disk_gs_HLR) disk = disk.shear(q=row['disk_axis_ratio'], beta=((90 - row['disk_pa'])*galsim.degrees)) - gal = bulge*row['bulge_disk_flux_ratio'] + disk + gal = bulge*row['bulge_flux_fraction'] + disk*(1-row['bulge_flux_fraction']) gal = gal.withFlux(flux) yield skyCoord, gal @@ -1159,7 +1174,7 @@ def mkFakeGalsimGalaxies(self, fakeCat, band, photoCalib, pixelScale, psf, image disk = galsim.Sersic(n=row['disk_n'], half_light_radius=disk_gs_HLR) disk = disk.shear(q=row['disk_axis_ratio'], beta=((90 - row['disk_pa'])*galsim.degrees)) - gal = bulge*row['bulge_disk_flux_ratio'] + disk + gal = bulge*row['bulge_flux_fraction'] + disk*(1-row['bulge_flux_fraction']) gal = gal.withFlux(flux) psfIm = galsim.InterpolatedImage(galsim.Image(psfKernel), scale=pixelScale) From 8bed068a163028f21d74d5c0b253dcd0808b3ff7 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Wed, 8 Jun 2022 10:30:50 -0700 Subject: [PATCH 2/4] rebase me --- python/lsst/pipe/tasks/insertFakes.py | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/python/lsst/pipe/tasks/insertFakes.py b/python/lsst/pipe/tasks/insertFakes.py index 88063c1df..caa93df7e 100644 --- a/python/lsst/pipe/tasks/insertFakes.py +++ b/python/lsst/pipe/tasks/insertFakes.py @@ -371,6 +371,13 @@ class InsertFakesConfig(PipelineTaskConfig, default="disk_n", ) + bulge_disk_flux_ratio_col = pexConfig.Field( + doc="Source catalog column name for the bulge/disk flux ratio. See " + "also: ``bulge_flux_fraction_col``.", + dtype=str, + default="bulge_disk_flux_ratio", + ) + mag_col = pexConfig.Field( doc="Source catalog column name template for magnitudes, in the format " "``filter name``_mag_col. E.g., if this config variable is set to " @@ -382,7 +389,14 @@ class InsertFakesConfig(PipelineTaskConfig, bulge_flux_fraction_col = pexConfig.Field( doc="Source catalog column name for fraction of flux in bulge " - "component.", + "component, in the format ``filter name``_bulge_flux_fraction. " + "E.g., if this config variable is set to ``%s_bulge_flux_fraction," + "then the i-band bulge flux fraction will be search for in the " + "``i_bulge_flux_fraction`` column of the source catalog. " + "Note that if the source catalog contains both the config values " + "for bulge_flux_fraction_col and bulge_disk_flux_ratio_col, then " + "the fluxes will be determined from bulge_flux_fraction_col and " + "the bulge_disk_flux_ratio_col column will be ignored.", dtype=str, default="%s_bulge_flux_fraction" ) @@ -408,13 +422,6 @@ class InsertFakesConfig(PipelineTaskConfig, # Deprecated config variables - bulge_disk_flux_ratio_col = pexConfig.Field( - doc="Source catalog column name for the bulge/disk flux ratio.", - dtype=str, - default="bulge_disk_flux_ratio", - deprecated="Use `bulge_flux_fraction_col` instead." - ) - raColName = pexConfig.Field( doc="RA column name used in the fake source catalog.", dtype=str, @@ -797,10 +804,11 @@ def add_to_replace_dict(new_name, depr_name, std_name): "axis ratio." ) - # Populate bulge_flux_fraction using either new-style with string interpolation, - # or old-style from b/d flux ratio. If neither are available, fall back to - # deprecated behavior of bd flux ratio = 1.0, or equivalently, - # bulge_flux_fraction=0.5 + # Standardize flux apportionment between bulge and disk using + # `bulge_flux_fraction`. Prefer, in order: + # - `bulge_flux_fraction_col` + # - `bulge_disk_flux_ratio_col` + # - bd_flux_ratio = 1.0, which is equivalent to bulge_flux_fraction=0.5 if cfg.bulge_flux_fraction_col%band in fakeCat.columns: fakeCat = fakeCat.rename( columns={ From de7439ff8b968c434479d41d9219d5f88f39411b Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Mon, 13 Jun 2022 14:20:58 -0700 Subject: [PATCH 3/4] Add debug logging to fake source injection --- python/lsst/pipe/tasks/insertFakes.py | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/python/lsst/pipe/tasks/insertFakes.py b/python/lsst/pipe/tasks/insertFakes.py index caa93df7e..967a32af3 100644 --- a/python/lsst/pipe/tasks/insertFakes.py +++ b/python/lsst/pipe/tasks/insertFakes.py @@ -79,7 +79,7 @@ def _add_fake_sources(exposure, objects, calibFluxRadius=12.0, logger=None): posd = galsim.PositionD(pt.x, pt.y) posi = galsim.PositionI(pt.x//1, pt.y//1) if logger: - logger.debug(f"Adding fake source at {pt}") + logger.debug(f"Adding fake source {gsObj} at {pt}") mat = wcs.linearizePixelToSky(spt, geom.arcseconds).getMatrix() gsWCS = galsim.JacobianWCS(mat[0, 0], mat[0, 1], mat[1, 0], mat[1, 1]) @@ -762,6 +762,8 @@ def add_to_replace_dict(new_name, depr_name, std_name): cfg.sourceSelectionColName, 'select' ) + if replace_dict: + self.log.debug("Replacing columns:", replace_dict) fakeCat = fakeCat.rename(columns=replace_dict, copy=False) # Handling the half-light radius and axis-ratio are trickier, since we @@ -772,15 +774,18 @@ def add_to_replace_dict(new_name, depr_name, std_name): cfg.bulge_semimajor_col in fakeCat.columns and cfg.bulge_axis_ratio_col in fakeCat.columns ): + replace_dict = { + cfg.bulge_semimajor_col: 'bulge_semimajor', + cfg.bulge_axis_ratio_col: 'bulge_axis_ratio', + cfg.disk_semimajor_col: 'disk_semimajor', + cfg.disk_axis_ratio_col: 'disk_axis_ratio', + } fakeCat = fakeCat.rename( - columns={ - cfg.bulge_semimajor_col: 'bulge_semimajor', - cfg.bulge_axis_ratio_col: 'bulge_axis_ratio', - cfg.disk_semimajor_col: 'disk_semimajor', - cfg.disk_axis_ratio_col: 'disk_axis_ratio', - }, + columns=replace_dict, copy=False ) + if replace_dict: + self.log.debug("Replacing columns:", replace_dict) elif ( cfg.bulgeHLR in fakeCat.columns and cfg.aBulge in fakeCat.columns @@ -798,6 +803,12 @@ def add_to_replace_dict(new_name, depr_name, std_name): fakeCat['disk_semimajor'] = ( fakeCat[cfg.diskHLR]/np.sqrt(fakeCat['disk_axis_ratio']) ) + self.log.debug( + f"Replacing ({cfg.bBulge}, {cfg.aBulge}, {cfg.bulgeHLR}, " + f"{cfg.bDisk}, {cfg.aDisk}, {cfg.diskHLR}) with " + "(bulge_axis_ratio, bulge_semimajor, disk_axis_ratio, " + "disk_semimajor)" + ) else: raise ValueError( "Could not determine columns for half-light radius and " @@ -816,12 +827,19 @@ def add_to_replace_dict(new_name, depr_name, std_name): }, copy=False ) + self.log.debug( + f"Replacing {cfg.bulge_flux_fraction_col%band} with " + " 'bulge_flux_fraction." + ) elif cfg.bulge_disk_flux_ratio_col in fakeCat.columns: + bdfr = cfg.bulge_disk_flux_ratio_col fakeCat['bulge_flux_fraction'] = ( - fakeCat['bulge_disk_flux_ratio'] / (1 + fakeCat['bulge_disk_flux_ratio']) + fakeCat[bdfr] / (1 + fakeCat[bdfr]) ) + self.log.debug(f"Replacing {bdfr} with bulge_flux_fraction.") else: fakeCat['bulge_flux_fraction'] = 0.5 + self.log.debug("Asserting bulge_flux_fraction = 0.5") return fakeCat From 9b286f1232d755d1411ab3dd204c23980aeb3c44 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Wed, 15 Jun 2022 12:38:35 -0700 Subject: [PATCH 4/4] rebase me --- python/lsst/pipe/tasks/insertFakes.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/python/lsst/pipe/tasks/insertFakes.py b/python/lsst/pipe/tasks/insertFakes.py index 967a32af3..8a7c3c100 100644 --- a/python/lsst/pipe/tasks/insertFakes.py +++ b/python/lsst/pipe/tasks/insertFakes.py @@ -79,7 +79,7 @@ def _add_fake_sources(exposure, objects, calibFluxRadius=12.0, logger=None): posd = galsim.PositionD(pt.x, pt.y) posi = galsim.PositionI(pt.x//1, pt.y//1) if logger: - logger.debug(f"Adding fake source {gsObj} at {pt}") + logger.debug("Adding fake source %s at %s", gsObj, pt) mat = wcs.linearizePixelToSky(spt, geom.arcseconds).getMatrix() gsWCS = galsim.JacobianWCS(mat[0, 0], mat[0, 1], mat[1, 0], mat[1, 1]) @@ -763,7 +763,7 @@ def add_to_replace_dict(new_name, depr_name, std_name): 'select' ) if replace_dict: - self.log.debug("Replacing columns:", replace_dict) + self.log.debug("Replacing columns: %s", replace_dict) fakeCat = fakeCat.rename(columns=replace_dict, copy=False) # Handling the half-light radius and axis-ratio are trickier, since we @@ -785,7 +785,7 @@ def add_to_replace_dict(new_name, depr_name, std_name): copy=False ) if replace_dict: - self.log.debug("Replacing columns:", replace_dict) + self.log.debug("Replacing columns: %s", replace_dict) elif ( cfg.bulgeHLR in fakeCat.columns and cfg.aBulge in fakeCat.columns @@ -804,10 +804,11 @@ def add_to_replace_dict(new_name, depr_name, std_name): fakeCat[cfg.diskHLR]/np.sqrt(fakeCat['disk_axis_ratio']) ) self.log.debug( - f"Replacing ({cfg.bBulge}, {cfg.aBulge}, {cfg.bulgeHLR}, " - f"{cfg.bDisk}, {cfg.aDisk}, {cfg.diskHLR}) with " + "Replacing (%s, %s, %s, %s, %s, %s) with " "(bulge_axis_ratio, bulge_semimajor, disk_axis_ratio, " - "disk_semimajor)" + "disk_semimajor)", + cfg.bBulge, cfg.aBulge, cfg.bulgeHLR, + cfg.bDisk, cfg.aDisk, cfg.diskHLR ) else: raise ValueError( @@ -828,15 +829,15 @@ def add_to_replace_dict(new_name, depr_name, std_name): copy=False ) self.log.debug( - f"Replacing {cfg.bulge_flux_fraction_col%band} with " - " 'bulge_flux_fraction." + "Replacing %s with bulge_flux_fraction.", + cfg.bulge_flux_fraction_col%band ) elif cfg.bulge_disk_flux_ratio_col in fakeCat.columns: bdfr = cfg.bulge_disk_flux_ratio_col fakeCat['bulge_flux_fraction'] = ( fakeCat[bdfr] / (1 + fakeCat[bdfr]) ) - self.log.debug(f"Replacing {bdfr} with bulge_flux_fraction.") + self.log.debug("Replacing %s with bulge_flux_fraction.", bdfr) else: fakeCat['bulge_flux_fraction'] = 0.5 self.log.debug("Asserting bulge_flux_fraction = 0.5")