Tutorials
This section contains tutorials demonstrating common use cases for zdm.
Available Notebooks
The docs/nb/ directory contains Jupyter notebooks with worked examples:
CHIME_pzDM.ipynb: Working with CHIME survey data and p(z|DM) calculations
Exploring_H0.ipynb: Exploring the effect of varying H0
Exploring_Emax.ipynb: Exploring maximum energy parameter effects
Exploring_alpha.ipynb: Exploring spectral index variations
Grid_sz.ipynb: Understanding grid size and resolution
Max_Like.ipynb: Maximum likelihood estimation
Median_DMcosmic.ipynb: Computing median cosmic DM
Omegab_H0.ipynb: Relationship between Omega_b and H0
Speedup_IGamma.ipynb: Performance optimization with gamma functions
Tutorial: Basic Likelihood Calculation
This tutorial walks through computing likelihoods for a simple case.
Step 1: Setup
import numpy as np
from zdm import parameters, survey, cosmology as cos
from zdm import misc_functions as mf
from zdm import grid as zdm_grid
from zdm import iteration as it
# Create state with default parameters
state = parameters.State()
Step 2: Initialize Cosmology
# Set cosmological parameters
cos.set_cosmology(state.params)
cos.init_dist_measures()
Step 3: Define Grid Dimensions
# DM range (pc/cm^3)
dmvals = np.linspace(0, 3000, 500)
# Redshift range
zvals = np.linspace(0.01, 3.0, 400)
Step 4: Load Survey
# Load ASKAP ICS survey
s = survey.Survey(
state,
survey_name='CRAFT_ICS',
filename='CRAFT_ICS.ecsv',
dmvals=dmvals,
zvals=zvals
)
Step 5: Build z-DM Grid
# Get base p(DM|z) grid
zDMgrid, zvals, dmvals, smear = mf.get_zdm_grid(
state, new=True, plot=False
)
# Build survey-specific grid
g = zdm_grid.Grid(
survey=s,
state=state,
zDMgrid=zDMgrid,
zvals=zvals,
dmvals=dmvals,
smear_mask=smear
)
Step 6: Compute Likelihood
# Calculate log-likelihood
ll = it.get_log_likelihood(g, s)
print(f"Log-likelihood: {ll:.2f}")
Tutorial: Parameter Exploration
Explore how likelihood varies with a parameter.
import numpy as np
import matplotlib.pyplot as plt
from zdm import loading, iteration as it
# Load CHIME data
dmvals, zvals, grids, surveys = loading.load_CHIME(Nbin=6)
# Range of H0 values to test
H0_values = np.linspace(60, 80, 21)
likelihoods = []
for H0 in H0_values:
# Update H0 in state
state = grids[0].state
state.update_param('H0', H0)
# Rebuild grids and compute likelihood
# (simplified - full implementation needs grid rebuild)
total_ll = sum(it.get_log_likelihood(g, s)
for g, s in zip(grids, surveys))
likelihoods.append(total_ll)
# Plot results
plt.figure()
plt.plot(H0_values, likelihoods)
plt.xlabel('H0 (km/s/Mpc)')
plt.ylabel('Log-likelihood')
plt.title('Likelihood vs H0')
plt.show()
Tutorial: MCMC Parameter Estimation
Run MCMC to constrain parameters.
from zdm import MCMC
from zdm import loading
import emcee
# Load surveys
dmvals, zvals, grids, surveys = loading.load_CHIME(Nbin=6)
state = grids[0].state
# Define parameters to vary with bounds
params = {
'H0': {'min': 50, 'max': 100},
'gamma': {'min': -2.5, 'max': 0},
'lEmax': {'min': 40, 'max': 43},
}
# Initial walker positions
nwalkers = 32
ndim = len(params)
p0 = np.random.uniform(
low=[v['min'] for v in params.values()],
high=[v['max'] for v in params.values()],
size=(nwalkers, ndim)
)
# Setup sampler
surveys_sep = [surveys, []] # Non-repeaters, repeaters
sampler = emcee.EnsembleSampler(
nwalkers, ndim, MCMC.calc_log_posterior,
args=[state, params, surveys_sep]
)
# Run MCMC
nsteps = 1000
sampler.run_mcmc(p0, nsteps, progress=True)
# Get results
samples = sampler.get_chain(discard=200, flat=True)
Tutorial: Working with Repeaters
Analyze repeating FRB populations.
from zdm import repeat_grid
# Load repeater survey data
# (requires appropriate survey file with repeater info)
# Create repeater grid
rg = repeat_grid.repeat_Grid(
survey=s,
state=state,
zDMgrid=zDMgrid,
zvals=zvals,
dmvals=dmvals,
smear_mask=smear
)
# Compute likelihood including repeater terms
ll = it.get_log_likelihood(rg, s, pNreps=True)
Further Resources
See the API Reference for complete function documentation
See the Parameters for all available parameters
Check the
papers/directory for publication-specific analysis scripts