Running FastSpecFit

Note

Before running any of the examples below, we assume that you have successfully installed and set up FastSpecFit.

Overview

The primary executable script for FastSpecFit is called fastspec, which takes one or more Redrock redshift catalogs as input (and one or more corresponding DESI spectra) and, by default, jointly models the DESI spectrophotometry and broadband photometry.

Click to view the fastspec help message.
$> fastspec --help
usage: fastspec [-h] -o OUTFILE [--mp MP] [-n NTARGETS] [--firsttarget FIRSTTARGET] [--targetids TARGETIDS] [--no-broadlinefit] [--nophoto] [--percamera-models]
                [--imf IMF] [--templateversion TEMPLATEVERSION] [--templates TEMPLATES] [--redrockfile-prefix REDROCKFILE_PREFIX]
                [--specfile-prefix SPECFILE_PREFIX] [--qnfile-prefix QNFILE_PREFIX] [--mapdir MAPDIR] [--dr9dir DR9DIR] [--specproddir SPECPRODDIR] [--verbose]
                [redrockfiles ...]

positional arguments:
  redrockfiles          Full path to input redrock file(s). (default: None)

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)
  --no-broadlinefit     Do not allow for broad Balmer and Helium line-fitting. (default: True)
  --nophoto             Do not include the photometry in the model fitting. (default: False)
  --percamera-models    Return the per-camera (not coadded) model spectra. (default: False)
  --imf IMF             Initial mass function. (default: chabrier)
  --templateversion TEMPLATEVERSION
                        Template version number. (default: 1.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)
  --dr9dir DR9DIR       Optional directory name for the DR9 photometry. (default: None)
  --specproddir SPECPRODDIR
                        Optional directory name for the spectroscopic production. (default: None)
  --verbose             Be verbose (for debugging purposes). (default: False)

Note that in addition to the Redrock catalog, fastspec also requires the DESI coadded spectrum to be located in the same directory (with a default coadd- prefix). In addition, there are two key support routines, which we describe in more detail below:

  • fastqa, to build quality assurance (QA) figures; and

  • mpi-fastspecfit, to execute a variety of tasks (in parallel) on larger numbers of input files or catalogs.

One fastspec Example

To model the spectrum of a single object, we simply provide fastspec the full path of an input Redrock catalog, the targetid of the object we are interested in, and an (arbitrary) output filename:

$> fastspec $DESI_ROOT/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
  --targetids 39633345008634465 --outfile fastspec-example.fits
Click to view the informational output printed to the screen after executing this command.
INFO:fastspecfit.py:122:parse: /global/homes/i/ioannis/code/desihub/fastspecfit/bin/fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits --targetids 39633345008634465 --outfile fastspec-example.fits
INFO:io.py:525:select: Reading and parsing 1 unique redrockfile(s).
INFO:io.py:579:select: specprod=iron, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:847:select: Gathered photometric metadata for 1 objects in 0.19 sec
INFO:io.py:937:read_and_unpack: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:spectra.py:291:read_spectra: iotime 0.215 sec to read coadd-sv1-bright-7108.fits at 2023-02-24T04:49:07.030436
INFO:io.py:966:read_and_unpack: Coadding across cameras took 0.01 seconds.
INFO:io.py:111:unpack_one_spectrum: Pre-processing object 0 [targetid 39633345008634465 z=0.368744].
INFO:fastspecfit.py:174:fastspec: Reading and unpacking 1 spectra to be fitted took 3.57 seconds.
INFO:fastspecfit.py:50:fastspec_one: Continuum- and emission-line fitting object 0 [targetid 39633345008634465, z=0.368744].
INFO:io.py:1505:cache_templates: Reading /global/cfs/cdirs/desi/science/gqp/templates/fastspecfit/1.0.0/ftemplates-chabrier-1.0.0.fits
INFO:continuum.py:1760:continuum_specfit: S/N_b=3.20, S/N_r=6.20, S/N_z=6.04, rest wavelength coverage=2630-7177 A.
INFO:continuum.py:1775:continuum_specfit: Fitting for the velocity dispersion took 1.44 seconds.
INFO:continuum.py:1790:continuum_specfit: Finding vdisp failed; adopting vdisp=125 km/s.
WARNING:continuum.py:1243:templates2data: Padding model spectrum due to insufficient wavelength coverage to synthesize photometry.
INFO:continuum.py:1857:continuum_specfit: Median aperture correction = 1.320 [1.209-1.471].
INFO:continuum.py:1884:continuum_specfit: Final fitting with 120 models took 0.38 seconds.
INFO:continuum.py:1918:continuum_specfit: Spectroscopic DN(4000)=0.944+/-0.028, Model Dn(4000)=1.101
INFO:continuum.py:1953:continuum_specfit: Smooth continuum correction: b=-0.252%, r=0.125%, z=0.036%
INFO:continuum.py:1978:continuum_specfit: Mstar=9.178 Msun, Mr=-19.80 mag, A(V)=0.542, Age=0.753 Gyr, SFR=3.535 Msun/yr, Z/Zsun=-0.473
INFO:continuum.py:2019:continuum_specfit: Continuum-fitting took 2.10 seconds.
INFO:emlines.py:2337:emline_specfit: Initial line-fitting with 28 free parameters took 0.35 seconds [niter=2, rchi2=1.5841].
INFO:emlines.py:2381:emline_specfit: Second (broad) line-fitting with 39 free parameters took 0.77 seconds [niter=3, rchi2=1.7877].
INFO:emlines.py:2386:emline_specfit: Chi2 with broad lines = 1.78772 and without broad lines = 1.58412 [chi2_narrow-chi2_broad=-0.20360]
INFO:emlines.py:2409:emline_specfit: Dropping broad-line model: delta-rchi2 -0.204<0.000.
INFO:emlines.py:2517:emline_specfit: Final line-fitting with 35 free parameters took 0.41 seconds [niter=2, rchi2=1.5550].
INFO:emlines.py:2608:emline_specfit: Dn(4000)=1.033 in the emission-line subtracted spectrum.
INFO:emlines.py:2649:emline_specfit: Emission-line fitting took 1.71 seconds.
INFO:fastspecfit.py:214:fastspec: Fitting 1 object(s) took 4.31 seconds.
INFO:io.py:1335:write_fastspecfit: Writing results for 1 object to fastspec-example.fits
INFO:io.py:1392:write_fastspecfit: Writing out took 1.38 seconds.

See the fastspec data model for a full description of the contents of the fastspec-example.fits file which is written out. We can visualize the results to create the fastspec-sv1-bright-7108-39633345008634465.png file by invoking the following command:

$> fastqa ./fastspec-example.fits --outdir ./
Click to view the informational output printed to the screen after executing this command.
INFO:fastqa:53:parse: /global/homes/i/ioannis/code/desihub/fastspecfit/bin/fastqa ./fastspec-example.fits --outdir ./
INFO:io.py:1716:read_fastspecfit: Read 1 object(s) from ./fastspec-example.fits
INFO:fastqa:131:main: Building QA for 1 objects.
INFO:io.py:665:select: Reading and parsing 1 unique redrockfile(s).
INFO:io.py:720:select: specprod=iron, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:995:select: Gathered photometric metadata for 1 objects in 0.07 sec
INFO:io.py:1085:read_and_unpack: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:spectra.py:291:read_spectra: iotime 0.470 sec to read coadd-sv1-bright-7108.fits at 2023-03-31T14:14:14.983411
INFO:io.py:1114:read_and_unpack: Coadding across cameras took 0.01 seconds.
INFO:io.py:111:unpack_one_spectrum: Pre-processing object 0 [targetid 39633345008634465 z=0.368744].
INFO:fastspecfit.py:656:qa_fastspec: timeout 15 wget -q -o /dev/null -O ./tmp.fastspec-sv1-bright-7108-39633345008634465.jpeg "https://www.legacysurvey.org/viewer/jpeg-cutout?ra=105.48977452498902&dec=56.669300058331935&width=114&height=87&layer=ls-dr9"
INFO:fastspecfit.py:1342:qa_fastspec: Writing ./fastspec-sv1-bright-7108-39633345008634465.png
INFO:fastqa:241:main: QA for everything took: 12.64 sec

