/* $Id: sinfo_objnod_config.c,v 1.11 2012/03/03 09:50:08 amodigli Exp $
 *
 * This file is part of the CPL (Common Pipeline Library)
 * Copyright (C) 2002 European Southern Observatory
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
/*
 * $Author: amodigli $
 * $Date: 2012/03/03 09:50:08 $
 * $Revision: 1.11 $
 * $Name: sinfo-2_4_0 $
 */

 /****************************************************************
  *   Objnod Frames Data Reduction Parameter Initialization        *
  ****************************************************************/
#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include "sinfo_objnod_config.h"
/**@{*/
/**
 * @addtogroup sinfo_rec_jitter Objnod parameters definition & initialization
 *
 * TBD
 */

/**
@name  sinfo_objnod_config_add
@brief Objnod parameters definition & initialization
@param list pointer to cpl_parameterlist
@return void
*/
void
 sinfo_objnod_config_add(cpl_parameterlist *list)
{

  cpl_parameter *p;

  if (!list) {
    return;
  }




  /* Science */
  p = cpl_parameter_new_enum("sinfoni.objnod.autojitter_method",
                  CPL_TYPE_INT,
                              "Method to reduce autojitter template frames "
                              "Raw frames are object only exposures. "
                              "object-fake_sky pairs are generated. "
                              "0: no sky for all objects ",
                              "1: fake_sky is next object, "
                              "2: fake_sky is sinfo_median of all objects "
                              "sinfoni.objnod",
                               1,3,0,1,2);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-aj_method");
  cpl_parameterlist_append(list, p);


  /* Science */
  p = cpl_parameter_new_value("sinfoni.objnod.scales_sky",
                  CPL_TYPE_BOOL,
                              "Spatial median (sky) subtraction from cube: "
                              "(If autojitter_method==1),"
                              "indicates if the spatial median of each plane "
                              "should be subtracted (TRUE) or not (FALSE) "
                              "from each cube plane",
                              "sinfoni.objnod",
                              FALSE);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-scales_sky");
  cpl_parameterlist_append(list, p);



  /* Science */
  p = cpl_parameter_new_value("sinfoni.objnod.ks_clip",
                  CPL_TYPE_BOOL,
                              "Kappa-sigma clipping of coadded cube: "
                              "indicates if a kappa-sigma clipping "
                              "should be performed (TRUE) or not (FALSE) "
                              "on each plane of the coadded cube",
                              "sinfoni.objnod",
                              TRUE);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-ks_clip");
  cpl_parameterlist_append(list, p);


  p = cpl_parameter_new_value("sinfoni.objnod.kappa",
                  CPL_TYPE_DOUBLE,
                              "kappa value for kappa-sigma clipping "
                              "of coadded cube",
                              "sinfoni.objnod",
                              2.0);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-kappa");
  cpl_parameterlist_append(list, p);



  /*x-pixel size of the final combined data cube, must lie between 64 and 128 */
  p = cpl_parameter_new_value("sinfoni.objnod.size_x",
                  CPL_TYPE_INT,
                              "Cube x size: "
                              "x-pixel size of the final combined data cube,"
                              "must lie between 64 and 128. "
                              "If 0 it is computed automatically",
                              "sinfoni.objnod",
                              0);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-size_x");
  cpl_parameterlist_append(list, p);


  /*y-pixel size of the final combined data cube, must lie between 64 and 128 */
  p = cpl_parameter_new_value("sinfoni.objnod.size_y",
                  CPL_TYPE_INT,
                              "Cube y size: "
                              "y-pixel size of the final combined data cube,"
                              "must lie between 64 and 128."
                              "If 0 it is computed automatically",
                              "sinfoni.objnod",
                              0);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-size_y");
  cpl_parameterlist_append(list, p);

  /*Resampling */
 /* number of coefficients for the polynomial interpolation */
  p = cpl_parameter_new_value("sinfoni.objnod.n_coeffs",
                  CPL_TYPE_INT,
                              "number of coefficients for the polynomial "
                              "interpolation ",
                              "sinfoni.objnod",
                               3);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-no_coeffs");
  cpl_parameterlist_append(list, p);


  /* Calibration */
  /* indicates if the halogen lamp features from flatfielding should be 
     corrected for or not */
  /*
  p = cpl_parameter_new_value("sinfoni.objnod.halo_correct_index",
                  CPL_TYPE_BOOL,
                              "Halo Correct Index: "
                              "indicates if the halogen lamp features from "
                              "flatfielding should be corrected for (TRUE) "
                              "or not (FALSE)",
                              "sinfoni.objnod",
                              FALSE);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-halo_corr_ind");
  cpl_parameterlist_append(list, p);
  */

  /* Cube Creation */
  /*indicates if the slitlet distances are determined by a north-south-test 
     (yes) or slitlet edge fits (no)
  */
  p = cpl_parameter_new_value("sinfoni.objnod.nord_south_index",
                  CPL_TYPE_BOOL,
                              "Nord South Index Switch: "
                              "indicates if the slitlet distances are "
                              "determined by a north-south-test (TRUE) "
                              "or slitlet edge fits (FALSE)",
                              "sinfoni.objnod",
                              TRUE);


  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-ns_ind");
  cpl_parameterlist_append(list, p);

  /* Fine tuning */
  /* Method */
  p = cpl_parameter_new_enum("sinfoni.objnod.fine_tuning_method",
                  CPL_TYPE_STRING,
                              "Fine Tuning Method: "
                              "indicator for the shifting method to use "
                              "(P: polynomial interpolation, "
                 /* " F: FFT, " */
                              " S: cubic spline interpolation)",
                              "sinfoni.objnod",
                              "P",
                               2,
                              "P","S");

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-fine_tune_mtd");
  cpl_parameterlist_append(list, p);

  p = cpl_parameter_new_value("sinfoni.objnod.order",
                  CPL_TYPE_INT,
                              "Fine Tuning polynomial order: " 
                              "order of the polynomial if the polynomial "
                              "interpolation shifting method is used.",
                              "sinfoni.objnod",
                              2);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-order");
  cpl_parameterlist_append(list, p);

  /* Sky Extraction */
  /*Reconstruction */
 /* the fraction [0...1] of rejected low intensity pixels when taking 
the average of columns */
  p = cpl_parameter_new_value("sinfoni.objnod.low_rejection",
                  CPL_TYPE_DOUBLE,
                              "lower rejection: "
                              "percentage of rejected low value pixels "
                              "for averaging the sky spectra",
                              "sinfoni.objnod",
                              10.);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-lo_rej");
  cpl_parameterlist_append(list, p);
 /* the fraction [0...1] of rejected high intensity pixels when taking 
the average of columns */

  p = cpl_parameter_new_value("sinfoni.objnod.high_rejection",
                  CPL_TYPE_DOUBLE,
                              "higher rejection: "
                              "percentage of rejected high value pixels "
                              "for averaging the sky spectra",
                              "sinfoni.objnod",
                              10.);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-hi_rej");
  cpl_parameterlist_append(list, p);
  /* pixel tolerance, this distance tolerance to the diagonal dividing 
     line is not considered for the sky extraction to be sure to have a clean
     sky due to positioning tolerance and crossing through pixels
  */
  p = cpl_parameter_new_value("sinfoni.objnod.tolerance",
                  CPL_TYPE_INT,
                              "Tolerance: "
                              "pixel tolerance, this distance tolerance to "
                              "the diagonal dividing line is not considered "
                              "for the sky extraction to be sure to have a "
                              "clean sky due to positioning tolerance and "
                              "crossing through pixels",
                              "sinfoni.objnod",
                              2);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-tol");
  cpl_parameterlist_append(list, p);
  /* Jittering */
  /* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter
     The next three parameters are only used if jitterInd is set to yes, 
     that means in auto-jittering mode!
  */
  p = cpl_parameter_new_value("sinfoni.objnod.jitter_index",
                  CPL_TYPE_BOOL,
                              "Jitter Index: "
                              "jitter mode indicator: "
                              "TRUE: Auto-Jitter, "
                              "FALSE: user defined jitter"
                              "The size_x size_y kernel_type parameters "
                              "are only used if jitterInd is set to yes, "
                              "that means in auto-jittering mode!",
                              "sinfoni.objnod",
                              TRUE);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-jit_ind");
  cpl_parameterlist_append(list, p);

  /* Kernel Type */
  /* the name of the interpolation kernel to shift the single cubes  to the 
     correct places inside the big combined cube. That you want to generate 
     using the eclipse routine sinfo_generate_interpolation_kernel()
     Supported kernels are:

                                     NULL:      default kernel, currently tanh
                                     default: dito
                                     tanh:    Hyperbolic tangent
                                     sinc2:   Square sinc
                                     lanczos: Lanczos2 kernel
                                     hamming: Hamming kernel
                                     hann:    Hann kernel
  */
  p = cpl_parameter_new_enum("sinfoni.objnod.kernel_type",
                  CPL_TYPE_STRING,
                              "Kernel Type:"
                              "the name of the interpolation kernel to shift "
                              "the single cubes  to the correct places inside "
                 "the big combined cube",
                              "sinfoni.objnod",
                              "tanh",
                               7,
                              "NULL","default","tanh","sinc2",
                              "lanczos","hamming","hann");

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-kernel_typ");
  cpl_parameterlist_append(list, p);


/* amount of vignetting from output cube before coaddition */
  p = cpl_parameter_new_range("sinfoni.objnod.vllx",
                  CPL_TYPE_INT,
                              "Vignetting on llx: "
                              "pixels vignetted from lower left corner "
                              "X coordinate "
                              "of contributing cubes before coaddition ",
                              "sinfoni.objnod",
                              0,0,63);

  cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,"objnod-vllx");
  cpl_parameterlist_append(list, p);


  p = cpl_parameter_new_range("sinfoni.objnod.vlly",
                  CPL_TYPE_INT,
                              "Vignetting on lly: "
                              "pixels vignetted from lower left corner "
                              "Y coordinate "
                              "of contributing cubes before coaddition ",
                              "sinfoni.objnod",
                              0,0,63);

  cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,"objnod-vlly");
  cpl_parameterlist_append(list, p);


  p = cpl_parameter_new_range("sinfoni.objnod.vurx",
                  CPL_TYPE_INT,
                              "Vignetting on urx: "
                              "pixels vignetted from upper right corner "
                              "X coordinate "
                              "of contributing cubes before coaddition ",
                              "sinfoni.objnod",
                              0,0,63);

  cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,"objnod-vurx");
  cpl_parameterlist_append(list, p);


  p = cpl_parameter_new_range("sinfoni.objnod.vury",
                  CPL_TYPE_INT,
                              "Vignetting on ury: "
                              "pixels vignetted from upper right corner "
                              "Y coordinate "
                              "of contributing cubes before coaddition ",
                              "sinfoni.objnod",
                              0,0,63);

  cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,"objnod-vury");
  cpl_parameterlist_append(list, p);


  p = cpl_parameter_new_value("sinfoni.objnod.fcol",
            CPL_TYPE_DOUBLE,
            "First column offset: ",
                        "sinfoni.objnod",
                         0.);

  cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,"objnod-fcol");
  cpl_parameterlist_append(list, p);

  /* switch to activate the sky residuals correction */
  p = cpl_parameter_new_value("sinfoni.objnod.sky_cor",
                  CPL_TYPE_BOOL,
                              "Sky residuals correction: ",
                              "sinfoni.objnod",
                              TRUE);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-sky_cor");
  cpl_parameterlist_append(list, p);


  /* switch to activate the flux correction correction */
  p = cpl_parameter_new_value("sinfoni.objnod.flux_cor",
                  CPL_TYPE_BOOL,
                              "Apply flux correction after rebinning: ",
                              "sinfoni.objnod",
                              TRUE);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-flux_cor");
  cpl_parameterlist_append(list, p);


  /* switch to activate the flux correction correction */
  p = cpl_parameter_new_value("sinfoni.objnod.mosaic_max_size",
			      CPL_TYPE_INT,
                              "Maximum allowed size for cubes mosaic is "
                              "100*mosaic_max_size ",
                              "sinfoni.objnod",
                              14196);

  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-mosaic_max_size");
  cpl_parameterlist_append(list, p);


}
