Welcome to qsonic’s documentation!

QSOnic

Lightining-fast continuum fitting

https://img.shields.io/pypi/v/qsonic?color=blue https://img.shields.io/badge/Source-qsonic-red Tests Status Documentation Status

QSOnic is an MPI-parallelized, highly optimized quasar continuum fitting package for DESI built on the same algorithm as picca, but faster. It also provides an efficient API to read DESI quasar spectra.

The key differences

  • Coadding of spectrograph arms can be performed after continuum fitting or disabled entirely.

  • Continuum is multiplied by a fiducial mean flux when provided.

  • You can pass fiducial var_lss (column VAR_LSS) and mean flux (column MEANFLUX) for observed wavelength LAMBDA in STATS extention of a FITS file. Wavelength should be linearly and equally spaced. This is the same format as rawio output from picca, except VAR column in picca is the variance on flux not deltas. We break away from that convention by explicitly requiring variance on deltas in a new column.

  • If no fiducial is passed, we fit only for var_lss (no eta fitting by default). Eta fitting can be enabled by passing --var-fit-eta. A covariance matrix is calculated based on delete-one Jackknife over subsamples between var_pipe and var_obs data points, and used in var_lss, eta fitting if --var-use-cov passed (soft recommendation to always enable this).

  • Internal weights for continuum fitting and coadding are based on smoothed IVAR, and output WEIGHT is based on this smoothed ivar. This smoothing can be turned off.

  • Chi2 information as well as best fits are saved in continuum_chi2_catalog.fits. Chi2 is calculated using smooth ivar and var_lss, and does not subtract sum of ln(weights).

Similarities

  • Delta files are the same. CONT column is mean flux times continuum even when fiducial mean flux is passed.

  • MEANSNR in header file and chi2 catalog is average of flux times square root of positive ivar values. Header values are per arm, but catalog values are the average over all arms.

  • Eta fitting does not rescale IVAR output. Pipeline noise will be modified with explicit calibration option.

Programs

  • qsonic-fit is the main continuum fitting script. It requires MPI. Each MPI task is responsible for independent sky regions based on HEALPix. Reading and fitting the continuum are done in parallel. After all quasars are fit with a continuum, all MPI tasks syncronize to calculate the mean continuum and check for convergence. See here or execute qsonic-fit --help for help.

  • qsonic-calib calculates stacked flux, var_lss and eta terms for a given set of deltas. This script does not perform continuum fitting, and so, it enables fast calculations for data SNR splits, parameter variations in wavelength and variance binning. Also requires MPI. See here or execute qsonic-calib --help for help.

  • qsonic-coadd is a helper program to coadd delta files by TARGETID and regroup them by HEALPix. It uses multiprocessing to read delta files in parallel and does not require MPI. See here or execute qsonic-coadd --help for help.

Note: Some platforms require these help commands to begin with mpirun -np 1 or srun -n 1.

Source

See API Reference for details.

  • calibration.py containes noise and flux calibration classes. Can be imported without MPI. The output file of the continuum fitting attibutes.fits can be used as an input for these calibrations. As an additional feature, large-scale variance term var_lss can be applied as an additive correction in noise calibration by passing --varlss-as-additive-noise.

  • catalog.py provides function to read catalog and broadcast from master pe. Needs following columns: TARGETID, Z, TARGET_RA, RA, TARGET_DEC, DEC, SURVEY, HPXPIXEL, VMIN_CIV_450, VMAX_CIV_450, VMIN_CIV_2000, VMAX_CIV_2000.

  • io.py module contains functions to read spectra and save deltas. Can be imported without MPI.

  • masks.py provides maskers for sky, BAL and DLA. Can be imported without MPI. Sky mask is a simple text file, where colums are type (unused), wave_min mininum wavelength, wave_max maximum wavelength, frame rest-frame (RF) or observed (OBS). BAL mask assumes related VMIN_CIV_450, VMAX_CIV_450, VMIN_CIV_2000, VMAX_CIV_2000 values are already present in catalog. DLA masking takes both Lya and Lyb profiles into account, masks F<0.8 and corrects for the wings.

  • mathtools.py hosts some functions and classes that are purely numerical. Can be imported without MPI.

  • mpi_utils.py hosts MPI related functions such as logging. Can be imported without MPI.

  • picca_continuum.py fits each quasar continuum with a global mean as done in picca. Needs MPI.

  • spectrum.py has Spectrum class that stores each quasar spectrum. Can be imported without MPI.

Indices and tables