Skip to main content

XXIOP: Cosmological 21cm Signal Toolkit

PyPI version License: MIT

xxiop is a Python package designed for researchers in cosmology to perform calculations related to the 21cm signal from the Epoch of Reionization. It provides tools to compute the Thomson scattering optical depth and to calculate, analyze, and visualize the 21cm brightness temperature power spectrum from given cosmological fields.

Features

  • Thomson Optical Depth: Calculate the optical depth from a given reionization history (ionization fraction vs. redshift).
  • 21cm Brightness Temperature: Compute the 21cm brightness temperature ($\delta T_b$) field from matter density and ionization fraction fields.
  • Power Spectrum Analysis: Calculate the dimensionless power spectrum $\Delta^2(k)$ of the 21cm signal or any other 3D field.
  • Visualization: Integrated plotting functions to visualize 2D slices of ionization and 21cm fields, and to plot the resulting power spectrum with error bars.
  • Customizable Cosmology: Easily set custom cosmological parameters (h, omegam, ns, sigma8) for all calculations.

Installation

You can install xxiop directly from PyPI:

pip install xxiop

Core Dependencies

The package relies on the following scientific libraries:

  • numpy
  • scipy
  • astropy
  • matplotlib
  • massfunc

All dependencies will be automatically installed via pip.

Usage Examples

Here are some basic examples of how to use the core functionalities of the xxiop package.

1. Calculate Thomson Optical Depth

You can calculate the integrated optical depth up to a certain redshift given a reionization history.

import numpy as np
from xxiop.op import OpticalDepth

# 1. Define a sample reionization history (ionization fraction vs. redshift)
z_history = np.linspace(5, 15, 100)
# Mock ionization fraction: starts near 0, ends near 1
ionf_history = 1.0 / (1.0 + np.exp((z_history - 10) / 1.0))

# 2. Initialize the calculator with this history
# You can also provide custom cosmological parameters, e.g., h=0.67, omegam=0.32
tau_calculator = OpticalDepth(z=z_history, ionf=ionf_history)

# 3. Calculate the optical depth up to z=7.5
z_target = 7.5
tau = tau_calculator.OpticalDepth(z=z_target)

print(f"Thomson Optical Depth (τ) at z={z_target}: {tau:.4f}")

2. Calculate 21cm Power Spectrum

Given 3D cubes of the matter density field and ionization fraction, you can compute and plot the 21cm power spectrum.

import numpy as np
from xxiop.op import XXIPowerSpectrum

# 1. Generate mock 3D cosmological fields
box_dim = 128  # Grid dimension
box_length_mpc = 200.0  # Box size in Mpc/h

# Mock matter density contrast field: delta_R = (rho / rho_bar) - 1
delta_r_field = np.random.randn(box_dim, box_dim, box_dim)

# Mock ionization fraction field (0=neutral, 1=ionized)
# Create a simple ionized bubble in the center
ion_fraction_field = np.zeros((box_dim, box_dim, box_dim))
center, radius = box_dim // 2, 30
x, y, z = np.ogrid[:box_dim, :box_dim, :box_dim]
mask = (x - center)**2 + (y - center)**2 + (z - center)**2 < radius**2
ion_fraction_field[mask] = 1.0

# 2. Initialize the power spectrum calculator
ps_calculator = XXIPowerSpectrum(h=0.674, omegam=0.315)

# 3. Calculate the 21cm brightness temperature field
# This is an intermediate step, but useful for visualization
z_snapshot = 8.0
delta_tb_field = ps_calculator.XXI_Field(
    z=z_snapshot,
    deltaR=delta_r_field,
    ionf=ion_fraction_field
)

# 4. Calculate the power spectrum from the 21cm field
# The PowerSpectrum method takes the 3D field and box length as input
k, delta_sq, error = ps_calculator.PowerSpectrum(
    field=delta_tb_field,
    box_length=box_length_mpc,
    num_bins=30  # Optional: number of bins for k
)

print("Power spectrum calculation complete.")
print(f"k (h/Mpc):\n{k[:5]}")
print(f"Δ^2(k) (mK^2):\n{delta_sq[:5]}")

# 5. Use the built-in plotting function to visualize the result
# This will also save a plot to the 'figure_deltaTb/' directory
ps_calculator.PowerSpectrumPlot(
    field=delta_tb_field,
    box_length=box_length_mpc,
    label=f'Power Spectrum at z={z_snapshot}'
)

print("Plot saved to figure_deltaTb/PowerSpectrum_...png")

License

This project is licensed under the MIT License. See the LICENSE file for details.

Metadata

Release files for xxiop 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xxiop 1.1.2
File Size Uploaded
xxiop-1.1.2.tar.gz 10.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xxiop 1.1.2
File Interpreter ABI Platform
xxiop-1.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 18.3 kB

Release files / xxiop-1.1.2.tar.gz

Download URL xxiop-1.1.2.tar.gz
Size 10.6 kB
Tags Source
SHA-256 checksum
How to use checksums
fcbe314be1434b67eb7a993bf92b191c12b5689b0bd4551ea0760d3d2865b972
BLAKE2b-256 checksum
How to use checksums
7ff8a445257adf08654c98d395e714dbbb6a2e12afa050bd9860874af666bde5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2025.

Transparency log

Release files / xxiop-1.1.2-py3-none-any.whl

Download URL xxiop-1.1.2-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
02e89785df08618173741e98460d9baba6f1996f6cd3b1040e4653d1fa0cf759
BLAKE2b-256 checksum
How to use checksums
0287eca9c4fc4f5685ecb8f049d330cd7331fbfb22b3016c7f38bc7505de5d81
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page