# Distributions

The basic required object to create a population synth are a spatial and (optional if a derived luminosity sampler is create) luminosity distribution.

:

%matplotlib inline

import matplotlib.pyplot as plt
from jupyterthemes import jtplot

jtplot.style(context="notebook", fscale=1, grid=False)
purple = "#B833FF"
yellow = "#F6EF5B"

import networkx as nx
import numpy as np
import warnings

warnings.simplefilter("ignore")


popsynth comes with several built in distributions included

:

import popsynth
popsynth.update_logging_level("INFO")

popsynth.list_available_distributions()

Distribution
BPLDistribution
SFRDistribution
ZPowerCosmoDistribution
FlatlandDistribution
Log10NormalDistribution
LogNormalDistribution
ParetoDistribution
SchechterDistribution
ConstantSphericalDistribution
ZPowerSphericalDistribution
SpiralGalaxyDistribution
LogUniLuminiosityDistribution
UniformCosmoDistribution


## Creating a simple population synth

First we create a spatial distribution, in the case, a Spherical distribution with a power law density.

:

spatial_distribution = popsynth.ZPowerSphericalDistribution()

spatial_distribution.Lambda = 30
spatial_distribution.delta = -2
spatial_distribution.r_max = 10


And now we create a powerlaw luminosity distribution

:

luminosity_distribution = popsynth.ParetoDistribution()

luminosity_distribution.alpha = 1.5
luminosity_distribution.Lmin = 1


Combining these together with a random seed, we have a population synthesis object

:

pop_gen = popsynth.PopulationSynth(luminosity_distribution=luminosity_distribution,
spatial_distribution = spatial_distribution,
seed=1234

)

:

pop_gen.display()


### Luminosity Function

$\displaystyle \frac{\alpha L_{\rm min}^{\alpha}}{L^{\alpha+1}}$
parameter value
0 alpha 1.5
1 Lmin 1.0

### Spatial Function

$\displaystyle \Lambda (1+r)^{\delta}$
parameter value
0 Lambda 30
1 delta -2
2 r_max 10
:

population = pop_gen.draw_survey()

 INFO     |  The volume integral is 2304.6599413369304

 INFO     |  Expecting 2257 total objects
INFO     |  applying selection to fluxes
WARNING  |  NO HIDDEN OBJECTS
INFO     |  Detected 2257 distances
INFO     |  Detected 2257 objects out to a distance of 10.00

:

fig=population.display_obs_fluxes_sphere(background_color="black",size=0.7);


## Cosmological Distributions

If we want to create cosmological spatial distributions, we can use some of those that are built in.

:

spatial_distribution = popsynth.ZPowerCosmoDistribution()
spatial_distribution.Lambda = 100
spatial_distribution.delta = -2
spatial_distribution.r_max = 10


These distributions know about the cosmological Universe and have their fluxes computed using the luminosity distance rather than linear distace.

:

luminosity_distribution = popsynth.SchechterDistribution()

luminosity_distribution.alpha = 1.5
luminosity_distribution.Lmin = 1

:

pop_gen = popsynth.PopulationSynth(luminosity_distribution=luminosity_distribution,
spatial_distribution = spatial_distribution,
seed=1234

)

:

pop_gen.display()


### Luminosity Function

$\displaystyle \frac{1}{L_{\rm min}^{1+\alpha}\Gamma\left(1+\alpha\right)} L^{\alpha} \exp\left[ - \frac{L}{L_{\rm min}}\right]$
parameter value
0 alpha 1.5
1 Lmin 1.0

### Spatial Function

$\displaystyle \Lambda (z+1)^{\delta}$
parameter value
0 Lambda 100
1 delta -2
2 r_max 10
:

population = pop_gen.draw_survey()

 INFO     |  The volume integral is 742.0199985657756

 INFO     |  Expecting 715 total objects
INFO     |  applying selection to fluxes
WARNING  |  NO HIDDEN OBJECTS
INFO     |  Detected 715 distances
INFO     |  Detected 715 objects out to a distance of 9.67

:

fig=population.display_obs_fluxes_sphere(cmap="viridis", background_color="black",size=0.7);


The cosmological parameters used when simulating are stored in the cosmology object:

:

popsynth.cosmology.Om

:

0.3070000112056732

:

popsynth.cosmology.h0

:

67.69999694824219

:

popsynth.cosmology.Ode

:

0.6929130577203088


Note: The values of Om and h0 can be changed and will change the values of all cosmological calculations

:

popsynth.cosmology.Om=0.7

:

popsynth.cosmology.Ode

:

0.299913080846911


Let’s re run the last simulation to see how this changes things

:

pop_gen.clean()

 WARNING  |  removing all registered Auxiliary Samplers
WARNING  |  removing flux selector
WARNING  |  removing distance selector
WARNING  |  removing spatial selector

:

population = pop_gen.draw_survey()

 INFO     |  The volume integral is 378.8422500823972

 INFO     |  Expecting 359 total objects
INFO     |  applying selection to fluxes
WARNING  |  NO HIDDEN OBJECTS
INFO     |  Detected 359 distances
INFO     |  Detected 359 objects out to a distance of 7.12

:

fig=population.display_obs_fluxes_sphere(background_color="black",size=0.7);

[ ]: