Examples

Running BOSSBrain

The simplest way to run BOSSBrain is with the command-line script bossbrain. The only required argument is the name of a spectrum fits file.

bossbrain spectrum.fits

This will create an output file called spectrum_doppler.fits.

By default, |Doppler| doesn’t print anything to the screen. So let’s set the --verbose or -v parameter.

doppler spectrum.fits -v

spectrum.fits  S/N=  85.1
Fitting Cannon model to spectrum with parameters: Teff, logg, [Fe/H], RV
Masked 103 outlier or negative pixels
TEFF    LOGG     FEH    VREL   CCPEAK    CHISQ
3500.00   4.80  -0.50  -13.67   0.23   7.87
4000.00   4.80  -0.50  -15.37   0.39   5.41
5000.00   4.60  -0.50  -16.56   0.50   3.85
6000.00   4.40  -0.50  -16.77   0.48   5.16
7500.00   4.00  -0.50  -16.90   0.16   7.65
15000.00   4.00  -0.50  989.79   0.03   8.32
25000.00   4.00  -0.50  -999.68   0.05   8.81
40000.00   4.00  -0.50  -308.33   0.08   8.96
3500.00   0.50  -0.50  -15.19   0.34  13.01
4300.00   1.00  -0.50  -16.22   0.45   6.58
4700.00   2.00  -0.50  -16.55   0.50   4.68
5200.00   3.00  -0.50  -16.81   0.50   4.45
Initial RV fit:
Teff   =   5000.00 K
logg   =      4.60
[Fe/H] =     -0.50
Vrel   =    -16.56 +/-  0.136 km/s
Initial Cannon stellar parameters using initial RV
Teff   =   5074.34 K
logg   =      4.86
[Fe/H] =      0.10
Masked 48 discrepant pixels
Initial Cannon stellar parameters using initial RV and Tweaking the normalization
Teff   =   5049.52 K
logg   =      4.98
[Fe/H] =      0.14
Improved RV and Cannon stellar parameters:
Teff   =   5049.52 K
logg   =      4.98
[Fe/H] =      0.14
Vrel   =    -16.78 +/-  0.117 km/s
Least Squares RV and stellar parameters:
Teff   =   5049.52 K
logg   =      4.98
[Fe/H] =      0.14
Vrel   =    -16.78 km/s
chisq =  1.96
Fine grid best RV = -16.98 km/s
chisq =  1.96
Final parameters:
Teff   =   5049.52 +/-  3.158 K
logg   =      4.98 +/-  0.003
[Fe/H] =      0.14 +/-  0.001
Vhelio = -18.02 +/-  0.01 km/s
BC = -1.04 km/s
chisq =  1.96
dt =  3.40 sec.
Writing output to spectrum_doppler.fits

You can also have it save a figure of the spectrum and the best-fit model using the --plot or -p parameter.

doppler spectrum.fits -v -p

spectrum.fits  S/N=  85.1
Fitting Cannon model to spectrum with parameters: Teff, logg, [Fe/H], RV
Masked 103 outlier or negative pixels
TEFF    LOGG     FEH    VREL   CCPEAK    CHISQ
3500.00   4.80  -0.50  -13.67   0.23   7.87
...
chisq =  1.96
Figure saved to spectrum_dopfit.png
dt =  4.08 sec.
Writing output to spectrum_doppler.fits

By default, the figure filename is spectrum_dopfit.png, but the figure filename can be set with the --figfile parameter. Note that you can set the figure type with the extension. For example, to get a PDF just use --figfile spectrum_dopfit.pdf.

Using a Payne Model

By default, |Doppler| uses a Cannon model fitting Teff, logg, [Fe/H] and RV. To use a Payne model instead, just set the --payne parameter.

doppler spectrum.fits -v --payne

