Updated: 14 March 2014

Precious Metals in SDSS Quasar Spectra I:
Tracking the Evolution of
Strong, 1.5 < z < 4.5 C IV Absorbers with Thousands of Systems

Supplementary Data

Kathy L. Cooksey, Melodie M. Kao, Robert A. Simcoe, John M. O'Meara, and J. Xavier Prochaska

Go directly to: Paper and Abstract | Results Summary | Data Products | Codes and Calls


14 March 2016—Updated catalog posted. Data products coming soon;contact KLC if urgent.

Paper and Abstract

Reference: Cooksey et al. (2013, ApJ, 763, 37: online, PDF)

Abstract: We have vastly increased the C IV statistics at intermediate redshift by surveying the thousands of quasars in the Sloan Digital Sky Survey Data-Release 7. We visually verified over 16,000 C IV systems with 1.46 < z < 4.55—a sample size that renders Poisson error negligible. Detailed Monte Carlo simulations show we are approximately 50% complete down to rest equivalent widths Wr ≈ 0.6 Å. We analyzed the sample as a whole and in ten small redshift bins with approximately 1500 doublets each. The equivalent width frequency distributions ƒ(Wr) were well modeled by an exponential, with little evolution in shape. In contrast with previous studies that modeled the frequency distribution as a single power law, the fitted exponential gives a finite mass density for C IV ions. The co-moving line density dNC IV/dX evolved smoothly with redshift, increasing by a factor of 2.37 ± 0.09 from z = 4.55 to 1.96, then plateauing at dNC IV/dX ≈ 0.34 for z = 1.96 to 1.46. Comparing our SDSS sample with z < 1 (ultraviolet) and z > 5 (infrared) surveys, we see an approximately ten-fold increase in dNC IV/dX over z ≈ 6 → 0, for Wr ≥ 0.6 Å. This suggests a monotonic and significant increase in the enrichment of gas outside galaxies over the 12 Gyr lifetime of the universe.

C IV Results Summary

(1)(2)(3)(4)(5) (6)(7)(8)(9)(10) (11)(12)
zzlim NobsΔXmax W50% dNC IV/dz dNC IV/dX ΩC IV Nfitk αχ2red
         (×10−8)  −1) −1) 
1.96274[1.46623,4.54334] 14772 38624 0.52 0.92+0.02/−0.01 0.275+0.004/−0.004 1.71+0.20/−0.20 89183.49+0.31/− 0.30−2.62+0.04/− 0.04 0.577
1.55687[1.46623,1.60986] 1428 3962 0.63 0.95+0.03/−0.03 0.332+0.011/−0.010 2.18+0.39/−0.39 10253.87+0.94/− 0.82−2.52+0.11/− 0.12 1.560
1.65971[1.61004,1.69993] 1473 3420 0.57 1.00+0.04/−0.03 0.336+0.012/−0.011 2.10+0.32/−0.32 9563.77+0.95/− 0.82−2.48+0.12/− 0.13 0.876
1.73999[1.70035,1.78000] 1449 2987 0.53 1.08+0.04/−0.04 0.356+0.013/−0.012 2.17+0.28/−0.28 9024.46+1.24/− 1.06−2.61+0.14/− 0.14 1.672
1.82360[1.78007,1.86985] 1568 3067 0.51 1.09+0.04/−0.04 0.351+0.012/−0.011 2.11+0.23/−0.24 9324.49+1.20/− 1.04−2.63+0.13/− 0.13 1.291
1.91460[1.87000,1.95998] 1424 2665 0.49 1.12+0.04/−0.04 0.355+0.013/−0.012 2.15+0.23/−0.23 8244.53+1.28/− 1.09−2.63+0.14/− 0.14 1.832
2.01778[1.96002,2.07997] 1523 2983 0.46 1.04+0.04/−0.04 0.322+0.012/−0.011 1.86+0.17/−0.17 8525.18+1.76/− 1.51−2.87+0.15/− 0.15 2.838
2.15320[2.08009,2.23997] 1490 2878 0.45 1.04+0.04/−0.04 0.312+0.012/−0.011 1.92+0.17/−0.17 8074.01+1.21/− 1.04−2.63+0.14/− 0.14 3.267
2.35608[2.24015,2.50914] 1450 3341 0.50 0.96+0.04/−0.03 0.276+0.011/−0.010 1.61+0.18/−0.18 7754.26+1.62/− 1.37−2.82+0.15/− 0.16 1.296
2.72298[2.51028,2.96976] 1503 5673 0.61 0.83+0.03/−0.03 0.221+0.009/−0.008 1.44+0.22/−0.22 9692.48+0.74/− 0.65−2.49+0.12/− 0.12 0.837
3.25860[2.97005,4.54334] 1464 7632 0.59 0.59+0.02/−0.02 0.145+0.006/−0.005 0.87+0.13/−0.13 8761.82+0.75/− 0.65−2.61+0.13/− 0.13 1.548

