def fitspec():

    s=read_fits.read_fits_spectrum1d('E5_1_004.fits',dispersion_unit='Angstrom')
    wave_range = [21000,24000]

    good = np.where((s.wavelength.value > wave_range[0]) & (s.wavelength.value < wave_range[1]))[0]
    s = Spectrum1D.from_array(s.wavelength[good],s.flux[good]/np.median(s.flux[good]), dispersion_unit = s.wavelength.unit)
    snr = 40
    s.uncertainty = (np.zeros(len(s.flux.value))+1.0/snr)*s.flux.unit

    #g=load_grid('phoenix_20000_k.h5')
    g = load_grid('phoenix_r20000_1.9-2.5_k.h5')
    my_model = assemble_model(g, vrad=0, vrot=0,R=20000,spectrum=s,normalize_npol=4)

    wave,flux = my_model()
    plt.clf()
    plt.plot(s.wavelength,s.flux)
    plt.plot(wave,flux)

    teff_prior = priors.UniformPrior(3000,8000)
    logg_prior = priors.UniformPrior(0.0,4.4)
    mh_prior = priors.UniformPrior(-1.5,1.0)
    alpha_prior = priors.UniformPrior(-0.2,1.2)


    vrot_prior = priors.UniformPrior(0,20)
    vrad_prior = priors.UniformPrior(-300,300)
    R_prior = priors.GaussianPrior(5400,600)

    ll = Chi2Likelihood(s)
    my_model = my_model | ll

    fitobj = MultiNest(my_model, [teff_prior, logg_prior, mh_prior, alpha_prior, vrot_prior, vrad_prior, R_prior])
    result = fitobj.run()
    return result
Exemplo n.º 2
0
def get_grid(
        gridfile='/u/tdo/research/metallicity/grids/bosz_grid_high_temp.h5'):
    '''
    Return a grid object so that the grid only needs to be loaded once. 
    
    '''
    return load_grid(gridfile)
def fitwrapper_sens_masking_three_order_phoe(starname):
    # cal_star = 'NGC6819_J19413439+4017482'
    spec_path = '/u/ghezgroup/data/metallicity/nirspec/spectra/'
    save_path = '/u/rbentley/metallicity/spectra_fits/masked_fit_results/orders34-35-36/'

    # mod = load_grid('/u/rbentley/metallicity/grids/apogee_bosz_t3500_7000_w20000_24000_R25000.h5')
    mod = load_grid(
        '/u/rbentley/metallicity/grids/phoenix_t2500_6000_w20000_24000_R40000.h5'
    )

    # for sl_cut in np.concatenate((np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):
    for sl_cut in [
            0.
    ]:  # np.concatenate((np.arange(60.,120.,15),np.arange(120.,390,45),np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):

        print "Starting fit with cut at ", sl_cut
        mtf.fit_star_three_orders_sens_masked(starname,
                                              'mh',
                                              mod,
                                              'phoenix',
                                              sl_cut,
                                              specdir=spec_path,
                                              savedir=save_path,
                                              R_fixed=24000.,
                                              nirspec_upgrade=True)
def fitwrapper_sens_masking_one_order(starname):

    #cal_star = 'NGC6819_J19413439+4017482'
    spec_path = '/u/ghezgroup/data/metallicity/nirspec/spectra/'
    save_path = '/u/rbentley/metallicity/spectra_fits/masked_fit_results/order36/'

    mod = load_grid(
        '/u/rbentley/metallicity/grids/apogee_bosz_t3600_7000_w21000_23000_R25000.h5'
    )

    #for sl_cut in np.concatenate((np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):
    for sl_cut in [
            0.
    ]:  #np.concatenate((np.arange(60.,120.,15),np.arange(120.,390,45),np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):

        print "Starting fit with cut at ", sl_cut
        mtf.fit_star_one_order_sens_masked(starname,
                                           'mh',
                                           mod,
                                           sl_cut,
                                           specdir=spec_path,
                                           savedir=save_path,
                                           teff_range=[3600, 6000],
                                           logg_range=[0., 4.5],
                                           mh_range=[-1., 0.5],
                                           R_fixed=24000.,
                                           vrot_fixed=0.0)
def test_load_grid():
    #h5grid = load_grid('phoenix_20000_hk.h5')
    h5grid = load_grid('phoenix_r20000_1.9-2.5_k.h5')

    h5grid.teff = 5770
    h5grid.logg = 4.44
    h5grid.mh = 0.0
    h5grid.alpha = 0.0
def fitwrapper_fe_lines_masking_three_order(starname):
    # cal_star = 'NGC6819_J19413439+4017482'
    spec_path = '/u/ghezgroup/data/metallicity/nirspec/spectra/'
    save_path = '/u/rbentley/metallicity/spectra_fits/masked_fit_results/orders34-35-36/'

    mod = load_grid(
        '/u/rbentley/metallicity/grids/bosz_t3500_7000_w20000_24000_R25000.h5')

    mtf.fit_star_three_orders_fe_lines(starname,
                                       mod,
                                       'bosz',
                                       specdir=spec_path,
                                       savedir=save_path,
                                       R_fixed=24000.,
                                       adderr=True,
                                       nirspec_upgrade=False)
def fitwrapper_res_masking_three_order(starname):
    spec_path = '/u/ghezgroup/data/metallicity/nirspec/spectra/'
    save_path = '/u/rbentley/metallicity/spectra_fits/masked_fit_results/orders34-35-36/'

    # mod = load_grid('/u/rbentley/metallicity/grids/phoenix_t2500_6000_w20000_24000_R40000.h5')
    mod = load_grid(
        '/u/rbentley/metallicity/grids/bosz_t3500_7000_w20000_24000_R25000.h5')

    # for sl_cut in np.concatenate((np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):
    for res_cut in np.arange(
            0.025, 0.2, 0.025
    ):  # np.concatenate((np.arange(60.,120.,15),np.arange(120.,390,45),np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):

        print "Starting fit with cut at ", res_cut
        mtf.fit_star_three_orders_residual_masked(starname,
                                                  mod,
                                                  'bosz',
                                                  res_cut,
                                                  specdir=spec_path,
                                                  savedir=save_path,
                                                  R_fixed=24000.)
def fitwrapper_sens_masking_four_order_non_mh_params(starname):

    #cal_star = 'NGC6819_J19413439+4017482'
    spec_path = '/u/ghezgroup/data/metallicity/nirspec/spectra/'
    save_path = '/u/rbentley/metallicity/spectra_fits/masked_fit_results/orders34-35-36-37/'

    mod = load_grid(
        '/u/rbentley/metallicity/grids/apogee_bosz_t3500_7000_w20000_24000_R25000.h5'
    )

    #for sl_cut in np.concatenate((np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):
    for sl_cut in [
            6.0
    ]:  #np.concatenate((np.arange(60.,120.,15),np.arange(120.,390,45),np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):

        print "Starting fit with cut at ", sl_cut, ' teff ' + starname
        mtf.fit_star_four_orders_sens_masked(starname,
                                             'teff',
                                             mod,
                                             sl_cut,
                                             specdir=spec_path,
                                             savedir=save_path,
                                             R_fixed=24000.)
        print "Starting fit with cut at ", sl_cut, ' logg ' + starname
        mtf.fit_star_four_orders_sens_masked(starname,
                                             'logg',
                                             mod,
                                             sl_cut,
                                             specdir=spec_path,
                                             savedir=save_path,
                                             R_fixed=24000.)
        print "Starting fit with cut at ", sl_cut, ' alpha ' + starname
        mtf.fit_star_four_orders_sens_masked(starname,
                                             'alpha',
                                             mod,
                                             sl_cut,
                                             specdir=spec_path,
                                             savedir=save_path,
                                             R_fixed=24000.)
def fitwrapper_masking_four_order_nirspec_upgrade(starname):

    spec_path = '/u/ghezgroup/data/metallicity/nirspec/spectra/'
    save_path = '/u/rbentley/metallicity/spectra_fits/masked_fit_results/orders34-35-36-37/'

    mod = load_grid(
        '/u/rbentley/metallicity/grids/phoenix_t2500_6000_w20000_24000_R40000.h5'
    )

    #for sl_cut in np.concatenate((np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):
    for sl_cut in [
            0
    ]:  #np.concatenate((np.arange(60.,120.,15),np.arange(120.,390,45),np.arange(0.1,0.5,0.1),np.linspace(0.5,10.,20),np.arange(15.,60.,5))):

        print "Starting fit with cut at ", sl_cut
        mtf.fit_star_four_orders_sens_masked(starname,
                                             'mh',
                                             mod,
                                             sl_cut,
                                             specdir=spec_path,
                                             savedir=save_path,
                                             R_fixed=24000.,
                                             nirspec_upgrade=True,
                                             nsdrp_snr=True)
snr = mt.get_snr(starname, order)

print snr

starspectrumall = read_fits_file.read_nirspec_dat(testspec_path,desired_wavelength_units='micron')
    
#waverange = [np.amin(starspectrumall.wavelength.value[:970]), np.amax(starspectrumall.wavelength.value[:970])]
waverange = [np.amin(starspectrumall.wavelength.value[:970]), np.amax(starspectrumall.wavelength.value[:970])]
starspectrum35 = read_fits_file.read_nirspec_dat(testspec_path,desired_wavelength_units='Angstrom',
                                                 wave_range=waverange)
starspectrum35.uncertainty = (np.zeros(len(starspectrum35.flux.value))+1.0/np.float(snr))*starspectrum35.flux.unit

print testspec_path

#g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2000_6000_w21500_22220_R40000_o35.h5') #for order 35
g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2500_6000_w22350_22900_R40000_o34.h5') #for order 34

w,f = g()



interp1 = Interpolate(starspectrum35)
convolve1 = InstrumentConvolveGrating.from_grid(g,R=24000)
rot1 = RotationalBroadening.from_grid(g,vrot=np.array([10.0]))
norm1 = Normalize(starspectrum35,2)

# concatenate the spectral grid (which will have the stellar parameters) with other 
# model components that you want to fit
model = g | rot1 |DopplerShift(vrad=0.0)| convolve1 | interp1 | norm1

def load_full_grid():
    g = load_grid(
        '/u/rbentley/metallicity/grids/phoenix_t2500_6000_w20000_24000_R40000.h5'
    )
    return g
#waverange = [np.amin(starspectrumall.wavelength.value[:970]), np.amax(starspectrumall.wavelength.value[:970])]
waverange = [
    np.amin(starspectrumall.wavelength.value[:970]),
    np.amax(starspectrumall.wavelength.value[:970])
]
starspectrum35 = read_fits_file.read_nirspec_dat(
    testspec_path, desired_wavelength_units='Angstrom', wave_range=waverange)
starspectrum35.uncertainty = (np.zeros(len(starspectrum35.flux.value)) +
                              1.0 / np.float(snr)) * starspectrum35.flux.unit

print testspec_path

#g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2000_6000_w21500_22220_R40000_o35.h5') #for order 35
#g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2500_6000_w22350_22900_R40000_o34.h5') #for order 34
g = load_grid(
    '/u/rbentley/metallicity/grids/phoenix_t2500_6000_w21000_21600_R40000_o36.h5'
)

w, f = g()

testspec_w = np.linspace(w[0], w[-1], np.amax(w) - np.amin(w))
testspec_f = np.ones(len(testspec_w))
testspec_u = np.ones(len(testspec_w)) * 0.001
testspec = SKSpectrum1D.from_array(
    wavelength=testspec_w * u.angstrom,
    flux=testspec_f * u.Unit('erg/s/cm^2/angstrom'),
    uncertainty=testspec_u * u.Unit('erg/s/cm^2/angstrom'))

interp1 = Interpolate(starspectrum35)
convolve1 = InstrumentConvolveGrating.from_grid(g, R=24000)
rot1 = RotationalBroadening.from_grid(g, vrot=np.array([10.0]))
ngc6819_517 = 'NGC6819_J19411+4010517'

m5_0208 = 'M5 J15190+0208'

ngc6791_202 = 'NGC6791_J19213390+3750202'

ngc6819_482 = 'NGC6819_J19413439+4017482'

