Skip to content

TheSkyentist/unite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

unite — Unified liNe Integration Turbo Engine

PyPI Python License: GPL v2 Tests Documentation

unite is a Python package for fast, Bayesian inference of emission lines from astronomical spectra. It is built on JAX, NumPyro, and Astropy, and supports fitting multiple spectra simultaneously with shared kinematics, calibration tokens, and flexible priors.

Originally designed for JWST/NIRSpec but extensible to any spectrograph.

What it does

  • Exact pixel integration of line profiles — fast, memory-efficient, and correct even for undersampled data
  • Simultaneous multi-spectrum fitting across gratings and instruments with shared kinematic parameters (redshift, FWHM)
  • Multiple line profiles: Gaussian, Voigt, Cauchy, Pseudo-Voigt, Laplace, Gauss-Hermite, Split-Normal
  • Flexible continuum models: Linear, Power-Law, Polynomial — auto-generated from line configurations
  • Calibration tokens (flux scale, resolution scale, pixel offset) with free or fixed priors, shared across spectra
  • YAML serialization for reproducible, human-editable configurations
  • User-controlled samplerModelBuilder returns (model_fn, model_args) for use with any NumPyro backend (NUTS, SVI, nested sampling, ...)
  • Instrument support for JWST/NIRSpec (all gratings + PRISM) and generic spectrographs

Installation

pip install unite

Or with Pixi:

pixi add unite

Quick Start

from unite.line import LineConfiguration, Redshift, FWHM, Flux
from unite.continuum import ContinuumConfiguration
from unite.spectrum import Spectrum, Spectra
from unite.model import ModelBuilder

# Configure lines with shared kinematics
line_config = LineConfiguration(...)
continuum_config = ContinuumConfiguration.from_line_config(line_config)

# Load spectra and build the numpyro model
spectra = Spectra([Spectrum(...)])
model_fn, model_args = ModelBuilder(line_config, continuum_config, spectra).build()

# Run with any NumPyro sampler
import numpyro
from numpyro.infer import MCMC, NUTS
mcmc = MCMC(NUTS(model_fn), num_warmup=500, num_samples=1000)
mcmc.run(jax.random.PRNGKey(0), *model_args)

Documentation

Full documentation, tutorials, and API reference at unite.readthedocs.io.

License

GPL v2 or later. See LICENSE for details.

About

Uniform NIRSpec Inference (Turbo) Engine

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages