The vmmosscience recipe
===============================================================

.. data:: vmmosscience

Synopsis
--------

Extraction of scientific spectra

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

This recipe is used to reduce scientific spectra using the extraction
mask and the products created by the recipe vimos_calib. The spectra are
bias subtracted, flat fielded (if a normalised flat field is specified)
and remapped eliminating the optical distortions. The wavelength calibration
can be optionally upgraded using a number of sky lines: if no sky lines
catalog of wavelengths is specified, an internal one is used instead.

If the alignment to the sky lines is performed, the input dispersion
coefficients table is upgraded and saved to disk, and a new CCD wavelengths
map is created. A configuration table (typically depending on the grism in
use) 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 configuration 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 (which are rarely meaningful).

Either a scientific or a standard star exposure can be specified in input.

Only in case of a standard star exposure input, the atmospheric extinction
table and a table with the physical fluxes of the observed standard star
must be specified in input, and a spectro-photometric table is created in
output. This table can then be input again to this recipe, always with an
atmospheric extinction table, and if a photometric calibration is requested
then flux calibrated spectra (in units of erg/cm/cm/s/Angstrom) are also
written in output.


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

  DO category:                Type:       Explanation:         Required:
  MOS_SCIENCE                 Raw         Scientific exposure     Y
  or MOS_STANDARD             Raw         Standard star exposure  Y

  MASTER_BIAS                 Calib       Master bias             Y
  SKY_LINE_CATALOG            Calib       Sky lines catalog       .

  MOS_MASTER_SCREEN_FLAT      Calib       Normalised flat field   .

  MOS_DISP_COEFF              Calib       Inverse dispersion      Y
  MOS_CURV_COEFF              Calib       Spectral curvature      Y
  MOS_SLIT_LOCATION           Calib       Slits positions table   Y
  CONFIG_TABLE                Calib       Configuration table     .


  In case MOS_STANDARD is specified in input,

  EXTINCT_TABLE               Calib       Atmospheric extinction  Y
  STD_FLUX_TABLE              Calib       Standard star flux      Y


  In case a photometric calibration is requested for scientific
  data, the following inputs are mandatory:

  EXTINCT_TABLE              Calib       Atmospheric extinction  Y
  MOS_SPECPHOT_TABLE         Calib       Response curves         Y

  If requested for standard star data, the SPECPHOT_TABLE can be dropped:
  in this case the correction is applied using the SPECPHOT_TABLE produced
  in the same run.


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

in case input is MOS_STANDARD rather than MOS_SCIENCE):

  DO category:                Data type:  Explanation:
  MOS_SCIENCE_REDUCED           Image  Extracted scientific spectra
  MOS_SCI_SKY_REDUCED           Image  Extracted sky spectra
  MOS_SCI_ERROR_REDUCED         Image  Errors on extracted spectra
  MOS_UNMAPPED_SCIENCE          Image  Sky subtracted scientific spectra
  MOS_SCIENCE_EXTRACTED         Image  Rectified scientific spectra
  MOS_SCIENCE_SKY_EXTRACTED     Image  Rectified science spectra with sky
  MOS_SCIENCE_SKY               Image  Rectified sky spectra
  MOS_SCI_UNMAPPED_SKY          Image  Sky on CCD
  MOS_SCI_GLOBAL_SKY_SPECTRUM   Table  Global sky spectrum
  OBJECT_SCI_TABLE              Table  Positions of detected objects

  Only if fringing correction is requested (dithered exposures):
  MOS_SCI_FRINGES               Image  Fringe map

  Only if the sky-alignment of the wavelength solution is requested:
  MOS_SCI_SKYLINES_OFFSETS_SLIT Table  Sky lines offsets
  MOS_SCI_DISP_COEFF_SKY        Table  Upgraded dispersion coefficients
  MOS_SCI_WAVELENGTH_MAP_SKY    Image  Upgraded wavelength map

  Only if a MOS_STANDARD is specified in input:
  MOS_SPECPHOT_TABLE            Table  Efficiency and response curves

  Only if MOS_SPECPHOT_TABLE or MOS_MASTER_RESPONSE are specified in input:
  MOS_SCIENCE_FLUX_REDUCED      Image  Flux calibrated scientific spectra
  MOS_SCI_ERROR_FLUX_REDUCED    Image  Errors on flux calibrated spectra
  MOS_SCIENCE_FLUX_EXTRACTED    Image  Flux calibrated slit spectra


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

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

   Create an object for the recipe vmmosscience.

::

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

Parameters
----------