m71_021 = 'M71_J19534827+1848021'

tyc_3544 = 'TYC 3544'

m18113 = '2MJ18113-30441'

phoenix = load_grid(
    '/u/rbentley/metallicity/grids/phoenix_t2500_6000_w20000_24000_R40000.h5')
bosz = load_grid(
    '/u/ghezgroup/data/metallicity/nirspec/grids/bosz_t3500_7000_w20000_24000_R50000.h5'
)

gc_stars = [
    'NE_1_001', 'NE_1_002', 'NE_1_003', 'E7_1_001', 'E7_2_001', 'E7_1_002',
    'E7_1_003', 'N2_1_001', 'E5_1_001', 'N2_1_002', 'N2_1_003', 'S1-23'
]
cal_stars = [
    'NGC6791_J19205+3748282', 'NGC6819_J19411+4010517', 'M5 J15190+0208',
    'NGC6791_J19213390+3750202', 'NGC6819_J19413439+4017482',
    'M71_J19534827+1848021', 'TYC 3544'
]

fire_stars = ['HD176704', 'HD191584', 'HD221148', 'N6583_46']
Exemplo n.º 14
0
snr = float(53.663)
    
starspectrumall = read_fits_file.read_nirspec_dat(file2,desired_wavelength_units='micron')
    
waverange = [np.amin(starspectrumall.wavelength.value[:970]), np.amax(starspectrumall.wavelength.value[:970])]
starspectrum35 = read_fits_file.read_nirspec_dat(file2,desired_wavelength_units='Angstrom',
                                                 wave_range=waverange)
starspectrum35.uncertainty = (np.zeros(len(starspectrum35.flux.value))+1.0/np.float(snr))*starspectrum35.flux.unit


savefile = os.path.join(savedir,starname+'order'+order+'_phoenixr40000.h5')

print 'here 1 in file'

# load the BOSZ grid. Do this only ONCE!! It takes a long time and lots of memory
g = load_grid('/u/rbentley/metallicity/spectra_fits/phoenix_t2500_6000_w20000_24000_R40000.h5')#'/u/rbentley/metallicity/spectra_fits/test_bosz_t2500_6000_w20000_24000_R40000.h5')
print 'grid loaded'






interp1 = Interpolate(starspectrum35)
print 'interpolated'
convolve1 = InstrumentConvolveGrating.from_grid(g,R=24000)
print 'convolved'
rot1 = RotationalBroadening.from_grid(g,vrot=np.array([10.0]))
print 'rot broadend'
norm1 = Normalize(starspectrum35,2)
print 'normalized'
        starspectrum_flux = np.concatenate(
            (starspectrum_flux, single_order_spec.flux.value[::-1]))

        starspectrum_wavelength = np.concatenate(
            (starspectrum_wavelength,
             single_order_spec.wavelength.value[::-1]))

#print allorders_path
#starspectrum = read_fits_file.read_nirspec_dat(allorders_path,desired_wavelength_units='Angstrom',
#                                                 wave_range=waveranges)
starspectrum = Spectrum1D.from_array(dispersion=starspectrum_wavelength,
                                     flux=starspectrum_flux,
                                     dispersion_unit=u.angstrom,
                                     uncertainty=starspectrum_uncert)

g = load_grid(
    '/u/rbentley/metallicity/grids/phoenix_t2500_6000_w20000_24000_R40000.h5')

w, f = g()
print len(starspectrum.flux.value)
interp1 = Interpolate(starspectrum)
convolve1 = InstrumentConvolveGrating.from_grid(g, R=24000)
rot1 = RotationalBroadening.from_grid(g, vrot=np.array([10.0]))
norm1 = Normalize(starspectrum, 2)

# concatenate the spectral grid (which will have the stellar parameters) with other
# model components that you want to fit
model = g | rot1 | DopplerShift(vrad=0.0) | convolve1 | interp1 | norm1

# add likelihood parts
like1 = Chi2Likelihood(starspectrum)
#like1_l1 = SpectralL1Likelihood(spectrum)
Exemplo n.º 16
0
    testspec_path, desired_wavelength_units='micron')

