Skip to content

Commit c504159

Browse files
committed
Updated to published S17 library and recipes
1 parent f338baf commit c504159

File tree

1 file changed

+43
-33
lines changed

1 file changed

+43
-33
lines changed

src/egg-gencat.cpp

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ int phypp_main(int argc, char* argv[]) {
7474
std::string mass_func_file = egg_share_dir+"mass_func_candels.fits";
7575

7676
// SED libraries
77-
std::string ir_lib_file = egg_share_dir+"ir_lib_cs15.fits";
77+
std::string ir_lib_file = egg_share_dir+"ir_lib_cs17.fits";
7878
std::string opt_lib_file = egg_share_dir+"opt_lib_fast.fits";
7979

8080
// Filter library
@@ -295,18 +295,19 @@ int phypp_main(int argc, char* argv[]) {
295295

296296
struct {
297297
vec2d lam, dust, pah;
298-
vec1d tdust, lir_dust, lir_pah;
299-
} ir_lib_cs15;
298+
vec1d tdust, lir_dust, lir_pah, l8_dust, l8_pah;
299+
} ir_lib_cs17;
300300

301301
uint_t nirsed;
302-
if (file::get_basename(ir_lib_file) == "ir_lib_cs15.fits") {
302+
if (file::get_basename(ir_lib_file) == "ir_lib_cs17.fits") {
303303
// My library, calibrated in unit Mdust
304304
fits::read_table(ir_lib_file, ftable(
305-
ir_lib_cs15.lam, ir_lib_cs15.dust, ir_lib_cs15.pah,
306-
ir_lib_cs15.tdust, ir_lib_cs15.lir_dust, ir_lib_cs15.lir_pah
305+
ir_lib_cs17.lam, ir_lib_cs17.dust, ir_lib_cs17.pah,
306+
ir_lib_cs17.tdust, ir_lib_cs17.lir_dust, ir_lib_cs17.lir_pah,
307+
ir_lib_cs17.l8_dust, ir_lib_cs17.l8_pah
307308
));
308309

309-
nirsed = ir_lib_cs15.lam.dims[0];
310+
nirsed = ir_lib_cs17.lam.dims[0];
310311
} else {
311312
// Generic library
312313
auto cols = fits::read_table_columns(ir_lib_file);
@@ -1376,28 +1377,29 @@ if (!no_stellar) {
13761377
vec1f oir8 = out.ir8;
13771378
vec1f otdust = out.tdust;
13781379

1379-
out.tdust = 4.65*(out.z-2.0) + 31.0;
1380+
vec1f tdust_ms = 32.9 + 4.60*(out.z - 2.0) - 0.77;
1381+
out.tdust = tdust_ms;
13801382

13811383
if (magdis_tdust) {
13821384
vec1u idz = where(out.z > 1);
13831385
out.tdust[idz] = 2.0*(clamp(out.z[idz], 0.0, 2.0)-1.0) + 27.0;
13841386
}
13851387

13861388
// Starbursts are warmer
1387-
out.tdust += 6.6*out.rsb;
1389+
out.tdust += 10.1*out.rsb;
13881390
// Massive galaxies are colder (= downfall of SFE)
1389-
out.tdust -= 1.5*min(0.0, out.z-2.0)*clamp(out.m - 10.7, 0.0, 1.0);
1391+
out.tdust -= 1.5*max(0.0, 2.0 - out.z)*clamp(out.m - 10.7, 0.0, 1.0);
13901392

1391-
out.ir8 = (1.95*min(0.0, out.z - 2.0) + 7.73)
1392-
// Starburst have larger IR8
1393-
*e10(0.43*max(0.0, out.rsb))
1394-
// Low-mass galaxies have larger IR8
1395-
*e10(-1.8*clamp(out.m - 10.0, -1, 0.0));
1393+
out.ir8 = (4.08 + 3.29*clamp(out.z-1.0, 0.0, 1.0))*0.81;
1394+
// Starburst have larger IR8
1395+
out.ir8 *= e10(0.66*max(0.0, out.rsb));
1396+
// Low-mass galaxies have larger IR8
1397+
out.ir8 *= e10(-1.0*clamp(out.m - 10.0, -1, 0.0));
13961398

13971399
if (!no_random) {
13981400
// Add some random scatter
1399-
out.tdust += 3.0*randomn(seed, ngal);
1400-
out.ir8 *= e10(0.1*randomn(seed, ngal));
1401+
out.tdust += 0.12*tdust_ms*randomn(seed, ngal);
1402+
out.ir8 *= e10(0.18*randomn(seed, ngal));
14011403
}
14021404

14031405
out.lir = out.sfrir/1.72e-10;
@@ -1409,8 +1411,8 @@ if (!no_stellar) {
14091411
out.irx[id] = out.sfrir[id]/out.sfruv[id];
14101412
double orsb = out.rsb[id];
14111413
out.rsb[id] = log10(out.sfr[id]) - sfrms[id];
1412-
out.tdust[id] += 6.6*(out.rsb[id] - orsb);
1413-
out.ir8[id] *= e10(0.43*(max(0.0, out.rsb[id]) - max(0.0, orsb)));
1414+
out.tdust[id] += 6.42*(out.rsb[id] - orsb);
1415+
out.ir8[id] *= e10(0.40*(max(0.0, out.rsb[id]) - max(0.0, orsb)));
14141416
};
14151417

14161418
// Keep the values provided by the user in the input catalog (if any)
@@ -1456,8 +1458,8 @@ if (!no_stellar) {
14561458
}
14571459

14581460
// Make sure the values are valid
1459-
out.ir8 = clamp(out.ir8, 0.48, 22.8); // range allowed by IR library
1460-
out.fpah = 0.267/(out.ir8 - 0.217) - 0.0118;
1461+
out.ir8 = clamp(out.ir8, 0.48, 27.5); // range allowed by IR library
1462+
out.fpah = clamp(1.0/(1.0 - (331 - 691*out.ir8)/(193 - 6.98*out.ir8)), 0.0, 1.0);
14611463
out.lir[where(!is_finite(out.lir))] = 0.0;
14621464

14631465

@@ -1488,9 +1490,9 @@ if (!no_stellar) {
14881490

14891491
// Temperature offset as function of RSB (not calibrated, but see Magnelli+13)
14901492
fir_sed += clamp(out.rsb/ms_disp, -2.0, 2.0);
1491-
} else if (file::get_basename(ir_lib_file) == "ir_lib_cs15.fits") {
1493+
} else if (file::get_basename(ir_lib_file) == "ir_lib_cs17.fits") {
14921494
// My own library, using calibration from stacks and detections
1493-
fir_sed = interpolate(findgen(nirsed), ir_lib_cs15.tdust, out.tdust);
1495+
fir_sed = interpolate(findgen(nirsed), ir_lib_cs17.tdust, out.tdust);
14941496
} else {
14951497
error("no calibration code available for the IR library '", ir_lib_file, "'");
14961498
return 1;
@@ -1513,25 +1515,33 @@ if (!no_flux) {
15131515
note("computing fluxes", (rffilters.empty() ? "" : " and absolute magnitudes"), "...");
15141516
}
15151517

1516-
if (file::get_basename(ir_lib_file) == "ir_lib_cs15.fits") {
1518+
if (file::get_basename(ir_lib_file) == "ir_lib_cs17.fits") {
15171519
out.mdust.resize(ngal);
15181520
}
15191521

15201522
auto get_ir_sed = [&](uint_t i, vec1f& irlam, vec1f& irsed) {
1521-
if (file::get_basename(ir_lib_file) == "ir_lib_cs15.fits") {
1523+
uint_t s = out.ir_sed[i];
1524+
1525+
if (file::get_basename(ir_lib_file) == "ir_lib_cs17.fits") {
15221526
// My library
1523-
irlam = ir_lib_cs15.lam(out.ir_sed[i],_);
1524-
irsed = ir_lib_cs15.dust(out.ir_sed[i],_)*(1.0 - out.fpah[i])
1525-
+ ir_lib_cs15.pah(out.ir_sed[i],_)*out.fpah[i];
15261527

1527-
// SED is in unit Mdust
1528-
out.mdust[i] = out.lir[i]/(ir_lib_cs15.lir_dust[out.ir_sed[i]]*(1.0 - out.fpah[i])
1529-
+ ir_lib_cs15.lir_pah[out.ir_sed[i]]*out.fpah[i]);
1528+
// Get exact fPAH
1529+
out.fpah[i] = clamp(1.0/(1.0 - (ir_lib_cs17.lir_pah[s] - ir_lib_cs17.l8_pah[s]*out.ir8[i])/
1530+
(ir_lib_cs17.lir_dust[s] - ir_lib_cs17.l8_dust[s]*out.ir8[i])), 0.0, 1.0);
1531+
1532+
// Build combined SED
1533+
irlam = ir_lib_cs17.lam(s,_);
1534+
irsed = ir_lib_cs17.dust(s,_)*(1.0 - out.fpah[i])
1535+
+ ir_lib_cs17.pah(s,_)*out.fpah[i];
1536+
1537+
// SED is in unit Mdust, normalize it to our dust mass
1538+
out.mdust[i] = out.lir[i]/(ir_lib_cs17.lir_dust[s]*(1.0 - out.fpah[i])
1539+
+ ir_lib_cs17.lir_pah[s]*out.fpah[i]);
15301540
irsed *= out.mdust[i];
15311541
} else {
15321542
// Generic library, SEDs in units of LIR
1533-
irlam = ir_lib.lam(out.ir_sed[i],_);
1534-
irsed = out.lir[i]*ir_lib.sed(out.ir_sed[i],_);
1543+
irlam = ir_lib.lam(s,_);
1544+
irsed = out.lir[i]*ir_lib.sed(s,_);
15351545
}
15361546
};
15371547

0 commit comments

Comments
 (0)