uvotio¶
Major functions¶
fileinfo()¶
- 
uvotpy.uvotio.fileinfo(filestub, ext, lfilt1=None, directory='./', chatter=0, wheelpos=None, twait=40.0)¶
- finds files for spectrum, matching attitude and lenticular images uncompresses gzipped files if found - Parameters: - filestub : str - the base of the file name, with the Swift project convention, consisting of “sw” + the OBSID, i.e., “sw00032301001” - ext : int - the number of the extension of the grism file to match - kwargs : dict - lfilt1 : str, optional
 - name of first lenticular filter used. Must be one of ‘uvw2’, ‘uvm2’,’uvw1’,’u’,’b’,’v’,’wh’ - directory : path, str
 - path for directory. This is the directory with the grism file. - chatter : int
 - verbosity - twait : float
 - The maximum time allowed between begin and end of matched exposures of grism-lenticular filter, for each match. - wheelpos : imt
 - If given, use to discriminate between UV and Visual grisms. - Returns: - specfile, attfile: str - filename of spectrum, the attitude file name. - lfilt1, lfilt2 : str - lenticular filter file name before the grism exposure or None, and the file name of the lenticular filter following the grism - lfilt1_ext,lfilt2_ext : int - extension number for each lenticular filter matching exposure 
rate2flux()¶
- 
uvotpy.uvotio.rate2flux(wave, rate, wheelpos, bkgrate=None, pixno=None, co_sprate=None, co_bgrate=None, arf1=None, arf2=None, effarea1=None, effarea2=None, spectralorder=1, anker=None, test=None, msg='', respfunc=False, swifttime=None, option=1, fudgespec=1.0, frametime=0.0110329, debug=False, chatter=1)¶
- Convert net count rate to flux - WARNING: dependent on the parameters passed, the old CALDB (<=2012)
- OR the new flux calibration will be used. Since 10SEP2012 the coi-factor is included in the calculation of the flux and the effective area. A coi-correction is still made when using the old CALDB which will be inconsistent to that calculated in the writeSpectrum() which makes the output file.
 - many of the parameters are needed to calculate the coi-factor - Parameters: - wave : float ndarray - wavelength in A - rate, bkrate : float ndarray - net and background count rate/bin in spectrum, aperture corrected - co_sprate, co_bgrate : ndarray - total of spectrum+background and background rate/bin for the coincidence area of constant width (default set to 16 pixels) - wheelpos : int - filter wheel position - pixno : ndarray - pixel coordinate (zero = anchor; + increasing wavelengths) - co_sprate, cp_bgrate : ndarray - rates for calculating the coincidence loss - arf1, arf2 : path or “CALDB”, optional - effarea1, effarea2 : FITS HDU[, interpolating function] - result from a previous call to readFluxCalFile() for first or second order - spectralorder : int - the spectral order of the spectrum, usually =1 - trackwidth : float - width of the spectral extraction used in units of sigma - anker : list - anchor detector coordinate positions (pix) as a 2-element numpy array - frametime : float - the frame time for the image is required for the coi-correction - swifttime : int - swift time of observation in seconds for calculating the sensitivity loss - debug : bool - for development - chatter : int - verbosity (0..5) - respfunc : bool - return the response function (used by writeSpectrum()) - Returns: - (flux, wave, coi_valid) : tuple - coi-corrected flux type interp1d, array wave, and matching boolean array for points not too bright for coincidence loss correction - Notes - 2013-05-05 NPMKuin - adding support for new flux calibration files; new kwarg 2014-02-28 fixed. applying fnorm now to get specrespfunc, pass earlier effective area 2014-04-30 NPMK changed coi_func parameters (option=1,fudgespec=1.322,frametime,coi_length=29) 
readFluxCalFile()¶
- 
uvotpy.uvotio.readFluxCalFile(wheelpos, anchor=None, option='default', spectralorder=1, arf=None, msg='', chatter=0)¶
- Read the new flux calibration file, or return None. - Parameters: - wheelpos : int, required - the position of the filterwheel - kwargs: dict - anchor : list, optional coordinate of the anchor 
- option : str option for output selection: - option==”default” + anchor==None: old flux calibration option==”default” + anchor : nearest flux calibration + model extrapolation option==”nearest” : return nearest flux calibration option==”model” : model 
- spectralorder : int
- spectral order (1, or 2) 
 
- arf: path
- fully qualified path to a selected response file 
 
- msg: str
- buffer message list (to add to) 
 
 - Returns: - None if not (yet) supported - option == ‘model’ returns the (astropy/pyfits) fits HDU (header+data) of the model - option == ‘nearest’ - returns the fits HDU of the nearest calfile - option == ‘default’ and anchor == None: - returns the fits HDU of the nearest calfile - option == ‘default’ and anchor position given (in detector coordinates) - returns the fits HDU and an interpolating function fnorm(wave in A) for the flux correction - msg : string comments separated by - Notes - 2013-05-05 NPMKuin 
sensitivityCorrection()¶
- 
uvotpy.uvotio.sensitivityCorrection(swifttime, wave=None, sens_rate=0.01, wheelpos=0)¶
- give the sensitivity correction factor Actual flux = observed flux(date-obs) times the sensitivity correction - Parameters: - swifttime : float - time of observation since 2005-01-01 00:00:00 in seconds, usually TSTART - sens_rate : float - the yearly percentage loss in sensitivity - wave : array, optional - the wavelength for (future) in case sensitivity(time, wavelength) - Notes - A 1%/year decay rate since 2005-01-01 has been assumed and the length of the mean Gregorian year was used 
writeSpectrum()¶
- 
uvotpy.uvotio.writeSpectrum(ra, dec, filestub, ext, Y, fileoutstub=None, arf1=None, arf2=None, fit_second=True, write_rmffile=True, used_lenticular=True, fileversion=2, calibration_mode=True, history=None, chatter=1, clobber=False)¶
- Write a standard UVOT output file - Curved extraction only, not optimal extraction. - Parameters: - ra,dec : float, float - position in decimal degrees - filestub : str - “sw” + obsid - ext : int - extension number - Y : tuple - compound variable with spectral data from uvotgetspec - Returns: - Writes the output file only. - Notes - Output file composition - For details, see the output file format description. wheelpos, filter, orders, author
writeEffAreaFile()¶
- 
uvotpy.uvotio.writeEffAreaFile(wheelpos, spectralorder, wave, specresp, specresp_err=None, anker=None, dxy_anker=None, fileversion='999', todir='./', rebin=True, clobber=False)¶
- create an ARF file - Parameters: - wheelpos : int, {160,200,955,1000} - spectralorder: int, {1,2} - wave: ndarray - wavelengths in Angstrom - specresp: ndarray - effective area (EA) in cm^2 for each wave - specresp_err: ndarray - 1-sigma EA error (random + systematic) - anker: list, ndarray[2] - 2-element array with position in det coordinates of EA - dxy_anker: list,ndarray[2] - EA determined for box [anker[0]+/-dxy_anker[0], anker[1]+/-dxy_anker[1]] - fileversion: str - version for this EA (spectral response) file. - todir: path - directory to place the file into - rebin : bool - When true (old behaviour) bin 1 A in wavelength When False, make one bin for each point in array wave. - Returns: - the new effective area file with file name something like: - ‘swugu0160_ax1100ay1100_dx150dy150_o1_20041120v001.arf’ - Notes - Modified 15-SEP-2012 by Paul Kuin.
 - With only wheelpos, spectralorder, wave, specresp input, the output file conforms to the HEASARC approved response file. The additional keywords and error column have not been approved as of 15 September 2012. - Modified 13 Feb 2013 by Paul Kuin
 - Added futher keyword COIAWARE to discriminate between the old and new effective areas and changed comments after keywords to be more descriptive. - Modified 5 March 2013 by Paul Kuin
 - header edited - Renamed 28 Dec 2013
 - first extension assumed 1-spaced wavelengths. Relaxed to allow variable wavelengths. - changed to reflect use of full coi-solution 2014-08-20. Paul Kuin
- added no rebinning as option. It actually will rebin slightly by calculating the minimum value of the bin from the distance of its neighbors, and the maximum value is chosen to have no gaps between bins.
 