#waverange = [np.amin(starspectrumall.wavelength.value[:970]), np.amax(starspectrumall.wavelength.value[:970])]
waverange = [
    np.amin(starspectrumall.wavelength.value[:970]),
    np.amax(starspectrumall.wavelength.value[:970])
]
starspectrum35 = read_fits_file.read_nirspec_dat(
    testspec_path, desired_wavelength_units='Angstrom', wave_range=waverange)
starspectrum35.uncertainty = (np.zeros(len(starspectrum35.flux.value)) +
                              1.0 / np.float(snr)) * starspectrum35.flux.unit

print testspec_path

g = load_grid(
    '/u/rbentley/metallicity/grids/phoenix_t2000_6000_w21500_22220_R40000_o35.h5'
)  #for order 35
#g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2500_6000_w22350_22900_R40000_o34.h5') #for order 34

w, f = g()

testspec_w = np.linspace(w[0], w[-1], np.amax(w) - np.amin(w))
testspec_f = np.ones(len(testspec_w))
testspec_u = np.ones(len(testspec_w)) * 0.001
testspec = SKSpectrum1D.from_array(
    wavelength=testspec_w * u.angstrom,
    flux=testspec_f * u.Unit('erg/s/cm^2/angstrom'),
    uncertainty=testspec_u * u.Unit('erg/s/cm^2/angstrom'))

interp1 = Interpolate(starspectrum35)
convolve1 = InstrumentConvolveGrating.from_grid(g, R=24000)
import numpy as np
from matplotlib import pyplot as plt
from specutils import Spectrum1D, rvmeasure
import astropy.units as u
from astropy.modeling import models, fitting
from astropy.modeling import Model
import matplotlib.pyplot as plt
from specutils import read_fits_file, plotlines, write_spectrum
import multi_order_fitting_functions as mtf


def closest(lst, K):
    return lst[min(range(len(lst)), key=lambda i: abs(lst[i] - K))]


grid = load_grid(
    '/u/rbentley/metallicity/grids/bosz_t3500_7000_w20000_24000_R25000.h5')

points, values, wavelengths = grid.index.copy(), grid.fluxes.value.copy(
), grid.wavelength.value.copy()

idx = np.where(np.all(points == np.array([3500., 0.0, -1.25, 0.0]), axis=1))[0]

idx2 = np.where(np.all(points == np.array([3500., 0.0, -0.75, 0.0]),
                       axis=1))[0]

k = open(
    '/u/rbentley/starkit_interpol_residuals/bosz_eq_widths_wider_range.dat',
    'w')
k.write(
    'teff\tlogg\t[M/H]\t[alpha/Fe]\tSi22078 EW\tSi22078 cont\tSi21378 EW\tSi21378 cont\tS22574 EW\tSi22574 cont\tFe22469 EW\tFe22469 cont\tFe22479 EW\tFe22479 cont\tFe22500 EW\tFe22500 cont\n'
)
Exemplo n.º 18
0
starspectrum35 = read_fits_file.read_nirspec_dat(testspec_path,desired_wavelength_units='Angstrom',
                                                 wave_range=waverange)
starspectrum35.uncertainty = (np.zeros(len(starspectrum35.flux.value))+1.0/np.float(snr))*starspectrum35.flux.unit





h5_files_us = glob.glob('/u/rbentley/metallicity/spectra_fits/masked_fit_results/order36/*.h5')

sl_val = []
mask_len = []
vrad = []

if float(order) == 36.:
    g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2500_6000_w21000_21600_R40000_o36.h5') #for order 36

elif float(order) == 35.:
    g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2000_6000_w21500_22220_R40000_o35.h5') #for order 35

elif float(order) == 34.:
    g = load_grid('/u/rbentley/metallicity/grids/phoenix_t2500_6000_w22350_22900_R40000_o34.h5') #for order 34

else:
    print "Need to code in that order"
    exit()
    
    
interp1 = Interpolate(starspectrum35)
convolve1 = InstrumentConvolveGrating.from_grid(g,R=24000)
rot1 = RotationalBroadening.from_grid(g,vrot=np.array([10.0]))