diff options
Diffstat (limited to 'fg21sim')
-rw-r--r-- | fg21sim/galactic/freefree.py | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/fg21sim/galactic/freefree.py b/fg21sim/galactic/freefree.py index 28a92d6..0dd131d 100644 --- a/fg21sim/galactic/freefree.py +++ b/fg21sim/galactic/freefree.py @@ -129,16 +129,37 @@ class FreeFree: """Correct the H{\alpha} map for dust absorption using the 100-{\mu}m dust map. - References: [Dickinson2003], Eq.(3) + References: [Dickinson2003]: Eq.(1, 3); Sec.(2.5) """ if hasattr(self, "dust_corrected") and self.dust_corrected: return # + logger.info("Correct H[alpha] map for dust absorption") # Effective dust fraction in the LoS actually absorbing Halpha f_dust = 0.33 + logger.info("Effective dust fraction: {0}".format(f_dust)) + # NOTE: + # Mask the regions where the true Halpha absorption is uncertain. + # When the dust absorption goes rather large, the true Halpha + # absorption can not well determined. + # Therefore, the regions where the calculated Halpha absorption + # greater than 1.0 mag are masked out. + halpha_abs_th = 1.0 # Halpha absorption threshold, unit: [ mag ] + # Corresponding dust absorption threshold, unit: [ MJy / sr ] + dust_abs_th = halpha_abs_th / 0.0462 / f_dust + logger.info("Dust absorption mask threshold: " + + "{0:.1f} MJy/sr ".format(dust_abs_th) + + "<-> H[alpha] absorption threshold: " + + "{0:.1f} mag".format(halpha_abs_th)) + mask = (self.dustmap > dust_abs_th) + self.dustmap[mask] = np.nan + fp_mask = 100 * mask.sum() / self.dustmap.size + logger.warning("Dust map masked fraction: {0:.1f}%".format(fp_mask)) + # halphamap_corr = self.halphamap * 10**(self.dustmap * 0.0185 * f_dust) self.halphamap = halphamap_corr self.dust_corrected = True + logger.info("Done dust absorption correction") def _calc_ratio_a(self, Te, nu_GHz): """Calculate the ratio factor a(T, nu), which will be used to @@ -159,11 +180,13 @@ class FreeFree: NOTE: [Dickinson2003], Eq.(11) may wrongly have the "10^3" term. """ + # Correct for dust absorption first + self._correct_dust_absorption() # Assumed electron temperature [ K ] Te = 7000.0 T4 = Te / 1e4 nu = frequency * self.freq_unit.to(au.GHz) # frequency [ GHz ] - ratio_a = self._calc_ratio_a(T4, nu) + ratio_a = self._calc_ratio_a(Te, nu) # NOTE: ignored the "10^3" term in the referred equation ratio_mK_R = (8.396 * ratio_a * nu**(-2.1) * T4**0.667 * 10**(0.029/T4) * (1+0.08)) @@ -218,8 +241,6 @@ class FreeFree: def simulate(self, frequencies): """Simulate the free-free map at the specified frequencies.""" - self._correct_dust_absorption() - # hpmaps = [] for f in np.array(frequencies, ndmin=1): logger.info("Simulating free-free map at {0} ({1}) ...".format( |