The fors_calib recipe
===============================================================

.. data:: fors_calib

Synopsis
--------

Determination of the extraction mask

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

This recipe is used to identify reference lines on LSS, MOS and MXU 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 fors_science.

This recipe accepts both FORS1 and FORS2 frames. 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 modified 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 MXU acronym can be read alternatively as MOS
and LSS, with the exception of CURV_COEFF_LSS, CURV_TRACES_LSS,
SPATIAL_MAP_LSS, SPECTRA_DETECTION_LSS, and and SLIT_MAP_LSS, which are
never created. The products SPECTRA_DETECTION_MXU, SLIT_MAP_MXU, and
DISP_RESIDUALS_MXU, 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:
  SCREEN_FLAT_MXU          Raw         Flat field exposures    Y
  LAMP_MXU                 Raw         Arc lamp exposure       Y
  MASTER_BIAS              Calib       Master Bias frame       Y
  MASTER_LINECAT           Calib       Line catalog            Y
  GRISM_TABLE              Calib       Grism table             .


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

  DO category:             Data type:  Explanation:
  MASTER_SCREEN_FLAT_MXU   FITS image  Combined (sum) flat field
  MASTER_NORM_FLAT_MXU     FITS image  Normalised flat field
  MAPPED_SCREEN_FLAT_MXU   FITS image  Wavelength calibrated flat field
  MAPPED_NORM_FLAT_MXU     FITS image  Wavelength calibrated normalised flat
  REDUCED_LAMP_MXU         FITS image  Wavelength calibrated arc spectrum
  DISP_COEFF_MXU           FITS table  Inverse dispersion coefficients
  DISP_RESIDUALS_MXU       FITS image  Residuals in wavelength calibration
  DISP_RESIDUALS_TABLE_MXU FITS table  Residuals in wavelength calibration
  DELTA_IMAGE_MXU          FITS image  Offset vs linear wavelength calib
  WAVELENGTH_MAP_MXU       FITS image  Wavelength for each pixel on CCD
  SPECTRA_DETECTION_MXU    FITS image  Check for preliminary detection
  SLIT_MAP_MXU             FITS image  Map of central wavelength on CCD
  CURV_TRACES_MXU          FITS table  Spectral curvature traces
  CURV_COEFF_MXU           FITS table  Spectral curvature coefficients
  SPATIAL_MAP_MXU          FITS image  Spatial position along slit on CCD
  SPECTRAL_RESOLUTION_MXU  FITS table  Resolution at reference arc lines
  DETECTED_LINES_MXU       FITS table  All the lines detected in the arc
  ARC_RECTIFIED_MXU        FITS image  The spatial rectified arc
  SLIT_LOCATION_MXU        FITS table  Slits on product frames and CCD
  GLOBAL_DISTORTION_TABLE  FITS table  Global distortions table
  FLAT_SED_LSS             FITS image  Average SED for each of the slitsi


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

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

   Create an object for the recipe fors_calib.

::

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

Parameters
----------

.. py:attribute:: fors_calib.param.dispersion

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

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

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

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

    Rejection threshold in dispersion relation fit (pixel) (float;  default: 0.7) [default=0.7].
.. py:attribute:: fors_calib.param.wmode

    Interpolation mode of wavelength solution applicable to LSS-like data  (0 = no interpolation, 1 = fill gaps, 2 = global model) (int; default:  2) [default=2].
.. py:attribute:: fors_calib.param.wmosmode

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

    Catalog lines nearest to wavelengths in this list will be ignored for  wavelength calibration (str; default: '') [default=""].
.. py:attribute:: fors_calib.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:: fors_calib.param.cdegree

    Degree of spectral curvature polynomial (int; default: -1) [default=-1].
.. py:attribute:: fors_calib.param.cmode

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

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

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

    Attempt slit identification for MOS or MXU (bool; default: False) [default=False].
.. py:attribute:: fors_calib.param.stack_method

    Frames combination method (str; default: 'sum') [default="sum"].
.. py:attribute:: fors_calib.param.ksigma

    Low and high threshold in ksigma method (str; default: '-3.0,3.0') [default="-3.0,3.0"].
.. py:attribute:: fors_calib.param.kiter

    Max number of iterations in ksigma method (int; default: 999) [default=999].
.. py:attribute:: fors_calib.param.s_degree

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

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

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

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

    Threshold percentage for flat spline fittingwith respect to the  maximum (float; default: 0.01) [default=0.01].
.. py:attribute:: fors_calib.param.nonlinear_level

    Level above which the detector is not linear (float; default: 60000.0) [default=60000.0].
.. py:attribute:: fors_calib.param.max_nonlinear_ratio

    Maximum allowed ratio of non-linear pixels per slit (float; default:  0.2) [default=0.2].


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

::

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

   fors_calib.param.dispersion = 0.0
   fors_calib.param.peakdetection = 0.0
   fors_calib.param.wdegree = 0
   fors_calib.param.wradius = 4
   fors_calib.param.wreject = 0.7
   fors_calib.param.wmode = 2
   fors_calib.param.wmosmode = 0
   fors_calib.param.ignore_lines = ""
   fors_calib.param.used_linesets = "standard"
   fors_calib.param.cdegree = -1
   fors_calib.param.cmode = 1
   fors_calib.param.startwavelength = 0.0
   fors_calib.param.endwavelength = 0.0
   fors_calib.param.slit_ident = False
   fors_calib.param.stack_method = "sum"
   fors_calib.param.ksigma = "-3.0,3.0"
   fors_calib.param.kiter = 999
   fors_calib.param.s_degree = -1
   fors_calib.param.sradius = -1
   fors_calib.param.d_nknots = -1
   fors_calib.param.dradius = 10
   fors_calib.param.fit_threshold = 0.01
   fors_calib.param.nonlinear_level = 60000.0
   fors_calib.param.max_nonlinear_ratio = 0.2


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

::

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


.. seealso:: `cpl.Recipe <https://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 FORS Instrument Pipeline
Copyright (C) 2002-2010 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>
