Source code for popsynth.populations.spatial_populations

from popsynth.distributions.cosmological_distribution import (  # MergerDistribution,
    SFRDistribution, ZPowerCosmoDistribution,
)
from popsynth.distributions.spherical_distribution import (
    ConstantSphericalDistribution,
    ZPowerSphericalDistribution,
)
from popsynth.distribution import LuminosityDistribution
from popsynth.distributions.spiral_galaxy_distribution import SpiralGalaxyDistribution
from popsynth.population_synth import PopulationSynth
"""
Create a range of spatial populations that can
be expanded with luminosity distributions.
"""


[docs]class SphericalPopulation(PopulationSynth):
[docs] def __init__( self, Lambda: float, r_max: float = 5.0, seed: int = 1234, luminosity_distribution: LuminosityDistribution = None, ): """ A generic spherical population based on :class:`ConstantSphericalDistribution`. :param Lambda: Density per unit volume :type Lambda: float :param r_max: Maximum distance :type r_max: float :param seed: Random seed :type seed: int :param luminosity_distribution: Luminosity distribution :type luminosity_distribution: :class:`LuminosityDistribution`, optional """ spatial_distribution = ConstantSphericalDistribution(seed=seed) spatial_distribution.Lambda = Lambda spatial_distribution.r_max = r_max super(SphericalPopulation, self).__init__( spatial_distribution=spatial_distribution, luminosity_distribution=luminosity_distribution, seed=seed, )
[docs]class ZPowerSphericalPopulation(PopulationSynth):
[docs] def __init__( self, Lambda: float, delta: float, r_max: float = 5.0, seed: int = 1234, luminosity_distribution: LuminosityDistribution = None, ): """ A spherical population with a density that scales as (r+1)^delta. Based on :class:`ZpowerSphericalDistribution`. :param Lambda: Local density per unit volume :type Lambda: float :param delta: Index of spatial distribution :type delta: float :param r_max: Maximum distance :type r_max: float :param seed: Random seed :type seed: int :param luminosity_distribution: Luminosity distribution :type luminosity_distribution: :class:`LuminosityDistribution`, optional """ spatial_distribution = ZPowerSphericalDistribution(seed=seed) spatial_distribution.Lambda = Lambda spatial_distribution.r_max = r_max spatial_distribution.delta = delta super(ZPowerSphericalPopulation, self).__init__( spatial_distribution=spatial_distribution, luminosity_distribution=luminosity_distribution, seed=seed, )
[docs]class ZPowerCosmoPopulation(PopulationSynth):
[docs] def __init__( self, Lambda: float, delta: float, r_max: float = 5.0, seed: int = 1234, luminosity_distribution: LuminosityDistribution = None, is_rate: bool = True, ): """ A cosmological population with a density that scales as (z+1)^delta. Based on :class:`ZpowerCosmoDistribution`. :param Lambda: Local density in units of Gpc^-3 :type Lambda: float :param delta: Index of spatial distribution :type delta: float :param r_max: Maximum redshift :type r_max: float :param seed: Random seed :type seed: int :param luminosity_distribution: Luminosity distribution :type luminosity_distribution: :class:`LuminosityDistribution`, optional :param is_rate: `True` if modelling a population of transient events, `False` if modelling a population of steady-state objects. Affects the ``time_adjustment`` method used in cosmo calculations. Default is `True`. :type is_rate: bool """ spatial_distribution = ZPowerCosmoDistribution( seed=seed, is_rate=is_rate, ) spatial_distribution.Lambda = Lambda spatial_distribution.r_max = r_max spatial_distribution.delta = delta super(ZPowerCosmoPopulation, self).__init__( spatial_distribution=spatial_distribution, luminosity_distribution=luminosity_distribution, seed=seed, )
[docs]class SFRPopulation(PopulationSynth):
[docs] def __init__( self, r0: float, a: float, rise: float, decay: float, peak: float, r_max: float = 5, seed: int = 1234, luminosity_distribution: LuminosityDistribution = None, is_rate: bool = True, ): """ A cosmological population with a density that scales similarly to the star formation rate. Based on :class:`ZpowerCosmoDistribution`. :param r0: Local density in units of Gpc^-3 :type r0: float :param a: Offset at z=0 :type a: float :param rise: Rise at low z :type rise: float :param decay: Decay at high z :type decay: float :param peak: Peak of z distribution :type peak: float :param r_max: Maximum redshift :type r_max: float :param seed: Random seed :type seed: int :param luminosity_distribution: Luminosity distribution :type luminosity_distribution: :class:`LuminosityDistribution`, optional :param is_rate: `True` if modelling a population of transient events, `False` if modelling a population of steady-state objects. Affects the ``time_adjustment`` method used in cosmo calculations. Default is `True`. :type is_rate: bool """ spatial_distribution = SFRDistribution(seed=seed, is_rate=is_rate) spatial_distribution.r0 = r0 spatial_distribution.a = a spatial_distribution.rise = rise spatial_distribution.decay = decay spatial_distribution.peak = peak spatial_distribution.r_max = r_max super(SFRPopulation, self).__init__( spatial_distribution=spatial_distribution, luminosity_distribution=luminosity_distribution, seed=seed, )
[docs]class MWRadialPopulation(PopulationSynth):
[docs] def __init__( self, rho: float, a: float = 1.64, b: float = 4.01, R1: float = 0.55, R0: float = 8.5, r_max: float = 20, seed: int = 1234, luminosity_distribution: LuminosityDistribution = None, ): """ A Milky-way like population based on :class:`SpiralGalaxyDistribution`. :param rho: Local density :type rho: float :param a: Shape parameter :type a: float :param b: Shape parameter :type b: float :param R1: Scale parameter :type R1: float :param R0: Scale parameter :type R0: float :param r_max: Maximum distance :type r_max: float :param seed: Random seed :type seed: int :param luminosity_distribution: Luminosity distribution :type luminosity_distribution: :class:`LuminosityDistribution`, optional :param is_rate: `True` if modelling a population of transient events, `False` if modelling a population of steady-state objects. Affects the ``time_adjustment`` method used in cosmo calculations. Default is `True`. :type is_rate: bool """ spatial_distribution = SpiralGalaxyDistribution(seed=seed) spatial_distribution.rho = rho spatial_distribution.a = a spatial_distribution.b = b spatial_distribution.R1 = R1 spatial_distribution.R0 = R0 spatial_distribution.r_max = r_max super(MWRadialPopulation, self).__init__( spatial_distribution, luminosity_distribution=luminosity_distribution, seed=seed, )