uvotgetspec¶
Major functions¶
getSpec()¶
- 
uvotpy.uvotgetspec.getSpec(RA, DEC, obsid, ext, indir='./', wr_outfile=True, outfile=None, calfile=None, fluxcalfile=None, use_lenticular_image=True, offsetlimit=None, anchor_offset=None, anchor_position=[None, None], background_lower=[None, None], background_upper=[None, None], background_template=None, fixed_angle=None, spextwidth=13, curved='update', fit_second=False, predict2nd=True, skip_field_src=False, optimal_extraction=False, catspec=None, write_RMF=False, get_curve=None, fit_sigmas=True, get_sigma_poly=False, lfilt1=None, lfilt1_ext=None, lfilt2=None, lfilt2_ext=None, wheelpos=None, interactive=True, sumimage=None, set_maglimit=None, plot_img=True, plot_raw=True, plot_spec=True, zoom=True, highlight=False, uvotgraspcorr_on=True, update_pnt=True, clobber=False, chatter=1)¶
- Makes all the necessary calls to reduce the data. - Parameters: - ra, dec : float - The Sky position (J2000) in decimal degrees - obsid : str - The observation ID number as a String. Typically that is something like “00032331001” and should be part of your grism filename which is something like “sw00032331001ugu_dt.img” - ext : int - number of the extension to process - kwargs : dict - optional keyword arguments, possible values are: - fit_second : bool - fit the second order. Off since it sometimes causes problems when the orders overlap completely. Useful for spectra in top part detector 
- background_lower : list - instead of default background list offset from spectrum as list of two numbers, like [20, 40]. Distance relative to spectrum 
- background_upper : list - instead of default background list offset from spectrum as list of two numbers, like [20, 40]. Distance relative to spectrum 
- offsetlimit : None,int,[center,range] - Default behaviour is to determine automatically any required offset from the predicted anchor position to the spectrum, and correct for that. The automated method may fail in the case of a weak spectrum and strong zeroth or first order next to the spectrum. Two methods are provided: - (1) provide a number which will be used to limit the allowed offset. If within that limit no peak is identified, the program will stop and require you to provide a manual offset value. Try small numbers like 1, -1, 3, etc.. - (2) if you already know the approximate y-location of the spectrum at the anchor x-position in the rotated small image strip around the spectrum, you can give this with a small allowed range for fine tuning as a list of two parameter values. The first value in the list must be the y-coordinate (by default the spectrum falls close to y=100 pixels), the second parameter the allowed adjustment to a peak value in pixels. For example, [105,2]. This will require no further interactive input, and the spectrum will be extracted using that offset. 
- wheelpos: {160,200,955,1000} - filter wheel position for the grism filter mode used. Helpful for forcing Vgrism or UVgrism input when both are present in the directory. 160:UV Clocked, 200:UV Nominal, 955:V clocked, 1000:V nominal 
- zoom : bool - when False, the whole extracted region is displayed, including zeroth order when present. 
- clobber : bool - When True, overwrite earlier output (see also outfile) 
- write_RMF : bool - When True, write the rmf file (will take extra time due to large matrix operations) 
- use_lenticular_image : bool - When True and a lenticular image is present, it is used. If False, the grism image header WCS-S system will be used for the astrometry, with an automatic call to uvotgraspcorr for refinement. 
- sumimage : str - Name summed image generated using - sum_Extimage(), will extract spectrum from summed image.
- wr_outfile : bool - If False, no output file is written 
- outfile : path, str - Name of output file, other than automatically generated. 
- calfile : path, str - calibration file name 
- fluxcalfile : path, str - flux calibration file name or “CALDB” or None 
- predict2nd : bool - predict the second order flux from the first. Overestimates in centre a lot. 
- skip_field_src : bool - if True do not locate zeroth order positions. Can be used if absence internet connection or USNO-B1 server causes problems. 
- optimal_extraction : bool, obsolete - Do not use.Better results with other implementation. 
- catspec : path - optional full path to the catalog specification file for uvotgraspcorr. 
- get_curve : bool or path - True: activate option to supply the curvature coefficients of all orders by hand. path: filename with coefficients of curvature 
- uvotgraspcorr_on : bool enable/disable rerun of uvotgraspcorr to update the WCS keywords 
- update_pnt : bool enable/disable update of the WCS keywords from the attitude file (this is done prior to running uvotgraspcorr is that is enabled) 
- fit_sigmas : bool - fit the sigma of trackwidths if True (not implemented, always on) 
- get_sigma_poly : bool - option to supply the polynomial for the sigma (not implemented) 
- lfilt1, lfilt2 : str - name if the lenticular filter before and after the grism exposure (now supplied by fileinfo()) 
- lfilt1_ext, lfilt2_ext : int - extension of the lenticular filter (now supplied by fileinfo()) 
- plot_img : bool - plot the first figure with the det image 
- plot_raw : bool - plot the raw spectrum data 
- plot_spec : bool - plot the flux spectrum 
- highlight : bool - add contours to the plots to highlight contrasts 
- chatter : int - verbosity of program 
- set_maglimit : int - specify a magnitude limit to seach for background sources in the USNO-B1 catalog 
- background_template : numpy 2D array - User provides a background template that will be used instead determining background. Must be in counts. Size and alignment must exactly match detector image. 
 - Returns: - None, (give_result=True) compounded data (Y0, Y1, Y2, Y3, Y4) which - are explained in the code, or (give_new_result=True) a data dictionary. - Notes - Quick Start
- getSpec(ra,dec,obsid, ext,) should produce plots and output files
 - Which directory? - The program needs to be started from the CORRECT data directory. The attitude file [e.g., “sw<OBSID>pat.fits” ]is needed! A link or copy of the attitude file needs to be present in the directory or ”../../auxil/” directory as well. - Global parameters - These parameters can be reset, e.g., during a (i)python session, before calling getSpec. - trackwidth : float width spectral extraction in units of sigma. The default is trackwidth = 2.5 The alternative default is trackwidth = 1.0 which gives better results for weak sources, or spectra with nearby contamination. However, the flux calibration and coincidence-loss correction give currently inconsistent results. When using trackwidth=1.0, rescale the flux to match trackwidth=2.5 which value was used for flux calibration and coincidence-loss correction.
- give_result : bool set to False since a call to getSpec with this set will return all the intermediate results. See returns
 - When the extraction slit is set to be straight - curved="straight"it cuts off the UV part of the spectrum for spectra located in the top left and bottom right of the image.
Key functions¶
coi_func()¶
- 
uvotpy.uvotgetspec.coi_func(pixno, wave, countrate, bkgrate, frametime=0.0110329, background=False, wheelpos=160, area=414, option=1, fudgespec=1.0, coi_length=29, sig1coef=[], trackwidth=0.0, sigma1_limits=[2.6, 4.0], ccc=[], ccb=[], ca=[], cb=[], debug=False, chatter=5)¶
- Compute the coincidence loss correction factor to the (net) count rate as a function of wavelength - Parameters: - pixno : array-like - pixel number with origen at anchor - wave : array-like - wavelength in A, must be monotonically increasing - countrate : array-like - input total count rate for the coi aperture (default coi_width pixels wide) - bkgrate : array-like - background rate for the coi aperture (default coi_width pixels wide) - kwargs : dict - frametime : float - CCD frame time in seconds 
- option : int - . option = 1 : (default) classic coi-loss, for box 16 pixels wide,
- 414 pix^2 area 
 
- background : bool - if the background is True an interpolated function for the coi correction factor in the background count rate is returned - if the background is False an interpolated function for the coi correction factor in the net target count rate is returned 
- wheelpos : [160,200,955,1000]
- filter wheel position, one of these values. 
 
 - Returns: - coi_func : scipy.interpolate.interpolate.interp1d - if background is True an interpolated function for the coi correction factor in the background count rate while if background is False an interpolated function for the coi correction factor in the net target count rate is returned - v : bool
- only for spectrum. v=True points are valid, False points mean observed rate per frame is too large. 
 - Notes - defaults to the background coincidence loss equivalent to an area of “area=414” sub-pixels. - Both the sprate and bgrate are required, as the points in sprate that are not valid are used to mask the bgrate. - 2012-03-21 NPMK initial version 
- 2014-06-02 NPMK start using a fixed coi-area,remove old options,
- change meaning parameters 
 
- 2014-07-23 NPMK use calibrated values of coi-box and factor 
 
findBackground()¶
- 
uvotpy.uvotgetspec.findBackground(extimg, background_lower=[None, None], background_upper=[None, None], yloc_spectrum=100, smo1=None, smo2=None, chatter=2)¶
- Extract the background from the image slice containing the spectrum. - Parameters: - extimg : 2D array - image containing spectrum. Dispersion approximately along x-axis. - background_lower : list - distance in pixels from yloc_spectrum of the limits of the lower background region. - background_upper : list - distance in pixels from yloc_spectrum of the limits of the upper background region. - yloc_spectrum : int - pixel Y location of spectrum - smo1 : float - smoothing parameter passed to smoothing spline fitting routine. None for default. - smo2 : float - smoothing parameter passed to smoothing spline fitting routine. None for default. - chatter : int - verbosity - Returns: - bg : float - mean background - bg1, bg2 : 1D arrays - bg1 = lower background; bg2 = upper background inherits size from extimg.shape x-xoordinate - bgsig : float - standard deviation of background - bgimg : 2D array - image of the background constructed from bg1 and/or bg2 - bg_limits_used : list, length 4 - limits used for the background in the following order: lower background, upper background - (bg1_good, bg1_dis, bg1_dis_good, bg2_good, bg2_dis, bg2_dis_good, bgimg_lin) : tuple - various other background measures - Notes - Global parameter - background_method : {‘boxcar’,’splinefit’}
 - The two background images can be computed 2 ways: - ‘splinefit’: sigma clip image, then fit a smoothing spline to each
