class LewisBrickDust(ExtinctionBase): """Mixin for a uniform dust distribution fitted from Lewis et al 15 Fig 17. The maximum extinction is estimated from a Draine et al 2015 dust map. Requires that the brick be known. """ def __init__(self, **kwargs): self.brick = kwargs.pop('brick', 23) super(LewisBrickDust, self).__init__(**kwargs) def build_extinction(self): """Young and old dust at equal here.""" # Get the coordinate of the brick # brick_fits = phat_brick_path(self.brick, 'F814W') # wcs = astropy.io.WCS(brick_fits[0].header) # poly = wcs.calc_footprint() data = PhatCatalog(self.brick) # FIXME pretty brick-specific poly = data.polygon lewis = LewisDustLaw() max_av = lewis.estimate_mean_extinction(poly) av = np.random.uniform(low=mw_Av(), high=max_av, size=1000) self.young_av = ExtinctionDistribution() self.young_av.set_samples(av) self.old_av = ExtinctionDistribution() self.old_av.set_samples(av) self.rel_extinction = phat_rel_extinction()
class LewisPatchDust(ExtinctionBase): """Mixin for a uniform dust distribution fitted from Lewis et al 15 Fig 17. The maximum extinction is estimated from a Draine et al 2015 dust map. Requires that the brick be known. """ def __init__(self, **kwargs): # self.brick = kwargs.pop('brick', 23) super(LewisPatchDust, self).__init__(**kwargs) def build_extinction(self): """Young and old dust at equal here.""" lewis = LewisDustLaw() max_av = lewis.estimate_mean_extinction(self.poly) av = np.random.uniform(low=mw_Av(), high=max_av, size=1000) self.young_av = ExtinctionDistribution() self.young_av.set_samples(av) self.old_av = ExtinctionDistribution() self.old_av.set_samples(av) self.rel_extinction = phat_rel_extinction()
class PhatGaussianDust(ExtinctionBase): """Mixin for Gaussian dust distributions for PHAT filters.""" def __init__(self, **kwargs): self._young_av = kwargs.pop('young_av', 1.0) self._old_av = kwargs.pop('old_av', 0.5) self._av_sigma_ratio = kwargs.pop('av_sigma_ratio', 0.5) super(PhatGaussianDust, self).__init__(**kwargs) def build_extinction(self): # NOTE includes the E(V self.young_av = ExtinctionDistribution() if self._young_av > 0.: av = np.random.normal(loc=self._young_av, scale=self._young_av * self._av_sigma_ratio, size=1000) av[av < 0.] = 0. self.young_av.set_samples(av + mw_Av()) else: self.young_av.set_samples(np.zeros(1000) + mw_Av()) self.old_av = ExtinctionDistribution() if self._old_av > 0.: av = np.random.normal(loc=self._old_av, scale=self._old_av * self._av_sigma_ratio, size=1000) av[av < 0.] = 0. self.old_av.set_samples(av + mw_Av()) else: self.old_av.set_samples(np.zeros(1000) + mw_Av()) self.rel_extinction = phat_rel_extinction()
class PhatStepDust(ExtinctionBase): """Mixin for Uniform dust distributions for PHAT filters.""" def __init__(self, **kwargs): self._young_av = kwargs.pop('young_av', 0.0) + mw_Av() self._old_av = kwargs.pop('old_av', 0.0) + mw_Av() self._young_dav = kwargs.pop('young_dav', 1.0) self._old_dav = kwargs.pop('old_dav', 1.0) super(PhatStepDust, self).__init__(**kwargs) def build_extinction(self): # NOTE includes MW extinction from __init__ self.young_av = ExtinctionDistribution() self.young_av.set_samples( np.random.uniform(low=self._young_av, high=self._young_av + self._young_dav, size=1000)) self.old_av = ExtinctionDistribution() self.old_av.set_samples( np.random.uniform(low=self._old_av, high=self._old_av + self._old_dav, size=1000)) self.rel_extinction = phat_rel_extinction()