def test_sample_powerlaw(): random_state = np.random.RandomState(seed=0) x = sample_powerlaw(x_min=0.1, x_max=10, gamma=2, size=2, random_state=random_state) assert_allclose(x, [0.14886601, 0.1873559])
def add_spectra(table, random_state, mean_index_alpha=2.1, sigma_index_alpha=0.2, max_index_beta=0.4): n_sources = len(table) alpha = random_state.normal(mean_index_alpha, sigma_index_alpha, n_sources) beta = random_state.uniform(0.1, max_index_beta, n_sources) # Define the luminosity luminosity = sample_powerlaw( x_min=1.2e33, x_max=5e36, gamma=1.0, size=n_sources, random_state=random_state, ) luminosity = luminosity * u.erg / u.second distance = table['distance'].to('cm') # integral sed between 1 and 10 TeV energy_flux = luminosity / (4 * np.pi * distance * distance) energy_flux = energy_flux.to('TeV cm-2 s-1') vals = [] vals_cu = [] int_vals = [] int_vals_cu = [] name = [] for idx in range(len(table)): val, val_cu, int_val, int_val_cu = flux_amplitude_from_energy_flux( alpha[idx], beta[idx], energy_flux[idx], ) vals.append(val) vals_cu.append(val_cu) int_vals.append(int_val) int_vals_cu.append(int_val_cu) source_name = 'pwn_{}'.format(idx) name.append(source_name) norm = u.Quantity(vals) norm_cu = u.Quantity(vals_cu) int_flux = u.Quantity(int_vals) int_flux_cu = u.Quantity(int_vals_cu) table['spec_alpha'] = Column(alpha, description='Spectral model parameter (log parabola)') table['spec_beta'] = Column(beta, description='Spectral model parameter (log parabola)') table['spec_norm'] = Column(norm, description='Spectral model norm parameter (log parabola)', unit='MeV-1 s-1 cm-2') table['spec_norm_cu'] = Column(norm_cu, description='Spectral model norm parameter (log parabola) in crab units') table['int_flux_above_1TeV'] = Column(int_flux, description='Integral flux above 1 TeV ', unit='s-1 cm-2') table['int_flux_above_1TeV_cu'] = Column(int_flux_cu, description='Integral flux above 1 TeV in crab units') table['luminosity'] = Column(luminosity, description='Intrinsic source luminosity', unit='erg s-1') # print(table['int_flux_above_1TeV'], table['int_flux_above_1TeV_cu']) return table
vel_dis=vel_dis, max_age=1e6, spiralarms=spiralarms, random_state=0) # Minimum source luminosity (ph s^-1) luminosity_min = 4e34 # Maximum source luminosity (ph s^-1) luminosity_max = 4e37 # Luminosity function differential power-law index luminosity_index = 1.5 # Assigns luminosities to sources luminosity = sample_powerlaw(luminosity_min, luminosity_max, luminosity_index, n_sources, random_state=0) table['luminosity'] = luminosity # Adds parameters to table: distance, glon, glat, flux, angular_extension table = population.add_observed_parameters(table) table.meta['Energy Bins'] = np.array([10, 500]) * u.GeV # Create image image = catalog_image(reference, psf, catalog='simulation', source_type='point', total_flux=True, sim_table=table)
# Includes spiral arms spiralarms = True # Creates table table = population.make_base_catalog_galactic(n_sources=n_sources, rad_dis=rad_dis, vel_dis=vel_dis, max_age=1e6, spiralarms=spiralarms, random_state=0) # Minimum source luminosity (ph s^-1) luminosity_min = 4e34 # Maximum source luminosity (ph s^-1) luminosity_max = 4e37 # Luminosity function differential power-law index luminosity_index = 1.5 # Assigns luminosities to sources luminosity = sample_powerlaw(luminosity_min, luminosity_max, luminosity_index, n_sources, random_state=0) table['luminosity'] = luminosity # Adds parameters to table: distance, glon, glat, flux, angular_extension table = population.add_observed_parameters(table) table.meta['Energy Bins'] = np.array([10, 500]) * u.GeV # Create image image = catalog_image(reference, psf, catalog='simulation', source_type='point', total_flux=True, sim_table=table) # Plot fig = FITSFigure(image.to_fits()[0], figsize=(15, 5)) fig.show_colorscale(interpolation='bicubic', cmap='afmhot', stretch='log', vmin=1E30, vmax=1E35) fig.tick_labels.set_xformat('ddd') fig.tick_labels.set_yformat('dd') ticks = np.logspace(30, 35, 6)
spiralarms=True, ) # ## Simulate luminosities # Several source population models, e.g. the 1FHL paper or Strong (2007), use power-law luminosity functions. # # Here we implement the "reference model" from the 1FHL catalog paper section 6.2. # In[4]: # Source luminosity (ph s^-1) luminosity = sample_powerlaw( x_min=1e34, x_max=1e37, gamma=1.5, size=n_sources, ) table['luminosity'] = luminosity # ## Compute observable parameters # In[5]: table = population.add_observed_parameters(table) table.info() # ## Check output # The simulation is done, you could save the simulated catalog to a file. #
# Creates table table = population.make_base_catalog_galactic(n_sources=n_sources, rad_dis=rad_dis, vel_dis=vel_dis, max_age=1e6, spiralarms=spiralarms) # Minimum source luminosity (ph s^-1) luminosity_min = 4e34 # Maximum source luminosity (ph s^-1) luminosity_max = 4e37 # Luminosity function differential power-law index luminosity_index = 1.5 # Assigns luminosities to sources luminosity = sample_powerlaw(luminosity_min, luminosity_max, luminosity_index, n_sources) table['luminosity'] = luminosity # Adds parameters to table: distance, glon, glat, flux, angular_extension table = population.add_observed_parameters(table) table.meta['Energy Bins'] = Quantity([10, 500], 'GeV') # Create image image = catalog_image(reference, psf, catalog='simulation', source_type='point', total_flux=True, sim_table=table) # Plot fig = FITSFigure(image.to_fits()[0])
# Includes spiral arms spiralarms = True # Creates table table = population.make_base_catalog_galactic(n_sources=n_sources, rad_dis=rad_dis, vel_dis=vel_dis, max_age=1e6, spiralarms=spiralarms) # Minimum source luminosity (ph s^-1) luminosity_min = 4e34 # Maximum source luminosity (ph s^-1) luminosity_max = 4e37 # Luminosity function differential power-law index luminosity_index = 1.5 # Assigns luminosities to sources luminosity = sample_powerlaw(luminosity_min, luminosity_max, luminosity_index, n_sources) table['luminosity'] = luminosity # Adds parameters to table: distance, glon, glat, flux, angular_extension table = population.add_observed_parameters(table) table.meta['Energy Bins'] = Quantity([10, 500], 'GeV') # Create image image = catalog_image(reference, psf, catalog='simulation', source_type='point', total_flux=True, sim_table=table) # Plot fig = FITSFigure(image.to_fits()[0]) fig.show_grayscale(stretch='linear', interpolation='none') fig.add_colorbar()