SPLAT: The SpeX Prism Library Analysis Toolkit

SPLAT is a python-based spectral access and analysis package designed to interface with the SpeX Prism Library (SPL: http://www.browndwarfs.org/spexprism), an online repository of over 1500 low-resolution, near-infrared spectra of low-temperature stars and brown dwarfs. It is built on common python packages such as astropy, matplotlib, numpy, pandas and scipy.

SPLAT tools allow you to:
  • search the SPL for data and source information;
  • access the publically-available (published) spectra contained in it;
  • compare your near-infrared spectrum to these data;
  • make use of published empirical trends in absolute magnitudes and effective temperatures;
  • perform basic spectral analyses such as spectral classification, gravity classification, index measurement, spectrophotometry, reddening, robust comparison statistics, basic math operations;
  • perform advanced analyses such as MCMC spectral model fitting;
  • transform observables using empirical trends;
  • transform observable to physical parameters using evolutionary models; and
  • plot/tabulate/publish your results.

Note that many of these features are currently under development.

Installation and Dependencies

SPLAT is best forked from the github site http://github.com/aburgasser/splat, which is updated on a regular basis. SPLAT has not yet reached v1.0, so bugs are common. Please help us squish them by sending bug reports to aburgasser@ucsd.edu or start an issue on the github site.

You may also try to install splat using pip, but there have been some problems with this

Once you’ve downloaded the code and data, you will need to copy the file .splat_access into your home directory (this is your access key) and add the SPLAT top-level directory to the environment variables SPLAT_PATH, PYTHONPATH or your system PATH. More detailed instructions are on the installation page.


SPLAT is best used in the ipython or ipython notebook; all of the necessary data is included in the github/pip install, so you don’t need to be online to run most programs.

Here are some examples:

>>> import splat
>>> splist = splat.getSpectrum(shortname='0415-0935')
>>> splist = splat.getSpectrum(young=True)
>>> splist = splat.getSpectrum(spt=['M7','L5'],jmag=[14.,99.])

In each case, splist is a list of Spectrum objects, which is the container of various aspects of the spectrum and it source properties. For example, selecting the first spectrum,

>>> sp = splist[0]

sp.wave gives the wavelengths of this spectrum, sp.flux the flux values, and sp.noise the flux uncertainty. There are several other elements to the Spectrum object that can be accessed using sp.info().

You can also read in your own spectrum by passing a filename

>>> sp = splat.Spectrum(filename='PATH_TO/myspectrum.fits')

Note that this file must conform to the following standard: the first column is wavelength in microns, second column flux in f_lambda units, third column (optional) is flux uncertainty in f_lambda units.

  • To flux calibrate the spectrum, use the object’s built in fluxCalibrate() method:
>>> sp = splat.getSpectrum(shortname='0415-0935')[0]
>>> sp.fluxCalibrate('2MASS J',14.0)
>>> sp.plot()
>>> splat.plotSpectrum(sp)

which will pop up a window displaying flux vs. wavelength. You can save this display by adding a filename:

>>> splat.plotSpectrum(sp,file='spectrum.png')

You can also compare multiple spectra:

>>> sp1 = splat.getSpectrum(shortname='0415-0935')[0]
>>> sp2 = splat.getSpectrum(shortname='1217-0311')[0]
>>> splat.plotSpectrum(sp1,sp2,colors=['black','red'])

You can add several extras to this to label features, plot uncertainties, indicate telluric absorption regions, make multi-panel and multi-page plots of lists of spectra, etc. Be sure to look through the plotting subpackage for more details.

SPLAT can analyze and compare an arbitrary number of spectra.

>>> sp = splat.getSpectrum(shortname='0415-0935')[0]
>>> value, error = splat.measureIndex(sp,[1.14,1.165],[1.21,1.235],method='integrate')
>>> indices = splat.measureIndexSet(sp,set='testi')

The last line returns a dictionary, whose value,error pair can be accessed by the name of the index:

>>> print indices['sH2O-J']             # returns value, error
>>> sp = splat.getSpectrum(young=True, lucky=True)[0]
>>> print splat.classifyGravity(sp)   # returned 'VL-G'
>>> sp = splat.getSpectrum(shortname='0415-0935')[0]
>>> spt,unc = splat.classifyByIndex(sp,set='burgasser')
>>> spt,unc = splat.classifyByStandard(sp,spt=['T5','T9'])
>>> result = splat.classifyByTemplate(sp,spt=['T6','T9'],nbest=5)

The last line returns a dictionary containing the best 5 template matches to the Spectrum sp.

>>> sp = splat.getSpectrum(shortname='0415-0935')[0]
>>> mdl = splat.loadModel(teff=700,logg=5.0)                    # loads a BTSettl08 model by default
>>> chi,scale = splat.compareSpectra(sp,mdl)
>>> mdl.scale(scale)
>>> splat.plotSpectrum(sp,mdl,colors=['black','red'],legend=[sp.name,mdl.name])

# There is also a basic Markov Chain Monte Carlo code to compare models to spectra called modelFitMCMC():

>>> sp = splat.getSpectrum(shortname='0415-0935')[0]
>>> sp.fluxCalibrate('2MASS J',14.49,absolute=True)
>>> table = splat.modelFitMCMC(sp,initial_guess=[800,5.0,0.],nsamples=300,step_sizes=[50.,0.5,0.])

All of these routines have many options worth exploring, and which are (increasingly) documented on this website. If there are capabilities you need, please suggest them to aburgasser@ucsd.edu, or note it in the “Issues” link on our github site.


SPLAT is an experimental, collaborative project of research students in Adam Burgasser’s UCSD Cool Star Lab, aimed at teaching students how to do research by building their own analysis tools. Contributors to SPLAT have included Christian Aganze, Jessica Birky, Daniella Bardalez Gagliuffi, Adam Burgasser (PI), Caleb Choban, Andrew Davis, Ivanna Escala, Aishwarya Iyer, Yuhui Jin, Mike Lopez, Alex Mendez, Gretel Mercado, Elizabeth Moreno Hilario, Johnny Parra, Maitrayee Sahi, Adrian Suarez, Melisa Tallis, Tomoki Tamiya, Chris Theissen and Russell van Linge.

This project is supported by the National Aeronautics and Space Administration under Grant No. NNX15AI75G.