write_rmf_file()¶
- 
uvotpy.uvotio.write_rmf_file(rmffilename, wave, wheelpos, disp, flux=None, anchor=[1000, 1000], spectralorder=1, effarea1=None, effarea2=None, lsfVersion='001', msg='', chatter=1, clobber=False)¶
- Write the RMF file for the first order spectrum - Parameters: - rmffile : path, str - file name output file - wave : ndarray
- mid-wavelengths of the bins in the spectrum 
- flux : ndarray [default None]
- used to omit channels of invalid (NaN) or negative flux values from the response file 
- wheelpos : int
- filter wheel position 
- disp : ndarray
- dispersion coefficients 
- anchor : 2-element list
- The anchor position is used to select the correct effective area (important for the clocked grism modes). 
- spectralorder : 1
- ** Do not change ** Only for the first order the RMF can currently be computed. 
- effarea1, effarea2 : hdu, interpolating function
- do not use unless you know what you’re doing 
- lsfVersion : [‘001’,‘003’]
- version number of the LSF file to be used. 
- chatter : int
- verbosity 
- clobber : bool
- if true overwrite output file if it already exists 
 - Returns: - Writes the RMF file - Notes - The count rate has been corrected for coincidence loss (version 2 SPECTRUM extension). The spectral response varies in the clocked grisms, is nearly constant in the nominal grisms. Therefore, in the clocked grisms, the rmf file needs to be created specifically for the specific spectrum. - The rmf files have also energy bins corresponding to the wavelength bins in the spectrum. These also show some variation from spectrum to spectrum. - The line spread function from the uv grism at default position is currently used for all computations. Since the RMF file encodes also the effective area, this version presumes given anchor position. - 2014-02-27 code cleaned up. Speed depends on number of points 2015-02-02 versioning lsf introduced; changed instrument FWHM values 2015-02-04 error found which affects the longer wavelengths (> 3500A) 2015-02-04 verified the LSF with a calibration spectrum, which shows instrumental broadening of 10+-1 Angstrom and at long wavelengths (6560) the same broadening predicted by the Zemax optical model.- 2015-02-09 There was a major overhaul of this routine, which is now
- much improved.
 - 2015-02-13 remove trimming of channels 
Key functions¶
XYSpecResp()¶
- 
uvotpy.uvotio.XYSpecResp(wheelpos=None, spectralorder=1, anker=[1129, 1022], test=None, chatter=0)¶
- the spectral response based on the position of the anchor of the spectrum. Depends on the grism mode via ‘wheelpos’ and the spectral order. - Parameters: - wheelpos : int - kwargs : dict - spectralorder : int
- order of the spectrum 
 
- anker : list
- position in detector coordinates (pixels) 
 
- test : any
- if not None then get the response at the boresight 
 
 - Returns: - An interpolating function for the spectral response - based on the position (Xank,Yank) of the anchor of the spectrum. - Depends on the grism mode via ‘wheelpos’ and the spectral order. - Notes - Will be superseded by readFluxCalFile 
getZmxFlux()¶
- 
uvotpy.uvotio.getZmxFlux(x, y, model, ip=1)¶
- Interpolate model to get normalized flux. - Parameters: - x, y : float - anchor coordinate x,y to find an interpolated solution to the model - model : fits structure - binary table extension (header + data) fields are wave, xpix, ypix, flux - ip : int - The order of the interpolation (1=linear, 2=quadratic, 3=cubic) - Returns: - flux interpolated at (x,y) in (xpix, ypix) as function of wave 
kev2angstrom()¶
- 
uvotpy.uvotio.kev2angstrom(E, unit='keV')¶
- conversion of units - Returns: - The photon wavelength in angstroms 
angstrom2kev()¶
- 
uvotpy.uvotio.kev2angstrom(E, unit='keV')
- conversion of units - Returns: - The photon wavelength in angstroms 
updateResponseMatrix()¶
- 
uvotpy.uvotio.updateResponseMatrix(rmffile, C_1, clobber=True, lsffile='zemaxlsf', chatter=0)¶
- modify the response matrix lineprofiles using the zemax model prediction from zemaxlsf.fit In addition the zemax profile is broadened by the instrumental broadening of 2.7 pixels. - Parameters: - rmffile : path, str - The rmffile is updated by default - C_1: ndarray - The dispersion C_1 is used to convert pixels to angstroms. - kwargs : dict - lsffile : path - The lsffile is in the $UVOTPY/calfiles directory 
- clobber : bool - overwrite output. 
- chatter : int - verbosity 
 - Returns: - writes RMF file - Notes - The same algorithm was implemented in the write_rmf_file() routine which does not need the input rmf file produced by the “Ftool” rmfgen. write_rmf_file was rewritten 2015-02-08 
 
 
