Running FastSpecFit
This page covers running FastSpecFit interactively on individual objects and
at scale across large datasets. For reading and working with existing output
catalogs, see Working with FastSpecFit Data. For worked examples,
see the Tutorials page.
Fitting Individual Objects
Note
The examples in this section and in Fitting at Scale
assume that FastSpecFit has been successfully
installed and set up.
fastspec jointly models the DESI spectrophotometry and broadband
photometry for one or more objects, taking one or more Redrock redshift
catalogs as input. fastphot models only the broadband photometry and is
significantly faster. Both tools write results to a multi-extension FITS file
described in the data model pages.
Click to view the fastspec help message.
fastspec --help
usage: fastspec [-h] -o OUTFILE [--mp MP] [-n NTARGETS] [--firsttarget FIRSTTARGET] [--targetids TARGETIDS] [--input-redshifts INPUT_REDSHIFTS] [--input-seeds INPUT_SEEDS]
[--seed SEED] [--nmonte NMONTE] [--vdisp-nominal VDISP_NOMINAL] [--vdisp-bounds VDISP_BOUNDS VDISP_BOUNDS] [--zmin ZMIN] [--no-broadlinefit]
[--ignore-photometry] [--ignore-quasarnet] [--constrain-age] [--no-smooth-continuum] [--imf IMF] [--templateversion TEMPLATEVERSION] [--templates TEMPLATES]
[--redrockfile-prefix REDROCKFILE_PREFIX] [--specfile-prefix SPECFILE_PREFIX] [--qnfile-prefix QNFILE_PREFIX] [--mapdir MAPDIR] [--fphotodir FPHOTODIR]
[--fphotofile FPHOTOFILE] [--emlinesfile EMLINESFILE] [--redux_dir REDUX_DIR] [--specproddir SPECPRODDIR] [--uncertainty-floor UNCERTAINTY_FLOOR]
[--minsnr-balmer-broad MINSNR_BALMER_BROAD] [--debug-plots] [--verbose]
redrockfiles [redrockfiles ...]
positional arguments:
redrockfiles Full path to input redrock file(s).
options:
-h, --help show this help message and exit
-o OUTFILE, --outfile OUTFILE
Full path to output filename (required). (default: None)
--mp MP Number of multiprocessing threads per MPI rank. (default: 1)
-n NTARGETS, --ntargets NTARGETS
Number of targets to process in each file. (default: None)
--firsttarget FIRSTTARGET
Index of first object to to process in each file, zero-indexed. (default: 0)
--targetids TARGETIDS
Comma-separated list of TARGETIDs to process. (default: None)
--input-redshifts INPUT_REDSHIFTS
Comma-separated list of input redshifts corresponding to the (required) --targetids input. (default: None)
--input-seeds INPUT_SEEDS
Comma-separated list of input random-number seeds corresponding to the (required) --targetids input. (default: None)
--seed SEED Random seed for Monte Carlo reproducibility; ignored if --input-seeds is passed. (default: 1)
--nmonte NMONTE Number of Monte Carlo realizations. (default: 50)
--vdisp-nominal VDISP_NOMINAL
Nominal (default) velocity dispersion in km/s. (default: 250.0)
--vdisp-bounds VDISP_BOUNDS VDISP_BOUNDS
Nominal (default) velocity dispersion in km/s. (default: (75.0, 500.0))
--zmin ZMIN Override the default minimum redshift required for modeling. (default: None)
--no-broadlinefit Do not model broad Balmer and helium line-emission. (default: True)
--ignore-photometry Ignore the broadband photometry during model fitting. (default: False)
--ignore-quasarnet Do not use QuasarNet to improve QSO redshifts. (default: True)
--constrain-age Constrain the age of the SED. (default: False)
--no-smooth-continuum
Do not fit the smooth continuum. (default: False)
--imf IMF Initial mass function. (default: chabrier)
--templateversion TEMPLATEVERSION
Template version number. (default: 2.0.0)
--templates TEMPLATES
Optional full path and filename to the templates. (default: None)
--redrockfile-prefix REDROCKFILE_PREFIX
Prefix of the input Redrock file name(s). (default: redrock-)
--specfile-prefix SPECFILE_PREFIX
Prefix of the spectral file(s). (default: coadd-)
--qnfile-prefix QNFILE_PREFIX
Prefix of the QuasarNet afterburner file(s). (default: qso_qn-)
--mapdir MAPDIR Optional directory name for the dust maps. (default: None)
--fphotodir FPHOTODIR
Top-level location of the source photometry. (default: None)
--fphotofile FPHOTOFILE
Photometric information file. (default: None)
--emlinesfile EMLINESFILE
Emission line parameter file. (default: None)
--redux_dir REDUX_DIR
Optional full path $DESI_SPECTRO_REDUX. (default: None)
--specproddir SPECPRODDIR
Optional directory name for the spectroscopic production. (default: None)
--uncertainty-floor UNCERTAINTY_FLOOR
Minimum fractional uncertainty to add in quadrature to the formal inverse variance spectrum. (default: 0.01)
--minsnr-balmer-broad MINSNR_BALMER_BROAD
Minimum broad Balmer S/N to force broad+narrow-line model. (default: 2.5)
--debug-plots Generate a variety of debugging plots (written to $PWD). (default: False)
--verbose Be verbose (for debugging purposes). (default: False)
Note
In addition to the Redrock catalog, fastspec requires the DESI
coadded spectrum to be located in the same directory (with a default
coadd- prefix).
Running fastspec
To model the spectrum of a single object, provide fastspec the full path
of an input Redrock catalog, the targetid of the object of interest, and
an output filename:
fastspec $DESI_SPECTRO_REDUX/loa/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
--targetids 39633345008634465 --outfile ./fastspec-example.fits
Click to view the logging output.
INFO:fastspecfit.py:302:fastspec: Cached stellar templates /global/cfs/cdirs/desi/public/external/templates/fastspecfit/2.0.0/ftemplates-chabrier-2.0.0.fits
INFO:fastspecfit.py:303:fastspec: Cached emission-line table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/emlines.ecsv
INFO:fastspecfit.py:304:fastspec: Cached photometric filters and parameters /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/legacysurvey-dr9.yaml
INFO:fastspecfit.py:305:fastspec: Cached cosmology table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/desi_fiducial_cosmology.dat
INFO:fastspecfit.py:306:fastspec: Cached Inoue+2014 IGM attenuation parameters.
INFO:io.py:728:gather_metadata: specprod=loa, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:1063:read: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/loa/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:fastspecfit.py:154:fastspec_one: Continuum- and emission-line fitting object 0 [targetid 39633345008634465, seed 2032329983, z=0.368743].
INFO:continuum.py:1456:continuum_fastspec: Median spectral S/N_b=3.42 S/N_r=6.45 S/N_z=6.19
INFO:continuum.py:1320:vdisp_by_chi2scan: Initial velocity dispersion fit failed: delta-chi2=6<25
INFO:continuum.py:1647:continuum_fastspec: Median aperture correction 1.451 [1.175-1.839].
INFO:continuum.py:1844:continuum_specfit: Smooth continuum correction: b=7.370% r=1.651% z=-2.640%
INFO:continuum.py:2049:continuum_specfit: vdisp=250.00 km/s log(M/Msun)=9.36+/-0.05 tau(V)=0.00+/-0.00 Age=10.57+/-0.57 Gyr SFR=0.73+/-0.03 Msun/yr Z/Zsun=0.00
INFO:emlines.py:1722:emline_specfit: delta(v) UV=0.0 km/s Balmer broad=0.0 km/s narrow=-0.5+/-1.1 km/s
INFO:emlines.py:1732:emline_specfit: sigma UV=0 km/s Balmer broad=0 km/s narrow=88+/-1 km/s
INFO:emlines.py:1763:emline_specfit: Dn(4000)=1.051 in the emission-line subtracted spectrum.
INFO:fastspecfit.py:433:fastspec: Fitting 1 object(s) took 9.12 seconds.
INFO:io.py:1649:write: Writing 1 object to fastspec-example.fits
See the fastspec data model for a full description
of the output file. Visualize the results using fastqa:
fastqa ./fastspec-example.fits --outdir ./
Click to view the logging output.
INFO:qa.py:1447:parse: /global/common/software/desi/users/ioannis/fastspecfit/bin/fastqa ./fastspec-example.fits --outdir ./
INFO:io.py:1530:read_fastspecfit: Read 1 object(s) from ./fastspec-example.fits
INFO:qa.py:1546:fastqa: Building QA for 1 objects.
INFO:qa.py:1586:fastqa: Cached stellar templates /global/cfs/cdirs/desi/public/external/templates/fastspecfit/2.0.0/ftemplates-chabrier-2.0.0.fits
INFO:qa.py:1587:fastqa: Cached emission-line table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/emlines.ecsv
INFO:qa.py:1588:fastqa: Cached photometric filters and parameters /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/legacysurvey-dr9.yaml
INFO:qa.py:1589:fastqa: Cached cosmology table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/desi_fiducial_cosmology.dat
INFO:qa.py:1590:fastqa: Cached Inoue+2014 IGM attenuation parameters.
INFO:io.py:728:gather_metadata: specprod=loa, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:1063:read: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/loa/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:qa.py:675:qa_fastspec: https://www.legacysurvey.org/viewer/jpeg-cutout?ra=105.48977452498902&dec=56.669300058331935&width=114&height=87&layer=ls-dr9
INFO:qa.py:1395:qa_fastspec: Writing ./fastspec-sv1-bright-7108-39633345008634465.png
The figure above succinctly summarizes the fastspec inputs and modeling
results:
Upper-right panel: grz color cutout from the Legacy Surveys centered on the DESI target. The solid and dashed yellow circles represent the \(1.5^{"}\) diameter DESI fiber aperture and a \(10^{"}\) reference aperture, respectively.
Middle-left panel: Three-camera observed DESI spectrophotometry and best-fitting model, shown as light and dark blue, green, and red spectra, respectively, and spanning the observed-frame \(0.36-0.98~\mu m\) wavelength range. The thin, light gray curve around zero flux shows the smooth continuum correction which is added to the thick, dark gray best-fitting stellar population synthesis model (see the algorithms documentation for details).
Top-middle panel: Observed and modeled broadband spectral energy distribution between \(0.1-35~\mu m\) in the observed frame. The orange points (or arrows) show the observed grz (optical) and W1-W4 (infrared) fluxes or \(2\sigma\) upper limits from the Legacy Surveys, and the open square markers represent the photometry synthesized from the best-fitting model. The blue, green, and red spectra in this panel are the best-fitting DESI model after multiplying by the derived aperture correction (shown in the bottom portion of the panel as the factor of 1.32).
Lower-right panel: Zoomed panels showing the data and best-fit model for all the emission lines within the observed spectral range.
Running fastphot
fastphot models only the broadband photometry at the Redrock redshift,
and is significantly faster than fastspec. Using the same example object:
fastphot $DESI_SPECTRO_REDUX/loa/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
--targetids 39633345008634465 --outfile ./fastphot-example.fits
Click to view the logging output.
INFO:fastspecfit.py:302:fastspec: Cached stellar templates /global/cfs/cdirs/desi/public/external/templates/fastspecfit/2.0.0/ftemplates-chabrier-2.0.0.fits
INFO:fastspecfit.py:303:fastspec: Cached emission-line table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/emlines.ecsv
INFO:fastspecfit.py:304:fastspec: Cached photometric filters and parameters /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/legacysurvey-dr9.yaml
INFO:fastspecfit.py:305:fastspec: Cached cosmology table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/desi_fiducial_cosmology.dat
INFO:fastspecfit.py:306:fastspec: Cached Inoue+2014 IGM attenuation parameters.
INFO:io.py:728:gather_metadata: specprod=loa, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:1063:read: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/loa/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:fastspecfit.py:151:fastspec_one: Continuum fitting object 0 [targetid 39633345008634465, seed 2032329983, z=0.368743].
INFO:continuum.py:1222:continuum_fastphot: Fitting 5 models took 0.05 seconds [rchi2_phot=4.2, ndof=7].
INFO:continuum.py:1248:continuum_fastphot: Model Dn(4000)=1.130+/-0.017 tau(V)=0.423+/-0.133 mag vdisp=250 km/s
INFO:continuum.py:2049:continuum_specfit: vdisp=250.00 km/s log(M/Msun)=9.32+/-0.22 tau(V)=0.42+/-0.13 Age=5.75+/-3.41 Gyr SFR=3.34+/-0.85 Msun/yr Z/Zsun=0.00
INFO:fastspecfit.py:433:fastspec: Fitting 1 object(s) took 2.86 seconds.
INFO:io.py:1649:write: Writing 1 object to ./fastphot-example.fits
And to generate the QA:
fastqa fastphot-example.fits --outdir ./
Click to view the logging output.
INFO:qa.py:1447:parse: /global/common/software/desi/users/ioannis/fastspecfit/bin/fastqa fastphot-example.fits --outdir ./
INFO:io.py:1530:read_fastspecfit: Read 1 object(s) from fastphot-example.fits
INFO:qa.py:1546:fastqa: Building QA for 1 objects.
INFO:qa.py:1586:fastqa: Cached stellar templates /global/cfs/cdirs/desi/public/external/templates/fastspecfit/2.0.0/ftemplates-chabrier-2.0.0.fits
INFO:qa.py:1587:fastqa: Cached emission-line table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/emlines.ecsv
INFO:qa.py:1588:fastqa: Cached photometric filters and parameters /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/legacysurvey-dr9.yaml
INFO:qa.py:1589:fastqa: Cached cosmology table /global/common/software/desi/users/ioannis/fastspecfit/py/fastspecfit/data/desi_fiducial_cosmology.dat
INFO:qa.py:1590:fastqa: Cached Inoue+2014 IGM attenuation parameters.
INFO:io.py:728:gather_metadata: specprod=loa, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:1063:read: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/loa/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:qa.py:675:qa_fastspec: https://www.legacysurvey.org/viewer/jpeg-cutout?ra=105.48977452498902&dec=56.669300058331935&width=114&height=87&layer=ls-dr9
INFO:qa.py:1395:qa_fastspec: Writing ./fastphot-sv1-bright-7108-39633345008634465.png
Refer to the fastphot data model for a full description of the output file.
Note
The orange points (or arrows) show the observed grz (optical) and W1-W4 (infrared) fluxes or \(2\sigma\) upper limits from the Legacy Surveys, and the open square markers represent the photometry synthesized from the best-fitting model.
Plotting the Best-Fit Model
The MODELS extension stores the best-fit spectral components, making it
straightforward to generate custom figures:
import numpy as np
import fitsio
from astropy.table import Table
import matplotlib.pyplot as plt
from desiutil.dust import dust_transmission
from desispec.io import read_spectra
from desispec.coaddition import coadd_cameras
specfile = '$DESI_SPECTRO_REDUX/iron/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits'
fastfile = 'fastspec-example.fits'
meta = Table(fitsio.read(fastfile, 'METADATA'))
fast = Table(fitsio.read(fastfile, 'FASTSPEC'))
models, hdr = fitsio.read(fastfile, 'MODELS', header=True)
modelwave = hdr['CRVAL1'] + np.arange(hdr['NAXIS1']) * hdr['CDELT1']
spec = read_spectra(specfile).select(targets=meta['TARGETID'])
coadd_spec = coadd_cameras(spec)
bands = coadd_spec.bands[0]
mw_transmission_spec = dust_transmission(coadd_spec.wave[bands], meta['EBV'])
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot(coadd_spec.wave[bands], coadd_spec.flux[bands].flatten() / mw_transmission_spec,
color='gray', alpha=0.7, label='Data')
ax1.plot(modelwave, models[0, 0, :], label='Stellar Continuum Model', ls='-', color='blue')
ax1.plot(modelwave, models[0, 1, :], label='Smooth Continuum Correction', ls='--', color='k')
ax1.set_ylim(-2.5, 7.5)
ax1.legend(fontsize=8, loc='upper right')
ax2.plot(coadd_spec.wave[bands], coadd_spec.flux[bands].flatten() / mw_transmission_spec,
color='gray', alpha=0.7, label='Data')
ax2.plot(modelwave, np.sum(models, axis=1).flatten(), label='Final Model', ls='-', color='red')
ax2.legend(fontsize=8, loc='upper left')
ax2.set_xlabel(r'Observed-frame Wavelength ($\AA$)')
fig.subplots_adjust(hspace=0.05, top=0.95, right=0.95)
fig.text(0.05, 0.5, r'Flux Density ($10^{-17}~{\rm erg}~{\rm s}^{-1}~{\rm cm}^{-2}~\AA^{-1}$)',
ha='center', va='center', rotation='vertical')
fig.savefig('fastspec-example.png')
Note
All quantities and models are measured from Galactic-extinction-corrected spectra, so the observed data must be dereddened before plotting, as shown above.
Generating and Fitting Stacked Spectra
Note
Documentation and examples for generating and fitting stacked spectra
with stackfit will be added here.
Fitting at Scale
Target Selection
The --targetids, --ntargets, --firsttarget, and --mp flags
control which objects are fit and how many cores are used. --targetids
accepts a comma-separated list:
fastspec $DESI_SPECTRO_REDUX/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
--targetids 39633345008634465,39633334917139798,39633348330522913 \
--outfile fastspec-example2.fits
To fit a contiguous subset, use --ntargets and optionally --firsttarget:
fastspec $DESI_SPECTRO_REDUX/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
--firsttarget 50 --ntargets 20 --outfile fastspec-example3.fits
When fitting more than one object, enable multiprocessing with --mp:
fastspec $DESI_SPECTRO_REDUX/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
--firsttarget 50 --ntargets 20 --mp 20 --outfile fastspec-example4.fits
Production Runs with mpi-fastspecfit
For large-scale runs across many healpixels or tiles, use the higher-level
mpi-fastspecfit script, which understands the DESI data organization and
can distribute work across MPI ranks. One must always specify the
spectroscopic production with --specprod.
Use --plan or --dry-run to inspect the work before committing:
mpi-fastspecfit --specprod iron --survey sv1 --program bright \
--healpix 7108 --outdir-data . --plan
INFO:mpi.py:223:_findfiles: Building file list for survey=sv1 and program=bright
INFO:mpi.py:309:plan: Found 1/1 redrockfiles (left) to do.
mpi-fastspecfit --specprod iron --survey sv1 --program bright \
--healpix 7108 --outdir-data . --dry-run
INFO:mpi.py:223:_findfiles: Building file list for survey=sv1 and program=bright
INFO:mpi.py:309:plan: Found 1/1 redrockfiles (left) to do.
INFO:mpi-fastspecfit:46:run_fastspecfit: Planning took 0.01 sec
INFO:mpi-fastspecfit:96:run_fastspecfit: Rank 0, ntargets=264: fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits -o ./iron/healpix/sv1/bright/71/7108/fastspec-sv1-bright-7108.fits --mp 128
To run on a single interactive Perlmutter node:
salloc -N 1 -C cpu -A desi -t 00:10:00 --qos interactive -L cfs
source /global/cfs/cdirs/desi/software/desi_environment.sh main
module load fastspecfit/main
time mpi-fastspecfit --specprod iron --survey sv1 --program bright \
--healpix 7108 --mp 128 --outdir-data .
ls -l ./iron/healpix/sv1/bright/71/7108
INFO:mpi.py:223:_findfiles: Building file list for survey=sv1 and program=bright
INFO:mpi.py:309:plan: Found 1/1 redrockfiles (left) to do.
INFO:mpi-fastspecfit:46:run_fastspecfit: Planning took 0.16 sec
INFO:mpi-fastspecfit:96:run_fastspecfit: Rank 0, ntargets=264: fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits -o ./iron/healpix/sv1/bright/71/7108/fastspec-sv1-bright-7108.fits --mp 128
INFO:mpi-fastspecfit:119:run_fastspecfit: rank 0 done in 113.58 sec
INFO:mpi-fastspecfit:140:run_fastspecfit: All done at Sun Aug 7 06:17:02 2022
real 1m55.770s
user 14m38.856s
sys 1m16.424s
total 12092
-rw-rw-r-- 1 ioannis ioannis 12007670 Aug 7 06:17 fastspec-sv1-bright-7108.fits
-rw-rw-r-- 1 ioannis ioannis 370424 Aug 7 06:17 fastspec-sv1-bright-7108.log
Omitting --survey, --program, or --healpix causes the code to
iterate over all available values. For example, to plan a full SV3 run:
mpi-fastspecfit --specprod iron --survey sv3 --outdir-data . --plan
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=bright
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=dark
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=other
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=backup
INFO:mpi.py:309:plan: Found 1023/1023 redrockfiles (left) to do.
INFO:mpi.py:326:plan: Skipping 70 files with no targets.
To fit broadband photometry instead of spectroscopy, add --fastphot:
mpi-fastspecfit --specprod iron --survey sv3 --outdir-data . --plan --fastphot
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=bright
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=dark
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=other
INFO:mpi.py:223:_findfiles: Building file list for survey=sv3 and program=backup
INFO:mpi.py:309:plan: Found 1023/1023 redrockfiles (left) to do.
INFO:mpi.py:326:plan: Skipping 70 files with no targets.
mpi-fastspecfit also supports tile-based coadds via --coadd-type:
mpi-fastspecfit --specprod iron --coadd-type cumulative --tile 80613 --outdir-data . --plan
INFO:mpi.py:309:plan: Found 10/10 redrockfiles (left) to do.
mpi-fastspecfit --specprod iron --coadd-type pernight --tile 80613 --outdir-data . --plan
INFO:mpi.py:309:plan: Found 57/57 redrockfiles (left) to do.
mpi-fastspecfit --specprod iron --coadd-type perexp --tile 80613 --outdir-data . --plan
INFO:mpi.py:309:plan: Found 283/283 redrockfiles (left) to do.
Slurm Batch Jobs
Note
A Slurm batch job template for multi-node production runs will be added here.
Merging Output Catalogs
Note
Documentation on merging per-healpix output files into a single catalog will be added here.