# Colab Setup (Run this first)
!pip install litebird_sim rich
Requirement already satisfied: litebird_sim in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (0.17.0)
Requirement already satisfied: rich in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (15.0.0)
Requirement already satisfied: asciimatics>=1.15.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (1.15.0)
Requirement already satisfied: astropy>=6.1.7 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (8.0.1)
Requirement already satisfied: deprecated>=1.2.18 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (1.3.1)
Requirement already satisfied: ducc0>=0.41.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (0.41.0)
Requirement already satisfied: h5py>=3.9 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (3.16.0)
Requirement already satisfied: healpy>=1.18.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (1.20.0)
Requirement already satisfied: jinja2>=3.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (3.1.6)
Requirement already satisfied: jplephem>=2.22 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (2.24)
Requirement already satisfied: libinsdb>=0.9.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (0.9.0)
Requirement already satisfied: markdown-katex>=202406.1035 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (202406.1035)
Requirement already satisfied: markdown>=3.9 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (3.10.3)
Requirement already satisfied: matplotlib>=3.10.8 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (3.11.1)
Requirement already satisfied: numba>=0.65.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (0.67.0)
Requirement already satisfied: numpy>=2.4.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (2.5.2)
Requirement already satisfied: pygithub>=2.6.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (2.10.0)
Requirement already satisfied: pyperclip>=1.9.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (1.11.0)
Requirement already satisfied: pysm3>=3.4.5 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (3.4.6)
Requirement already satisfied: pyyaml>=6.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (6.0.3)
Requirement already satisfied: requests>=2.32.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (2.34.2)
Requirement already satisfied: scipy>=1.15.3 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (1.18.1)
Requirement already satisfied: tomlkit>=0.12.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from litebird_sim) (0.12.5)
Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from rich) (4.2.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from rich) (2.21.0)
Requirement already satisfied: pyfiglet>=0.7.2 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from asciimatics>=1.15.0->litebird_sim) (1.0.4)
Requirement already satisfied: Pillow>=2.7.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from asciimatics>=1.15.0->litebird_sim) (12.3.0)
Requirement already satisfied: wcwidth in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from asciimatics>=1.15.0->litebird_sim) (0.8.3)
Requirement already satisfied: astropy-iers-data>=0.2026.6.22.1.23.34 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from astropy>=6.1.7->litebird_sim) (0.2026.8.31.0.57.9)
Requirement already satisfied: packaging>=25.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from astropy>=6.1.7->litebird_sim) (26.3)
Requirement already satisfied: pyerfa>=2.0.1.3 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from astropy>=6.1.7->litebird_sim) (2.0.1.5)
Requirement already satisfied: wrapt<3,>=1.10 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from deprecated>=1.2.18->litebird_sim) (2.4.0)
Requirement already satisfied: MarkupSafe>=2.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from jinja2>=3.1->litebird_sim) (3.0.3)
Requirement already satisfied: coverage<8,>=7.3.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from libinsdb>=0.9.0->litebird_sim) (7.16.0)
Requirement already satisfied: python-dateutil<3,>=2.8.2 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from libinsdb>=0.9.0->litebird_sim) (2.9.0.post0)
Requirement already satisfied: requests-mock<2,>=1.11.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from libinsdb>=0.9.0->litebird_sim) (1.12.1)
Requirement already satisfied: types-pyyaml<7,>=6.0.12.12 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from libinsdb>=0.9.0->litebird_sim) (6.0.12.20260815)
Requirement already satisfied: six>=1.5 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from python-dateutil<3,>=2.8.2->libinsdb>=0.9.0->litebird_sim) (1.17.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from requests>=2.32.0->litebird_sim) (3.5.1)
Requirement already satisfied: idna<4,>=2.5 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from requests>=2.32.0->litebird_sim) (3.19)
Requirement already satisfied: urllib3<3,>=1.26 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from requests>=2.32.0->litebird_sim) (2.7.0)
Requirement already satisfied: certifi>=2023.5.7 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from requests>=2.32.0->litebird_sim) (2026.7.22)
Requirement already satisfied: mdurl~=0.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from markdown-it-py>=2.2.0->rich) (0.1.2)
Requirement already satisfied: setuptools in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from markdown-katex>=202406.1035->litebird_sim) (84.0.0)
Requirement already satisfied: contourpy>=1.0.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from matplotlib>=3.10.8->litebird_sim) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from matplotlib>=3.10.8->litebird_sim) (0.12.1)
Requirement already satisfied: fonttools>=4.28.2 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from matplotlib>=3.10.8->litebird_sim) (4.64.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from matplotlib>=3.10.8->litebird_sim) (1.5.1)
Requirement already satisfied: pyparsing>=3 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from matplotlib>=3.10.8->litebird_sim) (3.3.2)
Requirement already satisfied: llvmlite<0.50,>=0.49.0dev0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from numba>=0.65.0->litebird_sim) (0.49.0)
Requirement already satisfied: pynacl>=1.4.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from pygithub>=2.6.1->litebird_sim) (1.6.2)
Requirement already satisfied: pyjwt>=2.4.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from pyjwt[crypto]>=2.4.0->pygithub>=2.6.1->litebird_sim) (2.13.0)
Requirement already satisfied: typing-extensions>=4.5.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from pygithub>=2.6.1->litebird_sim) (4.16.0)
Requirement already satisfied: cryptography>=3.4.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from pyjwt[crypto]>=2.4.0->pygithub>=2.6.1->litebird_sim) (50.0.1)
Requirement already satisfied: cffi>=2.0.0 in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from cryptography>=3.4.0->pyjwt[crypto]>=2.4.0->pygithub>=2.6.1->litebird_sim) (2.1.1)
Requirement already satisfied: pycparser in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from cffi>=2.0.0->cryptography>=3.4.0->pyjwt[crypto]>=2.4.0->pygithub>=2.6.1->litebird_sim) (3.0)
Requirement already satisfied: toml in /Users/gomes/Documents/LiteBIRD/test_problem/venv/lib/python3.14/site-packages (from pysm3>=3.4.5->litebird_sim) (0.10.2)

