The vmmoscalib recipe
===============================================================

.. data:: vmmoscalib

Synopsis
--------

Determination of the extraction mask

Description
-----------

This recipe is used to identify reference lines on MOS arc lamp
exposures, and trace the spectral edges on the corresponding flat field
exposures. This information is used to determine the spectral extraction
mask to be applied in the scientific data reduction, performed with the
recipe vimos_science. The input arc lamp and flat field exposures are
assumed to be obtained quasi-simultaneously, so that they would be
described by exactly the same instrument distortions.

A line catalog must be specified, containing the wavelengths of the
reference arc lamp lines used for the wavelength calibration. A grism
table (typically depending on the instrument mode, and in particular on
the grism used) may also be specified: this table contains a default
recipe parameter setting to control the way spectra are extracted for
a specific instrument mode, as it is used for automatic run of the
pipeline on Paranal and in Garching. If this table is specified, it
will modify the default recipe parameter setting, with the exception of
those parameters which have been explicitly modifyed on the command line.

If a grism table is not specified, the input recipe parameters values
will always be read from the command line, or from an esorex configuration
file if present, or from their generic default values (that are rarely
meaningful). Finally a master bias frame must be input to this recipe.

In the table below the MOS_CURV_COEFF, MOS_CURV_TRACES, MOS_SPATIAL_MAP
MOS_ARC_SPECTRUM_EXTRACTED, MOS_SPECTRA_DETECTION, MOS_SLIT_MAP, and
MOS_SLIT_LOCATION, are never created in case of long-slit-like data.

The products MOS_SPECTRA_DETECTION, MOS_SLIT_MAP, and MOS_DISP_RESIDUALS,
are just created if the --check parameter is set to true. The product
GLOBAL_DISTORTION_TABLE is just created if more than 12 separate spectra
are found in the CCD.


Input files
^^^^^^^^^^^^
::

  DO category:               Type:       Explanation:         Required:
  MOS_SCREEN_FLAT            Raw         Flat field exposures    Y
  MOS_ARC_SPECTRUM           Raw         Arc lamp exposure       Y
  MASTER_BIAS                Calib       Bias frame              Y
  LINE_CATALOG               Calib       Line catalog            Y
  CONFIG_TABLE               Calib       Grism table             .


Output files
^^^^^^^^^^^^
::

  DO category:               Data type:  Explanation:
  MOS_COMBINED_SCREEN_FLAT   FITS image  Combined (sum) flat field
  MOS_MASTER_SCREEN_FLAT     FITS image  Normalised flat field
  MOS_ARC_SPECTRUM_EXTRACTED FITS image  Wavelength calibrated arc spectrum
  MOS_DISP_COEFF             FITS table  Inverse dispersion coefficients
  MOS_DISP_RESIDUALS         FITS image  Residuals in wavelength calibration
  MOS_DISP_RESIDUALS_TABLE   FITS table  Residuals in wavelength calibration
  MOS_DELTA_IMAGE            FITS image  Offset vs linear wavelength calib
  MOS_WAVELENGTH_MAP         FITS image  Wavelength for each pixel on CCD
  MOS_SPECTRA_DETECTION      FITS image  Check for preliminary detection
  MOS_SLIT_MAP               FITS image  Map of central wavelength on CCD
  MOS_CURV_TRACES            FITS table  Spectral curvature traces
  MOS_CURV_COEFF             FITS table  Spectral curvature coefficients
  MOS_SPATIAL_MAP            FITS image  Spatial position along slit on CCD
  MOS_SPECTRAL_RESOLUTION    FITS table  Resolution at reference arc lines
  MOS_SLIT_LOCATION          FITS table  Slits on product frames and CCD
  GLOBAL_DISTORTION_TABLE    FITS table  Global distortions table


Constructor
-----------

.. method:: cpl.Recipe("vmmoscalib")
   :noindex:

   Create an object for the recipe vmmoscalib.

::

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

Parameters
----------

.. py:attribute:: vmmoscalib.param.dispersion

    Expected spectral dispersion (Angstrom/pixel) (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmoscalib.param.peakdetection

    Initial peak detection threshold (ADU) (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmoscalib.param.wdegree

    Degree of wavelength calibration polynomial (long; default: 0) [default=0].
.. py:attribute:: vmmoscalib.param.wradius

    Search radius if iterating pattern-matching with first-guess method  (pixel) (long; default: 4) [default=4].
.. py:attribute:: vmmoscalib.param.wreject

    Rejection threshold in dispersion relation fit (pixel) (float;  default: 1.0) [default=1.0].
.. py:attribute:: vmmoscalib.param.wmodelss

    Interpolation mode of wavelength solution (0 = no interpolation, 1 =  fill gaps, 2 = global model) (long; default: 2) [default=2].
.. py:attribute:: vmmoscalib.param.wmodemos

    Interpolation mode of wavelength solution (0 = no interpolation, 1 =  local (slit) solution, 2 = global model) (long; default: 1) [default=1].
.. py:attribute:: vmmoscalib.param.ignore_lines

    Catalog lines nearest to wavelengths in this list will be ignored for  wavelength calibration (str; default: '') [default=""].
.. py:attribute:: vmmoscalib.param.used_linesets

    Linesets to use. Valid are 'standard' and'extended' (see column  LINE_SET in the line catalogue) (str; default: 'standard') [default="standard"].
.. py:attribute:: vmmoscalib.param.cdegree

    Degree of spectral curvature polynomial (long; default: 0) [default=0].
.. py:attribute:: vmmoscalib.param.cmode

    Interpolation mode of curvature solution applicable to MOS-like data  (0 = no interpolation, 1 = fill gaps, 2 = global model) (long;  default: 1) [default=1].
.. py:attribute:: vmmoscalib.param.startwavelength

    Start wavelength in spectral extraction (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmoscalib.param.endwavelength

    End wavelength in spectral extraction (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmoscalib.param.reference

    Reference wavelength for slit map (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmoscalib.param.slit_ident

    Attempt slit identification.For multiplexing data slit identification  is always performed. Switching it off will cause systematic errors in  the absolute flux calibration if the FLAT_SED correction is used (see  pipeline manual for details) (bool; default: True) [default=True].
.. py:attribute:: vmmoscalib.param.s_degree

    Polynomial degree for the flat field fitting along spatial direction  (long; default: -1) [default=-1].
.. py:attribute:: vmmoscalib.param.sradius

    Smooth box radius for flat field along spatial direction (used if  s_knots < 0) (long; default: -1) [default=-1].
.. py:attribute:: vmmoscalib.param.d_nknots

    Number of knots in flat field fitting splines along dispersion  direction (long; default: -1) [default=-1].
.. py:attribute:: vmmoscalib.param.dradius

    Smooth box radius for flat field along dispersion direction (if  d_knots < 0) (long; default: 10) [default=10].
.. py:attribute:: vmmoscalib.param.fit_threshold

    Threshold percentage for flat spline fitting with respect to the  maximum (float; default: 0.01) [default=0.01].
.. py:attribute:: vmmoscalib.param.line_ident_tol

    Tolerance for the ratio of detected lines vs reference lines. This is  used during for arc line identification. (float; default: 0.05) [default=0.05].


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

::

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

   vmmoscalib.param.dispersion = 0.0
   vmmoscalib.param.peakdetection = 0.0
   vmmoscalib.param.wdegree = 0
   vmmoscalib.param.wradius = 4
   vmmoscalib.param.wreject = 1.0
   vmmoscalib.param.wmodelss = 2
   vmmoscalib.param.wmodemos = 1
   vmmoscalib.param.ignore_lines = ""
   vmmoscalib.param.used_linesets = "standard"
   vmmoscalib.param.cdegree = 0
   vmmoscalib.param.cmode = 1
   vmmoscalib.param.startwavelength = 0.0
   vmmoscalib.param.endwavelength = 0.0
   vmmoscalib.param.reference = 0.0
   vmmoscalib.param.slit_ident = True
   vmmoscalib.param.s_degree = -1
   vmmoscalib.param.sradius = -1
   vmmoscalib.param.d_nknots = -1
   vmmoscalib.param.dradius = 10
   vmmoscalib.param.fit_threshold = 0.01
   vmmoscalib.param.line_ident_tol = 0.05


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

::

   import cpl
   vmmoscalib = cpl.Recipe("vmmoscalib")
   [...]
   res = vmmoscalib( ..., param = {"dispersion":0.0, "peakdetection":0.0})


.. seealso:: `cpl.Recipe <http://packages.python.org/python-cpl/recipe.html>`_
   for more information about the recipe object.

Bug reports
-----------

Please report any problems to `Carlo Izzo <usd-help@eso.org>`_. Alternatively, you may 
send a report to the `ESO User Support Department <usd-help@eso.org>`_.

Copyright
---------

This file is currently part of the VIMOS Instrument Pipeline
Copyright (C) 2002-2006 European Southern Observatory

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA


.. codeauthor:: Carlo Izzo <usd-help@eso.org>
