The muse_twilight recipe



Combine several twilight skyflats into one cube, compute correction factors for each IFU, and create a smooth 3D illumination correction.


Processing first handles each raw input image separately: it trims the raw data and records the overscan statistics, subtracts the bias (taking account of the overscan, if –overscan is not “none”), converts the images from adu to count, subtracts the dark, divides by the flat-field and combines all the exposures using input parameters. The input calibrations geometry table, trace table, and wavelength calibration table are used to assign 3D coordinates to each CCD-based pixel, thereby creating a pixel table from the master sky-flat. These pixel tables are then cut in wavelength using the –lambdamin and –lambdamax parameters. The integrated flux in each IFU is computed as the sum of the data in the pixel table, and saved in the header, to be used later as estimate for the relative throughput of each IFU. If an ILLUM exposure was given as input, it is then used to correct the relative illumination between all slices of one IFU. For this, the data of each slice within the pixel table of each IFU is multiplied by the normalized median flux of that slice in the ILLUM exposure. The pixel tables of all IFUs are then merged, using the integrated fluxes as inverse scaling factors, and a cube is reconstructed from the merged dataset, using given parameters. A white-light image is created from the cube. This skyflat cube is then saved to disk, with the white-light image as one extension. To construct a smooth 3D illumination correction, the cube is post-processed in the following way: the white-light image is used to create a mask of the illuminated area. From this area, the optional vignetting mask is removed. The smoothing is then computed for each plane of the cube: the illuminated area is smoothed (by a 5x7 median filter), normalized, fit with a 2D polynomial (of given polynomial orders), and normalized again. A smooth white image is then created by collapsing the smooth cube. If a vignetting mask was given or NFM data is processed, an area close to the edge of the MUSE field is used to compute a 2D correction for the vignetted area: the original unsmoothed white-light image is corrected for large scale gradients by dividing it with the smooth white image. The residuals in the edge area (as defined by the input mask or hardcoded for NFM) are then smoothed using input parameters. This smoothed vignetting correction is the multiplied onto each plane of the smooth cube, normalizing each plane again. This twilight cube is then saved to disk.



Create an object for the recipe muse_twilight.

import cpl
muse_twilight = cpl.Recipe("muse_twilight")



If this is “none”, stop when detecting discrepant overscan levels (see ovscsigma), for “offset” it assumes that the mean overscan level represents the real offset in the bias levels of the exposures involved, and adjusts the data accordingly; for “vpoly”, a polynomial is fit to the vertical overscan and subtracted from the whole quadrant. (str; default: ‘vpoly’) [default=”vpoly”].


This influences how values are rejected when computing overscan statistics. Either no rejection at all (“none”), rejection using the DCR algorithm (“dcr”), or rejection using an iterative constant fit (“fit”). (str; default: ‘dcr’) [default=”dcr”].


If the deviation of mean overscan levels between a raw input image and the reference image is higher than |ovscsigma x stdev|, stop the processing. If overscan=”vpoly”, this is used as sigma rejection level for the iterative polynomial fit (the level comparison is then done afterwards with |100 x stdev| to guard against incompatible settings). Has no effect for overscan=”offset”. (float; default: 30.0) [default=30.0].


The number of pixels of the overscan adjacent to the data section of the CCD that are ignored when computing statistics or fits. (int; default: 3) [default=3].


Type of combination to use (str; default: ‘sigclip’) [default=”sigclip”].


Number of minimum pixels to reject with minmax (int; default: 1) [default=1].


Number of maximum pixels to reject with minmax (int; default: 1) [default=1].


Number of pixels to keep with minmax (int; default: 1) [default=1].


Low sigma for pixel rejection with sigclip (float; default: 3.0) [default=3.0].


High sigma for pixel rejection with sigclip (float; default: 3.0) [default=3.0].


Scale the individual images to a common exposure time before combining them. (bool; default: False) [default=False].


The resampling technique to use for the final output cube. (str; default: ‘drizzle’) [default=”drizzle”].


Type of statistics used for detection of cosmic rays during final resampling. “iraf” uses the variance information, “mean” uses standard (mean/stdev) statistics, “median” uses median and the median median of the absolute median deviation. (str; default: ‘median’) [default=”median”].


Sigma rejection factor to use for cosmic ray rejection during final resampling. A zero or negative value switches cosmic ray rejection off. (float; default: 50.0) [default=50.0].


Minimum wavelength for twilight reconstruction. (float; default: 5000.0) [default=5000.0].


Maximum wavelength for twilight reconstruction. (float; default: 9000.0) [default=9000.0].


Sampling for twilight reconstruction, this should result in planes of equal wavelength coverage. (float; default: 250.0) [default=250.0].


Polynomial order to use in x direction to fit the full field of view. (int; default: 2) [default=2].


Polynomial order to use in y direction to fit the full field of view. (int; default: 2) [default=2].


Pixels on edges stronger than this fraction in the normalized image are excluded from the fit to the vignetted area. Set to non-positive number to include them in the fit. This has no effect for NFM skyflats. (float; default: 0.02) [default=0.02].


Type of smoothing to use for the vignetted region given by the VIGNETTING_MASK (for WFM, or the internal mask, for NFM); gaussian uses (vignxpar + vignypar)/2 as FWHM. (str; default: ‘polyfit’) [default=”polyfit”].


Parameter used by the vignetting smoothing: x order for polyfit (default, recommended 4), parameter that influences the FWHM for the gaussian (recommended: 10), or x dimension of median filter (recommended 5). If a negative value is found, the default is taken. (int; default: -1) [default=-1].


Parameter used by the vignetting smoothing: y order for polyfit (default, recommended 4), parameter that influences the FWHM for the gaussian (recommended: 10), or y dimension of median filter (recommended 5). If a negative value is found, the default is taken. (int; default: -1) [default=-1].


The height of the vignetted region at the top of the MUSE field in NFM. This is the region modeled separately (the final vignetting model might be smaller). (int; default: 22) [default=22].

The following code snippet shows the default settings for the available parameters.

import cpl
muse_twilight = cpl.Recipe("muse_twilight")

muse_twilight.param.overscan = "vpoly"
muse_twilight.param.ovscreject = "dcr"
muse_twilight.param.ovscsigma = 30.0
muse_twilight.param.ovscignore = 3
muse_twilight.param.combine = "sigclip"
muse_twilight.param.nlow = 1
muse_twilight.param.nhigh = 1
muse_twilight.param.nkeep = 1
muse_twilight.param.lsigma = 3.0
muse_twilight.param.hsigma = 3.0
muse_twilight.param.scale = False
muse_twilight.param.resample = "drizzle"
muse_twilight.param.crtype = "median"
muse_twilight.param.crsigma = 50.0
muse_twilight.param.lambdamin = 5000.0
muse_twilight.param.lambdamax = 9000.0
muse_twilight.param.dlambda = 250.0
muse_twilight.param.xorder = 2
muse_twilight.param.yorder = 2
muse_twilight.param.vignmaskedges = 0.02
muse_twilight.param.vignsmooth = "polyfit"
muse_twilight.param.vignxpar = -1
muse_twilight.param.vignypar = -1
muse_twilight.param.vignnfmmask = 22

You may also set or overwrite some or all parameters by the recipe parameter param, as shown in the following example:

import cpl
muse_twilight = cpl.Recipe("muse_twilight")
res = muse_twilight( ..., param = {"overscan":"vpoly", "ovscreject":"dcr"})

See also

cpl.Recipe for more information about the recipe object.

Bug reports

Please report any problems to Peter Weilbacher. Alternatively, you may send a report to the ESO User Support Department.