Skip to main content

Python package for cosmological power spectrum, 21cm signal, and optical depth calculations.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xxiop-1.0.7.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xxiop-1.0.7-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file xxiop-1.0.7.tar.gz.

File metadata

  • Download URL: xxiop-1.0.7.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xxiop-1.0.7.tar.gz
Algorithm Hash digest
SHA256 a50f29d30da8d7f4a06410b674e464c2a9dfde857a56df2a592e7cb0074ea604
MD5 c04f2504c4626495c224944adff0cc3a
BLAKE2b-256 af21539952ded7bfbf9cd9b6b71c5860c7a482dea258ee0c84cc7650421bcbbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for xxiop-1.0.7.tar.gz:

Publisher: xxiop.yml on SOYONAOC/XXIOP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xxiop-1.0.7-py3-none-any.whl.

File metadata

  • Download URL: xxiop-1.0.7-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xxiop-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 193dfe0e89cdd6070c5b54359277fd703c304f46eb54a82cf3840c0348a3a9a8
MD5 199825c7d8f5ccc8f775b156f42afc3d
BLAKE2b-256 f4d2b26aaf51942e927eabc696c5933018aee69d004ea09035efc9926bd4bf99

See more details on using hashes here.

Provenance

The following attestation bundles were made for xxiop-1.0.7-py3-none-any.whl:

Publisher: xxiop.yml on SOYONAOC/XXIOP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page