# Spectral-Index Measurements¶

*Analysis class*: `SpectralIndices`

*Method definition*: `SpectralIndicesDef`

*Reference root*: `$MANGA_SPECTRO_ANALYSIS/$MANGADRP_VER/$MANGADAP_VER/[PLATE]/[IFUDESIGN]/ref`

*Reference file*: `manga-[PLATE]-[IFUDESIGN]-[DRPQA_KEY]-[BIN_KEY]-[CONTINUUM_KEY]-[ELFIT_KEY]-[SPINDEX_KEY].fits.gz`

*Config files*: `$MANGADAP_DIR/mangadap/config/spectral_indices`

*Example config*: `indxen.ini`

```
[default]
key = INDXEN
minimum_snr = 0.0
resolution_fwhm = -1
compute_sigma_correction = True
artifact_mask = BADSKY
absorption_indices = EXTINDX
bandhead_indices = BHBASIC
```

*Important class dependencies*:

`AbsorptionIndexDB`

: Generalized class that provides the detailed parameters for a set of absorption-line spectral indices.

`BandheadIndexDB`

: Generalized class that provides the detailed parameters for a set of bandhead (or “color”) spectral indices.

`mangadap.proc.bandpassfilter`

: Provides the core functions that perform the bandpass integrals.

*Algorithm*:

Read the artifact database to setup the

`SpectralPixelMask`

object based on the`artifact_mask`

config.Setup the

`AbsorptionIndexDB`

(using`absorption_indices`

config) and`BandheadIndexDB`

(using`bandhead_indices`

config) databases with the indices to measure.Determine the binned spectra above the S/N limit set by the

`minimum_snr`

config.Mask binned spectra, ignoring pixels masked as

`DONOTUSE`

,`IGNORED`

,`FLUXINVALID`

, or`FORESTAR`

in DAP`LOGCUBE`

file.Get the best-fitting emission-line models from the

`EmissionLineModel`

object and subtract it from them from the data; keep track of where an emission-line model is and is not defined.Measure the indices using

`measure_indices()`

:

Compute flux per frequency, needed for some indices; i.e., convert spectra from \(F_\lambda\) to \(F_\nu\).

Isolate which indices use each definition (\(F_\lambda\) vs. \(F_\nu\))

Mask any “dummy” indices.

For each spectrum, redshift the band definition, measure the absorption-line indices using

`AbsorptionLineIndices`

, and the bandhead indices using`BandheadIndices`

, and save the results using`save_results()`

.

Part of saving the results is to determine which indices were successfully measured. Only bands that are completely masked (or empty) are flagged as

`NOVALUE`

in the output maps. I also keep track of which bands are incomplete (only partially masked).Compute the velocity-dispersion corrections:

Get the best-fitting continuum model from the

`StellarContinuumModel`

, both with (`continuum`

) and without (`continuum_dcnvlv`

) the convolution with the best-fitting line-of-sight velocity distribution function (LOSVD) using`fill_to_match()`

.Remeasure the indices on these two models (

`indx`

and`dcnvlv_indx`

, respectively) and the correction based on the result using`calculate_dispersion_corrections()`

For

`mag`

unit indices, the correction is`dcnvlv_indx-indx`

For

`ang`

unit indices, the correction is`dcnvlv_indx/indx`

Any index with a bad correction is flagged as

`NOCORRECTION`

.Construct spectral-index

`BINID`

map. Bin IDs are the same as for the binned spectra except that any bin that does not meet the S/N limit are given a spectral-index bin ID of -1.