Note −  Summary of the most common redshift bins and data used for the various analyses. Columns 1−2 give the median, minimum, and maximum redshifts for the observed number of doublets (Column 3), and the maximum co-moving pathlength in the redshift bin is given in Column 4. The 50% completeness from the Monte Carlo tests is in Column 5. The redshift and co-moving absorber line densities for Wr ≥ 0.6 Å are in Columns 6−7. In Column 8, the ΩC IV from summing the mass in the Wr ≥ 0.6 Å absorbers is a lower limit, since the majority of absorbers are saturated. The frequency distribution was fit with an exponential ƒ(Wr) = k exp(αWr) for Nfit absorbers with Wr ≥ 0.6 Å (Column 9), and the best-fit parameters are given in Columns 10−11. The reduced χ2 from the best fit and ƒ(Wr) (in bins with ≈100 doublets each) is given in Column 12.

Data Products

Bundle Description
dr7qso_CIV_noBAL.fit.gz QSO structure, a subset of the Schneider et al. (2010) catalog.
dr7qso_CIV_noBAL.list Formatted list of spectra, in order of the QSO structure, commonly used in the various codes.
dr7qso_CIV_noBAL_SNR.fit.gz Signal-to-noise structure, created by SDSS_MKSNRTAB, in order of the QSO structure.
spectro_0266-0527.tar spectro_0528-0775.tar spectro_0776-1049.tar spectro_1050-1358.tar spectro_1359-1678.tar spectro_1679-1944.tar spectro_1945-2223.tar spectro_2224-2575.tar spectro_2576-2973.tar SDSS spectra of the sightlines surveyed for C IV.
hybconti_0266-0527.tar hybconti_0528-0775.tar hybconti_0776-1049.tar hybconti_1050-1358.tar hybconti_1359-1678.tar hybconti_1679-1944.tar hybconti_1945-2223.tar hybconti_2224-2575.tar hybconti_2576-2973.tar Hybrid-continuum fits generated with SDSS_DBLFITCONTI.PRO (see below).
abslin_0266-0527.tar abslin_0528-0775.tar abslin_0776-1049.tar abslin_1050-1358.tar abslin_1359-1678.tar abslin_1679-1944.tar abslin_1945-2223.tar abslin_2224-2575.tar abslin_2576-2973.tar Continuum and automatically detected line structure (SDSSCONTISTRCT__DEFINE.PRO), generated with SDSS_FNDLIN.PRO (see below).
vpstrct32000le500perEW.fit.gz Simulated C IV Voigt profiles used for the Monte Carlo completeness tests.
mcciv_0266-0527.tar mcciv_0528-0775.tar mcciv_0776-1049.tar mcciv_1050-1358.tar mcciv_1359-1678.tar mcciv_1679-1944.tar mcciv_1945-2223.tar mcciv_2224-2575.tar mcciv_2576-2973.tar Basic Monte Carlo completeness tests for a sub-sample of the C IV sightlines, generated with SDSS_COMPLETENESS.PRO (see below).
The full C IV systems structure from the paper
and update (14 March 2016).
cmpltrec_CIV_1z6cum.fit.gz cmpltrec_CIV_1.46z4.55n1500cum.fit.gz Combined completeness curves for redshift bins used in paper, generated with SDSS_COMPLETENESS_CZW or SDSS_COMPLETENESS_CUM (see below).
cmpltrec_userbias_noBAL.fit.gz Estimate of the true negative and accepted false positive rates from SDSS_COMPLETENESS_USERBIAS; used by SDSS_APPLYUSERBIAS() and SDSS_GETAFPDNDX.PRO.
fwfit_CIV.tar Equivalent width frequency distribution fit structures presented in the paper, generated with SDSS_FITFXW.PRO (see below).

Codes and Calls

Go directly to: Directory Structure | Setting-up Codes | Working with C IV Structure | Continuum Fitting, Identifying Candidates, Generating Completeness Curves

Directory Structure

You will need to set the environment variables SDSSPATH and SDSSDR; for example, in bash:


The codes will expect the following directories under $SDSSPATH/$SDSSDR/:

Setting-up Codes

The main data processing and analysis codes are IDL-based and in the XIDL package. The majority of the custom codes are in $XIDL_DIR/SDSS/CIV. Several general programs and functions are in SDSS_FUNCTIONS.PRO, and this needs to be compiled before any XIDL SDSS codes are run. This can be done automatically at startup by adding the following lines to your .idlstartup file:

!quiet = 1 ; suppress messages
.r sdss_functions
!quiet = 0

The list and description of programs and functions in SDSS_FUNCTIONS.PRO can be seen by calling sdss_functions at the IDL prompt:


Below, basic calls that other researchers may find useful are described. Other program and function options can often be seen by making the program or function calls without parameters or with the /help option. Several calls can return values in redshift (as opposed to co-moving pathlength) space when /dz is included as an option.

Working with C IV Structure

The absorber structure is described in SDSSCIVSTRCT__DEFINE.PRO. Here are basic ways of manipulating the structure. First, SDSS_GETCIVSTRCT() (in SDSS_FUNCTIONS.PRO) can be used to grab various sub-samples. For example, to extract the doublets with redshifts 1.5 ≤ z < 2 and rest equivalent widths Wr ≥ 0.6 Å that are more than 5000 km s−1 from the background QSO (i.e., δvQSO < −5000 km s−1) and not in visual BAL QSO sightlines, the call would be:

IDL>civstrct = sdss_getcivstrct('sdss_civ_cookseyetal13.fit', zlim=[1.5,2], ewlim=[0.6,!values.f_infinity], /noBAL, dvqso=-5000)

More options for SDSS_GETCIVSTRCT() can be found by using the /help option. The redshift, equivalent widths, and column densities (from the apparent optical depth method) are stored in the arrays tagged as ZABS_ORIG, EW_ORIG, and NCOLM_ORIG, with errors in the SIGZABS_ORIG, SIGEW_ORIG, and SIGNCOLM_ORIG arrays. The zeroth array element is for the C IV 1548 line and the first is for the 1550 line. The 1548 and 1550 column density measurements can be combined into a system column density estimate as follows:

IDL>ncolm = sdss_calncolmdblt(civstrct, 'CIV', signcolm=signcolm, /log, ncolmflg=ncolmflg)

The column density (limit) flags can be estimated by forcing all doublets with ratio Wr,1548/Wr,1550 < (2 − combined error) to be lower limits, assuming they are saturated.

A quick way to view a lot of information about the systems is to use the rating GUI SDSS_CHKCIV.PRO, which needs the directory structure defined above. The program can accept a structure or file name as an input and needs an output variable or file:

IDL>sdss_chkciv, civstrct, outstrct

If you have a completeness curve for 1.5 ≤ z < 2 and δvQSO < −5000 km s−1 called cmpltrec_CIV_1.5z2.0.fit (see below), you can view the completeness curve and errors, if the IDLUTILS package is installed (available e.g., here), with the following command:

IDL>cxw = sdss_getdxw('cmpltrec_CIV_1.5z2.0.fit', civstrct.zabs_orig[0], civstrct.ew_orig[0], sigewabs=civstrct.sigew_orig[0], sigma=sigcxw, /czw)
IDL>plot, civstrct.ew_orig[0], dxw, psym=4, xtitle='EW', ytitle='C(W)'
IDL>oploterror, civstrct.ew_orig[0], civstrct.sigew_orig[0], sigcxw[*,0], /lobar
IDL>oploterror, civstrct.ew_orig[0], civstrct.sigew_orig[0], sigcxw[*,1], /hibar
If you exclude the /czw option, SDSS_CALCDXW() returns the co-moving pathlength available to detect each given equivalent width. To correct the completeness or pathlength obscured by detected absorbers with greater equivalent width, include the /civobs_corr or civobs_corr=civstrct option.

You can generate an equivalent width frequency distribution ƒ(Wr) as follows:

IDL>fw = sdss_calcfxw(civstrct, 'cmpltrec_CIV_1.5z2.0.fit', [1.5,2])

This returns a structure that can be plotted with the errors as follows:

IDL>plot, fw.ewcenter, fw.fxw, psym=4, xtitle='EW', ytitle='f(W)', /ylog
IDL>oploterror, fw.ewcenter, fw.fxw, fw.sigewcenter[*,0], fw.sigfxw[*,0], /lobar
IDL>oploterror, fw.ewcenter, fw.fxw, fw.sigewcenter[*,1], fw.sigfxw[*,1], /hibar

You can fit the 1.5 ≤ z < 2 frequency distribution with an exponential and overplot the results on the previous plot with the following calls:

IDL>sdss_fitfxw, 'cmpltrec_CIV_1.5z2.0.fit', intlim=[0.6, 3.5, 3.5], /exp, civstrct_fil=civstrct, ostrct_fil='fwfit_CIV_1.5z2.0.fit', psfil='fwfit_CIV_1.5z2.0.ps', /plot, sigma=1.
IDL>fwfit = sdss_calcfxwfit(fw.ewcenter, fitstrct='fwfit_CIV_1.5z2.0.fit')
IDL>oplot, fw.ewcenter, fwfit, thick=2, linestyle=2

You can generate and plot a structure with the absorber line density dNC IV/dX for an equivalent width range, as a function of redshift, given a completeness curve with multiple redshift bins cmpltrec_CIV_1z6cum.fit.

IDL>dndx = sdss_calcdndx(civstrct_all, 'cmpltrec_CIV_1z6cum.fit', [0.6, !values.f_infinity]
IDL>plot, dndx.zcenter, dndx.dndx, psym=4, xtitle='z', ytitle='dN/dX'
IDL>oploterror, dndx.zcenter, dndx.dndx, dndx.sigzcenter[*,0], dndx.sigdndx[*,0], /lobar
IDL>oploterror, dndx.zcenter, dndx.dndx, dndx.sigzcenter[*,1], dndx.sigdndx[*,1], /hibar
To subtract off the false positives, include the /afp_flg in the call.

The C IV mass density relative to the critical density, ΩC IV, can be computed and plotted as a function of redshift in a similar way:

IDL>omciv = sdss_calcomega(civstrct_all, 'cmpltrec_CIV_1z6cum.fit', nlim=[10.^14, !values.f_infinity])
IDL>plot, omciv.zcenter, omciv.omega*1e8, psym=4, /ylog
IDL>oploterror, omciv.zcenter, omciv.omega*1e8, omciv.sigzcenter[*,0], omciv.sigomega[*,0]*1e8, /lobar
IDL>oploterror, omciv.zcenter, omciv.omega*1e8, omciv.sigzcenter[*,1], omciv.sigomega[*,1]*1e8, /hibar

Continuum Fitting, Identifying Candidates, and Generating Completeness Curves

Continuum Fitting:

There are three flavors of continuum fits: eigen, spline, and hybrid. The latter depends on the former, and the order of the following calls will lead to the hybrid-fit. The required file is a structure with the information for the QSOs to be fit, dr7qso_CIV.fit (formatted like the Schneider et al. (2010) catalog, see example above).

  1. First fit the eigen-continua, which can be accomplished by running one line in IDL or using a shell script to divide up the task between multiple "processors" via multiple IDL sessions. (Make sure the shell script is executable.) The output will be written to the conti/ directory:
    XIDL>runeigqsoconti, sdsssum='dr7qso_CIV.fit'
    TERM>$XIDL_DIR/SDSS/CIV/eig_runparallelfit.sh 4 dr7qso_CIV.fit
  2. Search the eigen-normalized spectra of absorption features and create the SDSSCONTISTRCT__DEFINE.PRO structure in the abslin/ directory. This code will require a text file that lists the directory to write the output to on the first line, followed by the spectra names, in the same order as the QSO structure, e.g., dr7qso_CIV.list (see example above). This again can be accomplished by a single IDL call or by running a shell script:
    IDL>sdss_fndlin, 'dr7qso_CIV.list', 'dr7qso_CIV.fit', /noBAL, only_cflg=sdss_getcflg(/eig)
    TERM>$XIDL_DIR/SDSS/CIV/sdss_runparallelsrch.sh 4 dr7qso_CIV.list dr7qso_CIV.fit "/noBAL, only_cflg=sdss_getcflg(/eig)"
  3. The hybrid-fitting algorithm will use the lines found in the first eigen-normalized spectra to make a mask. Whether a given spectrum is corrected by a spline-fit to the eigen-normalized spectrum is determined by the S/N, and it is faster to just query the S/N structure, generated by SDSS_MKSNRTAB. This too can be done with one IDL call or via a shell script:
    IDL>sdss_dblfitconti, 'dr7qso_CIV.list', 'dr7qso_CIV.fit', snrstrct_fil='dr7qso_CIV_SNR.fit', dblt_name='CIV'
    TERM>$XIDL_DIR/SDSS/CIV/hyb_runparallelfit.sh 4 dr7qso_CIV.list dr7qso_CIV.fit "snrstrct_fil='dr7qso_CIV_SNR.fit', dblt_name='CIV'"
  4. [Optional] You can also use only a b-spline to fit the continua, via an IDL call or a shell script:
    IDL>sdss_fndlin_fitallspl, 'dr7qso_CIV.list', 'dr7qso_CIV.fit', pixlim=7
    TERM>$XIDL_DIR/SDSS/CIV/spl_runparallelfit.sh 4 dr7qso_CIV.list dr7qso_CIV.fit "pixlim=7"

Identifying Candidates:

To generate a candidate structure, you first must search the normalized spectra for automatically detected lines and then pair these into candidate C IV doublets. You can generate candidates from any three of the continua stored in the abslin/ structure by changing the cflg. Focusing on the hybrid-normalized spectra:

  1. To search the hybrid-normalized spectra and store the results in the abslin/ structures, use either of the following calls:
    IDL>sdss_fndlin, 'dr7qso_CIV.list', 'dr7qso_CIV.fit', /noBAL, only_cflg=sdss_getcflg(/hyb)
    TERM>$XIDL_DIR/SDSS/CIV/sdss_runparallelsrch.sh 4 dr7qso_CIV.list dr7qso_CIV.fit "/noBAL, only_cflg=sdss_getcflg(/hyb)"
  2. Now you can actually search for the candidates. Below, a secondary line search at the 2.5 σ level is called to find partners for un-matched, 3.5 σ lines:
    IDL>sdss_civsearch, 'dr7qso_CIV.list', 'dr7qso_CIV.fit', 'sdss_civcand_hyb.fit', lsnr2=2.5, cflg=sdss_getcflg(/hyb)
    TERM>$XIDL_DIR/SDSS/CIV/sdss_runparallelsrch.sh 4 dr7qso_CIV.list dr7qso_CIV.fit sdss_civcand_hyb.fit "lsnr2=2.5, cflg=sdss_getcflg(/hyb)"
  3. To rate your own candidates, you can use the GUI:
    IDL>sdss_chkciv, 'sdss_civcand_hyb.fit', 'sdss_civrate_hyb.fit'

Generating Completeness Curves:

There is a completeness file for each sightline tested. The information in these files need to be combined into the redshift bin or bins of interest, including any δvQSO cut. This can be accomplished for an explicit redshift range as follows:

IDL>.r sdss_completeness
IDL>sdss_completeness_czw, 'dr7qso_CIV.list', 'dr7qso_CIV_SNR.fit', 'cmpltrec_CIV_1z6cum.fit', zmin=1.7, zbinsize=5, zlim=[1., 5.5], dvqso=-5000, /rec_param, civobs_corr=civstrct

The zmin= option sets the binning for averaging sightlines; since only a subset of sightlines have Monte Carlo tests, the un-tested sightlines are accounted for by the average of the tested sightlines in the same S/N and zQSO bin. The zbinsize= is set to something large to make just one bin in the same file, for the full redshift range 1 < z < 5.5. The /rec_param option signals that the redshifts and equivalent widths used for combining the completeness curves are not the input, Voigt-profile values but the ones automatically measured from the simulated spectra. The civobs_corr=civstrct option (also works with /civobs_corr if sdss_getcivstrct() knows how to find the fiducial file) corrects the completeness or pathlength obscured by detected absorbers with greater equivalent width and folds in the error.

You can also combine the Monte Carlo files into little redshift bins either by forcing an approximate number per bin (first line below) or by explicitly setting the bins (second). You input the root of the output files that will be made.

IDL>sdss_completeness_cum, 1500, 'cmpltrec_CIV_', dvqso=-5000, /rec_param
IDL>zlim=fltarr(7,2) & zlim[*,0] = 0.5*lindgen(7)+1.5 & zlim[*,1] = zlim[*,0] + 0.5
IDL>sdss_completeness_cum, zlim, 'cmpltrec_CIV_', /z, dvqso=-5000, /rec_param

To actually run Monte Carlo tests yourself, you can use a single IDL call or the shell script:

IDL>sdss_completeness, 'dr7qso_CIV.list', 'dr7qso_CIV.fit', 1000, dblt_name='CIV', config_fil=getenv('XIDL_DIR')+'/SDSS/CIV/sdss_civprof.config', vpstrct_fil='vpstrct3200le500perEW.fit'
TERM>$XIDL_DIR/SDSS/CIV/sdss_runparallelcmplt.sh 4 dr7qso_CIV.list dr7qso_CIV.fit 1000 "dblt_name='CIV', config_fil=getenv('XIDL_DIR')+'/SDSS/CIV/sdss_civprof.config', vpstrct_fil='vpstrct3200le500perEW.fit'"

The use of the given simulated profile library (vpstrct3200le500perEW.fit) is optional. The code can call SDSS_GENPROF_MC() and use the sdss_civprof.config file to generate profiles on the fly, though this is slower.

igmabsorbers.info is funded by the National Science Foundation Astronomy & Astrophysics Postdoctoral Fellowship (AST-1003139).