[notice] A new release of pip is available: 26.1.2 -> 26.2.1
[notice] To update, run: pip install --upgrade pip

Band integration with a Jones matrix#

To run this notebook, you have several options:

  • If you are running this under Binder, you should already be set!

  • If you are running this under Google Colab, be sure to run the cell with !pip install… that is right above the title.

  • If you are running this locally, you should first create and activate a new virtual environment with the commands

    python -m venv ./my_venv
    source ./my_venv/bin/activate
    

    (you can use Conda environments, if you prefer) and install Jupyter and litebird_sim in it:

    pip install jupyter litebird_sim
    

    If you have a local copy of the litebird_sim repository cloned from litebird/litebird_sim (e.g., because you’re part of the Simulation Team!), you can use a development install instead:

    cd /my/local/copy/litebird_sim
    pip install -e .
    

Import Modules#

import healpy as hp
import matplotlib.pyplot as plt
import numpy as np

import litebird_sim as lbs
from litebird_sim.input_sky import SkyGenerator, SkyGenerationParams
from litebird_sim.units import Units

Define Parameters#

start_time = 0
time_span_s = 100 * 24 * 3600
nside = 64
imo_location = "schema.json"
imo = lbs.Imo(flatfile_location=lbs.PTEP_IMO_LOCATION)
imo_version = "vPTEP"

Create Simulation#

sim = lbs.Simulation(
    start_time=start_time, duration_s=time_span_s, random_seed=0, imo=imo
)

