The xsh_flexcomp recipe
===============================================================

.. data:: xsh_flexcomp

Synopsis
--------

Compute the flexure of the instrument

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

This recipe computes the flexure of the instrument and correct CAL files.

  Input Frames :
    - [UVB, VIS] One RAW frame (Format = RAW, Tag = AFF_ATT_arm)
    - [NIR] Two RAW frames ((Format = RAW,  Tag = AFC_ATT_arm_ON,AFC_ATT_arm_OFF)
    - An arc line list (Format = TABLE, Tag = ARC_LINE_LIST_AFC_arm)
    - A spectral format table frame (Format = TABLE, Tag = SPECTRAL_FORMAT_TAB_arm)
    - [UVB,VIS] A master bias (Format = PRE, Tag = MASTER_BIAS_arm)
    - [UVB,VIS] A master dark (Format = PRE, Tag = MASTER_DARK_arm)
    - An order table frame (Format = TABLE, Tag = ORDER_TAB_EDGES_IFU_arm)
  - [OPTIONAL] A non-linear badpixel map (Tag = BP_MAP_NL_arm)
  - [OPTIONAL] A reference badpixel map (Tag = BP_MAP_RP_arm)
    - [poly mode]  A wave solution frame (Format = TABLE, Tag = WAVE_TAB_2D_arm)
    - [physical model mode] A model cfg table (Format = TABLE, Tag = XSH_MOD_CFG_OPT_2D_arm)
  Products : 
    - [poly mode]  An updated wave solution frame (Format = TABLE, Tag = WAVE_TAB_AFC_arm)
    - [physical model mode] An updated  model cfg table (Format = TABLE, Tag = XSH_MOD_CFG_OPT_AFC_arm)
    - An updated order table frame (Format = TABLE, Tag = ORDER_TAB_AFC_IFU_arm)
    - [poly mode] A dispersion table frame (Format = TABLE, Tag =  DISP_TAB_AFC_arm)

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

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

   Create an object for the recipe xsh_flexcomp.

::

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

Parameters
----------

.. py:attribute:: xsh_flexcomp.param.keep_temp

    If 'no', temporary files are deleted. (str; default: 'no') [default="no"].
.. py:attribute:: xsh_flexcomp.param.debug_level

    Additional xshooter debug level. One of 'none', 'low', 'medium',  'high' (str; default: 'none') [default="none"].
.. py:attribute:: xsh_flexcomp.param.time_stamp

    Add timestamp to product file name. (bool; default: False) [default=False].
.. py:attribute:: xsh_flexcomp.param.decode_bp

    Integer representation of the bits to be considered bad when decoding  the bad pixel mask pixel values.   Most frequent codes relevant for  the user:   0: good pixel,   8: pick-up noise,   16: cosmic-ray  removed,   32: cosmic-ray unremoved,   128: calibration file defect,  256: hot pixel,   512: dark pixel,   4096: A/D converted saturation,  32768: non linear pixel,   1048576: extrapolated flux in NIR,  4194304: Interpolated flux during extraction. (int; default:  2144337919) [default=2144337919].
.. py:attribute:: xsh_flexcomp.param.pre_overscan_corr

    pre-overscan correction. 0: no correction 1: mean overscan correction  2: mean prescan correction 3: (mean pre+mean overscan)/2 correction  (int; default: 1) [default=1].
.. py:attribute:: xsh_flexcomp.param.detectarclines_fit_win_hsize

    Half window size (HWS) in pixels for the line 2D fitting window (total  window size = 2*HWS+1) (int; default: 6) [default=6].
.. py:attribute:: xsh_flexcomp.param.detectarclines_search_win_hsize

    Half window size (HWS) in pixels for the line search box around the  expected position (total window size = 2*HWS+1) [bin units] (int;  default: 3) [default=3].
.. py:attribute:: xsh_flexcomp.param.detectarclines_running_median_hsize

    Half window size in pixels (HWS) for the running median box (int;  default: 0) [default=0].
.. py:attribute:: xsh_flexcomp.param.detectarclines_wavesol_deg_lambda

    Degree in lambda in the polynomial solution X=f(lambda,order,slit) and  Y=f(lambda,order,slit) (POLY mode) (int; default: 5) [default=5].
.. py:attribute:: xsh_flexcomp.param.detectarclines_wavesol_deg_order

    Degree in order in the polynomial solution X=f(lambda,order,slit) and  Y=f(lambda,order,slit) (POLY mode) (int; default: 5) [default=5].
.. py:attribute:: xsh_flexcomp.param.detectarclines_min_sn

    Minimum signal-to-noise ratio to filter lines [xsh_predict:  UVB,VIS=5,NIR=4; xsh_2dmap: UVB=3, VIS=6, NIR=10] (float; default:  5.0) [default=5.0].
.. py:attribute:: xsh_flexcomp.param.detectarclines_find_lines_center

    Method used to find the center of the lines: gaussian, barycenter.  Gaussian method applies a Gaussian fit to the line. Barycenter method  computes the line centroid. (str; default: 'gaussian') [default="gaussian"].
.. py:attribute:: xsh_flexcomp.param.detectarclines_clip_sigma

    Kappa value in sigma clipping during the polynomial solution fit (POLY  mode) (float; default: 2.0) [default=2.0].
.. py:attribute:: xsh_flexcomp.param.detectarclines_clip_niter

    Number of iterations in sigma clipping during the polynomial solution  fit (POLY mode) (int; default: 10) [default=10].
.. py:attribute:: xsh_flexcomp.param.detectarclines_clip_frac

    Minimal fractions of bad pixel allowed in sigma clipping duringthe  polynomial solution fit (POLY mode) (float; default: 0.7) [default=0.7].
.. py:attribute:: xsh_flexcomp.param.dispersol_deg_x

    Degree in X in the polynomial dispersion solution lambda=f(X,Y) and  slit=f(X,Y) (int; default: 4) [default=4].
.. py:attribute:: xsh_flexcomp.param.dispersol_deg_y

    Degree in Y in the polynomial dispersion solution lambda=f(X,Y) and  slit=f(X,Y) (int; default: 5) [default=5].
.. py:attribute:: xsh_flexcomp.param.model_maxit

    Number/10 of annealing iterations if in physical model mode. (int;  default: 1000) [default=1000].
.. py:attribute:: xsh_flexcomp.param.model_anneal_factor

    Multiplier applied to the automatic parameter ranges (i.e. when  scenario!=0). For routine operations should be 1.0. (physical model  mode). (float; default: 1.0) [default=1.0].
.. py:attribute:: xsh_flexcomp.param.model_scenario

    selects preset flag and range combinations appropriate to common  scenarios: -1 - Only the position across the slit and     camera focal  length are open  0 - No scenario, input cfg flags and limits     used.  1 - scenario appropriate for the startup     recipe (large ranges for  parameters      affecting single ph exposures, dist      coeff fixed)  2 - Like 1, but includes parameters      affecting all ph positions 3  - Scenario for use in fine tuning cfg     to match routine wavecal  exposures. All     parameters affecting 1ph exposures     except dist  coeffs are included and     parameter ranges are small. (For use by  flexcomp in 1ph case). 4 - Like 3 but includes parameters  affecting all ph positions (Standard for     use by flexcomp in 9ph  case and 2dmap). 5 - Like 4 but includes also dist coeffs 6 - Just  dist coeffs (and chipx, chipy) (int; default: 3) [default=3].


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

::

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

   xsh_flexcomp.param.keep_temp = "no"
   xsh_flexcomp.param.debug_level = "none"
   xsh_flexcomp.param.time_stamp = False
   xsh_flexcomp.param.decode_bp = 2144337919
   xsh_flexcomp.param.pre_overscan_corr = 1
   xsh_flexcomp.param.detectarclines_fit_win_hsize = 6
   xsh_flexcomp.param.detectarclines_search_win_hsize = 3
   xsh_flexcomp.param.detectarclines_running_median_hsize = 0
   xsh_flexcomp.param.detectarclines_wavesol_deg_lambda = 5
   xsh_flexcomp.param.detectarclines_wavesol_deg_order = 5
   xsh_flexcomp.param.detectarclines_min_sn = 5.0
   xsh_flexcomp.param.detectarclines_find_lines_center = "gaussian"
   xsh_flexcomp.param.detectarclines_clip_sigma = 2.0
   xsh_flexcomp.param.detectarclines_clip_niter = 10
   xsh_flexcomp.param.detectarclines_clip_frac = 0.7
   xsh_flexcomp.param.dispersol_deg_x = 4
   xsh_flexcomp.param.dispersol_deg_y = 5
   xsh_flexcomp.param.model_maxit = 1000
   xsh_flexcomp.param.model_anneal_factor = 1.0
   xsh_flexcomp.param.model_scenario = 3


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

::

   import cpl
   xsh_flexcomp = cpl.Recipe("xsh_flexcomp")
   [...]
   res = xsh_flexcomp( ..., param = {"keep_temp":"no", "debug_level":"none"})


.. 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 `P.Goldoni, L.Guglielmi, R. Haigron, F. Royer <amodigli@eso.org>`_. Alternatively, you may 
send a report to the `ESO User Support Department <usd-help@eso.org>`_.

Copyright
---------

This file is part of the X-shooter Instrument Pipeline
Copyright (C) 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., 59 Temple Place, Suite 330, Boston, 
MA  02111-1307  USA

.. codeauthor:: P.Goldoni, L.Guglielmi, R. Haigron, F. Royer <amodigli@eso.org>
