Loading src/lsst_inaf_agile/catalog_agn.py +15 −8 Original line number Diff line number Diff line Loading @@ -24,6 +24,12 @@ from lsst_inaf_agile.mbh import get_log_mbh_continuity_new2 from lsst_inaf_agile.merloni2014 import Merloni2014 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler = logging.StreamHandler() handler.setLevel(logging.DEBUG) handler.setFormatter(formatter) logger.addHandler(handler) # Eddington ratio in cgs LOG_LAMBDA_EDD = np.log10(1.26e38) Loading Loading @@ -253,8 +259,9 @@ class CatalogAGN: return log_lambda_SAR logger.info("Building the arguments...") base_seed = self._get_seed("log_lambda_SAR") arguments = [ (i, self.catalog.size, m[i], z[i], "quiescent" if p[i] == 1 else "star-forming") (i, self.catalog.size, m[i], z[i], "quiescent" if p[i] == 1 else "star-forming", base_seed + i) for i in np.arange(self.catalog.size) ] Loading Loading @@ -492,13 +499,13 @@ class CatalogAGN: if ratio > ratio_max: logger.info( "AGN 1000-4000 angstrom >90% of the total... Incrementing E(B-V) by 0.10...", f"{self['ID'][i]:6d}", f"{np.log10(flux_agn):.2f}", f"{np.log10(flux_gal):.2f}", f"{ratio:.2f}", f"{self['E_BV'][i]:.2f}", f"{(self['E_BV'][i] + 0.10):.2f}", "AGN 1000-4000 angstrom >90% of the total... Incrementing E(B-V) by 0.10..." + f" {self['ID'][i]:6d}" + f" {np.log10(flux_agn):.2f}" + f" {np.log10(flux_gal):.2f}" + f" {ratio:.2f}" + f" {self['E_BV'][i]:.2f}" + f" {(self['E_BV'][i] + 0.10):.2f}" ) self["E_BV"][i] += 0.10 continue Loading src/lsst_inaf_agile/util.py +23 −12 Original line number Diff line number Diff line Loading @@ -302,19 +302,30 @@ def get_fraction_catastrophic_error(value_estimated, value_true, limit=0.15): return is_catastrophic.sum() / n_total def get_log_lambda_SAR(i, N, m, z, t): """Parallelize Zou+2024 get_log_lambda_SAR.""" def get_log_lambda_SAR(i, N, m, z, t, seed): """ Parallelize Zou+2024 get_log_lambda_SAR. Parameters ---------- i: int UID of the source. N: int Total size of the catalog. m: float Host galaxy stellar mass. z: float Host galaxy redshift. t: str Host galaxy type. seed: int Random number seed. """ # NOTE: turns out that calling this function in parallel is probably not # thread-safe. Enforce a fixed random number seed here np.random.seed(seed) ret = zou2024.get_log_lambda_SAR(m, z, t, add_ctk=True, log_mstar_lim=(9.50, 12.00), z_lim=(0.00, 4.00)) # print( # "%8d" % i, # "%8d" % N, # "%8.2f" % (i / N * 100), # "%8.2f" % m, # "%8.2f" % z, # "%20s" % t, # "%8.2f" % ret, # end='\r' # ) return ret Loading tests/lsst_inaf_agile/test_catalog_agn.py +8 −20 Original line number Diff line number Diff line Loading @@ -181,31 +181,19 @@ class TestCatalogAGN(TestCase): self.assertGreater(ebv2, ebv1) def test_get_flux_agn(self): from lsst_inaf_agile.catalog_agn import FLUXES is_agn = self.catalog_agn["is_agn"] idxs = self.catalog_agn["ID"][is_agn] # range check on flux gflux = self.catalog_agn.get_flux_agn(band="lsst-g", rest_frame=False) rflux = self.catalog_agn.get_flux_agn(band="lsst-r", rest_frame=False) gflux = self.catalog_agn["lsst-g_point"] rflux = self.catalog_agn["lsst-r_point"] color = -2.5 * np.ma.log10(np.ma.true_divide(gflux, rflux)) select = np.isfinite(color) self.assertTrue(np.all((color[select] >= -10) & (color[select] < 10))) self.assertTrue(np.all((color[select] >= -20) & (color[select] < 20))) # range check on absmag gmag = self.catalog_agn.get_flux_agn(band="lsst-g", rest_frame=True) rmag = self.catalog_agn.get_flux_agn(band="lsst-r", rest_frame=True) gmag = self.catalog_agn["magabs_lsst-g_point"] rmag = self.catalog_agn["magabs_lsst-r_point"] color = np.ma.subtract(gmag, rmag) select = np.isfinite(color) self.assertTrue(np.all((color[select] >= -10) & (color[select] < 10))) # remove a key and re-estimate the flux key = idxs[0], "lsst-g", False FLUXES.pop(key) self.assertNotIn(key, FLUXES) _ = self.catalog_agn.get_flux_agn(band="lsst-g", rest_frame=False) self.assertIn(key, FLUXES) self.assertTrue(np.all((color[select] >= -20) & (color[select] < 20))) def test_get_log_L_AGN_5GHz(self): l1 = self.catalog_agn.get_log_L_AGN_5_GHz(scatter=False) Loading @@ -221,8 +209,8 @@ class TestCatalogAGN(TestCase): def test_get_log_lambda_Edd(self): log_lambda_Edd = self.catalog_agn.get_log_lambda_Edd() is_finite = np.isfinite(log_lambda_Edd) self.assertTrue(np.all(log_lambda_Edd[is_finite] > -6)) self.assertTrue(np.all(log_lambda_Edd[is_finite] <= 1)) self.assertTrue(np.all(log_lambda_Edd[is_finite] > -10.0)) self.assertTrue(np.all(log_lambda_Edd[is_finite] <= 10.0)) def test_get_magitude_agn_dereddened(self): for band in "mock-1450", "mock-4400": Loading Loading
src/lsst_inaf_agile/catalog_agn.py +15 −8 Original line number Diff line number Diff line Loading @@ -24,6 +24,12 @@ from lsst_inaf_agile.mbh import get_log_mbh_continuity_new2 from lsst_inaf_agile.merloni2014 import Merloni2014 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler = logging.StreamHandler() handler.setLevel(logging.DEBUG) handler.setFormatter(formatter) logger.addHandler(handler) # Eddington ratio in cgs LOG_LAMBDA_EDD = np.log10(1.26e38) Loading Loading @@ -253,8 +259,9 @@ class CatalogAGN: return log_lambda_SAR logger.info("Building the arguments...") base_seed = self._get_seed("log_lambda_SAR") arguments = [ (i, self.catalog.size, m[i], z[i], "quiescent" if p[i] == 1 else "star-forming") (i, self.catalog.size, m[i], z[i], "quiescent" if p[i] == 1 else "star-forming", base_seed + i) for i in np.arange(self.catalog.size) ] Loading Loading @@ -492,13 +499,13 @@ class CatalogAGN: if ratio > ratio_max: logger.info( "AGN 1000-4000 angstrom >90% of the total... Incrementing E(B-V) by 0.10...", f"{self['ID'][i]:6d}", f"{np.log10(flux_agn):.2f}", f"{np.log10(flux_gal):.2f}", f"{ratio:.2f}", f"{self['E_BV'][i]:.2f}", f"{(self['E_BV'][i] + 0.10):.2f}", "AGN 1000-4000 angstrom >90% of the total... Incrementing E(B-V) by 0.10..." + f" {self['ID'][i]:6d}" + f" {np.log10(flux_agn):.2f}" + f" {np.log10(flux_gal):.2f}" + f" {ratio:.2f}" + f" {self['E_BV'][i]:.2f}" + f" {(self['E_BV'][i] + 0.10):.2f}" ) self["E_BV"][i] += 0.10 continue Loading
src/lsst_inaf_agile/util.py +23 −12 Original line number Diff line number Diff line Loading @@ -302,19 +302,30 @@ def get_fraction_catastrophic_error(value_estimated, value_true, limit=0.15): return is_catastrophic.sum() / n_total def get_log_lambda_SAR(i, N, m, z, t): """Parallelize Zou+2024 get_log_lambda_SAR.""" def get_log_lambda_SAR(i, N, m, z, t, seed): """ Parallelize Zou+2024 get_log_lambda_SAR. Parameters ---------- i: int UID of the source. N: int Total size of the catalog. m: float Host galaxy stellar mass. z: float Host galaxy redshift. t: str Host galaxy type. seed: int Random number seed. """ # NOTE: turns out that calling this function in parallel is probably not # thread-safe. Enforce a fixed random number seed here np.random.seed(seed) ret = zou2024.get_log_lambda_SAR(m, z, t, add_ctk=True, log_mstar_lim=(9.50, 12.00), z_lim=(0.00, 4.00)) # print( # "%8d" % i, # "%8d" % N, # "%8.2f" % (i / N * 100), # "%8.2f" % m, # "%8.2f" % z, # "%20s" % t, # "%8.2f" % ret, # end='\r' # ) return ret Loading
tests/lsst_inaf_agile/test_catalog_agn.py +8 −20 Original line number Diff line number Diff line Loading @@ -181,31 +181,19 @@ class TestCatalogAGN(TestCase): self.assertGreater(ebv2, ebv1) def test_get_flux_agn(self): from lsst_inaf_agile.catalog_agn import FLUXES is_agn = self.catalog_agn["is_agn"] idxs = self.catalog_agn["ID"][is_agn] # range check on flux gflux = self.catalog_agn.get_flux_agn(band="lsst-g", rest_frame=False) rflux = self.catalog_agn.get_flux_agn(band="lsst-r", rest_frame=False) gflux = self.catalog_agn["lsst-g_point"] rflux = self.catalog_agn["lsst-r_point"] color = -2.5 * np.ma.log10(np.ma.true_divide(gflux, rflux)) select = np.isfinite(color) self.assertTrue(np.all((color[select] >= -10) & (color[select] < 10))) self.assertTrue(np.all((color[select] >= -20) & (color[select] < 20))) # range check on absmag gmag = self.catalog_agn.get_flux_agn(band="lsst-g", rest_frame=True) rmag = self.catalog_agn.get_flux_agn(band="lsst-r", rest_frame=True) gmag = self.catalog_agn["magabs_lsst-g_point"] rmag = self.catalog_agn["magabs_lsst-r_point"] color = np.ma.subtract(gmag, rmag) select = np.isfinite(color) self.assertTrue(np.all((color[select] >= -10) & (color[select] < 10))) # remove a key and re-estimate the flux key = idxs[0], "lsst-g", False FLUXES.pop(key) self.assertNotIn(key, FLUXES) _ = self.catalog_agn.get_flux_agn(band="lsst-g", rest_frame=False) self.assertIn(key, FLUXES) self.assertTrue(np.all((color[select] >= -20) & (color[select] < 20))) def test_get_log_L_AGN_5GHz(self): l1 = self.catalog_agn.get_log_L_AGN_5_GHz(scatter=False) Loading @@ -221,8 +209,8 @@ class TestCatalogAGN(TestCase): def test_get_log_lambda_Edd(self): log_lambda_Edd = self.catalog_agn.get_log_lambda_Edd() is_finite = np.isfinite(log_lambda_Edd) self.assertTrue(np.all(log_lambda_Edd[is_finite] > -6)) self.assertTrue(np.all(log_lambda_Edd[is_finite] <= 1)) self.assertTrue(np.all(log_lambda_Edd[is_finite] > -10.0)) self.assertTrue(np.all(log_lambda_Edd[is_finite] <= 10.0)) def test_get_magitude_agn_dereddened(self): for band in "mock-1450", "mock-4400": Loading