Esempio n. 1
0
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])
Esempio n. 2
0
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
Esempio n. 3
0
                                              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)
Esempio n. 4
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, 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)
Esempio n. 5
0
    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.
#
Esempio n. 6
0
# 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()