comm = sim.mpi_comm
[2026-09-03 17:22:42,232 WARNING MPI#0000] MPI layer is already initialized. Reinitializing the entire RNG hierarchy.
[2026-09-03 17:22:42,232 WARNING MPI#0000] MPI layer is already initialized. Reinitializing the entire RNG hierarchy.

Define Frequency Channel#

telescope = "LFT"
channel = "L4-140"

channelinfo = lbs.FreqChannelInfo.from_imo(
    url=f"/releases/{imo_version}/satellite/{telescope}/{channel}/channel_info",
    imo=imo,
)

Define Scanning Strategy#

sim.set_scanning_strategy(
    imo_url=f"/releases/{imo_version}/satellite/scanning_parameters/",
)

Define Instrument#

instrument_info = lbs.InstrumentInfo.from_imo(
    imo,
    url=f"/releases/{imo_version}/satellite/{telescope}/instrument_info",
)

sim.set_instrument(instrument_info)

hwp_radpsec = instrument_info.hwp_rpm * 2 * np.pi / 60

Set HWP#

# the file mock_jones_params actually includes ideal HWP parameters
# you can change them to see the influence on the TOD and output maps
jones_params_filepath = "mock_jones_params.csv"

with open(jones_params_filepath, "r", encoding="utf-8") as jones_params_file:
    sim.set_hwp(
        lbs.NonIdealHWP(
            hwp_radpsec,
            harmonic_expansion=True,
            calculus=lbs.HWPFormalism.JONES,
            jones_parameters=lbs.HWPJonesParams.from_stream(jones_params_file),
        )
    )

Define Detectors#

det = lbs.DetectorInfo.from_imo(
    url=f"/releases/{imo_version}/satellite/{telescope}/{channel}/{channelinfo.detector_names[0]}/detector_info",
    imo=imo,
)

# This is usually not needed. PTEP IMo has no pointing_theta_phi_psi_deg value, so we're setting some values in here so that the code does not break.
det.pointing_theta_phi_psi_deg = [0, 0, 0]
# We're also reducing the sampling rate so that the simulation goes faster.
det.sampling_rate_hz = 1
# Also reducing bandwidth so that there's fewer frequencies for the band integration.
det.bandwidth_ghz = 2.0

Create Observations and Prepare Pointings#

(obs,) = sim.create_observations(
    detectors=[det],
)

sim.prepare_pointings(append_to_report=False)
sim.precompute_pointings()

Generate Input Sky Maps#

params = SkyGenerationParams(
    nside=64,
    units=Units.MJy_over_sr,
    output_type="map",
    make_cmb=True,
    seed_cmb=12345,
    make_fg=True,
    make_dipole=True,
    fg_models=["d1", "s1"],
    apply_beam=True,
)

data = np.loadtxt(
    jones_params_filepath,
    delimiter=",",
    dtype=object,
    unpack=True,
    skiprows=1,
    comments="#",
)

frequencies = data[0, :].astype(np.float64)
indices = np.where(
    (frequencies >= det.bandcenter_ghz - det.bandwidth_ghz / 2)
    & (frequencies <= det.bandcenter_ghz + det.bandwidth_ghz / 2)
)[0]

frequencies_ghz = frequencies[indices]
fwhm_arcmin = 37.805193
fwhm_rad = np.radians(fwhm_arcmin / 60.0)

print("frequencies for band integration:", frequencies_ghz)
frequencies for band integration: [139.4117647 139.9926471 140.5735294]
sky_gen = SkyGenerator(
    parameters=params,
    frequencies_ghz=frequencies_ghz,
    fwhm_rad=fwhm_rad,
)
sky_map = sky_gen.execute()
[2026-09-03 17:22:44,140 INFO MPI#0000] Generating CMB (frequency mode)...
[2026-09-03 17:22:44,168 INFO MPI#0000] Generating Foregrounds (frequency mode)...
[2026-09-03 17:22:44,168 INFO MPI#0000] Retrieve data for pysm_2/dust_t_new.fits (if not cached already)
[2026-09-03 17:22:44,170 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,170 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,170 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,204 INFO MPI#0000] Retrieve data for pysm_2/dust_q_new.fits (if not cached already)
[2026-09-03 17:22:44,205 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,206 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,206 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,232 INFO MPI#0000] Retrieve data for pysm_2/dust_u_new.fits (if not cached already)
[2026-09-03 17:22:44,233 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,234 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,234 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,260 INFO MPI#0000] Retrieve data for pysm_2/dust_beta.fits (if not cached already)
[2026-09-03 17:22:44,261 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,261 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,261 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,287 INFO MPI#0000] Retrieve data for pysm_2/dust_temp.fits (if not cached already)
[2026-09-03 17:22:44,288 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,288 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,288 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,314 INFO MPI#0000] Retrieve data for pysm_2/synch_t_new.fits (if not cached already)
[2026-09-03 17:22:44,315 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,316 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,316 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,341 INFO MPI#0000] Retrieve data for pysm_2/synch_q_new.fits (if not cached already)
[2026-09-03 17:22:44,342 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,342 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,343 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,368 INFO MPI#0000] Retrieve data for pysm_2/synch_u_new.fits (if not cached already)
[2026-09-03 17:22:44,369 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,369 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,369 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:44,395 INFO MPI#0000] Retrieve data for pysm_2/synch_beta.fits (if not cached already)
[2026-09-03 17:22:44,396 INFO MPI#0000] NSIDE = 512
[2026-09-03 17:22:44,396 INFO MPI#0000] ORDERING = RING in fits file
[2026-09-03 17:22:44,396 INFO MPI#0000] INDXSCHM = IMPLICIT
[2026-09-03 17:22:46,002 INFO MPI#0000] Generating Dipole (frequency mode)...

Generate HwpSys object and Set its parameters#

Fill TOD and perform Mapmaking on-the-fly#

lbs.scan_map_in_observations(
    observations=[obs],
    maps=sky_map,
    integrate_in_band=True,
)
output_maps = sim.make_binned_map(nside=nside).binned_map
input_maps = np.trapezoid(sky_map.values, frequencies_ghz * 1e9, axis=0) / (  # type: ignore[no-matching-overload]
    det.bandwidth_ghz * 1e9
)

Show Output Maps#

plt.figure(figsize=(32, 10))
stokes_parameters = ["T", "Q", "U"]
for i in range(3):
    hp.mollview(
        input_maps[i],
        cmap="jet",
        sub=(2, 3, i + 1),
        title="Input " + stokes_parameters[i],
    )

    hp.mollview(
        output_maps[i],
        cmap="jet",
        sub=(2, 3, i + 4),
        title="Leakage " + stokes_parameters[i],
    )
../_images/5f4fed1cd6cf6b6060a1c9ebe982bace4fe55293e22bf6969415273e7235fafc.png