spectrum.fits  S/N=  85.1
Fitting Payne model to spectrum with parameters: TEFF, LOGG, FE_H, ALPHA_H, RV
Masked 103 outlier or negative pixels
  TEFF    LOGG   FEH   ALPHAFE    VREL  CCPEAK  CHISQ
   3500   4.80  -1.50   0.00    -13.86   0.13   8.67
   4000   4.80  -1.50   0.00    -15.52   0.17   8.21
   5000   4.60  -1.50   0.00    -17.53   0.33   7.89
   6000   4.40  -1.50   0.00    -17.57   0.28   8.25
   7500   4.00  -1.50   0.00    -17.97   0.04   8.20
  15000   4.00  -1.50   0.00    994.28   0.02   8.57
  25000   4.00  -1.50   0.00  -1004.90   0.01   8.83
  40000   4.00  -1.50   0.00  -1004.90   0.01   9.08
   3500   0.50  -1.50   0.00    -14.79   0.25   9.16
   4300   1.00  -1.50   0.00    -16.82   0.40   6.60
   4700   2.00  -1.50   0.00    -17.12   0.37   7.29
   5200   3.00  -1.50   0.00    -17.31   0.33   7.77
   3500   4.80  -0.50   0.00    -13.67   0.16   7.96
   4000   4.80  -0.50   0.00    -15.71   0.30   6.23
   5000   4.60  -0.50   0.00    -16.92   0.45   4.19
   6000   4.40  -0.50   0.00    -17.03   0.43   6.11
   7500   4.00  -0.50   0.00    -16.94   0.15   7.54
  15000   4.00  -0.50   0.00    996.77   0.02   8.60
  25000   4.00  -0.50   0.00  -1004.90   0.01   8.85
  40000   4.00  -0.50   0.00  -1004.90   0.01   9.08
   3500   0.50  -0.50   0.00    -15.56   0.30  12.90
   4300   1.00  -0.50   0.00    -16.60   0.43   6.51
   4700   2.00  -0.50   0.00    -16.81   0.46   4.95
   5200   3.00  -0.50   0.00    -16.99   0.45   5.27
   3500   4.80  -1.50   0.30    -13.75   0.11   8.59
   4000   4.80  -1.50   0.30    -16.02   0.20   8.17
   5000   4.60  -1.50   0.30    -17.21   0.32   7.58
   6000   4.40  -1.50   0.30    -17.37   0.28   8.06
   7500   4.00  -1.50   0.30    -17.60   0.05   8.14
  15000   4.00  -1.50   0.30    994.34   0.02   8.57
  25000   4.00  -1.50   0.30  -1004.90   0.01   8.83
  40000   4.00  -1.50   0.30  -1004.90   0.01   9.08
   3500   0.50  -1.50   0.30    -14.96   0.27   8.73
   4300   1.00  -1.50   0.30    -16.75   0.40   6.43
   4700   2.00  -1.50   0.30    -17.03   0.37   7.13
   5200   3.00  -1.50   0.30    -17.19   0.33   7.60
   3500   4.80  -0.50   0.30    -13.92   0.18   7.74
   4000   4.80  -0.50   0.30    -15.63   0.32   5.93
   5000   4.60  -0.50   0.30    -16.78   0.43   3.98
   6000   4.40  -0.50   0.30    -16.96   0.41   5.84
   7500   4.00  -0.50   0.30    -16.88   0.16   7.45
  15000   4.00  -0.50   0.30    997.53   0.02   8.59
  25000   4.00  -0.50   0.30  -1004.90   0.01   8.85
  40000   4.00  -0.50   0.30   -998.83   0.01   9.08
   3500   0.50  -0.50   0.30    -15.62   0.31  12.53
   4300   1.00  -0.50   0.30    -16.51   0.42   6.98
   4700   2.00  -0.50   0.30    -16.74   0.45   4.99
   5200   3.00  -0.50   0.30    -16.93   0.45   5.05
Initial RV fit:
Teff   =   5000.00 K
logg   =      4.60
[Fe/H] =     -0.50
[alpha/Fe] =      0.30
Vrel   =    -16.78 +/-  0.093 km/s
chisq =  3.98
Least Squares RV and stellar parameters:
TEFF   =   4828.16
LOGG   =      4.68
FE_H   =     -0.03
ALPHA_H =     -0.23
RV     =    -17.05
chisq =  2.15
Fine grid best RV = -17.08 km/s
chisq =  2.15
Final parameters:
TEFF   =   4828.16 +/- 12.276
LOGG   =      4.68 +/-  0.016
FE_H   =     -0.03 +/-  0.005
ALPHA_H =     -0.23 +/-  0.008
RV     =    -17.08 +/-  0.045
Vhelio = -18.12 +/-  0.04 km/s
BC = -1.04 km/s
chisq =  2.15
dt = 11.10 sec.
Writing output to spectrum_doppler.fits

