Examples
This section provides practical examples of using LiLit for different types of analyses.
Basic Example: Temperature and Polarization
Here’s a simple example using temperature and E-mode polarization:
from lilit import LiLit
# Define the configuration
info = {
'likelihood': {
'lilit.LiLit': {
'fields': ['t', 'e'],
'lmax': [2500, 2000],
'lmin': [2, 2],
'fsky': [0.7, 0.7],
}
},
'params': {
# Cosmological parameters
'H0': {'prior': {'min': 60, 'max': 80}, 'ref': 67.4},
'omega_b': {'prior': {'min': 0.019, 'max': 0.025}, 'ref': 0.02237},
'omega_cdm': {'prior': {'min': 0.09, 'max': 0.15}, 'ref': 0.1200},
'tau_reio': {'prior': {'min': 0.01, 'max': 0.10}, 'ref': 0.0544},
'A_s': {'prior': {'min': 1.7e-9, 'max': 3.5e-9}, 'ref': 2.1e-9},
'n_s': {'prior': {'min': 0.92, 'max': 1.02}, 'ref': 0.9649},
},
'theory': {'camb': None},
'sampler': {'evaluate': None}
}
from cobaya.model import get_model
model = get_model(info)
B-mode Analysis with Tensor Modes
Example for analyzing B-mode polarization with primordial tensor perturbations:
from lilit import LiLit
# Configuration for B-mode analysis
info = {
'likelihood': {
'lilit.LiLit': {
'fields': ['t', 'e', 'b'],
'lmax': [2500, 2000, 500],
'lmin': [2, 2, 2],
'fsky': [0.7, 0.7, 0.6],
'r': 0.01, # tensor-to-scalar ratio
}
},
'params': {
# Standard cosmological parameters
'H0': {'prior': {'min': 60, 'max': 80}, 'ref': 67.4},
'omega_b': {'prior': {'min': 0.019, 'max': 0.025}, 'ref': 0.02237},
'omega_cdm': {'prior': {'min': 0.09, 'max': 0.15}, 'ref': 0.1200},
'tau_reio': {'prior': {'min': 0.01, 'max': 0.10}, 'ref': 0.0544},
'A_s': {'prior': {'min': 1.7e-9, 'max': 3.5e-9}, 'ref': 2.1e-9},
'n_s': {'prior': {'min': 0.92, 'max': 1.02}, 'ref': 0.9649},
# Tensor mode parameters
'r': {'prior': {'min': 0, 'max': 0.1}, 'ref': 0.01},
'n_t': {'derived': 'lambda r: -r/8'}, # consistency relation
},
'theory': {'camb': None},
'sampler': {'evaluate': None}
}
Custom Fiducial Spectra
Using your own fiducial power spectra instead of Planck 2018 defaults:
import numpy as np
from lilit import LiLit, CAMBres2dict
import camb
# Generate custom fiducial spectra with CAMB
pars = camb.CAMBparams()
pars.set_cosmology(H0=70, ombh2=0.022, omch2=0.12)
pars.InitPower.set_params(As=2.2e-9, ns=0.96)
pars.set_for_lmax(3000, lens_potential_accuracy=0)
results = camb.get_results(pars)
powers = results.get_cmb_power_spectra(pars, CMB_unit='muK')
# Convert to dictionary format
fiducial_spectra = CAMBres2dict(results)
# Use in LiLit
info = {
'likelihood': {
'lilit.LiLit': {
'fields': ['t', 'e'],
'lmax': [2500, 2000],
'lmin': [2, 2],
'fsky': [0.7, 0.7],
'fiducial_spectra': fiducial_spectra,
}
},
# ... rest of configuration
}
Running an MCMC Analysis
Complete example of running an MCMC chain:
info = {
'likelihood': {
'lilit.LiLit': {
'fields': ['t', 'e', 'b'],
'lmax': [2500, 2000, 500],
'lmin': [2, 2, 2],
'fsky': [0.7, 0.7, 0.6],
}
},
'params': {
'H0': {'prior': {'min': 60, 'max': 80}, 'ref': {'dist': 'norm', 'loc': 67.4, 'scale': 0.5}},
'omega_b': {'prior': {'min': 0.019, 'max': 0.025}, 'ref': {'dist': 'norm', 'loc': 0.02237, 'scale': 0.00037}},
'omega_cdm': {'prior': {'min': 0.09, 'max': 0.15}, 'ref': {'dist': 'norm', 'loc': 0.1200, 'scale': 0.0036}},
'tau_reio': {'prior': {'min': 0.01, 'max': 0.10}, 'ref': {'dist': 'norm', 'loc': 0.0544, 'scale': 0.0074}},
'A_s': {'prior': {'min': 1.7e-9, 'max': 3.5e-9}, 'ref': {'dist': 'norm', 'loc': 2.1e-9, 'scale': 3e-11}},
'n_s': {'prior': {'min': 0.92, 'max': 1.02}, 'ref': {'dist': 'norm', 'loc': 0.9649, 'scale': 0.0042}},
'r': {'prior': {'min': 0, 'max': 0.1}, 'ref': {'dist': 'norm', 'loc': 0.01, 'scale': 0.01}},
},
'theory': {'camb': None},
'sampler': {
'mcmc': {
'max_tries': 10000,
'Rminus1_stop': 0.01,
'Rminus1_cl_stop': 0.2,
}
},
'output': 'chains/lilit_example'
}
from cobaya.run import run
updated_info, sampler = run(info)
Using Different Sky Fractions per Field
LiLit allows you to specify different sky fractions for each field:
# Different sky coverage for T, E, and B modes
info = {
'likelihood': {
'lilit.LiLit': {
'fields': ['t', 'e', 'b'],
'lmax': [3000, 2500, 600],
'lmin': [2, 2, 2],
'fsky': [0.8, 0.7, 0.4], # T has larger sky coverage than E, B is most limited
}
},
# ... rest of configuration
}
This flexibility allows you to model realistic observational scenarios where different observational modes may have different systematic limitations or observing strategies.