_images/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 red circle represents 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 (showin 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.

In some cases it may be convenient to generate your own figure of the data and the best-fitting models, which you can do by reading the data yourself and using the spectra stored in the MODELS FITS extension:

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 = '/global/cfs/cdirs/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')
_images/fastspec-example.png

Note

All the quantities and models returned by FastSpecFit are measured from DESI spectra which have been corrected for Galactic extinction, so the data have to be extinction-corrected when generating the figure above.

One fastphot Example

FastSpecFit can also model the broadband photometry (at the given DESI redshift) using fastphot. Using the same example object as above, we have:

$> fastphot $DESI_ROOT/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
  --targetids 39633345008634465 --outfile fastphot-example.fits
Click to view the informational output printed to the screen after executing this command.
INFO:fastspecfit.py:127:parse: /global/homes/i/ioannis/code/desihub/fastspecfit/bin/fastphot /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits --targetids 39633345008634465 --outfile fastphot-example.fits
INFO:io.py:665:select: Reading and parsing 1 unique redrockfile(s).
INFO:io.py:720:select: specprod=iron, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:995:select: Gathered photometric metadata for 1 objects in 0.22 sec
INFO:io.py:1085:read_and_unpack: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:io.py:111:unpack_one_spectrum: Pre-processing object 0 [targetid 39633345008634465 z=0.368744].
INFO:fastspecfit.py:194:fastspec: Reading and unpacking 1 spectra to be fitted took 3.22 seconds.
INFO:fastspecfit.py:51:fastspec_one: Continuum- and emission-line fitting object 0 [targetid 39633345008634465, z=0.368744].
INFO:continuum.py:1685:continuum_specfit: Adopting nominal vdisp=125 km/s.
WARNING:continuum.py:1243:templates2data: Padding model spectrum due to insufficient wavelength coverage to synthesize photometry.
INFO:continuum.py:1706:continuum_specfit: Fitting 120 models took 0.07 seconds.
INFO:continuum.py:1726:continuum_specfit: Model Dn(4000)=1.139.
INFO:continuum.py:1981:continuum_specfit: Mstar=9.528 Msun, Mr=-19.92 mag, A(V)=0.817, Age=1.679 Gyr, SFR=1.469 Msun/yr, Z/Zsun=-0.992
INFO:continuum.py:2022:continuum_specfit: Continuum-fitting took 0.20 seconds.
INFO:fastspecfit.py:236:fastspec: Fitting 1 object(s) took 0.86 seconds.
INFO:io.py:1759:write_fastspecfit: Writing results for 1 object to fastphot-example.fits
INFO:io.py:1816:write_fastspecfit: Writing out took 0.10 seconds.

And to generate the QA:

$> fastqa fastphot-example.fits --outdir ./
Click to view the informational output printed to the screen after executing this command.
INFO:fastqa:53:parse: /global/homes/i/ioannis/code/desihub/fastspecfit/bin/fastqa fastphot-example.fits --outdir ./
INFO:io.py:1716:read_fastspecfit: Read 1 object(s) from fastphot-example.fits
INFO:fastqa:131:main: Building QA for 1 objects.
INFO:io.py:665:select: Reading and parsing 1 unique redrockfile(s).
INFO:io.py:720:select: specprod=iron, coadd_type=healpix, survey=sv1, program=bright, healpix=7108
INFO:io.py:995:select: Gathered photometric metadata for 1 objects in 0.10 sec
INFO:io.py:1085:read_and_unpack: Reading 1 spectrum from /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/coadd-sv1-bright-7108.fits
INFO:io.py:111:unpack_one_spectrum: Pre-processing object 0 [targetid 39633345008634465 z=0.368744].
INFO:fastspecfit.py:656:qa_fastspec: timeout 15 wget -q -o /dev/null -O ./tmp.fastphot-sv1-bright-7108-39633345008634465.jpeg "https://www.legacysurvey.org/viewer/jpeg-cutout?ra=105.48977452498902&dec=56.669300058331935&width=114&height=87&layer=ls-dr9"
INFO:fastspecfit.py:1343:qa_fastspec: Writing ./fastphot-sv1-bright-7108-39633345008634465.png
INFO:fastqa:241:main: QA for everything took: 6.19 sec
_images/fastphot-sv1-bright-7108-39633345008634465.png