By default, |Doppler| fits the parameters Teff, logg, [Fe/H], [alpha/H], and RV with a Payne model. But the parameters can be set using the --fitpars parameter with a comma-separated list of parameter names (with no spaces). Note that all abundance names need to end with _h such as fe_h, alpha_h and c_h. To fit the carbon abundance as well, you would do,

doppler spectrum.fits -v --payne --fitpars teff,logg,fe_h,alpha_h,c_h,rv

spectrum.fits  S/N=  85.1
Fitting Payne model to spectrum with parameters: TEFF, LOGG, FE_H, ALPHA_H, RV
Masked 103 outlier or negative pixels
  TEFF    LOGG   FEH   ALPHAFE    VREL  CCPEAK  CHISQ
   3500   4.80  -1.50   0.00    -13.86   0.13   8.67
...
Least Squares RV and stellar parameters:
TEFF   =   4860.69
LOGG   =      4.72
FE_H   =     -0.03
ALPHA_H =     -0.24
C_H    =      0.08
RV     =    -17.03
chisq =  2.13
Fine grid best RV = -17.06 km/s
chisq =  2.13
Final parameters:
TEFF   =   4860.69 +/- 16.727
LOGG   =      4.72 +/-  0.019
FE_H   =     -0.03 +/-  0.007
ALPHA_H =     -0.24 +/-  0.010
C_H    =      0.08 +/-  0.010
RV     =    -17.06 +/-  0.045
Vhelio = -18.10 +/-  0.05 km/s
BC = -1.04 km/s
chisq =  2.13
dt = 11.00 sec.

The current Payne model has 33 labels (Teff, logg, Vmicro, [C/H], [N/H], [O/H], [Na/H], [Mg/H], [Al/H], [Si/H], [P/H], [S/H], [K/H], [Ca/H], [Ti/H], [V/H], [Cr/H], [Mn/H], [Fe/H], [Co/H], [Ni/H], [Cu/H], [Ni/H], [Cu/H], [Ge/H], [Ce/H], [Nd/H], [Ba/H], [Eu/H], [La/H], [Y/H], [Sc/H], [Zr/H], [Pr/H], [Yb/H]). Besides RV, Vsini and Vmacro can also be fit with a Payne model.

Jointly fitting spectra

|Doppler| can fit mulitple spectra of the same star simultaneously. It will fit a single set of labels and separate RVs for each spectrum. To use this option, set the --joint or j parameters. You also need to give the names of the mulitiple spectrum files. You can give these on the command list, e.g. doppler spectrum1.fits spectrum2.fits -j, or you can put the names of the files in an ASCII list file (one per line) and give that to |Doppler|. To use a list, be sure to also set the --list or -l parameter.

doppler speclist.txt -v -j -l

--- Running Doppler Jointfit on 3 spectra ---

Loading the spectra
Spectrum   1:  apVisit-r13-9289-58006-107.fits  S/N= 102.4
Spectrum   2:  apVisit-r13-9289-58028-113.fits  S/N=  74.5
Spectrum   3:  apVisit-r13-9289-58054-107.fits  S/N=  72.4

Jointly fitting Cannon model to 3 spectra with parameters: Teff, logg, [Fe/H] and RV for each spectrum
Step #1: Fitting the individual spectra
Fitting spectrum 1
apVisit-r13-9289-58006-107.fits
Fitting Cannon model to spectrum with parameters: Teff, logg, [Fe/H], RV
...
Final parameters:
Teff   =   4658.20 +/-  1.463 K
logg   =      2.62 +/-  0.002
[Fe/H] =     -0.16 +/-  0.001
Vhelio = -82.05 +/-  0.01 km/s
BC = 14.38 km/s
chisq =  2.26
dt =  4.16 sec.

Fitting spectrum 2
apVisit-r13-9289-58028-113.fits
Fitting Cannon model to spectrum with parameters: Teff, logg, [Fe/H], RV
...
Final parameters:
Teff   =   4666.10 +/-  1.498 K
logg   =      2.56 +/-  0.002
[Fe/H] =     -0.15 +/-  0.001
Vhelio = -82.03 +/-  0.01 km/s
BC =  8.07 km/s
chisq =  1.88
dt =  3.37 sec.

