def plot_spectrum(ax, spec, complist=None, plot_res=True, fwhm=3): """ Plots a spectrum in a given axis Parameters ---------- ax : axis matplotlib axis spec: XSpectrum1D Spectrum to plot complist : list of AbsComponents, optional If given, a model is computed and plotted plot_res : bool, optional Whether to plot residuals, only works if components is not None. fwhm : int, optional FWHM in pixels Returns ------- ax : axis Axis with the plot. """ # checks if not isinstance(spec, XSpectrum1D): raise IOError('Input spec must be XSpectrum1D object.') if complist is not None: if not isinstance(complist[0], AbsComponent): raise IOError('components must be a list of AbsComponent objects.') plot_model = True else: plot_model = False if plot_model: # create a model model = lav.voigt_from_components(spec.wavelength, complist, fwhm=fwhm) if spec.co_is_set: spec.normalize(co=spec.co) ax.plot(model.wavelength, spec.flux, '-', color=COLOR_FLUX, lw=1) if spec.sig_is_set: ax.plot(model.wavelength, spec.sig, '-', color=COLOR_SIG, lw=0.5) if plot_model: ax.plot(model.wavelength, model.flux, '-', color=COLOR_MODEL, lw=0.5) if plot_res: residual = spec.flux - model.flux ax.plot(spec.wavelength, residual, '.', color=COLOR_RESIDUAL, ms=2) ax.plot(spec.wavelength, -1 * spec.sig, '-', drawstyle='steps-mid', color=COLOR_SIG, lw=0.5)
def plot_spectrum(ax, spec, complist=None, plot_res=True, fwhm=3): """ Plots a spectrum in a given axis Parameters ---------- ax : axis matplotlib axis spec: XSpectrum1D Spectrum to plot complist : list of AbsComponents, optional If given, a model is computed and plotted plot_res : bool, optional Whether to plot residuals, only works if components is not None. fwhm : int, optional FWHM in pixels Returns ------- ax : axis Axis with the plot. """ # checks if not isinstance(spec, XSpectrum1D): raise IOError('Input spec must be XSpectrum1D object.') if complist is not None: if not isinstance(complist[0], AbsComponent): raise IOError('components must be a list of AbsComponent objects.') plot_model = True else: plot_model = False if plot_model: # create a model model = lav.voigt_from_components(spec.wavelength, complist, fwhm=fwhm) if spec.co_is_set: spec.normalize(co=spec.co) ax.plot(model.wavelength, spec.flux, '-', color=COLOR_FLUX, lw=1) if spec.sig_is_set: ax.plot(model.wavelength, spec.sig, '-', color=COLOR_SIG, lw=0.5) if plot_model: ax.plot(model.wavelength, model.flux, '-', color=COLOR_MODEL, lw=0.5) if plot_res: residual = spec.flux - model.flux ax.plot(spec.wavelength, residual, '.', color=COLOR_RESIDUAL, ms=2) ax.plot(spec.wavelength, -1*spec.sig, '-', drawstyle='steps-mid', color=COLOR_SIG, lw=0.5)
def plot_vel(ax, spec, iline, z, dvlims, complist=None, fwhm=3, min_ew_blends=0.01*u.AA): # first normalize if not spec.normed: spec.normalize(co=spec.co) # first identify good components good_comps = [] good_comps_aux = ltiu.get_components_at_z(complist, z, dvlims) for comp in good_comps_aux: for aline in comp._abslines: if aline.name == iline['name']: good_comps += [comp] break # bad comps will be those unrelated to the given redshift/transition bad_comps = [] for comp in complist: if comp not in good_comps: bad_comps += [comp] # only good comps will have a model if len(good_comps) > 0: # import pdb; pdb.set_trace() model_spec = lav.voigt_from_components(spec.wavelength, good_comps, fwhm=fwhm) else: model_spec = XSpectrum1D.from_tuple((spec.wavelength, np.ones(spec.npix))) # main plot velo = ltu.dv_from_z(spec.wavelength/iline['wrest'] - 1. , z) ax.plot(velo, spec.flux, drawstyle='steps-mid', color=COLOR_FLUX) plot_spec_complist(ax, velo, spec, bad_comps, min_ew = min_ew_blends, color=COLOR_BLEND, lw=2, drawstyle='steps-mid') plot_spec_complist(ax, velo, model_spec, good_comps, min_ew = None, color=COLOR_MODEL, lw=1, ls='-') if spec.sig_is_set: ax.plot(velo, spec.sig, drawstyle='steps-mid', color=COLOR_SIG, lw=0.5) # Zero velocity line ax.plot([0., 0.], [-1e9, 1e9], ':', color='gray') # Unity flux level line ax.plot([-1e9, 1e9], [1, 1], ':', color='b', lw=0.5) # Zero flux level line ax.plot([-1e9, 1e9], [0, 0], '--', color='k', lw=1)
def test_voigt_from_components(): from linetools.isgm.tests.test_use_abscomp import mk_comp wv_array = np.arange(900, 1250, 0.01) * u.AA comp1, HIlines = mk_comp('HI', zcomp=0.01, vlim=[-10, 10] * u.km / u.s) comp2, HIlines = mk_comp('HI', zcomp=0.05, vlim=[-10, 10] * u.km / u.s) model = lav.voigt_from_components(wv_array, [comp1, comp2])
def plot_vel(ax, spec, iline, z, dvlims, complist=None, fwhm=3, min_ew_blends=0.01 * u.AA): # first normalize if not spec.normed: spec.normalize(co=spec.co) # first identify good components good_comps = [] good_comps_aux = ltiu.get_components_at_z(complist, z, dvlims) for comp in good_comps_aux: for aline in comp._abslines: if aline.name == iline['name']: good_comps += [comp] break # bad comps will be those unrelated to the given redshift/transition bad_comps = [] for comp in complist: if comp not in good_comps: bad_comps += [comp] # only good comps will have a model if len(good_comps) > 0: # import pdb; pdb.set_trace() model_spec = lav.voigt_from_components(spec.wavelength, good_comps, fwhm=fwhm) else: model_spec = XSpectrum1D.from_tuple( (spec.wavelength, np.ones(spec.npix))) # main plot velo = ltu.dv_from_z(spec.wavelength / iline['wrest'] - 1., z) ax.plot(velo, spec.flux, drawstyle='steps-mid', color=COLOR_FLUX) plot_spec_complist(ax, velo, spec, bad_comps, min_ew=min_ew_blends, color=COLOR_BLEND, lw=2, drawstyle='steps-mid') plot_spec_complist(ax, velo, model_spec, good_comps, min_ew=None, color=COLOR_MODEL, lw=1, ls='-') if spec.sig_is_set: ax.plot(velo, spec.sig, drawstyle='steps-mid', color=COLOR_SIG, lw=0.5) # Zero velocity line ax.plot([0., 0.], [-1e9, 1e9], ':', color='gray') # Unity flux level line ax.plot([-1e9, 1e9], [1, 1], ':', color='b', lw=0.5) # Zero flux level line ax.plot([-1e9, 1e9], [0, 0], '--', color='k', lw=1)
def test_voigt_from_components(): from linetools.isgm.tests.test_use_abscomp import mk_comp wv_array = np.arange(900, 1250, 0.01) * u.AA comp1, HIlines = mk_comp('HI', zcomp=0.01, vlim=[-10,10]*u.km/u.s) comp2, HIlines = mk_comp('HI', zcomp=0.05, vlim=[-10,10]*u.km/u.s) model = lav.voigt_from_components(wv_array, [comp1,comp2])