Once again, please refer to the fastphot data model for a full description of the contents of the fastphot-example.fits file.

Note

As documented above, 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.

More Examples

In the examples above, we selected one specific object using the --targetids optional input, which can also be a comma-separated list. For example:

$> fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
  --targetids 39633345008634465,39633334917139798,39633348330522913 \
  --outfile fastspec-example2.fits

Alternatively, you may want to fit a subset of the targets on this healpixel, say the first 20 objects, in which case you would use the --ntargets keyword:

$> fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
  --ntargets 20 --outfile fastspec-example3.fits

If you don’t want to start at the zeroth object, you can offset by an integer number of targets using the --firsttarget option, which in this example would fit objects 50 through 70:

$> fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
  --firsttarget 50 --ntargets 20 --outfile fastspec-example4.fits

Finally, when fitting more than one object, you probably want to use multiprocessing, so that multiple objects are fit simultaneously. We can use parallelism (assuming you’re on a machine with more than one core) using the --mp input:

$> fastspec /global/cfs/cdirs/desi/spectro/redux/iron/healpix/sv1/bright/71/7108/redrock-sv1-bright-7108.fits \
  --firsttarget 50 --ntargets 20 --mp 20 --outfile fastspec-example5.fits

You can see all the options by calling either fastspec or fastphot with the --help option, although most users will only invoke the options documented above:

$> fastspec --help
usage: fastspec [-h] -o OUTFILE [--mp MP] [-n NTARGETS] [--firsttarget FIRSTTARGET] [--targetids TARGETIDS] [--no-broadlinefit] [--nophoto] [--percamera-models]
                [--imf IMF] [--templateversion TEMPLATEVERSION] [--templates TEMPLATES] [--redrockfile-prefix REDROCKFILE_PREFIX]
                [--specfile-prefix SPECFILE_PREFIX] [--qnfile-prefix QNFILE_PREFIX] [--mapdir MAPDIR] [--dr9dir DR9DIR] [--specproddir SPECPRODDIR] [--verbose]
                [redrockfiles ...]

positional arguments:
  redrockfiles          Full path to input redrock file(s). (default: None)

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)
  --no-broadlinefit     Do not allow for broad Balmer and Helium line-fitting. (default: True)
  --nophoto             Do not include the photometry in the model fitting. (default: False)
  --percamera-models    Return the per-camera (not coadded) model spectra. (default: False)
  --imf IMF             Initial mass function. (default: chabrier)
  --templateversion TEMPLATEVERSION
                        Template version number. (default: 1.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)
  --dr9dir DR9DIR       Optional directory name for the DR9 photometry. (default: None)
  --specproddir SPECPRODDIR
                        Optional directory name for the spectroscopic production. (default: None)
  --verbose             Be verbose (for debugging purposes). (default: False)

What if you want to fit a particular survey, program, or healpixel. Do you really need to specify the full path to each individual Redrock file? No! FastSpecFit knows how the DESI data are organized, but to access this information we need to use the higher-level mpi-fastspecfit script. For example, to fit all the objects in the Iron spectroscopic production from survey=sv, program=bright and healpix=7108, we would do (here, 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
$> export FASTSPECFIT_TEMPLATES=$DESI_ROOT/science/gqp/templates/SSP-CKC14z
$> 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

Since fitting can be relatively expensive (in this case, it took about two minutes to fit 264 targets with 128 cores), you may want to see what’s going to happen before fitting large numbers of objects, which we can do using the --plan and/or --dry-run options:

$> 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

If you leave off any combination of the --survey, --program, and/or --healpix options, the code will assume that you want all the possible values of these keywords. For example, to see how many SV3 Redrock files would need to be fit (not recommended without MPI parallelism!), one would do:

$> 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.

Note

One must always specify the spectroscopic production when calling mpi-fastspecfit, in this case --specprod iron.

To fit the broadband photometry instead of the DESI spectroscopy, simply call any of the examples in this section with the --fastphot option:

$> 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.

Finally, mpi-fastspecfit also knows about the tile-based cumulative, per-night, and per-exposure coadds via the --coadd-type optional input. For example:

$> 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.