Fitting spectrum 3
apVisit-r13-9289-58054-107.fits
Fitting Cannon model to spectrum with parameters: Teff, logg, [Fe/H], RV
...
Final parameters:
Teff   =   4657.61 +/-  1.624 K
logg   =      2.59 +/-  0.002
[Fe/H] =     -0.16 +/-  0.001
Vhelio = -82.10 +/-  0.01 km/s
BC = -1.02 km/s
chisq =  1.70
dt =  3.28 sec.

Step #2: Getting weighted stellar parameters
Initial weighted parameters are:
Teff   =   4660.75 K
logg   =      2.59
[Fe/H] =     -0.16
Vrel   =    -82.06 km/s

Step #3: Fitting all spectra simultaneously
Parameters:
Teff   =   4660.97 K
logg   =      2.59
[Fe/H] =     -0.16
Vhelio = -82.05 +/-  0.01 km/s
Vscatter =   0.017 km/s
[-82.04650497 -82.03479767 -82.10112727]

Step #4: Tweaking continuum and masking outliers
Masked 4 discrepant pixels
Masked 3 discrepant pixels
Masked 1 discrepant pixels

Step #5: Re-fitting all spectra simultaneously
Final parameters:
Teff   =   4661.19 K
logg   =      2.59
[Fe/H] =     -0.16
Vhelio = -82.05 +/-  0.01 km/s
Vscatter =   0.017 km/s
[-82.04650497 -82.03479767 -82.10112727]
dt = 13.05 sec.
Writing output to apVisit-r13-9289-58006-107_doppler.fits

|Doppler| first fits each spectrum separately. Then it finds weighted stellar parameters and Vhelio. Finally, it fits a single set of stellar parameters and an RV for each spectrum to all spectra simultaneously.

Running |Doppler| from python

All of the |Doppler| functionality is also available directory from python.

First, import |Doppler| and read in the example spectrum.

import doppler
spec = doppler.read('spectrum.fits')

Print out it’s properties:

spec

<class 'doppler.spec1d.Spec1D'>
APOGEE spectrum
File = spectrum.fits
S/N =   85.06
Dimensions: [2048,3]
Flux = [[3.6705207e-15 3.8983997e-15 4.8754683e-15]
 [3.6727666e-15 3.9004448e-15 4.8746174e-15]
 [3.6702780e-15 3.9016904e-15 4.8737662e-15]
 ...
 [4.3078719e-15 4.5482637e-15 5.8845268e-15]
 [4.3102292e-15 4.5506604e-15 5.8881089e-15]
 [4.3116611e-15 4.5502703e-15 5.8918320e-15]]
Err = [[1.5879806e-08 2.8263509e-08 3.4794638e-08]
 [1.5880362e-08 2.8273581e-08 3.4788567e-08]
 [1.5881179e-08 2.8282614e-08 3.4782488e-08]
 ...
 [2.7037721e-08 3.5628904e-08 3.2013901e-08]
 [2.7046704e-08 3.5624442e-08 3.2033391e-08]
 [2.7055689e-08 3.5619223e-08 3.2053357e-08]]
Wave = [[16953.30940492 16433.71888594 15808.37977415]
 [16953.09701271 16433.45786229 15808.07341694]
 [16952.88459753 16433.19681725 15807.76703994]
 ...
 [16471.98020599 15856.26367213 15141.55733694]
 [16471.72234417 15855.96043257 15141.21203183]
 [16471.46446085 15855.65717311 15140.86670842]]

Now fit the spectrum:

out,model,specm = doppler.rv.fit(spec)

The output will be a table with the final results, the best-fitting model spectrum, and the masked and tweaked version of the observed spectrum used internall by |Doppler| for the fitting.

To jointly fit spectra, you want to load all of the spectra into a list and then run jointfit().

import doppler
from dlnpyutils import utils as dln
# Read in the list of files
files = dln.readlines(.txt')
speclist = []
for i in range(len(files)):
    spec = doppler.read(files[i]
    speclist.append(spec)
# Now run jointfit()
sumstr,final,bmodel,specmlist = doppler.rv.jointfit_payne(speclist)

The outputs are a summary file of the best-fit values (sumstr), final best-fit values for each individual spectrum (final), list of best-fitting model spectra (bmodel), and the list of the masked and tweaked observed spectra (specmlist).