Distributions
The basic required object to create a population synth are a spatial and (optional if a derived luminosity sampler is create) luminosity distribution.
[1]:
%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
[2]:
import popsynth
popsynth.update_logging_level("INFO")
popsynth.list_available_distributions()
Distribution
BPLDistribution
SFRDistribution
ZPowerCosmoDistribution
DeltaDistribution
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.
[3]:
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
[4]:
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
[5]:
pop_gen = popsynth.PopulationSynth(luminosity_distribution=luminosity_distribution,
spatial_distribution = spatial_distribution,
seed=1234
)
[6]:
pop_gen.display()
Luminosity Function
parameter | value | |
---|---|---|
0 | alpha | 1.5 |
1 | Lmin | 1.0 |
Spatial Function
parameter | value | |
---|---|---|
0 | Lambda | 30 |
1 | delta | -2 |
2 | r_max | 10 |
[7]:
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
[8]:
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.
[9]:
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.
[10]:
luminosity_distribution = popsynth.SchechterDistribution()
luminosity_distribution.alpha = 1.5
luminosity_distribution.Lmin = 1
[11]:
pop_gen = popsynth.PopulationSynth(luminosity_distribution=luminosity_distribution,
spatial_distribution = spatial_distribution,
seed=1234
)
[12]:
pop_gen.display()
Luminosity Function
parameter | value | |
---|---|---|
0 | alpha | 1.5 |
1 | Lmin | 1.0 |
Spatial Function
parameter | value | |
---|---|---|
0 | Lambda | 100 |
1 | delta | -2 |
2 | r_max | 10 |
[13]:
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
[14]:
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:
[15]:
popsynth.cosmology.Om
[15]:
0.3070000112056732
[16]:
popsynth.cosmology.h0
[16]:
67.69999694824219
[17]:
popsynth.cosmology.Ode
[17]:
0.6929130577203088
Note: The values of Om and h0 can be changed and will change the values of all cosmological calculations
[18]:
popsynth.cosmology.Om=0.7
[19]:
popsynth.cosmology.Ode
[19]:
0.299913080846911
Let’s re run the last simulation to see how this changes things
[20]:
pop_gen.clean()
WARNING | removing all registered Auxiliary Samplers
WARNING | removing flux selector
WARNING | removing distance selector
WARNING | removing spatial selector
[21]:
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
[22]:
fig=population.display_obs_fluxes_sphere(background_color="black",size=0.7);
[ ]: