uvotspec¶
Major functions¶
adjust_wavelength_manually()
¶
-
uvotpy.uvotspec.
adjust_wavelength_manually
(file=None, openfile=None, openplot=None, ylim=[None, None], ions=['HI', 'HeII'], reference_spectrum=None, recalculate=True, figno=None)¶ manually adjust the wavelength scale
Parameters: file : path
extracted spectral data (i.e., after running uvotgetspec.getSpec()
fileopen : filehandle
opened spectral data file
openplot : axis
axis instance to use
ylim : list(2)
list of length 2 with limits of the Y-axis or None
ions : list
list of ions to use for annotation valid ions are spdata.keys()
reference_spectrum : astropy.table.table.Table
column 1: wavelength, column 2: flux
recalculate : bool
when set, use wavelength shift to determine shift of pixno array and use dispersion to recalculate the wavelengths
Notes
The header will be updated with the value of the wavelength shift The wavelengths in the second extension lambda column will be shifted. The response file will need to be recreated separately.
Returns the figure instance
flag_bad_manually()
¶
-
uvotpy.uvotspec.
flag_bad_manually
(file=None, openfile=None, openplot=None, ylim=[None, None])¶ manually flag bad parts of the spectrum
Parameters: file : path
extracted spectral data (i.e., after running uvotgetspec.getSpec()
openfile : filehandle
openplot : matplotlib.figure
figure handle
ylim : list
limits y-axis
Notes
returns ax:axes instance, fig:figure instance, [f:fits file handle if passed with openfile]
The data quality flag of flagged pixels will be set to “bad” The header will be updated with the value of the wavelength shift
plot_spectrum()
¶
-
uvotpy.uvotspec.
plot_spectrum
(ax, spectrumfile, errbars=False, errhaze=False, hazecolor='grey', hazealpha=0.2, flag='all', ylim=[6e-15, 9e-13], speccolor='g', plot_quality=True, quality_marker='x', qual_flags=['bad', 'weakzeroth', 'zeroth', 'overlap', 'too_bright', 'first'], qualcolors=['c', 'g', 'y', 'm', 'b', 'r', 'k'], qualalpha=0.2, quallegend={'weakzeroth': True, 'zeroth': True, 'overlap': True, 'bad': True, 'too_bright': True, 'first': True}, chatter=0)¶ make a quick plot of a PHA/summed spectrum
Parameters: ax : matplotlib.axes.AxesSubplot instance
The spectrum will be drawn in ‘ax’
spectrumfile: path
the full filename of the spectrum
ylim : list
y-axis limits
speccolor : color
errbars: bool
if False, draw spectrum with optional error as a haze (see errhaze, hazecolor, hazealpha) if True, draw data with error bars
errhaze, hazecolor, hazealpha : bool, string, float
parameters to control the display of the error region around the spectrum
flag: one of quality_flags()
for PHA spectrum: plot data excluding this flag e.g., ‘all’ include only ‘good’ data (no flag set)
plot_quality : bool
(only for PHA files)
quality_marker : plot string character or None
if None, plot with color shading, otherwise, plot symbol
qualflag,qualcolors,qualalpha : list, list, float
(only for PHA files) parameters passed to plotquality - qualflag is a list of flags (from uvotgetspec.quality_flags().keys()) - qualcolors is a list of colors for the shading of the regions by quality - qualalpha is the alpha factor for the shading - quallegend (for each flag, add to legend)
chatter: int (0...5)
verbosity
If a summed spectrum is presented, it needs to be FITS
generated using the uvotspec.sum_PHAspectra() program.
plotquality()
¶
-
uvotpy.uvotspec.
plotquality
(ax, w, quality, flux=None, flag=['bad', 'weakzeroth', 'zeroth', 'too_bright'], colors=['c', 'y', 'm', 'b', 'r', 'g', 'k'], alpha=0.2, quallegend={'weakzeroth': True, 'zeroth': True, 'overlap': True, 'bad': True, 'too_bright': True, 'first': True}, marker='x', chatter=0)¶ mark up plot with data quality either add vertical greyscale regions in plot for each
quality flag (when marker=None)or plot a symbol ‘marker’ on each data point
Parameters: ax : matplotlib.axes.Axes instance
w : array
x-axis values
quality : array
flux : array
flux values quality flags matching x-axis points
flag : list of strings
each list value must be one of the valid keys from quality_flags()
colors : array
color values
alpha : float
alpha value for transparency
marker : nonetype or plot character string
if None then plot grey scale regions, otherwise, plot marker on bad data requires flux array
sum_PHAspectra()
¶
-
uvotpy.uvotspec.
sum_PHAspectra
(phafiles, outfile=None, ignore_flags=False, use_flags=['bad'], interactive=False, figno=14, ylim=[-2e-15, 5e-13], flag_bad_areas=False, exclude_wave=[], adjust_wavelengths=False, wave_shifts=[], objectname='unknown', object_position=None, wave_adjust_method=1, exclude_method=1, chatter=1, clobber=True)¶ Read a list of phafiles. Sum the spectra after applying optional wave_shifts. The sum is weighted by the errors.
Parameters: phafiles : list
list of filenames
outfile : str
name for output file. If “None” then write to ‘sumpha.txt’, if ending in ‘.fit’ or ‘.fits’ a fits file will be written.
flag_bad_areas : bool [optional]
interactively select areas of each spectrum not to include in each spectrum
adjust_wavelengths : bool [optional]
interactively select a wavelength shift for each spectrum to apply before summing the spectra
ylim : list [optional]
force limits of Y-axis figure (interactive)
figno : int, or list [optional]
numbers for figures or (if only one) the start number of figures (interactive)
wave_shifts : list [optional]
list of shifts to add to the wavelength scale; same length as phafiles
exclude_wave : list [optional]
list of lists of exclude regions; same length as pha files; one list per file for an indivisual file the the list element is like [[1600,1900],[2700,2750],]
ignore_flags : bool [optional]
if True, do not automatically convert flagged sections of the spectrum to exclude_wave regions, if False, use the quality flags from “use_flags”
use_flags : list [optional]
list of flags (except - ‘good’) to exclude. Valid keyword values for the flags are defined in quality_flags(),
objectname : str [optional]
name of the object. This will be entered as a keyword in the summed_spectrum fits file.
object_position: astropy.coordinates [optional]
Returns: debug information when outfile=None.
Notes
Two figures are shown, one with flux for all spectra after shifts, one with broad sum of counts in a region which includes the spectrum, unscaled, not even by exposure.
** not yet implemented: selection on flags using use-flags ** smooth each spectrum, correlate for shift [all quality=’good’ data points]
BUGS: the quality is not read from the file into exclusion sets at the moment
Key functions¶
apply_shift()
¶
-
uvotpy.uvotspec.
apply_shift
(file, delwav, recalculate=False)¶ apply a given wavelength shift in A
check_flag()
¶
-
uvotpy.uvotspec.
check_flag
(quality, flag, chatter=0)¶ return a logical array where the elements are True if flag is set
complement_of_ranges()
¶
-
uvotpy.uvotspec.
complement_of_ranges
(ranges, rangestart=0, rangeend=None)¶ given a list of exclusion ranges, compute the complement
Parameters: range : list
the range list consists of elements that each specify a bad range in the spectrum. The complement needs also the start and end of the whole range in order to add the leading and trailing complement ranges.
rangestart, rangeend : int
start and end index of the wavelenght array. Usually that is 0, len(wave)
plot_line_ids()
¶
-
uvotpy.uvotspec.
plot_line_ids
(ax, ylower=None, ion='HI', color='k', dash=[0.07, 0.1], fontsize=8, spdata={'HI': [{'wavevac': 1215.67, 'transition': '1s-2', 'name': 'Ly-alpha', 'label': 'Ly$\\alpha$'}, {'wavevac': 1025.722, 'transition': '1s-3', 'name': 'Ly-beta', 'label': 'Ly$\\beta$'}, {'wavevac': 972.537, 'transition': '1s-4', 'name': 'Ly-gamma', 'label': 'Ly$\\gamma$'}, {'wavevac': 912.3, 'transition': '1s-40', 'name': 'Ly-limit', 'label': 'Ly-limit'}, {'wavevac': 6564.63, 'transition': '2-3', 'name': 'H-alpha', 'label': 'H$\\alpha$'}, {'wavevac': 4862.69, 'transition': '2-4', 'name': 'H-beta', 'label': 'H$\\beta$'}, {'wavevac': 4341.69, 'transition': '2-5', 'name': 'H-gamma', 'label': 'H$\\gamma$'}, {'wavevac': 4102.899, 'transition': '2-6', 'name': 'H-delta', 'label': 'H$\\delta$'}, {'wavevac': 3971.202, 'transition': '2-7', 'name': 'H-epsilon', 'label': 'H$\\epsilon$'}, {'wavevac': 3890.16, 'transition': '2-8', 'name': 'H-6', 'label': 'H6'}, {'wavevac': 3836.485, 'name': 'H-7', 'label': 'H7'}, {'wavevac': 3656, 'transition': '2s-40', 'name': 'H-limit', 'label': 'Ba-limit'}, {'wavevac': 18756.096, 'transition': '3-4', 'name': 'Pa-alpha', 'label': 'Pa$\\alpha$'}, {'wavevac': 12821.576, 'transition': '3-5', 'name': 'Pa-beta', 'label': 'Pa$\\beta$'}, {'wavevac': 10941.082, 'transition': '3-6', 'name': 'Pa-gamma', 'label': 'Pa$\\gamma$'}, {'wavevac': 10052.123, 'transition': '3-7', 'name': 'Pa-delta', 'label': 'Pa$\\delta$'}, {'wavevac': 9548.587, 'transition': '3-8', 'name': 'Pa-5', 'label': 'Pa5'}, {'wavevac': 8252.2, 'transition': '3s-40', 'name': 'Pa-limit', 'label': 'Pa-limit'}], 'HeI': [{'wavevac': 7067.14, 'transition': '1s2p 3Po-1s3s 3S ', 'label': u'HeI'}, {'wavevac': 6679.9956, 'transition': '1s2p 1Po-1s3d 1D ', 'label': u'HeI'}, {'wavevac': 5877.249, 'transition': '1s2p 3Po-1s3d 3D ', 'label': u'HeI'}, {'wavevac': 5017.0772, 'transition': '1s2s 1S -1s3p 1Po', 'label': u'HeI'}, {'wavevac': 4472.735, 'transition': '1s2s 3Po-1s4d 4D ', 'label': u'HeI'}, {'wavevac': 3889.75, 'transition': '1s2s 3S -1s3p 3Po', 'label': u'HeI'}, {'wavevac': 3188.667, 'transition': '1s2s 3S -1s4p 3Po', 'label': u'HeI'}, {'wavevac': 3014.59, 'transition': '2p2 3P -2p3d 3Do', 'label': u'HeI'}, {'wavevac': 2945.967, 'transition': '1s2s 3S -1s5p 3Po', 'label': u'HeI'}, {'wavevac': 2819.0, 'label': u'HeI'}, {'wavevac': 2578.4, 'label': u'HeI'}, {'wavevac': 584.334, 'transition': '1s2 1S -1s1p 1Po', 'label': u'HeI'}], 'nova': [{'wavevac': 1750, 'transition': '', 'label': u'N III]'}, {'wavevac': 1810, 'transition': '', 'label': 'Si II'}, {'wavevac': 1862.3, 'transition': '', 'label': u'Al III]'}, {'wavevac': 1908.7, 'transition': '', 'label': u'C III]'}, {'wavevac': 2143, 'transition': '', 'label': u'N II]'}, {'wavevac': 2297, 'transition': '', 'label': u'C III'}, {'wavevac': 2325.4, 'transition': '', 'label': u'C II'}, {'wavevac': 2335.4, 'transition': '', 'label': u'Si II'}, {'wavevac': 2332.1, 'transition': '', 'label': u'[O III]'}, {'wavevac': 2471.0, 'transition': '', 'label': u'O II]'}, {'wavevac': 2796.4, 'transition': '', 'label': u'Mg II'}, {'wavevac': 2803.5, 'transition': '', 'label': u'Mg II'}, {'wavevac': 2937.4, 'transition': '', 'label': u'Mg II*'}, {'wavevac': 3130.0, 'transition': '', 'label': u'O III*'}, {'wavevac': 3345.8, 'transition': '', 'label': u'[Ne V]'}, {'wavevac': 3425.9, 'transition': '', 'label': u'[Ne V]'}, {'wavevac': 3727, 'transition': '', 'label': u'[O III]'}, {'wavevac': 3869, 'transition': '', 'label': u'[Ne III]'}, {'wavevac': 3968, 'transition': '', 'label': u'[Ne III]'}, {'wavevac': 4363, 'transition': '', 'label': u'[O III]'}, {'wavevac': 4636, 'transition': '', 'label': u'N III*'}, {'wavevac': 4643, 'transition': '', 'label': u'N III*'}, {'wavevac': 4648.7, 'transition': '', 'label': u'C III*'}, {'wavevac': 4651.2, 'transition': '', 'label': u'O III*'}, {'wavevac': 4959, 'transition': '', 'label': u'[O III]'}, {'wavevac': 5007, 'transition': '', 'label': u'[O III]'}, {'wavevac': 5755, 'transition': '', 'label': u'[N II]'}], 'HeII': [{'wavevac': 6562.0, 'transition': '4 - 6', 'label': u'HeII'}, {'wavevac': 5411.5, 'transition': '4 - 7', 'label': u'HeII'}, {'wavevac': 4687.1, 'transition': '3 - 4', 'label': u'HeII'}, {'wavevac': 3203.95, 'transition': '3 - 5', 'label': u'HeII'}, {'wavevac': 2734.13, 'transition': '3 - 6', 'label': u'HeII'}, {'wavevac': 2511.2, 'transition': '3 - 7', 'label': u'HeII'}, {'wavevac': 2385.4, 'transition': '3 - 8', 'label': u'HeII'}, {'wavevac': 1640.47, 'transition': '2 - 3', 'label': u'HeII'}, {'wavevac': 1215.17, 'transition': '2 - 4', 'label': u'HeII'}, {'wavevac': 1025.3, 'transition': '2 - 6', 'label': u'HeII'}]})¶ add the line ids to the plot
Parameters: ax : plot handle
ylower : float
y-level where the bottom of the line should be
ion : [‘HI’,’HeI’,’HeII’,]
key to the ion to be plotted one at a time
spdata : dict
dictionary of lines
dash : [scale_factor, offset_text ]
dash line from ylower to ylower+scale_factor text from ylower+offset The default is fine for linear axes, but for log axis, it fails
try for a log scale.a scale_factor that is sized by the log scale from ylower to ylower+scale_factor (so if ylower is 2x** and scale_factor=0.1, the line will go from 2-3x**.
- fontsize : int
font size
quality_flags_to_ranges()
¶
-
uvotpy.uvotspec.
quality_flags_to_ranges
(quality, chatter=0)¶ given wavelength and quality flag arrays, reduce the quality to ranges of a certain quality (except for “good” = 0.)
Parameters: wave : array
x-axis values
quality : array
quality flags matching x-axis points
Returns: quality_ranges : dict
a dictionary of ranges for each flag except ‘good’