- row, then average in y for each background region 
 
- ‘boxcar’: select the background from the smoothed image created
- by method 1 below. 
 
- ‘sigmaclip’: do sigma clipping on rows and columns to get column
- profile background, then clip image and mask, interpolate over masked bits. 
 
 - extimg is the image containing the spectrum in the 1-axis centered in 0-axis ank is the position of the anchor in the image - I create two background images: - split the image strip into 40 portions in x, so that the background variation is small compute the mean sigma clip (3 sigma) each area to to the local mean replace out-of-image pixels with mean of whole image (2-sigma clipped) smooth with a boxcar by the smoothing factor
- compute the background in two regions upper and lower linearly interpolate in Y between the two regions to create a background image
 - bg1 = lower background; bg2 = upper background - smo1, smo2 allow one to relax the smoothing factor in computing the smoothing spline fit 
get_radec()¶
- 
uvotpy.uvotgetspec.get_radec(file='radec.usno', objectid=None, tool='astropy', chatter=0)¶
- Read the decimal ra,dec from a file or look it up using the objectid name from CDS - Parameters: - file: str, optional - path, filename of ascii file with just the ra, dec position in decimal degrees - objectid : str, optional - name of object that is recognized by the (astropy.coordinates/CDS Sesame) service if not supplied a file name is required - tool : str - name tool to use; either ‘astropy’ or ‘cdsclient’ - chatter : int - verbosity - Returns: - ra,dec : float - Position (epoch J2000) in decimal degrees 
makeXspecInput()¶
- 
uvotpy.uvotgetspec.makeXspecInput(lamdasp, countrate, error, lamda_response=None, chatter=1)¶
- Convert the count rate spectrum per pixel into a spectrum on the given bins of the response function. - Parameters: - lamdasp : array - wavelengths spectrum - countrate : array - count rates at wavelengths - error : array - errors at wavelengths - kwargs : dict - lamda_response : array - the wavelength for the response bins 
- chatter : int - verbosity 
 - Returns: - lambda : array - wavelengths of the bins - countrate : array - count rate in the bins - error : array - errors in the bins - Notes - errors are summed as sqrt( sum (errors**2 ) ) 
plan_obs_using_mags()¶
- 
uvotpy.uvotgetspec.plan_obs_using_mags(S2N=3.0, lentifilter=None, mag=None, bkgrate=0.16, coi=False, obsfile=None, grism='uv')¶
- Tool to compute the grism exposure time needed to get a certain S/N in the filterband given observed magnitude in lentifilter. - Parameters: - S2N : float - signal to noise desired - lentifilter : str, {‘uvw2’,’uvm2’,’uvw1’,’u’,’b’,’v’}, optional if obsfile given - lenticular filter in which a magnitude is available - mag : float, optional if obsfile given - measured magnitude in lentifilter. - bkgrate : float - the count rate in the background. This parameter determines for weak spectra to a large extent what exposure time is required. - coi : bool - apply coincidence-loss correction ? not yet implemented - obsfile : path, str, optional if lentifilter,`mag` given - ascii filename with two columns wave, flux or a fits file with the spectrum in the second extension - grism : str, {‘uv’} - Returns: - An estimate of the required exposure time is printed - Notes - Lentifilter should be one of: uvw2, uvm2, uvw1, u, b, v - Assumed source is faint - no coi (can later add coi) - The exposure time will ramp up quickly once the target gets too faint. The background in the clocked uv grism varies and can be lower, like 0.06 depnding of where the spectrum is put on the detector. So we could update this program at some point with the uv clocked background variation in it. Typically background values are below 0.1 c/s/arcsec. Higher backgrounds are found in crowded fields. - If obsfile is given, then calculate the magnitudes using the spectrum from the obsfile - TO DO: V grism placeholder - 16 April 2012, initial version, Paul Kuin
 