.. py:attribute:: vmmosscience.param.dispersion

    Resampling step (Angstrom/pixel) (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmosscience.param.skyalign

    Polynomial order for sky lines alignment, or -1 to avoid alignment  (long; default: 0) [default=0].
.. py:attribute:: vmmosscience.param.wcolumn

    Name of sky line catalog table column with wavelengths (str; default:  'WLEN') [default="WLEN"].
.. py:attribute:: vmmosscience.param.startwavelength

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

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

    Reference wavelength for calibration (float; default: 0.0) [default=0.0].
.. py:attribute:: vmmosscience.param.flux

    Apply flux conservation (bool; default: True) [default=True].
.. py:attribute:: vmmosscience.param.flatfield

    Apply flat field (bool; default: True) [default=True].
.. py:attribute:: vmmosscience.param.skyglobal

    Subtract global sky spectrum from CCD (bool; default: False) [default=False].
.. py:attribute:: vmmosscience.param.skymedian

    Sky subtraction from extracted slit spectra (bool; default: False) [default=False].
.. py:attribute:: vmmosscience.param.skylocal

    Sky subtraction from CCD slit spectra (bool; default: True) [default=True].
.. py:attribute:: vmmosscience.param.cosmics

    Eliminate cosmic rays hits (only if global or local sky subtraction is  also requested) (bool; default: True) [default=True].
.. py:attribute:: vmmosscience.param.slit_margin

    Number of pixels to exclude at each slit in object detection and  extraction (long; default: 3) [default=3].
.. py:attribute:: vmmosscience.param.ext_radius

    Maximum extraction radius for detected objects (pixel) (long; default:  6) [default=6].
.. py:attribute:: vmmosscience.param.cont_radius

    Minimum distance at which two objects of equal luminosity do not  contaminate each other (pixel) (long; default: 0) [default=0].
.. py:attribute:: vmmosscience.param.ext_mode

    Object extraction method: 0 = aperture, 1 = Horne optimal extraction  (long; default: 1) [default=1].
.. py:attribute:: vmmosscience.param.detection

    Object detection threshold (ADU) (float; default: 2.0) [default=2.0].
.. py:attribute:: vmmosscience.param.time_normalise

    Normalise output spectra by the exposure time (bool; default: True) [default=True].
.. py:attribute:: vmmosscience.param.anyframe

    Look for a standard star in any frame classified as MOS_STANDARD  (bool; default: False) [default=False].
.. py:attribute:: vmmosscience.param.response

    Order of polynomial modeling the instrument response (long; default:  5) [default=5].
.. py:attribute:: vmmosscience.param.alignment

    Type of alignment of dithered frames, either to the nearest neighbour  pixel or to fractions of pixel (str; default: 'integer') [default="integer"].
.. py:attribute:: vmmosscience.param.stack_method

    Frames combination method (str; default: 'average') [default="average"].
.. py:attribute:: vmmosscience.param.minrejection

    Number of lowest values to be rejected (long; default: 1) [default=1].
.. py:attribute:: vmmosscience.param.maxrejection

    Number of highest values to be rejected (long; default: 1) [default=1].
.. py:attribute:: vmmosscience.param.klow

    Low threshold in ksigma method (float; default: 3.0) [default=3.0].
.. py:attribute:: vmmosscience.param.khigh

    High threshold in ksigma method (float; default: 3.0) [default=3.0].
.. py:attribute:: vmmosscience.param.kiter

    Max number of iterations in ksigma method (long; default: 999) [default=999].
.. py:attribute:: vmmosscience.param.dither

    Align dithered frames before stacking(for multiple input frames)  (bool; default: True) [default=True].
.. py:attribute:: vmmosscience.param.compute

    Compute offsets of dithered images from detected objects (true), or  read offsets from header (false) (bool; default: False) [default=False].
.. py:attribute:: vmmosscience.param.fringing

    Apply fringing correction (only for dithered observations) (bool;  default: True) [default=True].
.. py:attribute:: vmmosscience.param.offset

    Minimum required offset between exposures for applying the sky  fringing correction. (float; default: 3.0) [default=3.0].
.. py:attribute:: vmmosscience.param.qc

    Compute QC1 parameters (bool; default: True) [default=True].


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

::

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

   vmmosscience.param.dispersion = 0.0
   vmmosscience.param.skyalign = 0
   vmmosscience.param.wcolumn = "WLEN"
   vmmosscience.param.startwavelength = 0.0
   vmmosscience.param.endwavelength = 0.0
   vmmosscience.param.reference = 0.0
   vmmosscience.param.flux = True
   vmmosscience.param.flatfield = True
   vmmosscience.param.skyglobal = False
   vmmosscience.param.skymedian = False
   vmmosscience.param.skylocal = True
   vmmosscience.param.cosmics = True
   vmmosscience.param.slit_margin = 3
   vmmosscience.param.ext_radius = 6
   vmmosscience.param.cont_radius = 0
   vmmosscience.param.ext_mode = 1
   vmmosscience.param.detection = 2.0
   vmmosscience.param.time_normalise = True
   vmmosscience.param.anyframe = False
   vmmosscience.param.response = 5
   vmmosscience.param.alignment = "integer"
   vmmosscience.param.stack_method = "average"
   vmmosscience.param.minrejection = 1
   vmmosscience.param.maxrejection = 1
   vmmosscience.param.klow = 3.0
   vmmosscience.param.khigh = 3.0
   vmmosscience.param.kiter = 999
   vmmosscience.param.dither = True
   vmmosscience.param.compute = False
   vmmosscience.param.fringing = True
   vmmosscience.param.offset = 3.0
   vmmosscience.param.qc = True


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

::

   import cpl
   vmmosscience = cpl.Recipe("vmmosscience")
   [...]
   res = vmmosscience( ..., param = {"dispersion":0.0, "skyalign":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-2011 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>
