def iter_run(i): r = CosmicPopulation(N_SRCS, n_days=N_DAYS, repeaters=True) r.set_dist(model='vol_co', z_max=1.0) r.set_dm_host(model='gauss', mean=100, std=200) r.set_dm_igm(model='ioka', slope=1000, std=None) r.set_dm(mw=True, igm=True, host=True) r.set_emission_range(low=100e6, high=10e9) r.set_lum(model='powerlaw', per_source='different', low=1e40, high=1e45, power=0) r.set_si(model='gauss', mean=-1.4, std=1) r.set_w(model='lognormal', per_source='different', mean=0.1, std=1) rate = lognormal(RATE, 2, N_SRCS) if LARGE_POP: rate = lognormal(RATE, 2, int(MAX_SIZE)) # Not completely kosher r.set_time(model='poisson', rate=rate) # Set up survey s = Survey('chime-frb', n_days=N_DAYS) s.set_beam(model='chime-frb') s.gen_pointings() # To ensure each sub pop has the same pointings # Only generate FRBs in CHIME's survey region r.set_direction(model='uniform', min_ra=s.ra_min, max_ra=s.ra_max, min_dec=s.dec_min, max_dec=s.dec_max) if LARGE_POP: surv_pop = LargePopulation(r, s, max_size=MAX_SIZE).pops[0] else: r.generate() surv_pop = SurveyPopulation(r, s) surv_pop.name = f'cosmic_chime_longer_{i}' surv_pop.save() print(surv_pop.source_rate) print(surv_pop.burst_rate) pprint(f'i: {i}') pprint(f'# one-offs: {surv_pop.n_one_offs()}') pprint(f'# repeaters: {surv_pop.n_repeaters()}')
"""Plot how beampatterns can change the IGM DM distribution.""" import numpy as np import matplotlib.pyplot as plt from frbpoppy import CosmicPopulation, Survey, SurveyPopulation from tests.convenience import plot_aa_style, rel_path BEAMPATTERNS = ['perfect', 'airy', 'gaussian'] # Generate population with standard candles pop = CosmicPopulation(n_srcs=5e4, n_days=1, name='standard') pop.set_dist(model='sfr', z_max=2.5, H_0=67.74, W_m=0.3089, W_v=0.6911) pop.set_dm_igm(model='ioka', slope=1200, std=0) pop.set_dm(mw=False, host=False, igm=True) pop.set_emission_range(low=10e6, high=10e9) pop.set_lum(model='constant', value=1e36) pop.set_w(model='constant', value=1) pop.set_si(model='constant', value=0) pop.generate() pop_obs = {} survey = Survey('perfect-small') for pattern in BEAMPATTERNS: survey.set_beam(model=pattern, n_sidelobes=0, size=90) # Observe populations
N_SRCS = [3e4, 3.5e4, 4e4] N_DAYS = 100 RATE = [8, 9, 10] # per day # Chime started in Aug 2018. Assuming 2/day for one-offs. # Total of 9 repeaters published on 9 Aug 2019. = ~year N_CHIME = {'rep': 9, 'one-offs': 365 * 2, 'time': 365} for n in N_SRCS: for ra in RATE: print(f'# sources: {n}') print(f'rate: {ra}') r = CosmicPopulation(n, n_days=N_DAYS, repeaters=True) r.set_dist(model='vol_co', z_max=1.0) r.set_dm_host(model='gauss', mean=100, std=200) r.set_dm_igm(model='ioka', slope=1000, std=None) r.set_dm(mw=True, igm=True, host=True) r.set_emission_range(low=100e6, high=10e9) r.set_lum(model='powerlaw', per_source='different', low=1e40, high=1e45, power=0) r.set_si(model='gauss', mean=-1.4, std=1) r.set_w(model='lognormal', per_source='different', mean=0.1, std=1) rate = lognormal(ra, 1, int(n)) r.set_time(model='poisson', rate=rate) # Set up survey s = Survey('chime-frb', n_days=N_DAYS) s.set_beam(model='chime-frb')
"""Setting up various cosmic populations.""" from frbpoppy import CosmicPopulation # You can set up a population with arguments ... pop = CosmicPopulation(1e4, n_days=1, name='my_own_population', repeaters=True, generate=False) # ... but also adapt specific components: # The numer density / distance parameters pop.set_dist(model='vol_co', z_max=0.01, alpha=-1.5, H_0=67.74, W_m=0.3089, W_v=0.6911) # Which dispersion measure components to include pop.set_dm(mw=True, igm=True, host=True) # Dispersion measure properties pop.set_dm_host(model='gauss', mean=100, std=200) pop.set_dm_igm(model='ioka', slope=1000, std=None) pop.set_dm_mw(model='ne2001') # Emission range of FRB sources pop.set_emission_range(low=100e6, high=10e9) # Luminsity of FRBs # See the per_source argument? That allows you to give different properties # to different bursts from the same source. You can do that for the luminosity, # or any of the following parameters pop.set_lum(model='powerlaw', low=1e38, high=1e38, power=0, per_source='different') # Pulse width