spec_curvature()¶
- 
uvotpy.uvotgetspec.spec_curvature(wheelpos, anchor, order=1)¶
- Find the coefficients of the polynomial for the curvature. - Parameters: - wheelpos : int, {160,200,955,1000} - grism filter position in filter wheel - anchor : list, array - anchor position in detector coordinates (pixels) - order : int - the desired spectral order - Returns: - Provides the polynomial coefficients for y(x). - Notes - The curvature is defined with argument the pixel coordinate in the dispersion direction with reference to the the anchor coordinates in det-img coordinates. The polynomial returns the offset normal to the dispersion. - 2011-03-07 Paul Kuin, initial version
- 2011-08-02 fixed nominal coefficients order=1
 
spectrumpixshift()¶
- 
uvotpy.uvotgetspec.spectrumpixshift(w1, spec1, w2, spec2, wmin=None, wmax=None, spectrum=False, delwav=False, chatter=0)¶
- Accurately determine relative wavelength/pixel shift between 2 spectra. - Parameters: - w1,spec1, w2,spec2 : array-like - wavelength, spectrum pairs - kwargs : dict - wmin,wmax: float
 - limits to region to use - spectrum : bool
 - resample 2nd spectra and return second spectrum shifted - delwav : bool
- chatter : int
 - verbosity - Returns: - k : int - shift in pixels. option spectrum False, for option delwav False - delwav : float - shift in angstroms. For option spectrum False, option delwav True - k, (w1,s2) : int, tuple - pixel shift, tuple of wave, flux for second spectrum shifted and resampled on wavelength first spectrum for option spectrum True - Notes - k ~ 1/6 pixel [option: resample 2nd spectra ] 
sum_Extimage()¶
- 
uvotpy.uvotgetspec.sum_Extimage(pha_file_list, sum_file_name='extracted_image_sum.fit', mode='create', ankerlist=None, plotimage=True, correlate=True, correlate_wavewindow=[None, None], figno=20, shiftlist=[], clobber=False, chatter=1)¶
- This routine will create/update/read a summed extracted image. - Parameters: - pha_file_list : list - list of PHA filenames written by calls of getSpec - kwargs : dict - sum_file_name : str - file name for sum 
- mode : str, {‘create’,’read’} - when ‘create’ make the sum file; when ‘read’ read the sum file 
- ankerlist : list, optional - list of anchor positions 
- plotimage : bool, optional - make a plot of the image 
- correlate : bool, optional - try to determine shifts by correlating the image 
- correlate_wavewindow : list - when correlate True then use only the part of the spectrum within [wavemin, wavemax] 
- figno : int, optional - figure number to use 
- shiftlist : list, optional - list of shifts to apply 
- clobber : bool - write over existing file 
- chatter : int - verbosity 
 - Returns: - When option=read the following are returned: - - sumimg : 2D array - summed image - - expmap : 2D array - exposure map for each pixel in summed image - - exposure : float - exposure time (maximum) - - wheelpos : int - grism wheel position - - C_1, C_2 : list - dispersion coefficients - - dist12 : float - distance in pixels between the first and second order anchors - - anker : list - anchor position in summed image - - coefficients : tuple - (coef0,coef1,coef2,coef3,sig0coef,sig1coef,sig2coef,sig3coef) curvature and sigma coefficients for the summed image - - hdr : fits header - Notes - The anchor point, by default, will be at point [100,500] - mode = ‘create’ <make new sum file>, ‘read’ <read sum file> - The anchor position in the pha_file will need to be passed via ankerlist or be given as keyword ANKXIMG, ANKYIMG in the header of the PHA file (it is). - when correlate_wavewindow = [none,none] nothing is done
- = [2300,4000] wavelength range where to do cross correlation on flux to generate corrections to ankx
- shiftlist = [None, 0, -2, None ] can be used to force the shifts (in pix)
- of the given number in the list of spectra (here assumed to be four. List length must equal pha_file_list length.
 - Example: - phafiles = [‘sw00032150003ugu_1_pha.fits’,’sw00032150003ugu_2_pha.fits’, ‘sw00032150003ugu_3_pha.fits’, ‘sw00032150003ugu_4_pha.fits’, ‘sw00032150003ugu_5_pha.fits’, ‘sw00032150003ugu_6_pha.fits’, ‘sw00032150003ugu_7_pha.fits’, ‘sw00032150003ugu_8_pha.fits’, ‘sw00032150003ugu_9_pha.fits’, ‘sw00032150003ugu_10_pha.fits’, ‘sw00032150003ugu_11_pha.fits’, ‘sw00032150003ugu_12_pha.fits’, ‘sw00032150003ugu_13_pha.fits’] - uvotgetspec.sumimage( phafiles, mode=’create’,chatter=1,clobber=True) - Paul Kuin 2011 (MSSL/UCL) 
 
 
